[清单 1.8d]
[zref 2.32]
[babel 3.54]
我花了一个晚上将我的真实示例简化为以下代码。
\documentclass{scrartcl}
\usepackage{listings}
\usepackage[ngerman]{babel}
\usepackage{zref}
\begin{document}
\makeatletter
\zref@newlist{foo}
\zref@newprop{text}{??}
\zref@addprop{foo}{text}
\zref@setcurrent{text}{">}
\zref@labelbylist{1}{foo}
\vspace*{20cm}
\begin{lstlisting}
foo
\l
\r
\end{lstlisting}
\end{document}
它失败了
[1
! Incomplete \iffalse; all text was ignored after line 23.
<inserted text>
\fi
l.23 \l
这个问题肯定是这个问题:如果我">
用»
示例替换,效果就很好。
希望这份报告能帮助其他人找到解决方案——除了“在 xyz 版本中修复”之外,我并不指望这个问题能有答案:-)
答案1
这与其他问题中的问题相同:listings 重新定义"
,当此重新定义在 shipout 时处于活动状态时,它会影响文本的编写(您也可以使用普通 \label 获得类似的结果,它并不特定于 zref)。例如,您可以保护它:
\documentclass{scrartcl}
\usepackage{listings}
\usepackage[ngerman]{babel}
\usepackage{zref}
\begin{document}
\makeatletter
\zref@newlist{foo}
\zref@newprop{text}{??}
\zref@addprop{foo}{text}
\zref@setcurrent{text}{\protect">}
\zref@labelbylist{1}{foo}
\vspace*{20cm}
\begin{lstlisting}
foo
\l
\r
\end{lstlisting}
\end{document}