![强制段落与上一个段落保持一致](https://linux22.com/image/262834/%E5%BC%BA%E5%88%B6%E6%AE%B5%E8%90%BD%E4%B8%8E%E4%B8%8A%E4%B8%80%E4%B8%AA%E6%AE%B5%E8%90%BD%E4%BF%9D%E6%8C%81%E4%B8%80%E8%87%B4.png)
我正在使用 knitr 创建内联 sparkline 式图形。但是,当 knitr 插入使用 R 生成的图像时,它会添加一个空行,这会迫使 LaTeX 创建一个新段落。
也就是说,如果我有这样的文本(不是实际的 knitr 代码......):
Lorem ipsum dolor sit amet KNITR_FIGURE_HERE Ut enim ad minim veniam, quis nostrud exercitation.
它将生成如下的 TeX 输出
Lorem ipsum dolor sit amet
\begin{knitrout}
\includegraphics{path_to_figure}
\end{knitrout}
Ut enim ad minim veniam, quis nostrud exercitation.
然后强制将段落中的剩余文本放入新段落中。如果我手动删除环境中的空白行knitrout
,它会按预期内联工作。
破解 knitr 输出以删除空白行并非易事,所以我想知道是否有 TeX 命令可以强制将一个段落作为前一个段落的一部分,而不管是否有新行。例如,假设\keepwithprevious
是这个假设命令...
Lorem ipsum dolor sit amet.
\keepwithprevious Ut enim ad minim veniam, quis nostrud exercitation.
...排版后的结果如下:
Lorem ipsum dolor sit amet. Ut enim ad minim veniam, quis nostrud exercitation.
有没有办法在 TeX 中做到这一点?
答案1
这是一种实际上不涉及 TeX 的方法。生成 TeX 输出的 knitr 代码未包含在问题中。因此,我编写了以下最小示例,该示例创建了类似的 TeX 输出。此外,我的 knitr 代码会自动删除“knitrout”环境末尾的空行。这个想法是使用中的钩子knitr-inline.Rnw
将“newline+newline+\end{knitrout}”替换为“newline+\end{knitrout}” 。gsub
document
R
\documentclass{article}
\begin{document}
<<setup, echo=FALSE>>=
knit_hooks$set(document = function(x) {
gsub('(\n\n\\\\end\\{knitrout\\}[\n]+)', '\n\\\\end\\{knitrout\\}\n', paste(x, collapse = '\n'))
})
@
Here is some text followed by a picture
<<echo=FALSE, out.width="11mm">>=
r <- rlnorm(8)
pie(r)
@
and the text continues for another line.
This is a new paragraph, which is indented as usual.
\end{document}
运行library(knitr);knitr(knitr-inline.Rnw)
创建。使用“pdflatex”编译后得到R
:knitr-inline.tex
答案2
下面的例子对我有用(基于吞噬所有后续空行的命令)
\documentclass{article}
\usepackage{color}
\newenvironment{knitrout}{}{} %just a dummy environment
\makeatletter
\newcommand\gobblepars{%
\@ifnextchar\par%
{\expandafter\gobblepars\@gobble}%
{}}
\makeatother
\begin{document}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam
lobortis facilisis%
\begin{knitrout}
\color{red} sem. Nullam\gobblepars
\end{knitrout}
nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam
lobortis facilisis
sem. Nullam
nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\end{document}
注意间距。有环境和没有环境看起来完全相同。