\lstinputlisting 解释包含文件中的特殊字符

\lstinputlisting 解释包含文件中的特殊字符

我正在用多种编程语言编写报告。目前,我正在尝试包含一个 Makefile。

当我做:

\lstinputlisting[language=make]{./Kodeeksempler/makefile}

在 texmaker 中使用 texlive 进行编译时出现以下错误:

! Missing $ inserted.
<inserted text>
$
l.22 ]{./Kodeeksempler/makefile}

有问题的 makefile 的第 22 行包含以下内容:

BUILD_DIR=build/host

.. 所以我知道错误消息是错误的,因为应该能够正常显示。任何帮助都将不胜感激。当我尝试定期在 makefile 周围进行 lstlisting 时,也会发生同样的情况,如下所示:

\begin{lstlisting}
clean:
     $(RM) ./build
     $(RM) ./bin
     @echo "Static libraries persist in ./lib"

     ${BUILD_DIR}/%.d: %.cpp
     $(CXX) -MT ${BUILD_DIR}/$(@:.d=.o) -MM $(CXXFLAGS) $^ > $@

-include $(DEPS)
\end{lstlisting}

编辑

我似乎已经缩小了错误发生的范围:

-include $(DEPS)

当我删除它时,lstlisting 将它很好地包含在内。

编辑2:这是我在序言中使用的 lstset:

 \lstset{language=make,                 % Sprog
     basicstyle=\ttfamily\scriptsize,       % Opsaetning af teksten
     keywords={for,if,while,else,elseif,        % Noegleord at fremhaeve
          end,break,return,case,
          switch,function},
     keywordstyle=\color{blue},             % Opsaetning af noegleord
     commentstyle=\color{commentGreen},     % Opsaetning af kommentarer
     stringstyle=\color{stringPurple},      % Opsaetning af strenge
     showstringspaces=false,                    % Mellemrum i strenge enten vist eller blanke
     numbers=left, numberstyle=\tiny,       % Linjenumre
     extendedchars=true,                    % Tillader specielle karakterer
    columns=flexible,                       % Kolonnejustering
    breaklines, breakatwhitespace=true,     % Bryd lange linjer
}

我注意到,即使我省略了 makefile 的最后一部分,它似乎仍然有效。

编辑3

所以我找到了问题!显然 @ 键被用作 C 代码的旧 lstset 的转义字符,并且由于合并冲突而重新出现。序言中的第 199 行包含以下内容:

 \lstset{escapechar=@,style=customc}

我删除了它,现在它正常工作了。感谢大家的耐心。

相关内容