139 votes

Saut de page Pandoc markdown

Récemment, j'ai commencé à utiliser Pandoc markdown qui semble être 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.

Il y a une chose que je n'ai pas réussi à résoudre : comment le forcer à laisser le reste de la page vide, quelqu'un peut-il m'aider ?

5 votes

Le format Markdown à la sauce Pandoc est également idéal pour l'utilisation de formules mathématiques.

170voto

LucasSeveryn Points 827

Il semble que pandoc markdown utilise les balises LaTeX standard à cette fin :

\newpage y \pagebreak

10 votes

Les deux fonctionnent (merci !), mais quelle est la différence entre les deux ou sont-ils exactement équivalents ?

20 votes

Newpage termine la page en cours, alors que pagebreak est plus une requête amicale - elle peut ou non se produire. Voir personal.ceu.hu/tex/breaking.htm

7 votes

Cela est dû au fait que les commandes latex brutes sont transmises directement si la sortie comprend les commandes latex.

41voto

tarleb Points 6712

TL;DR : utilisation \newpage o \pagebreak avec le filtre Lua ci-dessous (ou aquí ) pour obtenir des sauts de page dans de nombreux formats. R Markdown les utilisateurs n'auront rien à faire de plus, le filtre est déjà inclus par défaut.


Pandoc analyse toutes les entrées dans un format de document interne. Le format interne n'a pas de moyen dédié pour représenter les sauts de page, mais il est toujours possible d'encoder l'information d'autres manières. L'une d'entre elles consiste à utiliser des caractères bruts LaTeX \newpage . Cela fonctionne parfaitement lors de la sortie de LaTeX (ou de PDF créés par LaTeX). Cependant, on rencontrera des problèmes lorsqu'on vise des formats différents comme HTML ou docx.

Une solution simple pour cibler d'autres formats est d'utiliser une balise filtre pandoc qui peut transformer la représentation interne du document pour qu'elle réponde à nos besoins. Pandoc 2.0 et plus, même permet à pour utiliser l'interpréteur Lua inclus pour effectuer cette transformation.

Supposons que nous indiquions les sauts de page en mettant \newpage dans une ligne entourée de lignes vides, comme ça :

lorem ipsum

\newpage

more text

El \newpage sera analysé comme un RawBlock contenant des matières premières TeX . Le bloc ne sera inclus dans la sortie que si le format cible peut contenir du TeX brut (c'est-à-dire LaTeX, Markdown, Org, etc.).

Nous pouvons utiliser un simple filtre Lua pour traduire cela lorsque nous ciblons un format différent. Le filtre suivant travaux para docx , LaTeX , epub et un 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é un version actualisée, plus riche en fonctionnalités . Il est disponible sur le site officiel de pandoc Dépôt de filtres lua . Le site R Markdown maintient un fork ; il est livré avec le paquetage R, donc le fichier la fonction peut être utilisée immédiatement .
Note : Pour convertir latex a docx vous devez définir le paramètre "from" à latex+raw_tex pour que pandoc AST le transmette numéro github

14 votes

Cela fonctionne à merveille pour forcer les sauts de page avec \newpage dans le format de sortie MS Word de pandoc. Pour utiliser ce filtre, sauvegardez le code de cette réponse dans un fichier, par exemple, à l'adresse suivante pagebreak.lua et invoquez pandoc avec --lua-filter=pagebreak.lua

5voto

Joaquin Points 89

J'ai constaté que cela ne fonctionne pas pour les formats .doc et .odt. Une solution de contournement que j'ai trouvée consiste à insérer une ligne horizontale ----------------- et formater le style "ligne horizontale" pour rompre une page et être invisible, en utilisant l'éditeur de texte (ibre office dans mon cas)

0 votes

Comment voulez-vous format the "horizontal line" style to break a page ?

1 votes

Je ne connais que la sortie HTML, que j'imprime donc 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 d'autres éléments si vous voulez utiliser <hr> pour autre chose.

5voto

yurenchen Points 498

Je ne peux pas modifier la réponse de LucasSeveryn, la file d'attente est pleine, alors j'ajoute des informations ici.

voie 1 : +raw_tex

\newpage y \pagebreak besoin de raw_tex extension sur.

// avec pandoc 2.9.2.1, ne fonctionne pas avec une sortie docx ou html, --verbose indique

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

moyen 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>
```

// ne supporte pas non plus le format d'entrée gfm.
// cela a fonctionné pour la sortie docx, mais pas pour la sortie html.

extension AVIS

ce besoin +raw_tex l'extension de format. ce qui ne permet pas de prendre en charge toutes les variantes de markdown 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.

donc -f markdown fonctionnera, mais -f gfm ne fonctionne pas.

extension de format

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

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

par exemple

-t html+raw_tex : activation de la sortie raw_tex

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

2voto

shanwu Points 127

Vous pouvez appliquer l'approche suivante si vous convertissez un fichier de Markdown au format epub :

<div style="page-break-before:always;"></div>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X