Bookdown多栏HTML/PDF导出时fenced div自定义样式不生效问题问询
你使用的{.col .italic-box data-latex="{0.45\textwidth}"}围栏式div属性声明本身不会阻碍自定义样式生效,问题出在配置细节和对pandoc转译逻辑的理解偏差上,具体修复方案分两端说明:
HTML端修复
你对CSS类的转译逻辑理解是正确的,所有带.前缀的标识都会作为HTML元素的class属性写入,样式未生效的原因是YAML配置中的HTML输出格式写错:
你当前配置用的是html_document,但bookdown项目默认生成HTML书籍调用的输出格式是bookdown::html_book,你写的CSS路径只对普通单页HTML输出生效,不会作用到bookdown多页HTML书籍上。
修改YAML配置如下即可:
output: bookdown::html_book: css: ["./css/columns.css", "./css/style.css"] bookdown::pdf_book: keep_tex: true includes: in_header: ["./tex/preamble.tex", "./tex/columns.tex"]
PDF端修复
你对TeX部分的转译逻辑理解有误:pandoc转PDF时,围栏div的类不会自动作为环境名生效,只有data-latex属性指定的内容才会被解析为LaTeX环境和参数。你当前的写法只会把宽度参数传给col环境,不会触发你自定义的italic-box环境,同时你原有italic-box环境的写法存在语法错误。
第一步先修正columns.tex中的italic-box环境定义:
\setlength{\fboxsep}{.8em} % 改造为接受宽度参数的环境,同时修正原错误语法,匹配CSS的浅灰色背景 \newenvironment{italic-box}[1]{ \begin{minipage}{#1} \definecolor{shadecolor}{rgb}{0.85, 0.85, 0.85} \begin{shaded}\itshape} {\end{shaded}\end{minipage}}
第二步修改对应章节的围栏div写法,明确指定调用italic-box环境:
:::: {.cols data-latex=""} ::: {.italic-box data-latex="italic-box={0.45\textwidth}" } 左侧段落内容 ::: ::: {.space-box data-latex="{0.05\textwidth}"} \ ::: ::: {.col data-latex="{0.45\textwidth}"} 右侧段落内容 ::: ::::
内容的提问来源于stack exchange,提问作者Cord
相关产品推荐
相关产品推荐

