我在RStudio中使用knitr,我正在寻找从rmarkdown文件创建文档时出现奇怪错误的解释。在示例中,我有一个文件,pdf-test.Rmd:
---
title: "PDF knit error"
output: pdf_document
---
##Headers
> ###Quote 1
This results in an error; if the blockquote symbol ('>') in
preceeding line is removed, no error
> ###Quote 2
This line is fine
当我尝试使用Knit PDF按钮创建pdf时,这是输出:
|.................................................................| 100% ordinary text without R code processing file: pdf-test.Rmd output file: pdf-test.knit.md /usr/bin/pandoc +RTS -K512m -RTS pdf-test.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output pdf-test.pdf --template /home/jcoliver/R/x86_64-pc-linux-gnu-library/3.3/rmarkdown/rmd/latex/default-1.17.0.2.tex --highlight-style tango --latex-engine pdflatex --variable graphics=yes --variable 'geometry:margin=1in' ! LaTeX Error: Something's wrong--perhaps a missing \item. See the LaTeX manual or LaTeX Companion for explanation. Type H for immediate help. ... l.94 \end{quote} pandoc: Error producing PDF Error: pandoc document conversion failed with error 43 Execution halted
如上所述,从第一个实例中删除块引号字符(>
)会使错误消失(尽管所需的格式也是如此)。
---
title: "PDF knit error"
output: pdf_document
---
##Headers
###Quote 1
No error here
> ###Quote 2
This line remains fine
pandoc / LaTeX没有抱怨:
|.................................................................| 100% ordinary text without R code /usr/bin/pandoc +RTS -K512m -RTS pdf-test.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output pdf-test.pdf --template /home/jcoliver/R/x86_64-pc-linux-gnu-library/3.3/rmarkdown/rmd/latex/default-1.17.0.2.tex --highlight-style tango --latex-engine pdflatex --variable graphics=yes --variable 'geometry:margin=1in' processing file: pdf-test.Rmd output file: pdf-test.knit.md Output created: pdf-test.pdf
我还可以通过将块报价的标题级别更改为H4或更高(H5,H6等)来避免错误,同时将第一个块报价的标题级别更改为H1或H2仍然会导致错误
那么为什么会出现这种错误?为什么我不能立即在标题后面跟H3有块引用?请注意,我在标题行(#Headers
,##Headers
,###Headers
)上尝试了不同的标题级别,##Headers
行之后的间距变化,以及不同的输出格式(即HTML),但总是发生错误。
一些系统细节:
答案 0 :(得分:0)
我不确定错误发生的原因,但是这里有一个hack,它允许你在H2标题之后立即在块引号中使用H3标题,而没有插入文本。
基本的想法是你做在标题之间添加一些文字,但是你将它的颜色设置为白色(你还需要在标题中声明\usepackage{color}
工作)。然后,因为这也会在标题之间添加太多空格,所以使用\tiny
使文本非常小,并减少\vspace*{-\baselineskip}
行之间的空间。 (我最初尝试使用\phantom{aaa}
添加幻像文本,但仍然导致相同的错误,因此我切换到“真实”文本,但使用与背景相同的颜色(即白色)进行渲染。)
---
title: "PDF knit error"
output:
pdf_document:
number_sections: no
header-includes:
- \usepackage{color}
---
##Headers
\vspace*{-\baselineskip}
\tiny
\begin{itemize}
\color{white}
\item Some text
\end{itemize}
\normalsize
\vspace*{-\baselineskip}
> ###Quote 1
This results in an error; if the blockquote symbol ('>') in
preceeding line is removed, no error
> ###Quote 2
This line is fine
答案 1 :(得分:0)
您想在节标题后直接引用节标题吗?这听起来确实很特别,看起来pandoc
无法解决这个问题。
正如eipi10's answer中提出的,解决方案是在标题和引号之间添加某些。但是,我认为你应该不在文档中添加白色填充文本。例如,从PDF复制文本时,填充变得可见。
相反,只需添加一个(空)框:\mbox{}
。然后,为了避免由于我们引入的额外行而导致过多的垂直空白,添加一些负的垂直空间:\vspace*{-1cm}
。
---
output: pdf_document
---
##Headers
\mbox{}\vspace*{-1cm}
> ### Quoted Section
Foobar.