我使用 Pandoc 将 Markdown 文件生成多种输出:html、word (.docx)、latex、pdf 等。
我尝试使用“fenced div”功能对文本的某些部分进行不同的样式设置。例如:
等等等等。
:::: 特别的
一些特殊的文字,使用 markdown 格式。
::::
要使用 Html 来设置该块的样式,这相当简单。我有一个template.css
包含一行的文件.special {background-color: #aaaaaa;}
,它就完成了(它在我的命令行参数中引用)。
我也有template.latex
文件,但我对 Latex 的一切都不太熟悉。我尝试了很多方法,但找不到如何调整它以将样式应用于 pandoc 围栏 div。在它输出的原始 Latex 文件中,甚至没有命令表明那里有东西。它只是被忽略了。
我搜索了很长时间才找到这个答案,但找不到任何线索。提前致谢。
答案1
您需要一个 lua 过滤器来处理隔离的 div:
function Div(el)
if el.classes[1] == "special" then
-- insert element in front
table.insert(
el.content, 1,
pandoc.RawBlock("latex", "\\begin{Special}"))
-- insert element at the back
table.insert(
el.content,
pandoc.RawBlock("latex", "\\end{Special}"))
end
return el
end
这会将 div 转换为 latex 环境:
blablabla.
\begin{Special}
Some special text, \emph{with markdown formatting.}
\end{Special}
您一定不要忘记在模板中定义环境:
\usepackage{mdframed}
\newenvironment{Special}%
{\begin{mdframed}[backgroundcolor=lightgray]}%
{\end{mdframed}}
答案2
编辑:应该注意到这个解决方案特别适用于 R/bookdown,我猜它有一个 Lua 过滤器可以通用地处理这个问题或者别的什么?
正如 Fran 在评论中所说,您必须使用以下代码
::: {.special data-latex=""}
my special text *with markdown formatting*.
:::
由于某种原因,在某个时候,它停止工作,只命名样式。您还需要 data-latex="" 才能使其工作。但是一旦您这样做,乳胶输出就会像这样添加样式。
\begin{special}
Some special text
\end{special}
然后,只要您在序言中定义了该样式,它就会在 PDF 中采用该样式。
例如,你可以在序言中写上以下内容:
% special styling
\newenvironment{special}[0]{\par\leftskip=2em\rightskip=2em}{\par\medskip}
这会为您的样式添加左右边距空间。