RMarkdown公式可转HTML但无法导出PDF/Word的问题排查
RMarkdown公式导出PDF/Word问题排查与解决
问题现象
- 公式在HTML中显示正常,但导出PDF时触发LaTeX编译错误;单独导出第一个公式可生成PDF,但所有公式均无法导出为Word格式。
PDF导出错误信息
! Missing $ inserted.
$
l.241You may need to add $ $ around a certain inline R expression
rin PerceptionsTheftManuscript.Rmd.
Error: LaTeX failed to compile PerceptionsTheftManuscript.tex.
In addition: Warning messages:
1: package 'knitr' was built under R version 4.1.3
2: package 'rmarkdown' was built under R version 4.1.3
3: package 'tidyverse' was built under R version 4.1.3
Execution halted
用到的公式代码
\begin{equation} \text{P}_{HurdleNegBinom}(y|\pi,\mu,\theta)= \begin{cases} \pi, & y=0 \\ \\ (1-\pi) \cdot \text{P}_{ZeroTruncNegBinom}(y|\pi,\mu,\theta), & y>0 \end{cases} \end{equation} <br> <br> <br> <br> \begin{equation} \text{Y}_{ij} \sim HurdleNegBinom(\pi_{ij},\mu_{ij},\phi) \\ \nonumber\\ \pi_{ij} = \frac{\text{exp}(\eta_{ij})}{1+\text{exp}(\eta_{ij})} \nonumber\\ \nonumber\\ \eta_{ij} = \alpha0^\eta+\boldsymbol{\beta0}_{j}^\eta+\beta1^\eta\cdot\text{Theft}_{i}+ \beta2^\eta\cdot\text{MangDecl}_{i}+\beta3^\eta\cdot\text{MangArea}_{i}+\nonumber\\ \beta4^\eta\cdot\text{REDD}_{i}+ \beta5^\eta\cdot\text{Gender}_{i}+\beta6^\eta\cdot\text{CommitteeMemb}_{i}\nonumber\\ \nonumber\\ \mu_{ij} = \text{exp}(\alpha0^\mu+\boldsymbol{\beta0}_{j}^\mu+\beta1^\mu\cdot\text{Theft}_{i}+ \beta2^\mu\cdot\text{MangDecl}_{i}+\beta3^\mu\cdot\text{MangArea}_{i}+\nonumber\\ \beta4^\mu\cdot\text{REDD}_{i}+ \beta5^\mu\cdot\text{Gender}_{i}+\beta6^\mu\cdot\text{CommitteeMemb}_{i}) \nonumber\\ \nonumber\\ % \boldsymbol{\beta0}_{j} \sim Norm(0,\sigma) \nonumber \end{equation} <br> <br> <br> <br> \begin{equation} \text{Y}_{ij} \sim Poisson(\mu_{ij}) \\ \nonumber\\ \mu_{ij} = \text{exp}(\alpha0+\boldsymbol{\beta0}_{j}+\beta1\cdot\text{Theft}_{i}+ \beta2\cdot\text{MangDecl}_{i}+\beta3\cdot\text{MangArea}_{i}+\nonumber\\ \beta4\cdot\text{REDD}_{i}+ \beta5\cdot\text{Occupation}_{i}+\beta6\cdot\text{CommitteeMemb}_{i}) \end{equation}
排查与解决方法
PDF导出问题
- 修正LaTeX语法混乱
- 第二个、第三个公式里的
\\ \nonumber\\写法会干扰LaTeX解析,改成单个\\换行,多余的\nonumber直接删掉,不要连续加两个换行符。 - 公式中用到了
\text{}命令,需要在RMarkdown的YAML头部添加header-includes: - \usepackage{amsmath},确保LaTeX加载必要的包。
- 第二个、第三个公式里的
- 检查内联R表达式
- 错误提示指向未正确包裹的内联R代码,去第241行附近查看,若存在
r xxx这类代码,必须用$或$$包裹起来,避免和LaTeX语法冲突。
- 错误提示指向未正确包裹的内联R代码,去第241行附近查看,若存在
- 拆分复杂公式环境
- 第二个公式内容过长,单个
equation环境容易出问题,换成align环境拆分编写,示例如下:\begin{align} \text{Y}_{ij} &\sim HurdleNegBinom(\pi_{ij},\mu_{ij},\phi) \\ \pi_{ij} &= \frac{\text{exp}(\eta_{ij})}{1+\text{exp}(\eta_{ij})} \\ \eta_{ij} &= \alpha0^\eta+\boldsymbol{\beta0}_{j}^\eta+\beta1^\eta\cdot\text{Theft}_{i}+ \beta2^\eta\cdot\text{MangDecl}_{i}+\beta3^\eta\cdot\text{MangArea}_{i}+ \beta4^\eta\cdot\text{REDD}_{i}+\beta5^\eta\cdot\text{Gender}_{i}+\beta6^\eta\cdot\text{CommitteeMemb}_{i} \\ \mu_{ij} &= \text{exp}(\alpha0^\mu+\boldsymbol{\beta0}_{j}^\mu+\beta1^\mu\cdot\text{Theft}_{i}+ \beta2^\mu\cdot\text{MangDecl}_{i}+\beta3^\mu\cdot\text{MangArea}_{i}+ \beta4^\mu\cdot\text{REDD}_{i}+\beta5^\mu\cdot\text{Gender}_{i}+\beta6^\mu\cdot\text{CommitteeMemb}_{i}) \end{align}
- 第二个公式内容过长,单个
Word导出问题
- 使用Word兼容的简洁语法
- Word对复杂LaTeX环境支持有限,删掉公式里的
<br>标签,改用空行分隔公式;cases和align环境尽量简化写法,避免过度嵌套。
- Word对复杂LaTeX环境支持有限,删掉公式里的
- 升级pandoc版本
- 旧版pandoc转换Word易出现渲染异常,升级到2.10以上版本可提升兼容性。
- 拆分长公式
- 把过长的公式拆成多个小公式环境,Word渲染会更稳定,不要把所有内容堆在一个
equation里。
- 把过长的公式拆成多个小公式环境,Word渲染会更稳定,不要把所有内容堆在一个
内容的提问来源于stack exchange,提问作者Matt Clark
相关产品推荐
相关产品推荐

