【问题标题】:Preserve line breaks in title using pandoc使用 pandoc 保留标题中的换行符
【发布时间】:2015-02-02 17:11:11
【问题描述】:

考虑一下 pandoc 风格的 Markdown 中的以下标题栏:

% Higgelty Pigglety Pop!
  or
  There Must Be More to Life
% Maurice Sendak

在这里,换行符是标题的一部分。可以重新格式化标题以将其插入常规文本流中,例如“Higgelty Pigglety Pop!或者,生活中必须有更多”,但是当不被提及但在文档的标题页上使用时,保留换行符至关重要。根据样式,它可能如下所示:

Higgelty Pigglety 流行音乐! 或者 生活必须不止于此 莫里斯·森达克

我的问题:如何在 pandoc 的输出中实现正确的多行标题显示?

便携式版本会是首选,但我也会满足于仅使用 LaTeX 的 hack。

【问题讨论】:

    标签: latex markdown pandoc


    【解决方案1】:
    % Higgelty Pigglety Pop! \
      or \
      There Must Be More to Life
    % Maurice Sendak
    

    Pandoc Markdown 默认启用escaped_line_breaks extension

    反斜杠后跟换行符也是硬换行符。注意:在多行和网格表格单元格中,这是创建硬换行符的唯一方法,因为单元格中的尾随空格会被忽略。

    【讨论】:

    • 谢谢!我以为我已经尝试过了,但它没有用......显然不是。我现在唯一的问题是乳胶代码无法编译,这似乎是由于我修改的模板有问题。但它确实适用于标准模板。
    • 嗯,似乎对我不起作用。在 LaTeX 中,我会添加一个双反斜杠来强制换行,但这并没有这样做。
    • @slhck,您能否添加一些有关您使用这种方法遇到的问题的更多信息?当前的 pandoc 版本在 LaTeX 中使用双反斜杠换行 - 我可能遗漏了一些东西。
    • 当我在包含# test## foo(然后是两个反斜杠)和bar 的文档中添加三行并运行pandoc -o test.pdf test.md 时,第二个标题包含foo 和一个反斜杠,并且有一个包含bar的普通段落:i.stack.imgur.com/hjITf.png — pandoc 2.2.2.1.
    • @slhck 如果我理解正确,那么是导致问题的标题?对此没有纯 Markdown 解决方案,但您可以编写 ## foo`\\`{=latex}bar 以在 LaTeX/pdf 输出中强制换行。这能解决问题吗?
    【解决方案2】:

    使用 YAML 元数据块时,也可以使用以下方法:

    ---
    title: |
        | First line
        | Second line
    ---
    

    this thread 中发现了这个想法。

    【讨论】:

    • 这会在转换为 HTML 时导致警告和空的 <title> 标记。
    【解决方案3】:

    一种非常通用但不太简单的方法是使用原始 HTML 来指示换行符,并使用 pandoc filter 将它们转换为正确的换行符。下面是一个Lua filter,它将源代码中的任何<br>(或<br />)转换为硬换行符。

    --- Transform a raw HTML element which contains only a `<br>`
    -- into a format-indepentent line break.
    function RawInline (el)
      if el.format:match '^html' and el.text:match '%<br ?/?%>' then
        return pandoc.LineBreak()
      end
    end
    

    将文件另存为linebreaks.lua

    标题可以写成

    % Higgelty Pigglety Pop!<br>or<br>There Must Be More to Life
    % Maurice Sendak
    

    以上脚本必须通过--lua-filter选项传递给pandoc:

    $ pandoc -o test.pdf --lua-filter ./linebreaks.lua test.md
    

    这种方法的优点是它更通用,并且也适用于人们可能想要添加换行符的其他位置。例如,可以使用相同的语法在标题中添加换行符:# first line&lt;br&gt;second line

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2017-05-17
    相关资源
    最近更新 更多