9

我正在 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 转换器中可能很重要。
4

2 回答 2

2

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

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

于 2015-07-05T13:02:14.460 回答
1

我根本不知道 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造成的。我添加了 in strut,无论文本是否有下划线,它都会使高亮显示相同的高度。

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

于 2013-07-27T21:50:39.650 回答