フォローアップこの記事私は使う基本計画マークダウンパーサーのサポートを提供読書いくつかのマクロで。残念ながら、gpp
すべてのスペースが結果にコピーされるようです。
たとえば、ファイルを考えます。test.md
% Title
% Raphael
% 2012
\lorem \ipsum
そしてtest.gpp
\define{lorem}{Lorem}
\define{ipsum}{ipsum...}
今gpp -T --include test.gpp test.md
Yieldを呼び出します。
<empty line>
% Title
% Raphael
% 2012
Lorem ipsum...
これがpandoc
私が使用している場合、追加の改行は実際に定義間の改行です。
\define{lorem}{Lorem}@@@
\define{ipsum}{ipsum...}
追加オプションを使用すると+c "@@@" "\n"
空白行が消えます。しかし、このソリューションは見た目にはよくないだけでなく、2つの致命的な欠陥も抱えています。
まず、@@@
ソースファイルのコメントマークと見なされます。@@@
Markdownは禁止されていないため(@@@
または選択した他の区切り文字)、ソースファイルに表示されたときに意図しない結果が発生する可能性があります。
第二に、適切なインデントのために、行の先頭のスペースをカバーしません。例えば、
\define{lorem}{@@@
\if{a == a}@@@
![some image](test.png)@@@
\endif@@@
}@@@
これらすべてのイメージタグは4つのスペースでインデントされ、指定されたとおりにpandoc
コードフォーマットされます。
それではgpp
、ファイルを1行に書き込んだり、インデントしたりせずに、見苦しい行末のコメントを挿入するよりも、余分なスペースがどこにでも広がるのgpp
を防ぐために何ができますか?
答え1
すべてのゴミがインクルードファイルにあると仮定すると、文書が開始される前にそれを後処理することができます。
テスト.gpp:
\define{lorem}{Lorem}
\define{ipsum}{ipsum...}
----- cut here ------
次に、次のようにします。
gpp -T --include test.gpp test.md | sed '1,/----- cut here ------/d'
(gpp
標準出力に出力しますか?それ以外の場合はsed
出力ファイルから実行できます。)
答え2
1つの可能性は、含まれているマクロファイルを前処理して1行に縮小することですsed
(結合するamsアプローチ、このmakefileフラグメントは問題を解決します。
sed 's/^\s*//;s/\s*?$$//;H;$$!d;:e;x;/^$$/d;s/\n//g' $(MACROFILE) > $(BUILDPATH)/$(MACROFILE);
echo "$(MFENDMARKER)" >> $(BUILDPATH)/$(MACROFILE);
gpp -T -x -Dtarget=pdf --include $(BUILDPATH)/$(MACROFILE) $(MAINFILE) | \
sed '1,/$(MFENDMARKER)/d' | \
pandoc -S -R --toc -f markdown -o $(DISTPATH)/$(NAME).pdf;
今、その裏面には不快感が叩かれています。