如何在Pandoc模板中用变量指定要引入的partial文件名?
动态引入Partial文件的解决方法
你遇到的问题是模板渲染顺序导致的——变量替换会先于partial调用解析,所以嵌套写法会直接输出变量值加后缀,而不会触发partial加载。可以用以下两种方式解决:
方法一:直接使用$partial()函数结合变量
如果你的模板引擎支持$partial()函数(如Pandoc标准模板),可以直接把变量作为参数传入,同时拼接文件后缀(如果变量里没包含的话):
$if(frontmatterFile)$ $partial(frontmatterFile + ".dtpl")$ $else$ $partial("frontmatter_short.dtpl")$ $endif$
如果frontmatterFile变量已经包含.dtpl后缀,就去掉+ ".dtpl"部分。
方法二:定义模板宏封装加载逻辑
如果需要复用这个加载逻辑,可以先定义一个宏,再传入变量调用:
$def(load_frontmatter)$ $partial($1.dtpl)$ $enddef$ $if(frontmatterFile)$ $load_frontmatter(frontmatterFile)$ $else$ $partial("frontmatter_short.dtpl")$ $endif$
这样模板会先解析变量值,再把它作为partial的文件名去加载对应的文件,就能正常渲染partial内容了。
内容的提问来源于stack exchange,提问作者user855443
相关产品推荐
相关产品推荐

