使用 lstlisting 时出现“不完整 \iffalse;第 x 行之后的所有文本均被忽略”

使用 lstlisting 时出现“不完整 \iffalse;第 x 行之后的所有文本均被忽略”

我有一个 LaTeX 代码,它给出了错误Incomplete \iffalse; all text was ignored after line 43. }。虽然此代码可能看起来有点大,但从几乎任何地方 (!!!) 删除一个字母 (!) 都会导致代码编译。

\documentclass{article}
\usepackage{geometry}
\usepackage[utf8]{inputenc}
\PassOptionsToPackage{defaults=hu-min}{magyar.ldf}
\usepackage[magyar]{babel}

\usepackage{listings}
\begin{document}
    \begin{center}
        {\LARGE\textbf{C}}

        {\Large G}

        1
    \end{center}
    A
    \section{}
    A C++ többek között a  is híres. Andrei Alexandrescu azt nyilatkozta, hogy amikor a Facebooknál a backend kódján 1\%ot sikerült optimalizálni, b mint 10 évnyi fizetését spórolta meg a cégnek végrehn a  nyelvekkz

    A C++-szal kapcsolatban az egyik gyakori tévhit, hogy egy alacsony szintű nyelvről van szó. Bár a nyelv lehetőséget biztosít arra, hogy n hozzáférjostalmbbször a  tünteeket az absztrakciókat a prítás során.

    A C++ filozófiájának fontos eleme, hogy ha nem használunk egy adott nyelvi eszközt, akkor annak ne legyen hatása a program teljesítményére.

    Fontos, hogy a C++ alapvetően nem egy objektum orientált nyelv. Bár számos nyelvi eszköA funkcráni. 

    \medskip
    Cél: a tárgy során kialakítani a nyelvvel kapcsolintuíciót, ami segítéségével elkerülhetőek alapvető hibák is. Az előzménytárgyakban az egyszerűség kedvéért gyakran féligazságok hangzottak el, ezeket kell rakni.
    \subsection{+?}
    Alapvetően a nyelv kéllis szabváannak implementációiból ók + szabványkönyvtárak).  A szabv a nyelv nyeát, valamint a szemantikát: mtenek a duló programok (nem deEmellett a szabvány definiálja a szabványkönyvtárat is, amit os C++ fordító mellé szállítaz első C++ szabvt. További szabványai: 

    A szabvány
    \subsection{}
    Ez a jegyzet feltételezi, hogy az Olvasó elvégezte a c. tárgyat, és a Programozás tárgyat vagy ezzel párhuzamosan végzi, vagy mljesítette. Így unk arra, hogy az Olvasó tisztáb és, létre tud hozni és meg is tudja hívni azokat, ké egy helyes  kódot lefordítani (még lamint egyszerűbb algoritmusokat is tud
    \section{}
    \begin{lstlisting}


;

i
{

}
    \end{lstlisting}
\end{document}

我完全被困在了这一步。这是一本 110 多页的书的一部分,即使我使用了一些技巧,比如在这里或那里删除几个单词来让它编译,任何超过这一步的代码的添加或删除都可能导致代码无法再次编译。

完整代码:http://people.inf.elte.hu/szelethus/LaTeX/cpp/01gy_cpp/01gy_cpp.tex 问题出现在包含 Hello World 程序(第一个代码片段)的代码片段附近。

答案1

magyar.ldf 主动阻止\initiate@active@char写入\AtBeginDocument会向 aux 文件添加 catcode 更改的代码。

这会导致在\subsection{+?}将其写入辅助文件时,列表中的代码会受到干扰。(我没有尝试找出详细信息。在我看来,magyar.ldf 是一个相当糟糕的语言文件示例,它修补了各种内部命令,并且可能与许多其他东西不兼容)。

您可以尝试通过在序言中添加以下内容来解决该问题。

\usepackage[magyar]{babel}

\makeatletter
\expandafter\let\csname active@char\string?\endcsname\relax
\expandafter\let\csname active@char\string!\endcsname\relax
\expandafter\let\csname active@char\string:\endcsname\relax


\initiate@active@char{?}
\initiate@active@char{!}
\initiate@active@char{:}
\makeatother

答案2

虽然我不得不承认我并不真正理解导致此错误的原因(我的行为与问题中描述的行为相同),但根据 Ulrike Fischer 的回答以及我已经掌握的一些其他“黑客”来修复 中的连字符lstlistings,我发现以下代码也可以修复此问题。它的优点是在 的范围内有明确的定义lstlisting,而不会以任何方式影响文档的其余部分:

\lstset{ % ... whatever was already there ...
        literate=% ... any other literates already there ...
                 {!}{!}1
                 {?}{?}1
                 {:}{:}1
}

答案3

一般来说,有几种原因导致Incomplete \iffalse; all text was ignored after line X. }

独立于 OP 的示例,如果它对将来的某人有帮助:就我而言,我在书写时而\import{other/titlepage.tex}不是在\import{other}{titlepage.tex}任何地方都遇到了这个错误。

答案4

我的法语文档也遇到了同样的问题,但是@Dalker 的回答并没有解决它*。

基于这个问题:软件包清单:由于单引号符号而出现错误“未定义的控制序列。”?,揭示了与 的冲突textcomp,我不得不将 移到\usepackage{listings}序言中更靠后的位置,而且它成功了。我想可能会与babel-frenchtextcompicomma、等包发生一些干扰textgreek...


* 据记录,它会产生此错误:

! Undefined control sequence.
:...ble \else \lst@XPrintToken \let \lst@scanmode 
                                                  \lst@scan@m \lst@token {:}..

相关内容