12 Stimmen

Wie behält man alle Zeilen einer Tabelle auf derselben Seite in RMarkdown bei der Erstellung einer PDF-Datei?

LaTex behält alle Zeilen einer Tabelle möglichst auf derselben Seite. Allerdings habe ich festgestellt, dass eine Tabelle, wenn ich ein RMarkdown-Dokument in eine PDF-Datei rendern, zwei Seiten umfassen kann, wenn sie sich am Ende einer Seite befindet. Das erscheint mir seltsam, weil ich glaube, dass die RMarkdown-Datei tatsächlich in eine LaTex-Datei umgewandelt wird, bevor die PDF-Datei erstellt wird.

  ---
  title       : "Tabelle"
  output      : 
    pdf_document
  ---

  # Abschnitt 1

  # Abschnitt 2

  # Abschnitt 3

  # Abschnitt 4

  # Abschnitt 5

  # Abschnitt 6

  # Abschnitt 7

  # Abschnitt 8

  # Abschnitt 9

  # Abschnitt 10

  # Abschnitt 11

  # Abschnitt 12

  # Abschnitt 13

  Spalte 1          |     Spalte 2 |
  -------------     | -------------|
  1) Zelle           |     Zelle     |
  2) Zelle           |     Zelle     |
  3) Zelle           |     Zelle     |
  4) Zelle           |     Zelle     |
  5) Zelle           |     Zelle     |
  6) Zelle           |     Zelle     |
  7) Zelle           |     Zelle     |
  8) Zelle           |     Zelle     |
  9) Zelle           |     Zelle     |
  10) Zelle          |     Zelle     |
  11) Zelle          |     Zelle     |
  12) Zelle          |     Zelle     |
  13) Zelle          |     Zelle     |
  14) Zelle          |     Zelle     |
  15) Zelle          |     Zelle     |
  16) Zelle          |     Zelle     |
  17) Zelle          |     Zelle     |
  18) Zelle          |     Zelle     |

Wenn dies in temp.Rmd gespeichert und dann in eine PDF-Datei umgewandelt wird mit render("temp.Rmd", output_file="temp.pdf"), erscheinen die ersten zwölf Zeilen auf Seite eins und die übrigen Zeilen auf Seite 2:

Eine Tabelle auf zwei Seiten

Ist es möglich, render (oder pandoc?) zu bitten, zusätzliche Zeilen vor einer Tabelle hinzuzufügen, wenn nötig, damit alle Zeilen einer Tabelle auf derselben Seite erscheinen?

8voto

Livius Punkte 3077

Wie in den Kommentaren vorgeschlagen wurde, besteht das Problem darin, dass die Standard-LaTeX-Vorlage für pandoc longtable verwendet (normale LaTeX-Tabellen werden nicht über Seiten aufgeteilt). Wenn Sie sich nicht in der Lage fühlen, Ihre eigene Vorlage zu erstellen, können Sie einfach die Standardvorlage ändern.

Vanilla Pandoc

Sie können knitr verwenden, um eine normale Markdown-Datei zu erstellen. Anschließend können Sie pandoc verwenden, um die PDF/TeX-Datei unter Verwendung einer anderen LaTeX-Vorlage zu erstellen, via

pandoc --template=mytemplate.xex -o myfile.pdf myfile.md

Der einfachste Weg, eine neue Vorlage einzurichten, besteht darin, die Standardeinstellung zu ändern, die pandoc für Sie auf die Konsole ausgeben kann:

pandoc --print-default-template=latex

Dann müssen Sie die Zeile \usepackage{longtable,booktabs} in \usepackage{booktabs} ändern.

Wenn Sie OS X oder Linux verwenden, können Sie sed und Ausgaberedirektion verwenden, um direkt eine Vorlage ohne longtable zu generieren:

pandoc --print-default-template=latex | sed 's/longtable,//' > mytemplate.tex

RStudio

Wenn Sie dies über RStudio durchführen, ist die einfachste Option wahrscheinlich, die Standardvorlage zu ändern. (In neueren Versionen von RStudio wird pandoc gebündelt und daher anders als das System pandoc verwendet.) Wenn Sie in dem "R Markdown" Build-/Statusfenster suchen, sehen Sie etwas Ähnliches wie dies:

Ausgabedatei: rmarkdown.knit.md

/Applications/RStudio.app/Contents/MacOS/pandoc/pandoc rmarkdown.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash-implicit_figures --output rmarkdown.pdf --template /Library/Frameworks/R.framework/Versions/3.0/Resources/library/rmarkdown/rmd/latex/default.tex --highlight-style tango --latex-engine /usr/texbin/pdflatex --variable 'geometry:margin=1in' 

Erstellt: rmarkdown.pdf

(Ich habe dieses Beispiel auf einem Mac erstellt, auf Windows oder Linux sieht das anders aus.) Die Vorlage ist dort im Befehl aufgeführt, und Sie können sie dann wie oben beschrieben ändern. Dies ändert natürlich das Verhalten für alle Dokumente, die über RStudio erstellt werden. Soweit ich weiß, gibt es derzeit keine öffentlich zugängliche Option, um die verwendete Vorlage zu ändern, aber dies kann sich ändern, da Dokumentenvorlagen anscheinend ein Bereich aktiver Arbeit in den neuesten Versionen sind.

EDIT (2016-05-05):

Es scheint, dass die Verwendung von longtable in den aktuellen Versionen von pandoc fest kodiert ist, daher werden einige Fehler generiert, wenn longtable aus dem Titel entfernt wird. Sie können dies umgehen, indem Sie einen Filter verwenden.

Speichern Sie das verknüpfte Python-Skript und

Vanilla Pandoc

fügen Sie die --filter path/to/filter.py Markierung zu Ihrem pandoc-Aufruf hinzu.

RStudio

ändern Sie Ihren YAML-Block für die zusätzlichen pandoc-Argumente:

---
Titel       : "Tabelle"
pandoc_args : --filter path/to/filter.py
Ausgabe      : 
    pdf_document
---

Wie in dem obigen Link angegeben, werden dadurch einfache LaTeX-Tabellen erstellt, was bedeutet, dass keine Unterstützung für Fußnoten in Tabellen besteht.

5voto

Dave Everitt Punkte 15928

Der sauberste Weg wäre, einen Seitenwechsel (\newpage oder \pagebreak) vor der Tabelle hinzuzufügen, obwohl dies unintelligent ist, wenn Sie Text bearbeiten, der die Position der Tabelle verschieben würde. Ich denke, der Zeitpunkt dafür wäre, wenn Sie das Bearbeiten des Dokuments abgeschlossen haben und nach einer Testausgabe (um nach hässlichen Umbrüchen zu suchen), kurz vor der Erstellung der endgültigen Ausgabe.

Dies Antwort auf eine verwandte Frage ist bereits auf SO. Außerdem ist offensichtlich \pagebreak:

tatsächlich ein LaTeX-Befehl, und kein Markdown-Befehl, aber die meisten … Markdown-zu-PDF-Engines … verwenden LaTex und werden ihn akzeptieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X