在 Python 语言中,当参数以“Error”结尾时,内联列表会崩溃

在 Python 语言中,当参数以“Error”结尾时,内联列表会崩溃

嗯,说实话这是我见过的有关 LaTeX 的最奇怪的事情。

我的一个朋友遇到了一个我只能描述为错误的问题listings;它可以解决吗?

请参阅下面带有错误的最小示例。

\documentclass{article}

\usepackage{listings}

\lstMakeShortInline[language=Python]"

\begin{document}
"ThisIsAFakeError".
"ThisIsAFakeErro".
\end{document}

错误信息:

ERROR: Missing } inserted.

--- TeX said ---
<inserted text> 
                }
l.8 "ThisIsAFakeError".

--- HELP ---
TeX has become confused. The position indicated by the error locator
is probably beyond the point where the incorrect input is.


ERROR: Undefined control sequence.

--- TeX said ---
\lst@eaten ->".

l.8 "ThisIsAFakeError".

--- HELP ---
TeX encountered an unknown command name. You probably misspelled the
name. If this message occurs when a LaTeX command is being processed,
the command is probably in the wrong place---for example, the error
can be produced by an \item command that's not inside a list-making
environment. The error can also be caused by a missing \documentclass
command.

答案1

通过比较"Ej"(有效)和"Er"(无效)\tracingall可以发现这里出了问题

\lst@IfNextChars@@ #1#2\relax #3->\def \lst@tofind {#2}\lst@lAddTo \lst@eaten {
#3}\ifx #1#3\ifx \lst@tofind \@empty \let \lst@next \@tempa \else \let \lst@nex
t \lst@IfNextChars@ \fi \expandafter \lst@next \else \expandafter \@tempb \fi 
#1<-"
#2<-""
#3<-"

其中"被用作分隔标记和被测试的标记......

解决方法是使用其他方法,例如^

\documentclass{article}

\usepackage{listings}

\lstMakeShortInline[language=Python]^

\begin{document}
^ThisIsAFakeError^.
^ThisIsAFakeErro^.

\end{document}

答案2

如果“你的朋友”(是的! )在文件中:p查找该Python语言的定义listings列表文件,“他/她”将看到该"字符被定义为该语言的字符串分隔符:

morestring=[b]",%

因此,当“你的朋友”试图将该字符定义为内联 Python 代码的简写时,TeX 会感到困惑也就不足为奇了。一个字符不能同时充当内联代码的简写和分隔符,因为listings无法知道该字符的给定出现应该实现哪种功能。

您应该告诉“您的朋友”选择一个不太可能出现在 Python 代码中的字符,例如反引号。有关错误的具体信息,请参阅 David 的回答。

相关内容