当“{”或“}”位于模板的静态部分时,如何执行Golang模板?

时间:2013-05-23 07:03:46

标签: go latex go-templates

我的问题是,我想构建一个字母生成器,它首先从用户输入构建一个latex文件,然后通过latex将其编译为PDF。

模板包含多行,如下所示:

\setkomavar{signature}{{{.Name}}}

latex部分为\setkomavar{signature}{},而template部分来自{{.Name}}

当我尝试加载模板时,会抛出此错误:

恐慌:模板:letter.tmpl:72:命令中的意外“}”

是否有帮助解析器处理这种情况的技巧?

提前致谢,

蒂诺

4 个答案:

答案 0 :(得分:14)

使用Template.Delims将分隔符设置为一些非冲突文本。 {{}}只是默认值,此方法允许选择其他分隔符。

替代方法:在您希望使用latex {}的模板中,您可以插入一些安全文本,例如说#()#,然后制作从模板中输出的“全局”替换。然而,设置分隔符更容易IMO,如果重要的话,可能更有效率。

答案 1 :(得分:0)

我之前通过创建模板函数来执行此操作:

func texArg(s interface{}) string {
    return fmt.Sprintf("{%v}", s)
}

我使用template.Funcs注册为arg。然后在我的模板中我有:

\textbf{{.Name | arg}}

我认为@ zzzz上面的答案更好,因为当你需要筑巢时,它会分崩离析,但我想我会把它留在这里以寻找替代方法。

答案 2 :(得分:0)

我的adhok解决方案是:

\barcode{{print "{" .Barcode}}}

答案 3 :(得分:0)

更好的解决方案实际上是使用内置的空白运算符,例如:

\setkomavar{signature}{ {{- .Name -}} }

开头和结尾的-将删除该令牌与下一个非模板令牌之间的空格。

希望有所帮助,请参阅the docs了解更多详情