繁体   English   中英

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

[英]Using CSS when converting Markdown to PDF with 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

我想在每种情况下将类“文件名”应用于封闭的文本,但它似乎对输出没有任何作用。 但是手册上说:

某些输出格式可以使用此信息进行语法高亮显示。 目前,唯一使用此信息的输出格式是 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 到 PDF 转换器中可能非常重要。

“我想在每种情况下将“文件名”类应用于所附文本,但它似乎对输出没有任何作用。”

它适用于 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 ,它可免费用于非商业用途。

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

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

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

以下是如何使用它:

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

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

内联格式的屏幕截图

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


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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM