`listings`、`babel` 和 `zref` 的问题:

`listings`、`babel` 和 `zref` 的问题:

[清单 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}

相关内容