jinja 模板引擎语句与 {% 冲突

jinja 模板引擎语句与 {% 冲突

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 模板设计器文档在“转义”部分中说:

输出文字变量分隔符({{)的最简单方法是使用变量表达式:{{ '{{' }}

“表达式/文字”部分指出:

两个双引号或单引号之间的所有内容都是字符串。

{{ '{%' }}对你来说不起作用吗?

相关内容