使用Pandoc保留标题中的换行符

18

考虑在Pandoc风格的Markdown中使用以下标题块:

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

这里,换行符是标题的一部分。可以重新格式化标题以便将其插入到常规文本流中,例如,“Higgelty Pigglety Pop!Or,There Must Be More to Life”,但在讨论而不是在文档的标题页上使用时,保留换行是至关重要的。根据样式,它可能会看起来像这样:

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

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

最好使用便携式版本,但我也可以接受仅使用LaTeX的hack。

3个回答

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

Pandoc Markdown默认启用escaped_line_breaks扩展:

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


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

13

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

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

这个帖子中找到了这个想法。


当转换为HTML时,这会导致警告和空的<title>标签。 - ban_javascript

9
一个非常普遍但不太简单的方法是使用原始HTML来表示换行,并使用pandoc过滤器将其转换为适当的换行符。下面是一个Lua过滤器,它将源代码中的任何<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

这种方法的优点是更通用,也适用于其他需要添加换行符的位置。例如,可以使用相同的语法在标题中添加换行符:# 第一行<br>第二行

更好的解决方案是,我正在尝试对齐文本,但我不知道如何做到这一点,请参见https://stackoverflow.com/questions/64466021/how-to-align-text-using-pandoc-with-lua-filters,也许你可以帮助我。感谢您的好答复。 - PerduGames

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接