我正在写一本有多章的书,主book.Rnw
档的所有孩子,每章都可以有
用于部分,示例等的多个子Rnw文件。为了便于在草稿文档中引用,在LateX头中显示当前子Rnw文件的路径名非常有用。
此问题跟进类似的问题,Need the filename of the Rnw when knitr runs in rStudio,建议使用类似
的内容<<>>=
infile <- knitr:::knit_concord$get("infile")
@
然而,我一直无法使用knitr 自动这项工作,就像我在使用直接LaTeX时所做的那样。在那里,只要文件为\input{}
或\include{}
,就会自动更新全局LaTeX符号@filef@und
。这允许使用前导码中的以下代码更新页眉:
%% Page Headings
\makeatletter
\usepackage{fancyhdr}
\pagestyle{fancy}
%
%% The next two lines are only for draft printing
\def\infoleft{\quad [{\small\ttfamily\@filef@und}]}
\def\inforight{[\number\month-\number\day-\number\year]\quad}
%
\renewcommand{\chaptermark}[1]{%
\markboth{\thechapter\ #1}{}}
\renewcommand{\sectionmark}[1]{%
\markright{\thesection\ #1}}
\lhead[\fancyplain{}{\bfseries\sffamily\thepage}]%
{\fancyplain{}{{\bfseries\sffamily\rightmark}\infoleft}}
\rhead[\fancyplain{}{\inforight{\bfseries\sffamily\leftmark}}]%
{\fancyplain{}{\bfseries\sffamily\thepage}}
\cfoot{}
\makeatother
我认为我正在寻找的是一个块挂钩,它将在全局R变量中记录子文档的路径名,然后使用gdef
将Sexpr{}
记录到LaTeX中。类似的东西:
<<ch02-ex1, child="ch02/ex1.Rnw">>=
@
触发类似下面的内容,提供infile = ch02/ex1.Rnw
<<>>=
infile <- knitr:::knit_concord$get("infile")
@
然后在.tex输出中插入如下内容。
\gdef\infile\Sexpr{infile}
答案 0 :(得分:0)
而不是knitr:::knit_concord$get("infile")
,我认为你现在应该使用current_input()
。但是,你需要为第二部分编写一个简单的函数,即
setInfile <- function() cat("\\gdef\\infile ", current_input())
并在&#34; asis&#34;中拨打电话。在孩子的顶部块。 (我还没有尝试过这个;你可能需要对current_input()
结果进行一些消毒,以便该行提供合法的LaTeX。你可能还需要父母的另一个电话来切换回来。