通常のプリプロセッサは余分なスペースを追加します。

通常のプリプロセッサは余分なスペースを追加します。

フォローアップこの記事私は使う基本計画マークダウンパーサーのサポートを提供読書いくつかのマクロで。残念ながら、gppすべてのスペースが結果にコピーされるようです。

たとえば、ファイルを考えます。test.md

% Title
% Raphael
% 2012

\lorem \ipsum

そしてtest.gpp

\define{lorem}{Lorem}
\define{ipsum}{ipsum...}

gpp -T --include test.gpp test.mdYieldを呼び出します。

<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;

今、その裏面には不快感が叩かれています。

関連情報