knitr与Morgan & Claypool书籍样式交互潜在bug求助
根因分析
你遇到的Undefined color 'fgcolor'报错是LaTeX包更新后,knitr/ggplot生成的图表插入代码默认调用fgcolor颜色变量,但Morgan & Claypool提供的morgan-defs.sty和morgan2.sty未预先定义该变量导致的。旧版本LaTeX生态下相关工具链会隐式定义该变量,因此更新前无报错。
可行解决方案
- 方案1:手动定义缺失的颜色变量
你可以直接在LaTeX文档导言区,或者morgan-defs.sty/morgan2.sty文件的头部添加如下代码,将fgcolor定义为你需要的正文前景色(以黑色为例):
如果你使用RMarkdown编写,可以在yaml配置的\definecolor{fgcolor}{named}{black}header-includes字段中添加上述代码,无需修改sty文件。 - 方案2:修改knitr全局参数避免调用
fgcolor
在文档首个R代码块中添加全局参数设置,显式指定图形输出的前景色为固定颜色,不再使用动态变量:knitr::opts_chunk$set(dev.args = list(fg = "black")) # 若使用tikz设备输出,额外添加以下配置 options(tikzDefaultColor = "black") - 方案3:显式指定ggplot的所有颜色参数
针对生成图表的ggplot代码,在theme设置中手动指定所有文本、线条元素的颜色,避免调用默认的fgcolor变量,示例如下:ggplot(...) + geom_xxx(...) + theme( text = element_text(color = "black"), axis.text = element_text(color = "black"), axis.line = element_line(color = "black"), panel.border = element_rect(color = "black") )
补充说明:将代码块参数改为
include=FALSE不报错的原因是,该参数仅执行代码生成图表到本地目录,不会将图表对应的LaTeX插入代码插入到主tex文件中,因此不会触发颜色定义校验,本质是规避问题而非解决问题。
内容的提问来源于stack exchange,提问作者Matthew Kuperus Heun
相关产品推荐
相关产品推荐

