2015-03-24 11 views
17

Ich möchte ein threeparttable in einem Rmd/Knitr-Dokument erstellen und eine Notiz am Ende der Tabelle hinzufügen. Die Tabelle wird durch eine R-Funktion in einem Chunk mit erstellt. Ich habe die Funktion dem Arbeitsbeispiel nicht hinzugefügt, weil es ziemlich ausführlich ist und das Problem aus dem reinen LaTeX-Code ersichtlich ist.Rmd/Kntir: Markdown-Zitate in LaTeX-Umgebungen

Dies funktioniert und das Ergebnis sieht wie erwartet aus.

--- 
title: "Untitled" 
output: pdf_document 
header-includes: 
- \usepackage{threeparttable} 
- \usepackage{booktabs} 
- \usepackage{longtable} 
references: 
- id: rao2001basic 
    title: Basic Research in Parapsychology 
    author: 
    - family: Rao 
    given: K.R. 
    issued: 
    year: 2001 
    publisher: McFarland 
    type: book 
--- 

\begin{table}[h] 
\centering 
\begin{threeparttable} 
\caption{A summary table of the cars dataset.} 
\begin{tabular}{lrr} 
\toprule 
Descriptives & speed & dist\\ 
\midrule 
Mean & 15.4 & 42.98\\ 
SD & 5.29 & 25.77\\ 
Min & 4 & 2\\ 
Max & 25 & 120\\ 
\bottomrule 
\end{tabular} 
\tablenotes{\item\textit{Note.} This table was created by @rao2001basic. } 
\end{threeparttable} 
\end{table} 

enter image description here

das Zitat in der Tabellenüberschrift Leider funktioniert nicht. Es funktioniert gut, wenn ich es aus der LaTeX-Umgebung nehme, aber nicht drinnen. Gibt es eine Möglichkeit, Markdown in der LaTeX-Umgebung zu parsen?

+1

Ich glaube nicht, dass dies möglich ist. Pandoc parst keine Abschriften innerhalb roher Tex-Blöcke. Wäre es möglich, dass Ihr Code anstelle von Latex eine Markdown-Tabelle ausgeben würde? – tmpname12345

+1

Ich glaube nicht, dass diese Art der Tabellenformatierung jetzt in Pandoc möglich ist. – crsh

+2

Da Sie eine Funktion verwenden, um die Tabelle zu generieren, können Sie sie in zwei teilen, wo sie das Zitat ausgibt und stattdessen in zwei Dateien schreiben, dann verwenden Sie '\ input {part1.txt} [@ rao2001basic] \ input {part2. txt}. Es könnte jedoch einfacher und reproduzierbarer sein, eine externe Bib-Datei zu verwenden. – Thell

Antwort

0

Ich fand, dass, wenn Sie bereit sind, das bookdown::pdf_document2()-Format zu verwenden, Sie text references, dieses Problem zu lösen, ohne zu verwirren mit LaTeX verwenden können:

--- 
title: "Untitled" 
output: bookdown::pdf_document2 
header-includes: 
- \usepackage{threeparttable} 
- \usepackage{booktabs} 
- \usepackage{longtable} 
references: 
- id: rao2001basic 
    title: Basic Research in Parapsychology 
    author: 
    - family: Rao 
    given: K.R. 
    issued: 
    year: 2001 
    publisher: McFarland 
    type: book 
--- 

(ref:tablenote) 
This table was created by @rao2001basic. 

\begin{table}[h] 
\centering 
\begin{threeparttable} 
\caption{A summary table of the cars dataset.} 
\begin{tabular}{lrr} 
\toprule 
Descriptives & speed & dist\\ 
\midrule 
Mean & 15.4 & 42.98\\ 
SD & 5.29 & 25.77\\ 
Min & 4 & 2\\ 
Max & 25 & 120\\ 
\bottomrule 
\end{tabular} 
\tablenotes{\item\textit{Note.} (ref:tablenote)} 
\end{threeparttable} 
\end{table} 

Dies funktioniert sogar, wenn Tabellen in R erstellt werden:

```{r results = "asis"} 
knitr::kable(mtcars[1:3, ], caption = "(ref:tablenote)") 
``` 
3

Diese Art von Problem ist im Wesentlichen ein Fluchtproblem oder eher ein Vermeidungsproblem von pandocs automatischer Latexblockanfangs-/Enderkennung.

diesem speziellen Fall mit der Umwelt werden könnten geschrieben Befehle direkt als

\table[h] 
\centering 
\threeparttable 
\caption{A summary table of the cars dataset.} 
\begin{tabular}{lrr} 
\toprule 
Descriptives & speed & dist\\ 
\midrule 
Mean & 15.4 & 42.98\\ 
SD & 5.29 & 25.77\\ 
Min & 4 & 2\\ 
Max & 25 & 120\\ 
\bottomrule 
\end{tabular} 
\tablenotes[flushleft] 
\item\textit{Note.} This table was created by @rao2001basic. 
\endtablenotes 
\endthreeparttable 
\endtable 

aber wenn die begin{env}/end{env} wirklich benötigt werden, dann können Makros wie dieser es

\def \btable{\begin{table}} 
\def \etable{\end{table}} 
\def \bthreeparttable{\begin{threeparttable}} 
\def \ethreeparttable{\end{threeparttable}} 
\def \btablenotes{\begin{tablenotes}} 
\def \etablenotes{\end{tablenotes}} 

verwendet werden, wäre schön, wenn eine robuste generische Lösung für die Umbenennung von begin{env}/end{env} existierte, die selektive Markdown innerhalb tex ermöglichen könnte Blöcke. So etwas wie ...

\newcommand\mdbegin[2]{% 
    \ifstrempty{#1}{% 
    \begin{#2} 
    }{% 
    \begin{#1}[#2] 
    }% 
} 

\newcommand\mdend[1]{% 
    \end{#1} 
} 

, die für das funktioniert, das etoolbox Paket, aber ich glaube nicht, es wäre eine empfohlene Lösung.

+0

Vielen Dank, es sieht so aus, als könnte es nur für meine Zwecke funktionieren. Ich werde genauer hinsehen. – crsh