Bookdown:修复R代码块中的中文字符串之前的额外空间

时间:2017-12-27 10:06:46

标签: r latex rstudio knitr bookdown

当R代码块中的中文字符串时,编译后的PDF会在字符串前得到一个冗余空间,如何避免这个额外的空间?请参考github - bookdown-chinese 中的最小案例。

example

1 个答案:

答案 0 :(得分:12)

此问题是由LaTeX软件包 xeCJK 引起的。默认情况下,它在中文和非中文字符之间添加空格,verbatim环境除外。在您的情况下,代码实际上并不在verbatim环境中,因此您必须让 xeCJK 知道它不应该自动添加空格。

解决方案是将此行添加到您的LaTeX前导码中(当将Markdown转换为LaTeX时,Pandoc将Highlighting环境定义为语法高亮代码,并且它基于 fancyvrb 包):

\RecustomVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},formatcom=\xeCJKVerbAddon}

对于R Markdown文档,此行可以保存在.tex文件中,例如preamble.tex,并通过includes选项包含,例如,

output:
  pdf_document:
    includes:
      in_header: preamble.tex

有关完整的技术背景,请参阅this Github issue