如何结合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
相关产品推荐
相关产品推荐

