Knitr:如何对代码块生成的图表进行交叉引用?

Knitr:如何对代码块生成的图表进行交叉引用?

我想以与标准图形和表格相同的方式对 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放在\labelTeX 文件中,因为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}

输出和你所说的一样: 在此处输入图片描述

相关内容