使用 pandoc 保留标题中的换行符
Preserve line breaks in title using pandoc
考虑 pandoc-flavored 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 的输出中实现正确的 multi-line 标题显示?
首选便携式版本,但我也满足于 LaTeX-only hack。
% Higgelty Pigglety Pop! \
or \
There Must Be More to Life
% Maurice Sendak
Pandoc Markdown 默认启用 escaped_line_breaks
extension:
A backslash followed by a newline is also a hard line break. Note: in multiline and grid table cells, this is the only way to create a hard line break, since trailing spaces in the cells are ignored.
使用 YAML 元数据块时,以下内容也有效:
---
title: |
| First line
| Second line
---
在 this thread 中找到了想法。
一个非常通用但不太简单的方法是使用原始 HTML 来指示换行符,并使用 pandoc filter. Below is a 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
这种方法的优点是比较通用,也适用于其他可能需要添加换行符的地方。例如,可以使用相同的语法在 header 中添加换行符:# first line<br>second line
.
考虑 pandoc-flavored 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 的输出中实现正确的 multi-line 标题显示?
首选便携式版本,但我也满足于 LaTeX-only hack。
% Higgelty Pigglety Pop! \
or \
There Must Be More to Life
% Maurice Sendak
Pandoc Markdown 默认启用 escaped_line_breaks
extension:
A backslash followed by a newline is also a hard line break. Note: in multiline and grid table cells, this is the only way to create a hard line break, since trailing spaces in the cells are ignored.
使用 YAML 元数据块时,以下内容也有效:
---
title: |
| First line
| Second line
---
在 this thread 中找到了想法。
一个非常通用但不太简单的方法是使用原始 HTML 来指示换行符,并使用 pandoc filter. Below is a 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
这种方法的优点是比较通用,也适用于其他可能需要添加换行符的地方。例如,可以使用相同的语法在 header 中添加换行符:# first line<br>second line
.