0

我有一个 RMarkdown 文件和一个包含一堆乳胶\newcommand调用的 LaTeX 片段,我想将它们放在单独的文件中(因为我想在多个 RMarkdown 文件中重用它们)。这是一个可重现的小例子:test.rmd

---
title: "Test"
---

# Test Document

## Math

$$
\begin{bmatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{bmatrix}
$$

$$
\bmat
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\emat
$$

和 LaTeX 片段:

\newcommand{\bmat}{\begin{bmatrix}}
\newcommand{\emat}{\end{bmatrix}}

我希望在文档标题中添加 LaTeX 片段并编译test.rmd为独立的 HTML 文档。你怎么做到这一点?

我做了两次尝试,尝试(1)编译器忽略header-includes元数据,尝试(2)\newcommand{\bmat}{...在浏览器中显示为纯文本。这两种尝试在编译为 PDF 时都有效(即替换rmarkdown::html_documentrmarkdown::pdf_document)。我怀疑这是因为 MathJax 与 LaTeX 编译器的工作方式非常不同,但我还没有在 StackOverflow 或关于此的文档上找到非常清晰的解释......

尝试 1

common.yaml为 Pandoc定义YAML 元数据文件

---
urlcolor: blue
header-includes: |
  \newcommand{\bmat}{\begin{bmatrix}}
  \newcommand{\emat}{\end{bmatrix}}
---

test.rmd然后我编译

Rscript -e "rmarkdown::render('test.rmd',quiet=TRUE,output_format=rmarkdown::html_document(pandoc_args=c('--metadata-file=/current/working/dir/common.yaml')))"

尝试 2

header.tex为 Pandoc定义头文件

\newcommand{\bmat}{\begin{bmatrix}}
\newcommand{\emat}{\end{bmatrix}}

test.rmd然后我编译

Rscript -e "rmarkdown::render('test.rmd',quiet=TRUE,output_format=rmarkdown::html_document(pandoc_args=c('--include-in-header=/current/working/dir/header.tex')))"
4

1 回答 1

0

我想出了我的问题的答案。尝试 (2),除了标题必须是 HTML 文件,比如header.html内容

\(
\newcommand{\bmat}{\begin{bmatrix}}
\newcommand{\emat}{\end{bmatrix}}
\)

注意 和 的\(使用\)。现在我可以使用

Rscript -e "rmarkdown::render('test.rmd',quiet=TRUE,output_format=rmarkdown::html_document(pandoc_args=c('--include-in-header=/current/working/dir/header.html')))"

请注意,无法添加此处\usepackage提到的代码段。

于 2021-08-23T14:30:06.670 回答