Saut de page de démarque Pandoc

113

Récemment, j'ai commencé à utiliser Pandoc markdown qui semble une bonne alternative à LaTeX, car mon document ne contient pas beaucoup de formules mathématiques et je n'ai AUCUNE expérience avec LaTeX, ce qui, combiné à un délai de soumission de moins de 2 semaines, en fait une bonne solution.

Une chose que je n'ai pas réussi à faire est de savoir comment le forcer à laisser le reste de la page vide, quelqu'un peut-il m'aider?

LucasSeveryn
la source
5
Le Markdown à saveur de Pandoc est également idéal lors de l'utilisation de formules mathématiques.
A. Donda le

Réponses:

135

Il semble que pandoc markdown utilise des balises LaTeX standard à cet effet:

\newpage et \pagebreak

LucasSeveryn
la source
9
Les deux fonctionnent (merci!), Mais quelle est la différence entre les deux ou sont-ils exactement équivalents?
Kalin
15
newpage termine la page actuelle, alors que le saut de page est plus une demande amicale - cela peut arriver ou non. Voir personal.ceu.hu/tex/breaking.htm
parvus
5
Cela est dû au fait que les commandes raw latex sont passées directement si la sortie comprend les commandes latex.
Matthew Pickering
23

TL; DR : utilisez \newpageet 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 pas de moyen dédié pour représenter les sauts de page, mais il est toujours possible d'encoder les informations d'une autre manière. Une façon est d'utiliser du LaTeX brut \newpage. Cela fonctionne parfaitement lors de la sortie de LaTeX (ou pdf créé via LaTeX). Cependant, on rencontrera des problèmes lors du ciblage de différents formats comme HTML ou docx.

Une solution simple lorsque vous ciblez d'autres formats consiste à utiliser un filtre pandoc qui peut transformer la représentation interne du document afin qu'elle réponde à nos besoins. Pandoc 2.0 et les versions ultérieures permettent même d'utiliser l'interpréteur Lua inclus pour effectuer cette transformation.

Supposons que nous indiquions les sauts de page en mettant \newpageune ligne entourée comme des lignes vides, comme ceci:

lorem ipsum

\newpage

more text

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

Nous pouvons utiliser un simple filtre Lua pour traduire cela lorsque vous ciblez un format différent. Ce qui suit fonctionne pour docx , LaTeX , epub et le balisage léger.

--- 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 '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
  -- \pagebreak.
  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

Nous avons publié une version mise à jour et plus fonctionnelle . Il est disponible dans le référentiel officiel pandoc lua-filters .

tarleb
la source
8
Cela fonctionne à merveille pour forcer les sauts de page avec \newpagele format de sortie MS Word de pandoc. Pour utiliser ce filtre, enregistrez le code dans cette réponse pour par exemple pagebreak.luaet invoquez pandoc avec--lua-filter=pagebreak.lua
Christian Long
3

J'ai observé que cela ne fonctionne pas pour les formats .doc et .odt. Une solution de contournement 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 (ibre office dans mon cas)

Joaquin
la source
Comment le feriez-vous format the "horizontal line" style to break a page?
nilon
Je ne connais que la sortie HTML, que j'imprime par conséquent en pdf. Chrome a une très belle implémentation de l'interprétation CSS pour l'impression. Dans ce cas, hr{opacity:0;page-break-after: always;}fait le travail. Vous pouvez sacrifier un autre élément si vous souhaitez l'utiliser <hr>pour autre chose.
Joaquin
0

impossible de modifier la réponse de LucasSeveryn, la file d'attente est pleine, alors ajoutez quelques informations ici.

voie 1: + raw_tex

\newpageet \pagebreakbesoin d' raw_texextension sur.

// avec pandoc 2.9.2.1, ne fonctionne pas avec la sortie docx ou html, --verbose dit

[INFO] Not rendering RawBlock (Format "tex") "\\pagebreak"
[INFO] Not rendering RawBlock (Format "tex") "\\newpage"

manière 2: + raw_attribute

https://pandoc.org/MANUAL.html#extension-raw_attribute

```{=openxml}
<w:p>
  <w:r>
    <w:br w:type="page"/>
  </w:r>
</w:p>
```

// également pas pris en charge dans le format d'entrée gfm.
// cela a fonctionné pour la sortie docx, pas pour la sortie html.

AVIS d'extension

cette +raw_texextension de format nécessaire . qui ne prend pas en charge toutes les variantes de démarque dans pandoc.

https://pandoc.org/MANUAL.html#markdown-variants

Note, however, that commonmark and gfm have limited support for extensions.  

Only those listed below (and smart, raw_tex, and hard_line_breaks) will work.  

The extensions can, however, all be individually disabled.

Also, raw_tex only affects gfm output, not input.

cela -f markdownfonctionnera, mais -f gfmne fonctionnera pas.

extension de format

https://pandoc.org/MANUAL.html#option--de

Extensions can be individually enabled or disabled by appending 
+EXTENSION or -EXTENSION to the format name.

par exemple

-t html+raw_tex: sortie enable raw_tex

-f markdown-raw_tex-raw_attribute: entrée désactiver raw_tex et raw_attribute

Yurenchen
la source