![jinja 模板引擎语句与 {% 冲突](https://linux22.com/image/442225/jinja%20%E6%A8%A1%E6%9D%BF%E5%BC%95%E6%93%8E%E8%AF%AD%E5%8F%A5%E4%B8%8E%20%7B%25%20%E5%86%B2%E7%AA%81.png)
tldr/解决方案:jinja 模板引擎默认语句定义为,{%,%}
它与行末的 %(根本不是注释)和括号组合冲突{
。最简单的解决方案就是将默认语句重新定义为其他内容。在 c++ 库中,{{inja}}
它是命令:env.set_statement("{~", "~}");
例如
和帮助我在地址字段和标题之间添加了框。现在,我正在使用jinja
样式模板引擎用数据填充 tex 文件。这意味着我{%
的 tex 模板中不能有任何组合。所以我删除了所有我能找到的%
a 后面的内容。但在或行{
之后删除它会导致另外两个坏框警告。奇怪的是,如果我留下这样的空行\setkomavar{firsthead}{%
\usekomafont{pageheadfoot}{%
\setkomavar{firsthead}{
\usekomafont{pageheadfoot}{
\parbox{\useplength{firstheadwidth}}{
除了我首先收到的警告之外,没有其他警告。这里的解决方案是什么?在开头后面这样的评论是什么意思{
?
完整代码如下:
\documentclass[
fontsize=11pt,
parskip=half,
firstfoot=off
]{scrlttr2}
%
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lmodern}
\usepackage{graphicx}
\usepackage{xltabular}
\usepackage[textwidth=\useplength{firstfootwidth}]{geometry} %showframe
%\usepackage[absolute,overlay,quiet]{textpos} %option: showboxes
\usepackage{blindtext}
\usepackage[official]{eurosym}
\renewcommand*\familydefault{\sfdefault}
%\renewcommand*{\raggedsignature}{\raggedright} % Signatur wird bündig gesetzt
%---------------------------------------------------------------------------
% Absender
%
\newcommand{\mVorname}{iiiiiiii elelelelll GmbH}
\newcommand{\mNachname}{\& Co. KG}
\newcommand{\mStrasse}{Ellllllllllllg. 1}
\newcommand{\mStadt}{Sssss}
\newcommand{\mPLZ}{00000}
\setkomavar{date}{\today}
\setkomavar{fromname}{\mVorname{}~\mNachname{}} % Name
\setkomavar{fromaddress}{\mStrasse{}\\{}\mPLZ{}~\mStadt{}} % Adresse
\setkomavar{location}{\raggedright
Versandanschrift:\\
\vfill
TOM Tompson \\
Blablablub Str. \\
01011 Blablubbing \\
Blabistan \\
Telefon
}
\setplength{locvpos}{4.75cm}
\setplength{locheight}{3.5cm}
\setplength{locwidth}{7.5cm}
\setplength{firstfootvpos}{250mm}
\setplength{firstheadvpos}{30mm}
\setplength{refvpos}{9cm}
\setplength{subjectvpos}{\useplength{refvpos}+1.5cm}
%\LoadLetterOption{visualize}% loads visualize.lco to visualize boxes
%\showfields{head,address,location,refline,foot}% show
\setkomavar{firsthead}{%
\usekomafont{pageheadfoot}{%
\parbox{\useplength{firstheadwidth}}{
\begin{tabular}[t]{@{}l@{\hskip3pt}l}
\multicolumn{2}{@{}l}{Xxxxxxxxxxxxxx} \\
Tel. & +00 (0)0000 000-000 \\
Fax & +00 (0)0000 000-000 \\
\multicolumn{2}{@{}l}{www.aaaaaaaa.de}
\end{tabular}%
\hfill
\begin{tabular}[t]{l@{\hskip3pt}l}
\multicolumn{2}{l}{Xxxxxxxxxxx} \\
Tel. & +00 (0)0000 000-000 \\
Fax & +00 (0)0000 000-000 \\
\multicolumn{2}{l}{[email protected]}
\end{tabular}%
\hfill
\begin{tabular}[t]{l@{\hskip3pt}l}
\multicolumn{2}{l}{Xxxxxxxx} \\
Tel. & +00 (0)0000 000-000 \\
Fax & +00 (0)0000 000-000 \\
\multicolumn{2}{l}{[email protected]}
\end{tabular}%
\hfill
\begin{tabular}[t]{l@{\hskip3pt}l}
\multicolumn{2}{l}{Xxxxxxx} \\
Tel. & +00 (0)0000 000-000 \\
Fax & +00 (0)0000 000-000 \\
\multicolumn{2}{l}{[email protected]}
\end{tabular}%
\hfill
{\tiny
\begin{tabular}[t]{l@{}}
nnnnnnnn Vvvvvvv \\
19633\\
2929299\\
Aoao
\end{tabular}%
}
}}}
%redifine pagemark to show current page of all pages
\renewcommand*\pagemark{
\usekomafont{pagenumber}{\pagename~\thepage~von~\letterlastpage}%
}
\setkomafont{pageheadfoot}{\scriptsize}
\usepackage{scrlayer-scrpage}% <- sets pagestyle scrheadings automatically
\DeclareNewLayer[
foreground,
textarea,
voffset=\useplength{firstfootvpos},
hoffset=\dimexpr.5\paperwidth-.5\useplength{firstfootwidth}\relax,
width=\useplength{firstfootwidth},
mode=picture,
contents=\putUL{\raisebox{\dimexpr-\height}{\usekomavar{firstfoot}}}
]{likefirstpage.foot}
\AddLayersToPageStyle{scrheadings}{likefirstpage.foot}
\clearpairofpagestyles
\DeclareNewLayer[
background,
page,
addvoffset=20pt+.3333em,
addhoffset=47pt+.3333em,
addwidth=-47pt-.6666em,
addheight=-20pt-.6666em,
mode=picture,
contents={
\putUR{\raisebox{\dimexpr-\height}{\makebox[0pt][r]{\includegraphics[height=18mm]{example-image}\hspace{10pt}}}}% reichelt2.png
\putUL{\raisebox{\dimexpr-\height}{\includegraphics[height=15mm]{example-image}}}%
\putLR{\makebox[0pt][r]{\includegraphics[height=13mm]{example-image}}}%
}
]{logos}
\AddLayersToPageStyle{@everystyle@}{logos,likefirstpage.foot}% <- add likefirstpage.foot to @everystyle@
%\AtBeginLetter{\flushbottom}
\begin{document}
%recipient
\begin{letter}{
Max Musterkunde \\
Teststraße 2 \\
55555 Teststadt \\
Schweiz \\
}
\removereffields %<- delete default order of the predifined variables
\setkomavar{invoice}[Rechnungsnummer]{1234567}
\setkomavar{customer}[Kundennummer]{ABCDEFP}
\newkomavar[Bestellnummer]{ordernr}%<-- custom variables
\setkomavar{ordernr}{9082081895889082}
\addtoreffields{invoice} %<-- custom order of variables
\addtoreffields{customer}
\addtoreffields{ordernr}
%
%\setkomavar{title}{Titel}
\setkomavar{subject}{Subject}
%
\opening{}
%
{\footnotesize
\begin{xltabular}{\textwidth}{@{\hskip0pt}r p{3.1cm} X r r r@{\hskip0pt}}
M & A & B & W & E & G \\ \hline
\endfirsthead
\multicolumn{2}{l}{A} & \multicolumn{3}{l}{A} \\
\multicolumn{2}{l}{B} & \multicolumn{3}{l}{B} \\ \\
M & A & B & W & E & G \\ \hline
\endhead
\hline
\multicolumn{6}{l}{Bla}
\endlastfoot
One & abcdef & ghjijklmn & 123.456778 & 5 & 6\\ *[\fill]
\end{xltabular}
}
%\blindtext[10]
\end{letter}
\end{document}
答案1
{%
我赞同关于逃避诸如和 之类的组合的评论{{
。即使您可以避免该{%
组合,也可能无法避免所有其他组合。
回答你的最后一个问题:
根据 TeXbook 第 8 章,{
在下一行非空的行尾,其行为类似于{
后跟一个空格,后跟下一行的内容减去前导空格。所以
\setkomavar{firsthead}{
\usekomafont{pageheadfoot}{
相当于
\setkomavar{firsthead}{ \usekomafont{pageheadfoot}{
并且也许之前的空格\usekomafont
会引起警告。
但如果下一行是空的,那么除了多余的空格之外,还会有一个额外的\par
(段落结尾),所以
\setkomavar{firsthead}{
\usekomafont{pageheadfoot}{
相当于
\setkomavar{firsthead}{\par\usekomafont{pageheadfoot}{
最后%
抑制了多余的字符,所以
\setkomavar{firsthead}{%
\usekomafont{pageheadfoot}{
相当于
\setkomavar{firsthead}{\usekomafont{pageheadfoot}{
答案2
在 TeX 中,在标记化过程中(!!!),您也可以通过^^
-notation 访问字符。
即,
%
您可以写^^e
或而不是^^25
。{
您可以写^^;
或而不是^^7b
。- 相反,
}
您可以写写^^=
或^^7d
。
模式是
^^⟨character whose code-point-number +/- 64 yields the code-point-number of the character to denote⟩
(如果字符的代码点号在 64..127 范围内,则进行减法。如果字符的代码点号在 0..63 范围内,则进行加法。)
或者
^^⟨lowercase-hexadecimal-representation of the number of the code-point of the character to denote⟩
。
因此,在 .tex 文件中,您{%
可以写入{^^e
或{^^25
或^^;%
或^^;^^e
或^^;^^25
或^^7b%
或。^^7b^^e
^^7b^^25
但是在逐字模式下,即使用\verb|..|
或\begin{verbatim}...\end{verbatim}
^^
符号之类的操作时,符号是关闭的。
术语“代码点编号”/“代码点的编号”是指相应字符在 TeX 内部字符编码方案中的编号,对于传统的 TeX 引擎来说是 ASCII,而对于基于 XeTeX/LuaTeX 的 TeX 引擎来说是 unicode(其中 ASCII 是其严格子集)。
广告“这意味着我的 tex 模板中不能有任何 {% 组合。”
你确定吗?
Jinja 模板设计器文档在“转义”部分中说:
输出文字变量分隔符(
{{
)的最简单方法是使用变量表达式:{{ '{{' }}
“表达式/文字”部分指出:
两个双引号或单引号之间的所有内容都是字符串。
{{ '{%' }}
对你来说不起作用吗?