pandoc如何解析.md文件中的乳胶代码?

时间:2015-11-03 01:43:54

标签: r knitr r-markdown pandoc xtable

我正在使用带有knitr / rmarkdown / pandoc / latex的Rstudio来将.Rmd代码渲染为pdf。我一直在努力使某些乳胶代码完全按照预期呈现,而稍微不同的代码最终没有被正确解析,这导致我的.tex文件包含像" \ textbackslash {}这样的行begin {table}&#34 ;而不是" \ begin {table}"。

谷歌搜索在处理HTML时会发现类似的错误解析,但我会直接从.Rmd到.md再到.tex到.pdf。

这完全取决于我使用的Rstudio的特定版本/平台,以及R包knitr,xtable,rmarkdown,rmarkdown模板等等,所以我一直在努力想出一个MWE。

(我确实检查了m,y版本的pandoc是> = 1.13,因为谷歌搜索建议在早期版本中存在可能相关的错误。)

但是,我现在有一个MWE,我至少可以隔离到pandoc如何解析其临时.utf8.md文件以创建.tex文件。

以下标记从.md到.tex正确解析为.pdf:

# Data Profile
\begin{table}[htbp]
\centering
\parbox{12cm}{\caption{\small Record Count of Things Summarized in this Table.\label{MyRef}\vspace{4pt}}} 
{\small
\begin{tabular}{llrrr}
Thing & Characteristic & Aspect 1 & Aspect 2 & Aspect 3 \\ 
\hline
Some & data & rows & go & here \\ 
more & data & rows & go & here \\ 
\end{tabular}
}
\end{table}

但另一点降价,除了缺少围绕\ caption的\ parbox(这是R xtable包实现其自己的caption.width选项的方式)之外,在各方面都与上述内容完全相同完全被破坏了。相关的备用线:

\caption{\small Record Count of Things Summarized in this Table.\label{MyRef}\vspace{4pt}}

根据Rstudio下面的命令将这两个降价块解析为相应的.tex块。我对自己在pandoc处理期间发生这种情况感到满意,因为我可以看到包含和不包含\ parbox的.utf8.md文件在其他方面是相同的,但生成的.tex文件不同,其他一切(rmarkdown模板) ,pandoc选项等)保持完全相同。

/usr/local/rstudio-0.98.1103/bin/pandoc/pandoc +RTS -K512m -RTS MyDoc.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output MyDoc.tex --filter /usr/local/rstudio-0.98.1103/bin/pandoc/pandoc-citeproc --template /home/user/R/x86_64-unknown-linux-gnu-library/3.2/MyRmarkdownTemplate/rmarkdown/templates/report/resources/template.tex --highlight-style tango --latex-engine pdflatex --bibliography bibliography.bib

不可

\begin{table}[htbp]
\centering
\parbox{12cm}{\caption{\small Record Count of Things Summarized in This table.\label{MyRef}\vspace{4pt}}} 
{\small
\begin{tabular}{llrrr}
Thing & Characteristic & Aspect 1 & Aspect 2 & Aspect 3 \\ 
\hline
Some & data & rows & go & here \\ 
more & data & rows & go & here \\ 
\end{tabular}
}
\end{table}

为:

\textbackslash{}begin\{table\}{[}htbp{]} \centering
\textbackslash{}caption\{\small Record Count of Things Summarized in This Table.\label{MyRef}\vspace{4pt}\} \{\small

\begin{tabular}{llrrr}
Thing & Characteristic & Aspect 1 & Aspect 2 & Aspect 3 \\ 
\hline
Some & data & rows & go & here \\ 
more & data & rows & go & here \\ 
\end{tabular}
\} \textbackslash{}end\{table\}

换句话说,出于某种原因,没有那个\ parbox,pandoc没有意识到它正在解析乳胶,直到它到达开始括号内的\ small,就在\ _开始{tabular}之前。使用parbox,它会在\ begin {table}的第一个反斜杠中知道它的乳胶。

所以我的问题是:这有什么用?我该如何解决?

1 个答案:

答案 0 :(得分:2)

原来它是标题内的\ vspace,或者至少删除它会导致正确的解析。必须非标准,以至于LaTeX阅读器失败。

见易辉对原始问题的评论。他的链接(https://github.com/jgm/pandoc/issues/2493)表明pandoc的LaTeX解析器无声地回退到将有问题的LaTeX解释为纯文本,我想这解释了这里发生的事情。