当blockquote跟在标题后,导致pandoc文档转换错误的原因

时间:2016-09-08 22:17:50

标签: r latex rstudio knitr pandoc

我在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),但总是发生错误。

一些系统细节:

  • Ubuntu 16.04
  • pandoc 1.17.2(1.16.0.2也发生错误)
  • R 3.3.1
  • RStudio 0.99.489

2 个答案:

答案 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

enter image description here

答案 1 :(得分:0)

您想在节标题后直接引用节标题吗?这听起来确实很特别,看起来pandoc无法解决这个问题。

正如eipi10's answer中提出的,解决方案是在标题和引号之间添加某些。但是,我认为你应该在文档中添加白色填充文本。例如,从PDF复制文本时,填充变得可见。

相反,只需添加一个(空)框:\mbox{}。然后,为了避免由于我们引入的额外行而导致过多的垂直空白,添加一些负的垂直空间:\vspace*{-1cm}

---
output: pdf_document
---

##Headers

\mbox{}\vspace*{-1cm}

> ### Quoted Section

Foobar.

Output