使用 Pandoc,如何将样式应用于“围栏 div”块?

使用 Pandoc,如何将样式应用于“围栏 div”块?

我使用 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}

这会为您的样式添加左右边距空间。

相关内容