web-dev-qa-db-ja.com

KnitRを使用したRプロットからのLaTeX図ラベル?

R/KnitRにフィギュアのLaTeX\label{}ステートメントを作成させることができません。 manual は、\label{}ステートメントがfig.lp(デフォルトでは "fig:")の文字列をRコードチャンクのラベルと連結することによって作成されることを示しているようです。しかし、私はこれを機能させることができませんでした。以下のMWEを編んで作成された最初の図に対して、\label{}ステートメントは作成されません。 2番目の図には、先ほど発見した回避策がラベルに追加されており、Rチャンクを図環境に配置し、\labelタグの後ろまたは中に\captionタグを配置しています。

\documentclass[12pt, english, oneside]{amsart}
\begin{document}

Figure \ref{fig:plot} doesn't have it's label.

<<plot>>=
plot(x=0, y=0)
@

Figure \ref{fig:plot2} has its label.

\begin{figure}
\caption{\label{fig:plot2}}
<<>>=
plot(x=1,y=1)
@
\end{figure}

\end{document}

さて、LaTeXの\begin{figure} . . .\end{figure}環境にRチャンクを配置することで回避策を見つけました。同じ環境でラベルを作成できます。それでも、YihuiがこれをKnitRでどのように処理するつもりかを理解したいと思います。

35
Gregory

latexドキュメントでFigure環境が使用されるようにするには、fig.cap = ''(または必要なもの)を設定する必要があります。 (\begin{figure} ... \end{figure}コンポーネントとともに\label{}が欠落していることに気付いたかもしれません

例えば

\documentclass[12pt, english, oneside]{amsart}
\begin{document}
See Figure \ref{fig:plot}.
<<plot, fig.lp="fig:", fig.cap = ''>>=
plot(x=0, y=0)
@
\end{document}

ウェブサイトからの説明 がこれが必要であるかどうかについては明確ではないことに同意します。

  • fig.env :( 'figure')フィギュア用のLaTeX環境。 fig.env = 'marginfigure'を設定して\ begin {marginfigure}を取得します

  • fig.cap:(NULL;文字)LaTeXのfigure環境で使用されるfigureキャプション(\ caption {}内); NULLまたはNAの場合は無視されます。それ以外の場合は、チャンク内のプロットにFigure環境が使用されます(\ begin {figure}および\ end {figure}の出力)

グラフィックマニュアルは明確です 、そして推論は理にかなっていますが

図のキャプション

チャンクオプションfig.capがNULLまたはNAでない場合、出力形式がLATEXのときにプロットはfigure環境に配置され、このオプションは\ caption {}を使用してこの環境でキャプションを書き込むために使用されます。他の2つの関連オプションは、fig.scapとfig.lpで、図ラベルの短いキャプションとプレフィックス文字列を設定します。デフォルトの短いキャプションは、最初のピリオド、コロン、またはセミコロンで切り捨てることにより、キャプションから抽出されます。ラベルはfig.lpとチャンクラベルの組み合わせです。 Figureはフロート環境であるため、TEXドキュメントのコンパイル時に、チャンク出力からページの上部や下部などの他の場所にフロートする可能性があります。

Rセッション出力を複製したい場合は、図が作成方法を定義するコード行から離れないようにする必要があります。

35
mnel