2013-02-28 11 views
19

Ich möchte Code und ein Bild nebeneinander in einem Beamer Dia haben.Slides mit Spalten in Pandoc

In LaTeX würde ich dies mit Spalten tun. Ich möchte Markdown innerhalb der Spaltenstruktur verwenden.

\begin{columns} 
\column{.5\textwidth} 

~~~~~~~~Python 
>>> some python code 
~~~~~~~ 

\column{.5\textwidth} 

![](A_generated_image.pdf) 

\end{columns} 

Leider verarbeitet Pandoc die Abschrift nicht in den Statements \ begin {columns} und \ end {columns}. Gibt es einen Weg dahin?

  • Gibt es eine Möglichkeit, Abschriften innerhalb von LaTeX inline zu verwenden?
  • Gibt es eine reine Markdown-Lösung?
+0

Sie könnten in dieser letzten Frage auf tex.sx interessiert sein: http: // tex Deutsch:. Englisch: stackexchange.com/questions/101717/converting - markdown - zu - latex - in - latex/101731 Deutsch:. –

+0

Haben Sie versucht, die Figur in eine Tabelle zu setzen? – Jakob

Antwort

2

Sie könnten FletcherPenney MultiMarkdown verwenden, das Abschriften zu LaTeX/Beamer verarbeiten kann. Im Vergleich zu Pandoc hat MultiMarkdown nicht so viele Funktionen. Insbesondere beim Arbeiten mit LaTeX hat dies den Vorteil, dass Sie LaTeX-Code direkt in den Markdown in HTML-Kommentare einbetten können.

Ihr Code würde wie folgt aussehen:

<!-- \begin{columns} --> 
<!-- \column{.5\textwidth} --> 

     >>> some python code 


<!-- \column{.5\textwidth} --> 

![](A_generated_image.pdf) 

<!-- \end{columns} --> 

Für mich ist diese Lösung funktioniert gut. Mit einem guten Editor (z. B. Scrivener, Sublime Text) können Sie den Latexcode ohne alle Kommentare schreiben und nach der Bearbeitung finden/ersetzen. Darüber hinaus ist die Metadatenunterstützung in Multimarkdown viel flexibler, so dass Präsentationen einfacher angepasst werden können.

In der Zwischenzeit hoffe ich, dass das Pandoc-Team eine Lösung für dieses Problem bietet. Ich denke, es gibt einige Benutzer, die kleine LaTex-Code-Partikel in ihre Abschriften-Dokumente einbetten möchten, ohne sie konvertiert/maskiert zu haben.

2

Sie können MultiMarkDown-Kommentare ("<! - Ihr LaTeX-Code innerhalb ->") mit Pandoc verwenden, wenn Sie den Pandoc-Befehl einschließen, in dem Sie Ihre Abschrift mit zwei sed-Befehlen in LaTeX umwandeln.

Im ersten Sed-Lauf ändern Sie die MultiMarkDown-Kommentare in "\ Verb + AAAAAAALaTeX-StuffZZZZZZ +". Dann transformierst du wie üblich mit Pandoc in LaTeX, alles in "\ verb + AAAAAAALaTeX-StuffZZZZZZZ +" bleibt alleine. Dann führst du sed auf der TeX-Datei aus und löschst die "\ verb + AAAAAAA" und "ZZZZZZ +", um deinen LaTeX Code zu entschlüsseln.

Die erste sed Befehlszeile vor der Pandoc Transformation könnte wie folgt aussehen:

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

Dann Pandoc auf source.i.md wie gewohnt verwenden source.tex zu erstellen. Zweite sed Lauf wie folgt:

Ich automatisierte alles in einem Makefile, so dass ich mehr Änderungen vornehmen kann, z. Tabellendefinitionen in einem Schritt. Auf den ersten Blick funktioniert dieser Ansatz gut (getestet an Spaltendefinitionen mit der Beamer-Klasse).

Mit diesen kleinen sed-Skripten können Sie all die netten Dinge von Pandoc verwenden. Sie müssen nur die TeX- und LaTeX-Befehle, die entweder maskiert werden oder größere Teile Ihres Markdowns einschließen, mit mmd kommentieren.

15

Ich hoffe immer noch wertvoll.Ich habe ein Pandoc filter in Python Spalten leicht zu setzen, so dass Sie Ihre Präsentationen auf diese Weise schreiben:

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

, dass die Filter jedes Markup konvertieren \ begin {Spalten} und \ Spalte {0,5 \ textwidth} , so wird sich das Dokument oben in

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

der Code Filter hier ist

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) 

Wenn Sie noch nie einen pandoc Filter verwenden, nur um die Filter zu demselben Dokument Standort speichern als columnfilter.py (oder einen anderen Namen, den Sie wollen) und führen

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

Und viel Spaß!

+0

Das ist wirklich nett, danke! – naught101

+1

Es wäre nett, es in einen Kernpunkt (oder einen ähnlichen Ort) zu setzen, wo der Benutzer ein Problem melden kann. – Dilawar

17

Das Problem ist, dass pandoc Markdown ignoriert, wenn es eine \begin{} findet. Eine Alternative ist die Beamer Vorlage zu bearbeiten und die folgende hinzu:

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

Und schreiben Sie es wie folgt aus:

\columnsbegin 
\column{.5\textwidth} 

~~~~~~~~Python 
>>> some python code 
~~~~~~~ 

\column{.5\textwidth} 

![](A_generated_image.pdf) 

\columnsend 
Verwandte Themen