You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合kableExtra与LaTeX页眉?RMarkdown编译PDF报错求助

问题原因

你遇到的Missing $ inserted错误,核心是LaTeX把header-includes里params$set_title中的$当成了数学公式的起始标记,但这个$其实是R语言里访问参数元素的语法,LaTeX无法识别这种用法,因此抛出了语法错误。

解决方案

要在LaTeX页眉(或其他LaTeX静态文本区域)中正确嵌入R参数,必须使用knitr提供的\Sexpr{}命令包裹R代码,让knitr先执行R代码并输出纯文本,再交给LaTeX处理。修改你的header-includes部分如下:

header-includes:
  - \usepackage{fancyhdr}
  - \pagestyle{fancy}
  - \lhead{}
  - \chead{}
  - \rhead{Semester Graduation Report \Sexpr{params$set_title}}
完整修正后的RMarkdown代码
---
title: 'Title'
params:
  set_title: 'title report'
header-includes:
  - \usepackage{fancyhdr}
  - \pagestyle{fancy}
  - \lhead{}
  - \chead{}
  - \rhead{Semester Graduation Report \Sexpr{params$set_title}}
output:
  pdf_document:
    latex_engine: xelatex
---
```{r, include =FALSE}
knitr::opts_chunk$set(echo = F, message = F, warning = F)
library(knitr)
library(tidyverse)
library(kableExtra)
options(knitr.kable.NA = '-')
kable(mtcars, format = 'latex', longtable = T, booktabs = T, caption='This is a caption' ) %>% 
  add_header_above(c(" " = 1, "something"=2, "something else"=2)) %>% 
  kable_styling(latex_options = c("repeat_header"))
kable(mtcars)
# 原理说明
`\Sexpr{}`是knitr的核心命令之一,专门用于在LaTeX的静态文本区域(比如页眉、页脚、章节标题等)中嵌入动态R代码。它会先执行内部的R代码,将结果转换为LaTeX可识别的纯文本,从而避免了R语法符号(比如`$`)被LaTeX误解析的问题。

内容的提问来源于stack exchange,提问作者Dambo
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:48:56