Pandoc Markdown Seitenumbruch

113

Vor kurzem habe ich angefangen, Pandoc Markdown zu verwenden, was eine gute Alternative zu LaTeX zu sein scheint, da mein Dokument nicht viele mathematische Formeln enthält und ich keine Erfahrung mit LaTeX habe, was zusammen mit einer Einreichungsfrist von weniger als 2 Wochen eine gute Lösung darstellt.

Eine Sache, die ich nicht umgehen konnte, ist, wie ich sie zwingen kann, den Rest der Seite leer zu lassen. Kann mir jemand helfen?

LucasSeveryn
quelle
5
Markdown mit Pandoc-Geschmack eignet sich auch hervorragend für die Verwendung mathematischer Formeln.
A. Donda

Antworten:

135

Es sieht so aus, als ob Pandoc Markdown Standard-LaTeX-Tags für diesen Zweck verwendet:

\newpage und \pagebreak

LucasSeveryn
quelle
9
Beide funktionieren (danke!), Aber was ist der Unterschied zwischen den beiden oder sind sie genau gleichwertig?
Kalin
15
newpage beendet die aktuelle Seite, während pagebreak eher eine freundliche Anfrage ist - es kann vorkommen oder nicht. Siehe personal.ceu.hu/tex/breaking.htm
parvus
5
Dies liegt daran, dass Raw-Latex-Befehle direkt weitergeleitet werden, wenn die Ausgabe Latex-Befehle versteht.
Matthew Pickering
23

TL; DR : Verwenden Sie \newpageund den folgenden Lua-Filter, um Seitenumbrüche in vielen Formaten zu erhalten.

Pandoc analysiert alle Eingaben in ein internes Dokumentformat. Dieses Format bietet keine spezielle Möglichkeit, Seitenumbrüche darzustellen, es ist jedoch weiterhin möglich, die Informationen auf andere Weise zu codieren. Eine Möglichkeit ist die Verwendung von rohem LaTeX \newpage. Dies funktioniert perfekt bei der Ausgabe von LaTeX (oder PDF, das über LaTeX erstellt wurde). Bei der Ausrichtung auf verschiedene Formate wie HTML oder docx treten jedoch Probleme auf.

Eine einfache Lösung für andere Formate ist die Verwendung eines Pandoc-Filters, der die interne Dokumentdarstellung so umwandeln kann, dass sie unseren Anforderungen entspricht. Pandoc 2.0 und später sogar erlaubt die mitgelieferte Lua - Interpreter zu verwenden , um diese Transformation durchzuführen.

Nehmen wir an, wir zeigen Seitenumbrüche an, indem wir \newpageeine Zeile einfügen, die wie Leerzeilen umgeben ist:

lorem ipsum

\newpage

more text

Das \newpagewird als RawBlock analysiert , der rohes TeX enthält . Der Block wird nur in die Ausgabe aufgenommen, wenn das Zielformat Roh-TeX enthalten kann (dh LaTeX, Markdown, Org usw.).

Wir können einen einfachen Lua-Filter verwenden, um dies zu übersetzen, wenn wir auf ein anderes Format abzielen. Das Folgende funktioniert für docx , LaTeX , epub und leichte Markups .

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

Wir haben eine aktualisierte, funktionsfähigere Version veröffentlicht . Es ist im offiziellen Pandoc Lua-Filter-Repository erhältlich .

Tarleb
quelle
8
Dies funktioniert hervorragend, um \newpageSeitenumbrüche im MS Word-Ausgabeformat von pandoc zu erzwingen . Um diesen Filter zu verwenden, speichern Sie den Code in dieser Antwort auf zB pagebreak.luaund rufen Sie pandoc mit--lua-filter=pagebreak.lua
Christian Long
3

Ich habe festgestellt, dass dies für die Formate .doc und .odt nicht funktioniert. Eine Problemumgehung bestand darin, eine horizontale Linie einzufügen -----------------und den Stil "horizontale Linie" zu formatieren, um eine Seite zu unterbrechen und unsichtbar zu sein, indem ich den Texteditor (in meinem Fall ibre office) verwendete.

Joaquin
quelle
Wie würden Sie format the "horizontal line" style to break a page?
Nilon
Ich kenne nur die HTML-Ausgabe, die ich folglich als PDF drucke. Chrome hat eine wirklich schöne Implementierung der CSS-Interpretation für den Druck. In diesem Fall hr{opacity:0;page-break-after: always;}erledigt der Job. Sie können andere Elemente opfern, wenn Sie sie <hr>für etwas anderes verwenden möchten .
Joaquin
0

Die LucasSeveryn-Antwort kann nicht bearbeitet werden. Die Warteschlange ist voll. Fügen Sie hier einige Informationen hinzu.

Weg 1: + raw_tex

\newpageund \pagebreakbrauchen raw_texErweiterung auf.

// mit pandoc 2.9.2.1 nicht mit docx- oder html-ausgabe arbeiten, sagt --verbose

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

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

// wird auch im gfm-Eingabeformat nicht unterstützt.
// Dies funktionierte für die DocX-Ausgabe, nicht für die HTML-Ausgabe.

Erweiterung HINWEIS

Dies erfordert eine +raw_texFormaterweiterung. Dies wird nicht für alle Markdown-Varianten in Pandoc unterstützt.

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.

so -f markdownwird es funktionieren, aber -f gfmnicht funktionieren.

Formaterweiterung

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

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

beispielsweise

-t html+raw_tex: Ausgabe aktivieren raw_tex

-f markdown-raw_tex-raw_attribute: input disable raw_tex und raw_attribute

Yurenchen
quelle