35

我无法让 R/KnitR 为\label{}图形创建 LaTeX 语句。该手册似乎表明\label{}将通过将 fig.lp 中的字符串(默认为“fig:”)与 R 代码块的标签连接起来来创建语句。但是,我无法让它发挥作用。没有\label{}为通过编织下面的 MWE 创建的第一个图形创建任何语句。第二个图的标签添加了我刚刚发现的解决方法,将 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}

好的,我通过将 R 块放在\begin{figure} . . .\end{figure}LaTeX 的环境中找到了一种解决方法。我可以在相同的环境中创建标签。不过,我想了解 Yihui 打算如何使用 KnitR 来处理这个问题。

4

1 回答 1

35

您需要设置fig.cap = ''(或任何您希望的)以确保在latex文档中使用图形环境。(您可能已经注意到\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; character) 在 LaTeX 中的图形环境中使用的图形标题(在 \caption{} 中);如果为 NULL 或 NA,它将被忽略,否则图形环境将用于块中的图(在 \begin{figure} 和 \end{figure} 中输出)

虽然图形手册很清楚,推理也有道理

图说明

如果块选项 fig.cap 不为 NULL 或 NA,当输出格式为 LATEX 时,绘图将被放置在图形环境中,该选项用于在此环境中使用 \caption{} 编写标题。其他两个相关选项是 fig.scap 和 fig.lp,它们为图形标签设置短标题和前缀字符串。默认短标题是通过在第一个句点或冒号或分号处截断来从标题中提取的。标签是 fig.lp 和块标签的组合。因为 figure 是一个浮动环境,所以当编译 TEX 文档时,它可以从块输出浮动到其他地方,例如页面的顶部或底部。

If you were wishing to replicate a R session output, you wouldn't want the figures to float away from the line of code which defines how they were created.

于 2013-02-21T00:08:52.013 回答