Pandoc markdown saut de page

récemment j'ai commencé à utiliser Pandoc markdown qui semble une bonne alternative au LaTeX, car mon document n'a pas beaucoup de formules mathématiques, et je n'ai aucune expérience avec le LaTeX, qui combiné avec moins de 2 semaines de délai de soumission rend une bonne solution.

une chose que je n'ai pas été en mesure de faire est de savoir comment la forcer à laisser le reste de la page vide, quelqu'un peut-il aider?

80
demandé sur Lii 2013-06-06 18:58:57

3 réponses

il semble que pandoc markdown utilise des étiquettes de LaTeX standard à cet effet:

\newpage et \pagebreak

107
répondu LucasSeveryn 2013-06-06 21:05:21

TL; DR: utilisez \newpage et le filtre Lua ci-dessous pour obtenir des sauts de page dans de nombreux formats.

Pandoc analyse Toutes les entrées dans un format de document interne. Ce format n'a aucun moyen dédié de représenter les sauts de page, mais il est encore possible de coder l'information d'une autre manière. Une façon est d'utiliser le LaTeX brut \newpage . Cela fonctionne parfaitement lors de la sortie de LaTeX (ou pdf créé par LaTeX). Cependant, on rencontrera des problèmes lorsque l'on ciblera différents formats. comme HTML ou docx.

une solution simple lorsque vous ciblez d'autres formats est d'utiliser un pandoc filter qui peut transformer la représentation interne du document de telle sorte qu'elle réponde à nos besoins. Pandoc 2.0 et plus tard même permet à d'utiliser L'interpréteur Lua inclus pour effectuer cette transformation.

supposons que nous indiquions des sauts de page en mettant \newpage dans une ligne entourée comme des lignes blanches, comme ceci:

lorem ipsum

\newpage

more text

le \newpage sera considéré comme un RawBlock contenant raw TeX . Le bloc ne sera inclus dans la sortie que si le format cible peut contenir du TeX brut (LaTeX, Markdown, Org, etc.).).

nous pouvons utiliser un filtre Lua simple pour traduire ceci en ciblant un format différent. Ce qui suit fonctionne pour docx, LaTeX, et légère majoration de poids.

--- Return a block element causing a page break in the given format.
local function newpage(format)
  if format == 'docx' then
    local pagebreak = '<w:p><w:r><w:br w:type="page"/></w:r></w:p>'
    return pandoc.RawBlock('openxml', pagebreak)
  elseif format:match 'html.*' then
    return pandoc.RawBlock('html', '<div style=""></div>')
  elseif format:match '(la)?tex' then
    return pandoc.RawBlock('tex', '\newpage{}')
  elseif format:match 'epub' then
    local pagebreak = '<p style="page-break-after: always;"> </p>'
    return pandoc.RawBlock('html', pagebreak)
  else
    -- fall back to insert a form feed character
    return pandoc.Para{pandoc.Str '\f'}
  end
end

-- Filter function called on each RawBlock element.
function RawBlock (el)
  -- check that the block is TeX or LaTeX and contains only \newpage or
  -- \newpage{} if el.format:match '(la)?tex' and content:match
  -- '\newpage(%{%})?' then
  if el.text:match '\newpage' then
    -- use format-specific pagebreak marker. FORMAT is set by pandoc to
    -- the targeted output format.
    return newpage(FORMAT)
  end
  -- otherwise, leave the block unchanged
  return nil
end
1
répondu tarleb 2018-09-01 19:22:12

j'ai observé que cela ne fonctionne pas .doc et .formats odt. Une solution que j'ai trouvée était d'insérer une ligne horizontale ----------------- et de formater le style "ligne horizontale" pour casser une page et être invisible, en utilisant l'éditeur de texte (bureau ibre dans mon cas)

0
répondu Joaquin 2018-10-01 13:42:53