我想以与标准图形和表格相同的方式对 knitr 代码块生成的图像和表格进行交叉引用。在标准图形中,我使用控制序列\label
,但我不知道如何将其放入代码块中。(我的文档也包含标准图形。因此,无论它们是如何生成的,我都希望所有图形都有一个编号,所有表格都有一个编号。)
我的代码:
\documentclass[a4paper,12pt, english]{article}
\usepackage[colorlinks=true,
linkcolor=gray,
urlcolor=blue,
citecolor=gray,
]{hyperref}
\usepackage{graphicx}
\begin{document}
<<chunk_image, results="asis">>=
plot(iris)
@
<<chunk_table, results="asis">>=
library(xtable)
print(xtable(head(iris)))
@
Some text about the image (see \autoref{chunk_image})
\\ Some text about the table (see \autoref{chunk_table})
\end{document}
我想要获得的输出:
Some text about the image (see Figure 1)
Some text about the table (see Table 1)
答案1
对此有两种方法。
方法 1. 在 TeX 中设置标签,仅使用 R 生成图形或表格的主体。例如,
\begin{figure}
\begin{center}
<<image,echo=FALSE>>=
boxplot(na.omit(iris))
@
\end{center}
\caption{Iris Boxplot}
\label{fig:iris}
\end{figure}
请注意,标题和标签是在 TeX 内部定义的。
方法 2. 在 R 中生成标签和标题,并将它们发送到 TeX。例如,
<<table,results='asis', echo=FALSE>>=
library(xtable)
print(xtable(head(iris),caption='Iris table',label='tab:iris'))
@
这里我们不把\begin{table}...\end{table}
或\caption
放在\label
TeX 文件中,因为xtable
这些都会为我们完成。
请注意,如果您使用选项,knitr 会为您生成图形标签fig.cap
,例如,块
<<my_chunk, fig.cap='Iris plot'>>=
plot(iris)
@
将\begin{figure}...\end{figure}
插入标签fig:my_chunk
。
在这两种情况下,您都可以按照通常的方式引用这些标签:
See Figure~\ref{fig:iris} and Table~\ref{tab:iris}.
您可以在同一个文件中混合使用这些方法,只要每个图形或表格使用第一种方法或第二种方法。
答案2
我还没有尝试过 kniter,也无法编译您提供的代码。无论如何,我碰巧在论文上写了一些 LaTeX 命令而不是图形。我希望您没有使用与figure
环境不兼容的东西。一个简单的例子可以是这个代码:
\documentclass[a4paper,12pt, english]{article}
\usepackage[colorlinks=true,linkcolor=red,urlcolor=blue,citecolor=gray,]{hyperref}
\usepackage{graphicx}
\begin{document}
\begin{figure*}[t]
\centerline{ I have some text here inside figure}
\caption{Defined coordinate frames for the macro robot.}
\label{myfig}
\end{figure*}
\begin{table}[t]
\centerline{ I have some text here inside table}
\caption{Defined coordinate frames for the macro robot.}
\label{mytable}
\end{table}
Some text about the image (see \autoref{myfig}) \\
Some text about the table (see \autoref{mytable}) \\
\end{document}