使用LaTeX在RMarkdown中创建漂亮的方程式

9
我正在尝试在RMarkdown中创建格式良好的方程式,但似乎无法使其无错误地编织。我使用的LaTeX代码块如下:
---
title: "Untitled"
author: "KirkD-CO"
date: "September 18, 2019"
output: pdf_document
---

$$
f(x) = \beta_0 + \beta_1 x + \beta_2 x^2 + \beta_3 x^3 + \beta_4 (x-\xi)^3_+
\\
\begin{equation}
  (x-\xi)^3_+ =
    \begin{cases}
      (x-\xi)^3 \ , \  x>\xi
      \\
      0 \ \ \ \ \ \ \ \ \ \ \ \ \ , \ x\leq\xi
    \end{cases}       
\end{equation}
\\ 
\
\\
\begin{aligned}
  (x \leq \xi) \Rightarrow f(x) &= \beta_0 + \beta_1 x + \beta_2 x^2 + \beta_3 x^3
  \\
  (x > \xi) \Rightarrow f(x) &= \beta_0 + \beta_1 x + \beta_2 x^2 + \beta_3 x^3 + \beta_4(x^3 -3x^2\xi + 3x\xi^2 - \xi^3)
  \\
  &=(\beta_0 + \beta_4\xi^3) + (\beta_1 + 3\beta_4\xi^2)x + (\beta_2 - 3\beta_4)
\end{aligned}
$$

而在RStudio中,我看到了这个:

enter image description here

但是当我尝试编织它时,我收到了这个错误:
! LaTeX Error: Bad math environment delimiter.

我在Google和StackOverflow上搜索了许多类似的问题,并找到了许多答案,建议使用[ ]而不是\begin{equation},其他人建议仅使用一个$而不是$$,还有一些人提到各种LaTeX包,其中有几个我尝试过,但最终卡在安装中。

有没有简单直接的建议,可以让Kniter将RStudio显示的输出编织为PDF?

编辑:我在Fedora 30上使用R 3.5.3和Kniter 1.22。

编辑2:在工具->全局选项->Sweave ->使用pdfLaTeX将LaTeX排版成PDF:已设置为pdfLaTeX。


1
嗯,我可以复现这个错误,使用的是 Windows 上的 R 3.5.2 版本和 knitr 1.21 版本。 - Gregor Thomas
1
我已经将问题隔离到了cases部分。如果我在cases内的\\换行符后面放置任何内容,都会出现错误。如果我删除第二行,则可以编译。不知道为什么。我同意Maurits的观点-也许尝试更新knitr。(甚至更新pdfLatex。) - Gregor Thomas
1
好的,我可以在MacOS、R 3.6.1和更新的代码片段中重现错误。老实说,LaTeX代码看起来很奇怪。如果使用pdfatex编译,我会感到惊讶。例如,begin{equation}开始数学模式,但由于$$,您已经处于(显示)数学模式中。接下来,在LaTeX数学模式中不应使用所有这些硬换行符,除非您正在使用某些多行数学环境(如casesgatheraligned)。 - Maurits Evers
如果我删除equation块,就可以将其编译为pdf,但格式会混乱。方程式位置不正确,对齐方式混乱,方程式顺序也全错了。天哪!我还升级到了knitr v1.25和R 3.6.0,但问题依旧存在。我尝试切换到xelatex解释器,但问题仍然存在。我将继续处理equationcases块,并报告结果。 - KirkD-CO
嗨@KirkD-CO; 我已经添加了一个示例,应该可以编译而不出错。请看一下。 - Maurits Evers
显示剩余10条评论
1个回答

13

在评论的基础上,这里有一个经过清理的版本:

---
title: "Untitled"
author: "KirkD-CO"
date: "September 18, 2019"
output: pdf_document
---

$$
f(x) = \beta_0 + \beta_1 x + \beta_2 x^2 + \beta_3 x^3 + \beta_4 (x-\xi)^3_+
$$

$$
(x-\xi)^3_+ =
\begin{cases}
 (x-\xi)^3\, ,& x>\xi \\
 0  ,& x\leq\xi
 \end{cases}       
$$

$$
\begin{aligned}
  (x \leq \xi) \Rightarrow f(x) &= \beta_0 + \beta_1 x + \beta_2 x^2 + \beta_3 x^3 \\
  (x > \xi) \Rightarrow f(x) &= \beta_0 + \beta_1 x + \beta_2 x^2 + \beta_3 x^3 + \beta_4(x^3 -3x^2\xi + 3x\xi^2 - \xi^3) \\
  &=(\beta_0 + \beta_4\xi^3) + (\beta_1 + 3\beta_4\xi^2)x + (\beta_2 - 3\beta_4)
\end{aligned}
$$

生成

在此处输入图片描述

一些具体的注释:

  1. 将单独的 LaTeX 数学模式块放入单独的 $$ ... $$(或 \[ ... \])环境中(除非您使用多行数学环境,请参见下文)。
  2. cases 环境内,对于每个 case 中不同部分进行水平对齐,请使用 &
  3. 除非您使用某些多行数学环境(如 casesaligned),否则请不要使用 \\;相反,如果您确实使用多行数学环境,则必须用 \\ 分隔行。

1
太好了!感谢您抽出时间重写我的LaTeX并提供超级有用的评论。我真的非常感激! - KirkD-CO
非常欢迎 @KirkD-CO;学习LaTeX可能是一个陡峭的学习曲线;而且 MathJax(它在 rmarkdown 中呈现您的LaTeX代码)可能完全是另一回事。 - Maurits Evers
1
主要使用'rmarkdown',但在像这样的情况下我需要经常使用LaTeX。(我刚刚查看了您的个人资料,我们有非常相似的背景和研究兴趣。世界真小啊。) - KirkD-CO
关于 rmarkdown,我发现(并继续发现)RStudio上的“课程”非常有用。至于 LaTeX,我不确定最好的资源是什么,也不确定这是否是一个。在我的原始背景物理学中,大多数/所有的书面工作都是使用 LaTeX 进行的,因此必须要了解 LaTeX。我认为,在转向其导出物诸如 MathJax 时,知道一些基本的 LaTeX 可以非常有用。 - Maurits Evers
也许对您有用的是Mathematics Meta上的MathJax基础教程和快速参考帖子。 - Maurits Evers
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接