online engine latex markdown beamer pandoc

latex - online - pandoc pdf-engine



Diapositivas con columnas en Pandoc (5)

El problema es que pandoc ignora markdown si encuentra un /begin{} . Una alternativa es editar la plantilla de beamer y agregar lo siguiente:

/newcommand{/columnsbegin}{/begin{columns}} /newcommand{/columnsend}{/end{columns}}

Y escríbelo así:

/columnsbegin /column{.5/textwidth} ~~~~~~~~Python >>> some python code ~~~~~~~ /column{.5/textwidth} ![](A_generated_image.pdf) /columnsend

Me gustaría tener un código y una imagen de lado a lado en una diapositiva de Beamer.

En LaTeX lo haría con columnas. Me gustaría utilizar markdown dentro de la estructura de la columna.

/begin{columns} /column{.5/textwidth} ~~~~~~~~Python >>> some python code ~~~~~~~ /column{.5/textwidth} ![](A_generated_image.pdf) /end{columns}

Desafortunadamente, Pandoc no procesa la rebaja dentro de las declaraciones / begin {columns} y / end {columns}. ¿Hay alguna forma de evitar esto?

  • ¿Hay una manera de usar el markdown dentro de LaTeX en línea?
  • ¿Hay una solución de reducción pura?

Espero aún valioso. Hice un filtro Pandoc en Python para colocar columnas fácilmente, para que pueda escribir sus presentaciones de esta manera:

# Hello World [columns] [column=0.5] ~~~python if __name__ == "__main__": print "Hello World" ~~~ [column=0.5] This is how a "Hello World" looks like in Python [/columns]

que el filtro convertirá cada marca a / begin {columns} y / column {.5 / textwidth}, por lo que el documento de arriba se entregará

/begin{frame}[fragile]{Hello} /begin{columns} /column{0.5/textwidth} /begin{Shaded} /begin{Highlighting}[] /NormalTok{some python code} /end{Highlighting} /end{Shaded} /column{0.5/textwidth} Hello World /end{columns} /end{frame}

El filtro de código está aquí.

import pandocfilters as pf def latex(s): return pf.RawBlock(''latex'', s) def mk_columns(k, v, f, m): if k == "Para": value = pf.stringify(v) if value.startswith(''['') and value.endswith('']''): content = value[1:-1] if content == "columns": return latex(r''/begin{columns}'') elif content == "/columns": return latex(r''/end{columns}'') elif content.startswith("column="): return latex(r''/column{%s/textwidth}'' % content[7:]) if __name__ == "__main__": pf.toJSONFilter(mk_columns)

Si nunca usa un filtro pandoc, simplemente guarde el filtro en la misma ubicación del documento que columnfilter.py (u otro nombre que desee) y ejecute

pandoc -t beamer --filter columnfilter.py yourDocument.mkd

¡Y disfrutar!


Las versiones actuales de pandoc (es decir, pandoc 2.0 y posteriores) son compatibles con divs cercados . Los divs con nombre especial se transforman en columnas al seleccionar un formato de diapositivas:

# This slide has columns ::: columns :::: column left :::: :::: column right :::: :::

Pandoc traduce esto en el siguiente código de beamer LaTeX:

/begin{frame}{This slide has columns} /protect/hypertarget{this-slide-has-columns}{} /begin{columns}[T] /begin{column}{0.48/textwidth} left /end{column} /begin{column}{0.48/textwidth} right /end{column} /end{columns} /end{frame}

Esto es simple y tiene la ventaja adicional de proporcionar resultados similares al apuntar a otros formatos de presentación como reveal.js.


Puede usar FletcherPenney MultiMarkdown, que puede procesar el descuento hacia LaTeX / Beamer. En comparación con Pandoc, MultiMarkdown no tiene tantas características. Sin embargo, especialmente cuando se trabaja con LaTeX, tiene la ventaja de que puede incrustar el código LaTeX directamente en el Markdown en los comentarios HTML.

Tu código se vería así:

<!-- /begin{columns} --> <!-- /column{.5/textwidth} --> >>> some python code <!-- /column{.5/textwidth} --> ![](A_generated_image.pdf) <!-- /end{columns} -->

Para mí esta solución funciona bien. Con un buen editor (por ejemplo, Scrivener, Sublime Text) puede escribir el código de látex sin todos los comentarios y encontrarlos / reemplazarlos después de editarlos. Además, el soporte de metadatos en Multimarkdown es mucho más flexible, por lo que es más fácil personalizar las presentaciones.

Mientras tanto, espero que el equipo de Pandoc proporcione una solución a este problema. Creo que hay algunos usuarios a los que les gustaría incrustar pequeñas partículas de código LaTex a lo largo de sus documentos de rebajas sin tenerlas convertidas / escapadas.


Puede usar los comentarios de MultiMarkDown ("<! - Su Código LaTeX dentro de ->") con Pandoc cuando encierre el comando Pandoc en el que transforma su marca en LaTeX con dos comandos sed.

En la primera ejecución de sed, cambia los comentarios de MultiMarkDown a "/ verb + AAAAAAALaTeX-StuffZZZZZZ +". Luego se transforma a LaTeX con Pandoc como de costumbre, todo lo que está dentro de "/ verb + AAAAAAALaTeX-StuffZZZZZZZ +" queda solo. Luego ejecuta sed en el archivo TeX y borra "/ verb + AAAAAAA" y "ZZZZZZ +" desplegando su código LaTeX.

La primera línea de comando sed antes de la transformación de Pandoc podría verse así:

sed -E -e "s/<//!--(.+)--//>/////verb/+AAAAAAA/1ZZZZZZZ/+/g " / source.md > source.i.md

Luego use Pandoc en source.i.md como de costumbre para crear source.tex. La segunda carrera es como esta:

sed -E -e "s/////verb/+AAAAAAA(.+)ZZZZZZZ/+//1/g" -i "" source.tex

Automatice todo en un Makefile para poder hacer más cambios, por ejemplo, a las definiciones de tablas en un solo paso. A primera vista, este enfoque funciona bien (lo probé en definiciones de columna con la clase beamer).

Con estos pequeños scripts sed, puedes usar todas las cosas buenas de Pandoc. Solo necesita comentar con mmd los comandos TeX y LaTeX que se escapan o encierran partes más grandes de su Markdown.