2016-10-12 3 views
0

1つのマークダウンファイルを異なる出力(HTML、EPUB、LaTeXなど)でコンパイルしようとしています。ドキュメントにはMarkdown固有のフォーマットが必要です。つまり、オリジナルは移植性がありません。しかし、私が必要とする機能は3つの出力形式すべてで可能です。選択した出力に応じてマークダウンファイルを編集できますか?

私が検討している解決策は、元のファイルにカスタムマークアップを付けて、Pandocをフィードするためにさまざまなアウトパットを作成するためにsed(またはアドバイスする他のプリプロセッサ)を使用して処理することです。例えば

<sig>Placename, 2016</sig>

は、HTMLやEPUBの両方で

<div class="signature">Placename, 2016</div>

になるが、ラテックス中に

\signature{Placename, 2016}

でしょう。

<quote>To be or not to be</quote><qaut>Shakespeare</qaut>

これは、HTMLやEPUB

<div class="epigraph"><quote>To be or not to be</quote>Shakespeare</div>

と単にLATで

\epigraph{To be or not to be}{Shakespeare}

になりますeX。

置換は大変難しくないようですが、(もちろんMakefile内から)Pandocを呼び出す前に、これらの置換の複数のインスタンスを処理する方法についてアドバイスをしたいと思います。


私はRAMディスクを使用してPandocにパイプに編集したファイルを好むだろうが、私はRAMに私の/ tmpを持つために/ tmpに一時ファイルを保存することは、私にとっては同じになります。

+0

の可能性のある重複のように見えますhttp://stackoverflow.com/questions/19590980/multiple-replacements-with-one-sed-command – tripleee

+0

をご覧ください。https://randomdeterminism.wordpress.com/2012/06/01/how-i-stopped- worst-and-started-using-markdown-like-tex/ – mb21

答えて

0

あなたはSEDと、パターン置換を使用できます

sed -i -e 's/pattern1\(pattern_to_keep\)pattern2/text1\1text2/g' filename 

このコマンドは、ファイル名で行pattern1pattern_to_keeppattern2を変更し、text1pattern_to_keeptext2に変更します。 sedコマンド(または正規表現と置換を有する他のツール)\1などの番号が付けバッファに各\(...\)部分を入れて、\2

だから、ラテックス形式にsigquoteを変換するには、あなたのメイクファイルは、次のようになります。また

file.latex: file 
     sed -e 's/<sig>\(.*\)<\/sig>/\\signature{\1}/g' \ 
      -e 's/<quote>\(.*\)<\/quote>.*<qaut>\(.*\)<\/qaut>/\\epigraph{\1}{\2}/g' $< > [email protected] 

すべてのsedルールを別のスクリプトに入れることができます。この場合、メイクファイルの意志が

file.latex: file script 
     sed -f script $< > [email protected] 


script: 
     @echo 's/<sig>\(.*\)<\/sig>/\\signature{\1}/g' > [email protected] 
     @echo 's/<quote>\(.*\)<\/quote>.*<qaut>\(.*\)<\/qaut>/\\epigraph{\1}{\2}/g' >> [email protected] 

(ノート、ここで私達はただのMakefileからスクリプトファイルを作成します。大きなスクリプトの場合、それはMakefileをオーバーロードしないとは別に/ストアスクリプトを作成しても意味が)

+0

'cp'に続いて' sed -i'を使うことは無駄であり、Makefileでは非常にお勧めできません。単純に 'sed -e things -e more $ < > $ @' – tripleee

+0

が一般的ですが、1つのファイルに対して異なる置換数を適用する必要があります。確かに、sedスクリプトファイルを使って一度にいくつかのルールを適用することができます。変更の大きなセットについては、本当に良いでしょう。コメントはスクリプトの使用法で更新されます。 –

+1

あなたはこれを不必要に複雑にしています。 'sed -e '% \(。* \)%\\署名{\ 1}%g' -e '% \(。* \)。* \(。* \)% \\ epigraph {\ 1} {\ 2}%g '$ < > $ @ 'はこれを1行で実行します。明確化のために、 – tripleee

関連する問題