假设有人从定理环境中定义了 LaTeX 环境 Example 和 Solution。我在组成一本书的许多子文档中有几个示例。LaTeX 将自动跟踪带有标签的 Example、Solution、Figure 等的章节和 Example、Solution、Figure 等的编号。假设下面的第一个代码块对应于书中第 4 章的第 6 个示例。那么在使用 \documentclass{book} 时,\ref{SetSeed} 将返回数字 4.6。我希望能够为我的代码块提供名称,这些名称将与我的不同 LaTeX 环境(Example、Solution、Figure 等)的标签保持同步。我不想做的是使用“Example 4.6”等对我的代码块进行硬编码。任何建议都欢迎。我知道 Yihui 为图形标题和标签提供了代码块选项,但如果代码块可以适当命名,我愿意做一个“旧式”代码块,并用 \begin{figure}、\end{figure} 环境包围。我们的想法是,命名的代码块可能用类似的东西生成
<<paste(Solution,'\ref{SetSeed}', sep=" "), echo = TRUE>>= ...(which does not work)
生成名为“解决方案 4.6”的块。这样做的目的是以后能够对主文档进行 purl(),以便从与书中显示的环境(图、示例、解决方案等)相对应的各个章节中生成带标签的代码块。在此先谢谢您,Alan。
\begin{Example} \label{SetSeed}
Use the function \texttt{set.seed()} with a value of 13 and generate
20 values from a normal distribution with a mean of 100 and a standard
deviation of 15. Find the mean of the randomly generated values.
\end{Example}
\begin{Solution}
<<paste(Solution,'\ref{SetSeed}', sep=" "), echo = TRUE>>=
# some R code
set.seed(13)
xs <- rnorm(20, 100, 15)
@
The mean of the values generated in Example \ref{SetSeed} have a
mean of \Sexpr{mean(xs)}.
\end{Solution}
答案1
这是一个具有挑战性的问题。正如 Ben Bolker 指出的那样,这是一个单向流:当 R 完成后,不会再有任何内容从 LaTeX 返回到 R,因此 R 将无法知道\ref{SetSeed}
LaTeX 中的值。
但是,我认为这并非完全不可能,因为您实际上拥有*.aux
由 LaTeX 生成的文件,您可以使用 R 解析该文件以获取解决方案编号,并purl()
使用此信息更新原始 R 脚本。一种方法是,您对 R 块使用与环境相同的标签Example
,您将在输出中获得如下代码块:
## @knitr SetSeed
# R code
*.aux
希望您在文件上运行 LaTeX 后也能在文件中看到这一点*.tex
:
\newlabel{SetSeed}{{1}{1}}
SetSeed
然后在 R 代码中用替换Solution 1.1
。总之,您需要对 R 脚本进行一些后处理。