预订!未定义的控制序列。 <recently read> \直通

bookdown! Undefined control sequence. <recently read> \passthrough

我发现当使用 pandoc --listings 来渲染带有 latex listings 包的代码块时,它会改变字符,正如 github 所说,这是一个错误。所以 pandoc 引入了 \passthrough 来处理它。

我决定将我的 pandoc 更新到最新的 2.2.1 版本。但是它弹出这样的错误,

! Undefined control sequence.
<recently read> \passthrough

我想可能是因为 listings 没有 \passthrough 的包太旧了。所以我更新到texlive 2018。它仍然有这个问题。我在 https://github.com/rstudio/bookdown/issues/591

中提交了这个问题

我搜索了一些结果,

但是none可以解决。有什么建议吗?谢谢。

我想我应该自己添加这个命令。 texupdate 太慢了。

此问题与您的 LaTeX 发行版无关,因此无需重新安装或更新 LaTeX。

Pandoc 2.x 将逐字文本放入 \passthrough{} 中定义 https://github.com/jgm/pandoc-templates/blob/052428151/default.latex#L169 如果在命令行中使用 --listings 标志。

$ echo '`text`' | pandoc -f markdown -t latex --listings
\passthrough{\lstinline!text!}

一些可能的解决方案(从最简单到最难):

  • bookdown::pdf_book中的选项template设置为null,即

    bookdown::pdf_book:
      template: null
    

    这意味着使用Pandoc内置的Pandoc模板,其中定义了\passthrough.

  • 安装rmarkdown开发版:devtools::install_github('rstudio/rmarkdown'),其中我有added the command.

  • 在自定义 Pandoc LaTeX 模板 (https://bookdown.org/yihui/bookdown/templates.html) 中定义命令 \passthrough,并通过 [=21= 的 template 选项使用自定义模板].