我使用markdown和m4的组合来生成三个不同版本的文档,具体取决于开头给出的标志。我们称之为金牌,银牌和铜牌。
我遇到的问题是,如果我的ifdef语句中有一个出现逗号的部分,则m4认为该部分的其余部分为false。
ifdef(`GOLDANDSILVER',dnl
## Here's a subsection header
### Subsubsection about this, that, and the other thing
Aren't examples fun? Here's some punctuation, failure, and misfortune.
)dnl
有趣的是,它在子小节中没有失败,但在正文中失败了。
我现在的,丑陋的解决方案是使用一个虚拟的逗号'这可以通过管道传输,并由sed。取代。
ifdef(`GOLDANDSILVER',dnl
## Here's a subsection header
### Subsubsection about thisREPLACE_ME_COMMA thatREPLACE_ME_COMMA and the other thing
Aren't examples fun? Here's some punctuationREPLACE_ME_COMMA failureREPLACE_ME_COMMA and misfortune.
)dnl
我正在寻找一种更清洁,最好是仅限m4的解决方案,这使我能够拥有","在我的ifdef陈述中。
我通过反复试验学到了什么:
答案 0 :(得分:2)
最好的想法是使用字符串分隔符。默认字符串分隔符不是最佳解决方案(我认为) - 但您可以使用success()
更改它们。
您可以更改评论分隔符(默认为changequote
和换行符) - 甚至可以禁用它们。
我认为以下内容对你有好处:
#
请注意ifdef(`GOLDANDSILVER',changequote(XXX,YYY)dnl
XXX## Here's a subsection header
### Subsubsection about this, that, and the other thing
Aren't examples fun? Here's some punctuation, failure, and misfortune.YYY changequote()
)dnl
:引号以changequote(XXX,YYY)
开头,以XXX
结尾。在这种情况下,以YYY
开头的行不是注释,因为它是字符串的一部分。请注意#
:它会恢复默认的字符串分隔符。
changequote()