带有三个大括号的 jinja2 不包括额外的白色 space
jinja2 with three curly braces without including an extra white space
如果插入白色 space,Jinja2 会正确呈现三个并排的大括号,如下例 1 所示。但是,如果没有白色 space,则会抛出异常,如下面的案例 2。白色 space 在这里用红色条表示。
是否可以渲染不包含白色 space 的输出,即渲染类似 \textbf{Hello, World!}
的输出?
下面列出了一个python代码示例
from jinja2 import Template
template_1 = Template(r"\textbf{ {{msg}} }")
#template_2 = Template(r"\textbf{{{msg}} }") # Throws an exception
msg = "Hello, World!"
out_1 = template_1.render({'msg':msg})
#out2 = template_2.render({'msg':msg}) # FAILS!
print(out_1)
输出
\textbf{ Hello, World! }
我想要的是
\textbf{Hello, World!}
我发现的最佳解决方案是使用 {% raw %}
标签只包含一个花括号:
template_1 = Template(r"\textbf{% raw %}{{% endraw %}{{msg}}{% raw %}}{% endraw %}")
这将呈现
\textbf{Hello, World!}
随心所欲。
对 pedro-juan 的回答略有改进:
\hspace{0pt}
是一种非 unicode 乳胶方式,用于插入“零宽度 Space”(unicode U+200B),它说服解析器不处理“{{{”作为导致错误的东西。
Template(r"\textbf{% raw %}{{% endraw %}{{msg}}
应该产生与
相同的输出
Template(r"\textbf\hspace{0pt}{{msg}}")
也可以更改所有 jinja2 标记,这可能会使某些语法高亮器更容易避免被不匹配的花括号对混淆。 (至少我的 vim 用 latex-jinja2 做的工作不太体面)(参见 this article)
例如
latex_jinja_env = jinja2.Environment(
block_start_string = '\BLOCK{',
block_end_string = '}',
[...]
您是否尝试过在 {{ 和 }} 之前添加“-”?
template_2 = Template(r"\textbf{ {{-msg-}} }")
这将删除空格。因此,您可以将 single/double 大括号之间的空格保留到模板中,Jinja2 在渲染期间将其删除。
如果插入白色 space,Jinja2 会正确呈现三个并排的大括号,如下例 1 所示。但是,如果没有白色 space,则会抛出异常,如下面的案例 2。白色 space 在这里用红色条表示。
是否可以渲染不包含白色 space 的输出,即渲染类似 \textbf{Hello, World!}
的输出?
下面列出了一个python代码示例
from jinja2 import Template
template_1 = Template(r"\textbf{ {{msg}} }")
#template_2 = Template(r"\textbf{{{msg}} }") # Throws an exception
msg = "Hello, World!"
out_1 = template_1.render({'msg':msg})
#out2 = template_2.render({'msg':msg}) # FAILS!
print(out_1)
输出
\textbf{ Hello, World! }
我想要的是
\textbf{Hello, World!}
我发现的最佳解决方案是使用 {% raw %}
标签只包含一个花括号:
template_1 = Template(r"\textbf{% raw %}{{% endraw %}{{msg}}{% raw %}}{% endraw %}")
这将呈现
\textbf{Hello, World!}
随心所欲。
对 pedro-juan 的回答略有改进:
\hspace{0pt}
是一种非 unicode 乳胶方式,用于插入“零宽度 Space”(unicode U+200B),它说服解析器不处理“{{{”作为导致错误的东西。
Template(r"\textbf{% raw %}{{% endraw %}{{msg}}
应该产生与
相同的输出Template(r"\textbf\hspace{0pt}{{msg}}")
也可以更改所有 jinja2 标记,这可能会使某些语法高亮器更容易避免被不匹配的花括号对混淆。 (至少我的 vim 用 latex-jinja2 做的工作不太体面)(参见 this article)
例如
latex_jinja_env = jinja2.Environment(
block_start_string = '\BLOCK{',
block_end_string = '}',
[...]
您是否尝试过在 {{ 和 }} 之前添加“-”?
template_2 = Template(r"\textbf{ {{-msg-}} }")
这将删除空格。因此,您可以将 single/double 大括号之间的空格保留到模板中,Jinja2 在渲染期间将其删除。