R降价公式预览\new命令

jaxagkaj  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(130)

我有一个R markdown文件,里面有一些自定义的latex命令,通过\newcommand定义。我真的很喜欢RStudio中的预览,但是它似乎不能呈现这些命令或者那些从包中导入的命令。在下面的例子中,自定义命令\expect和包命令\bm都没有在预览中显示,而是在预览中以红色字母显示。
有没有办法在预览中渲染它们?

---
header-includes:
   - \usepackage{bm}
output:
    pdf_document
---

\newcommand{\expect}[1]{\mathbb{E}\left[ #1 \right]}

$$
\expect{\bm{X}} = \lambda
$$
rkue9o1l

rkue9o1l1#

RStudio IDE中的预览将使用Mathjax呈现方程。

在数学模式下定义命令

Mathjax支持\newcommand,但您需要在数学环境中定义它,以便在预览中对其进行处理,如下所示:

---
title: "My maths"
output: html_document
---

$$
\newcommand{\e}{\mathcal{E}}
\e
$$

有条件地使用数学模式

但是对于pdf,LaTeX无法识别数学模式下的\newcommand,这将导致“Undefined control sequence”错误。为了解决这个问题,我们需要在处理html输出(并希望查看预览)时,欺骗rmarkdown使用数学模式,但如果文档转换为.tex文档,则退出数学模式。

---
title: "My maths"
output: pdf_document
---

$$`r if(!knitr::is_html_output()) ' \\]'`
\newcommand{\e}{\mathcal{E}}
`r if(!knitr::is_html_output()) '\\[ '`$$

$$
\e
$$

现在,html输出包含由Mathjax解释的节点元素,而.tex输出如下所示:

% ...
\[ \]
\newcommand{\e}{\mathbb{E}}
\[ \]

\[
\e
\]
% ...

使用bm

在本例中,您尝试使用Mathjax不支持的bm
作为一种解决方案,他们建议使用boldsymbol。为了确保boldsymbol * 仅 * 用于html,我们可以做以下操作:

$$`r if(!knitr::is_html_output()) ' \\]'`
\newcommand{\expect}[1]{\mathbb{E}\left[ #1 \right]}
`r if(!knitr::is_html_output()) ' % '`\newcommand{\bm}[1]{\boldsymbol{#1}}
`r if(!knitr::is_html_output()) ' \\['`$$

$$
\expect{\bm{X}} = \lambda
$$

现在,在使用Mathjax时将重新定义\bm命令,但是在生成pdf时将使用%-符号注解掉\newcommand{\bm}

相关问题