Rap*_*ael 5 compiling whitespace markdown
继本文之后,我使用GPP为 Markdown 解析器pandoc提供了一些宏。不幸的是,gpp似乎将所有空格复制到结果中。
例如,考虑文件 test.md
% Title
% Raphael
% 2012
\lorem \ipsum
Run Code Online (Sandbox Code Playgroud)
和 test.gpp
\define{lorem}{Lorem}
\define{ipsum}{ipsum...}
Run Code Online (Sandbox Code Playgroud)
现在,调用gpp -T --include test.gpp test.md收益
<empty line>
% Title
% Raphael
% 2012
Lorem ipsum...
Run Code Online (Sandbox Code Playgroud)
这打破了pandoc. 额外的换行符确实是定义之间的换行符;如果我使用
\define{lorem}{Lorem}@@@
\define{ipsum}{ipsum...}
Run Code Online (Sandbox Code Playgroud)
使用额外选项+c "@@@" "\n",空行消失了。但是这种变通方法不仅丑陋,而且还有两个致命的缺陷。
首先,它也将其视为@@@源文件中的注释指示符。正如@@@Markdown 中没有禁止的那样,当@@@(或任何其他选择的分隔符)发生在源文件中时,这可能会产生意想不到的后果。
其次,由于适当的缩进,它不会覆盖行开头的空格。例如,
\define{lorem}{@@@
\if{a == a}@@@
@@@
\endif@@@
}@@@
Run Code Online (Sandbox Code Playgroud)
将导致所有此类图像标签缩进四个空格,从而pandoc将其排版为代码(如指定)。
因此,如果没有gpp在一行中编写文件或引入丑陋的行尾注释而不是缩进,您可以做些什么来防止gpp在整个地方涂抹多余的空格?
假设所有垃圾都在包含文件中,因此在文档开始之前,您可以对其进行后处理:
测试.gpp:
\define{lorem}{Lorem}
\define{ipsum}{ipsum...}
----- cut here ------
Run Code Online (Sandbox Code Playgroud)
然后做:
gpp -T --include test.gpp test.md | sed '1,/----- cut here ------/d'
Run Code Online (Sandbox Code Playgroud)
(是否gpp输出到标准输出?否则仅sed在输出文件上运行。)