RMarkdown Beamer演示中用fancybox加R代码块出现LaTeX报错
解决RMarkdown Beamer编译时fancybox与fancyvrb的加载顺序问题
问题根源
报错的核心是fancybox包必须在fancyvrb包之前加载,但RMarkdown编译Beamer演示文稿时,会自动在后台引入fancyvrb包;而通过常规header-includes添加的\usepackage{fancybox}默认会排在自动引入的包之后,触发命令冲突导致报错。
可行解决方案
方法1:用includes指定前置加载的TeX文件
这是最直接可靠的方法,能从根源控制包的加载顺序:
- 新建一个纯TeX文件(例如命名为
preamble.tex),内容仅一行:
\usepackage{fancybox}
- 修改RMarkdown文档的YAML头部,通过
includes参数将该文件设为前置头文件:
--- output: beamer_presentation includes: in_header: preamble.tex --- ## Slide 1 \ovalbox{an oval box} ```{r} print("x")
该方式会让fancybox在pandoc自动引入的fancyvrb之前加载,彻底避免顺序冲突。 ### 方法2:利用LaTeX钩子调整加载时机(无需额外文件) 如果不想创建单独文件,可以通过LaTeX的`\AtBeginDocument`钩子强制提前加载fancybox: ```yaml --- output: beamer_presentation: keep_tex: true header-includes: - \AtBeginDocument{\usepackage{fancybox}} --- ## Slide 1 \ovalbox{an oval box} ```{r} print("x")
不过这种方法的稳定性略逊于方法1,优先推荐使用方法1。 内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

