首页 > 解决方案 > \newcommand 与 Kritr 中的参数不起作用

问题描述

我对 Knitr 很陌生,我正在尝试编写我的第一个文档,从我的乳胶文件中“导入”一些“\newcommand”。

我所有的“\newcommand”都得到了完美的处理,除了那些有“参数”的。

例如,我添加了我通常在乳胶中使用的包:

header-includes:
    -\usepackage{a4wide,amsmath,amsthm,epsfig,graphicx}
- \usepackage{amsmath,amsthm,amssymb}
- \usepackage{amsfonts}
- \usepackage{graphics}
- \usepackage{subfigure}
- \usepackage{dsfont}
- \usepackage{bbm}
- \usepackage{bm}
- \usepackage{xcolor}
- \usepackage{dcolumn}
- \usepackage{pstricks,fancyhdr,fancybox}
- \usepackage{dcolumn}
- \usepackage{bm}

但以下不起作用

\newcommand{\PR}[1]{\bm{P}\left\{{#1}\right\}}

错误是

output file: newfile.knit.md

"../Documents/RStudio/bin/pandoc/pandoc" +RTS -K512m -RTS newfile.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output newfile.pdf --template "C:\Users\P14814\Documents\R\win-library\3.4\rmarkdown\rmd\latex\default-1.17.0.2.tex" --highlight-style tango --latex-engine pdflatex --variable graphics=yes --variable "geometry:margin=1in" 
! Missing $ inserted.
<inserted text> 
                $
l.180 \newcommand{\PR}{[}1{]}\{\bm{P}

pandoc.exe: Error producing PDF
Error: pandoc document conversion failed with error 43
In addition: Warning message:
running command '"../Documents/RStudio/bin/pandoc/pandoc" +RTS -K512m -RTS newfile.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output newfile.pdf --template "C:\Users\P14814\Documents\R\win-library\3.4\rmarkdown\rmd\latex\default-1.17.0.2.tex" --highlight-style tango --latex-engine pdflatex --variable graphics=yes --variable "geometry:margin=1in"' had status 43 
Execution halted

非常感激你的帮助!!

标签: latexr-markdownknitrpandoc

解决方案


我强烈建议您将这些命令放在一个外部文件中,例如,preamble.tex并通过includes选项包含它。

output:
  pdf_document:
    includes:
      in_header: preamble.tex

参见 R Markdown 书籍第 3.3.7.3 节:https ://bookdown.org/yihui/rmarkdown/pdf-document.html

使用header-includes并不完全安全。Pandoc 在生成 LaTeX 输出时可能会破坏某些字符。如果您的 Pandoc 版本高于 2.0(检查rmarkdown::pandoc_version()),您可以使用原始 LaTeX 块来保护 LaTeX 内容,例如,

header-includes: |
  ```{=latex}
  \usepackage{a4wide,amsmath,amsthm,epsfig,graphicx}
  \usepackage{amsmath,amsthm,amssymb}
  ......
  ```

推荐阅读