使用Pandoc将Markdown转换为PDF时使用CSS

hal*_*fer 9 css latex pandoc

我在OS X上尝试Pandoc,到目前为止的结果令人印象深刻.然而,一个阻塞问题是让CSS样式处理内联代码示例.我正在从Markdown转换为PDF.

我在源代码中有这个字符串:

* Create a simple HTML document (<span class="filename">simple.html</span>) and load it into the browser via the file system
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

* Create a simple HTML document (`simple.html`{.filename}) and load it into the browser via the file system
Run Code Online (Sandbox Code Playgroud)

我想在每种情况下将类"filename"应用于所附文本,但它似乎对输出没有任何作用.然而,手册说:

某些输出格式可以使用此信息进行语法突出显示.目前,使用此信息的唯一输出格式是HTML和LaTeX.

这是我的命令:

pandoc \
    --output ./output.pdf \
    --css source/styles.css \
    source/en/docs/input.md
Run Code Online (Sandbox Code Playgroud)

我正在转换为PDF,这是由Pandoc内部由LaTeX编写的.我可以让这个工作吗?或者,我可以使用使用LaTeX命令定义的样式吗? - 它不一定是CSS.但是,它必须是一个样式系统 - 在每种情况下改变斜体/字体/颜色属性是不可行的.

我已经尝试将输出临时发送到HTML,在这种情况下,样式直接从特定样式资产导入.因此,我的样式表规范和范围标记是正确的,至少对于一种输出格式.

附加物

几个事后:

  • 解决方案不一定是Pandoc或Markdown.但是,它确实需要是一个简单的基于文本的标记语言,可以可靠地转换为PDF,因为我想将文档文件存储在Git上以便于分叉和合并.我并不热衷于HTML,因为它很冗长,转换它的引擎并不是那么好(尽管如此,我的格式要求是适度的)
  • 来自pandoc的HTML输出很好,所以如果我能找到能够可靠地将(简单)HTML/CSS转换为PDF的东西,我会没事的.当然,Pandoc应该能够做到这一点,但不会呈现内联样式(代码片段的背景颜色).这可能是一个很好的事情,因为我必须重新引入像分页符这样的东西,这在HTML-to-PDF转换器中可能是非常重要的.

hal*_*fer 1

我根本不了解 LaTeX,但已经使用这个有用的手册破解了这个解决方案。首先,创建一个样式:

\definecolor{silver}{RGB}{230,230,230}

\newcommand{\inlinecodeblock}[1]{
    \colorbox{silver}{
        \texttt{#1}
    }
}
Run Code Online (Sandbox Code Playgroud)

使用方法如下:

Some \inlinecodeblock{inline code}, and some widgets, go here
Run Code Online (Sandbox Code Playgroud)

这将创建一个具有背景颜色和等宽字体的样式。对于我的喜好来说,边距和填充有点大,但这是一个非常有用的开始。它看起来是这样的:

内联格式的屏幕截图

缺点是,如果我希望输出为支持适当样式的格式(例如 HTML),那么这些样式就会丢失。另外,我的解决方案仅适用于 LaTeX/PDF。因此,如果您可以解决这些问题,请添加更好的答案!


附录:我有一个更好的方法,因此:

\newcommand{\inlinecodeblock}[1]{
    \fboxsep 1pt
    \fboxrule 0pt
    \colorbox{silver}{\strut{\texttt{#1}}}
}
Run Code Online (Sandbox Code Playgroud)

这避免了水平填充过多的问题 - 我认为这是参数中的换行符colorbox造成的。我添加了strut,无论文本是否有下降部分,它都会保持突出显示相同的高度。

但它并不完美 - 框外仍然有太多的水平边距,并且框后面的逗号仍然会孤立到下一行。我可能会放弃使用 LaTeX,并从 Pandoc 渲染为 HTML,然后用于wkhtmltopdf渲染最终文档。