32

ビーマースライドにコードと画像を並べて表示したいと思います。

LaTeXでは、これを列で行います。列構造内でマークダウンを使用したいと思います。

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

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

\column{.5\textwidth}

![](A_generated_image.pdf)

\end{columns}

残念ながら、Pandocは\begin{columns}および\end{columns}ステートメント内のマークダウンを処理しません。これを回避する方法はありますか?

  • インラインLaTeX内でマークダウンを使用する方法はありますか?
  • 純粋な値下げソリューションはありますか?
4

6 に答える 6

21

まだ貴重だと思います。Python でPandoc フィルターを作成して列を簡単に配置できるようにしたので、次の方法でプレゼンテーションを作成できます。

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

フィルタは各マークアップを \begin{columns} と \column{.5\textwidth} に変換するため、上記のドキュメントは

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

コードフィルターはこちら

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)

pandoc フィルターを使用しない場合は、フィルターを同じドキュメントの場所columnfilter.py(または別の名前) に保存して実行するだけです。

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

そして楽しんでください!

于 2014-06-04T14:23:56.457 に答える
2

2 つの sed コマンドでマークダウンを LaTeX に変換する Pandoc コマンドを囲む場合、Pandoc で MultiMarkDown コメント ( "<!-- Your LaTeX Code inside -->" ) を使用できます。

最初の sed の実行で、MultiMarkDown コメントを「\verb+AAAAAAALaTeX-StuffZZZZZZ+」に変更します。あとはいつものように Pandoc で LaTeX に変換すると、「\verb+AAAAAAALaTeX-StuffZZZZZZZ+」の中はすべてそのままです。次に、TeX ファイルに対して sed を実行し、LaTeX コードを展開している "\verb+AAAAAAA" と "ZZZZZZ+" を削除します。

Pandoc 変換前の最初の sed コマンド ラインは次のようになります。

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

次に、いつものように source.i.md で Pandoc を使用して、source.tex を作成します。2 番目の sed は次のように実行します。

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

Makefile のすべてを自動化して、テーブル定義などの変更を 1 ステップで行えるようにしました。一見すると、このアプローチはうまく機能します (beamer クラスを使用した列定義でテストされています)。

この小さな sed スクリプトを使用すると、Pandoc の優れた機能をすべて使用できます。エスケープされるか、Markdown の大部分を囲むようになる TeX および LaTeX コマンドを mmd コメントするだけです。

于 2013-05-03T19:32:53.830 に答える
2

LaTeX/Beamer へのマークダウンを処理できる FletcherPenney MultiMarkdown を使用できます。マルチマークダウンは Pandoc に比べて機能が少ない。ただし、特に LaTeX を使用する場合は、LaTeX コードを HTML コメントの Markdown に直接埋め込むことができるという利点があります。

コードは次のようになります。

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

        >>> some python code


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

![](A_generated_image.pdf)

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

私にとって、この解決策はうまくいきます。優れたエディタ (例: Scrivener、Sublime Text) を使用すると、すべてのコメントなしでラテックス コードを記述し、編集後にそれらを検索/置換できます。さらに、Multimarkdown でのメタデータ サポートははるかに柔軟であるため、プレゼンテーションを簡単にカスタマイズできます。

それまでの間、Pandoc チームがこの問題の解決策を提供してくれることを願っています。変換/エスケープせずに、マークダウン ドキュメント全体に小さな LaTex コード パーティクルを埋め込みたいユーザーがいると思います。

于 2013-04-24T15:00:59.257 に答える