yihui tutorial the pos opts_chunk name guide examples definitive r latex knitr r-markdown

tutorial - r markdown the definitive guide pdf



Rmd/Kntir: Citas de Markdown en entornos LaTeX (2)

Descubrí que si está dispuesto a usar el bookdown::pdf_document2() , puede usar referencias de texto para resolver este problema sin tener que meterse con LaTeX:

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

Esto funciona incluso cuando las tablas se crean en R:

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

Quiero crear un threeparttable en un documento Rmd / Knitr y agregar una nota al final de la tabla. La tabla se crea mediante una función R dentro de un fragmento con results = "asis" . No agregué la función al ejemplo de trabajo porque es bastante detallado y el problema es evidente a partir del código LaTeX puro.

Esto funciona y el resultado se ve como se esperaba.

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

Desafortunadamente, la cita en el título de la tabla no funciona. Funciona bien si lo saco del entorno LaTeX, pero no dentro. ¿Hay alguna manera de analizar Markdown en el entorno LaTeX?


Este tipo de problema es esencialmente un problema de escape o, más bien, un problema de evitación del reconocimiento de inicio / finalización del bloqueo de látex automático de pandoc.

Este caso particular podría escribirse con los comandos del entorno directamente como

/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

pero si realmente se necesita begin{env} / end{env} entonces las macros se pueden usar de esta manera

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

Sería bueno si existiera una solución genérica robusta para cambiar el nombre de begin{env} / end{env} que pudiera permitir una reducción selectiva dentro de los bloques de texto. Algo como...

/newcommand/mdbegin[2]{% /ifstrempty{#1}{% /begin{#2} }{% /begin{#1}[#2] }% } /newcommand/mdend[1]{% /end{#1} }

que funciona para esto, utilizando el paquete etoolbox , pero no creo que sea una solución recomendada.