Сохранение строк в заголовке с использованием pandoc

Рассмотрим следующий блок заголовка в Markdown со вкусом пандока:

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

Здесь разрывы строк являются частью заголовка. Возможно переформатировать заголовок, чтобы вставить его в обычный текстовый поток, например, "Higgelty Pigglety Pop! Или, должно быть, больше жизни", но когда об этом не говорят, а используют на титульном листе документа, сохраняя разрывы строк имеют решающее значение. В зависимости от стиля это может выглядеть так:

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

Мой вопрос: как мне добиться правильного многострочного отображения заголовка в выводе pandoc?

Портативная версия будет предпочтительнее, но я также буду доволен взломом только на LaTeX.

Ответ 1

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

Pandoc Markdown позволяет по умолчанию расширение escaped_line_breaks:

Обратная косая черта, сопровождаемая новой строкой, также является жестким разрывом строки. Примечание: в многострочных ячейках сетки и сетке это единственный способ создать жесткий разрыв строки, так как игнорируются пробелы в ячейках.

Ответ 2

При использовании блоков метаданных YAML также работает следующее:

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

Нашел идею в этой теме.

Ответ 3

Очень общий, но менее простой метод заключается в использовании необработанного 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

Приведенный выше скрипт должен быть передан в pandoc с помощью --lua-filter:

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

Преимущество этого метода заключается в том, что он более универсален и работает в других местах, где можно добавить разрывы строк. Например, разрыв строки в заголовке может быть добавлен с использованием того же синтаксиса: # first line<br>second line.