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

时间:2013-07-27 20:46:50

标签: 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

我也试过这个:

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

我想申请课程&#34; filename&#34;在每种情况下对所附文本,但它似乎没有对输出做任何事情。然而,手册说:

  

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

这是我的命令:

pandoc \
    --output ./output.pdf \
    --css source/styles.css \
    source/en/docs/input.md

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

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

附加物

几个事后:

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

2 个答案:

答案 0 :(得分:2)

  

&#34;我想申请班级&#34;文件名&#34;在每种情况下都包含在文本中,但它似乎没有对输出做任何事情。&#34;

适用于HTML。以交互方式运行Pandoc, ^D 以查看生成的代码:

$>  pandoc -f markdown -t html

* Create a simple HTML document (`simple.html`{.filename}) and load it.

^D

<ul>
<li>Create a simple HTML document (<code class="filename">simple.html</code>) and load it.</li>
</ul>

如果使用.filename类,它对LaTeX不起作用。您需要使用已知的类名之一:

$>  pandoc -f markdown -t latex

* Create a simple HTML document (`simple.html`{.filename}) and load it.

^D

\begin{itemize}
\tightlist
\item
  Create a simple HTML document (\texttt{simple.html}) and load it.
\end{itemize}

现在使用其中一个已知的类名,例如.bash.postscript.php,...:

$>  pandoc -f markdown -t latex

* Create a simple HTML document (`simple.html`{.bash}) and load it.

^D

\begin{itemize}
\tightlist
\item
  Create a simple HTML document (\VERB|\KeywordTok{simple.html}| and
  load it.
\end{itemize}

要将HTML + CSS转换为PDF,您还可以查看免费用于非商业用途的PrinceXML

答案 1 :(得分:1)

我根本不认识LaTeX,但是使用this helpful manual破解了这个解决方案。首先,创建一个样式:

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

\newcommand{\inlinecodeblock}[1]{
    \colorbox{silver}{
        \texttt{#1}
    }
}

以下是如何使用它:

Some \inlinecodeblock{inline code}, and some widgets, go here

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

Screenshot of inline formatting

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


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

\newcommand{\inlinecodeblock}[1]{
    \fboxsep 1pt
    \fboxrule 0pt
    \colorbox{silver}{\strut{\texttt{#1}}}
}

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

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