\parskip 和 tikzDevice 之间的交互影响 .Rnw 中的图边距

Interaction between \parskip and tikzDevice affecting plot margins in .Rnw

我正在编织一个 .Rnw 文件,意外地,垂直 space 从我绘图的底部内边距丢失并添加到顶部外边距。

这是一个最小的工作示例:

\documentclass{article}

\setlength{\parskip}{1em}

\begin{document}

<<mwe-plot, dev="tikz", dev.args=list(bg="grey95")>>=
par(mar=rep(2,4), oma=rep(0,4))
x <- seq(0, 2*pi, length.out=21)
plot(x, sin(x), type="l")
box("inner")
@

\end{document}

knit() 生成 mwe-plot-1.pdf,看起来像这样:

,但我期望的是:

.

这个问题显然是由于 \parskip 和 tikzDevice 之间的交互,因为通过在序言中将 \parskip 设置为零或从 dev="tikz" 切换到默认 dev="pdf"。虽然这些都是可能的解决方案,但我正在寻找一个不需要执行任何操作的修复程序。

请注意,我尝试在块之前(在 \begin{document} 之后)添加 \setlength{\parskip}{0em},但这并不影响输出。

感谢任何提示...

您的近端问题是 \setlength{\parskip}{1em} 语句被包含在 tikz .tex 文件中,这会丢失间距。解决方案是将其从您的序言中移至文档正文中,即

\documentclass{article}
\begin{document}
\setlength{\parskip}{1em}
...

我通过层层下降来解决这个问题 - 首先查看 knit 创建的 .tex 输出(在 LaTeX -> PDF 转换之前),然后查看 figure/mwe-plot-1.pdf (并意识到,正如您所建议的那样,问题不在于 knitr 放入 LaTeX 文件的内容,而在于 tikzDevice 放入 tikz-.tex 文件的内容),然后查看 figure/mwe-plot-1.tex 并意识到它嵌入了 \parskip 语句。我四处寻找可以覆盖它的 tikzDevice 选项,但后来意识到它可能只包含序言中的内容 ...