我正在用 LaTeX 写一份报告,需要列出一些源代码。其中一个文件的路径/名称中有一些下划线。编译以下行时:
\lstinputlisting[label=source_code,caption=test_file.c]{abcd/test_file.c}
我收到以下错误:
! 软件包清单错误:文件“abcd/test\unhbox \voidb@x \penalty \@M \hskip \ z@skip \unhbox \voidb@x \kern .06em\vbox {\hrule width.3em}\discretionary {-}{} {}\penalty \@M \hskip \z@skip file(.c)”未找到。
下划线显然没有得到正确处理,但到目前为止我还没能找到如何纠正它(尝试用“\_”转义它)。有人知道如何解决这个问题吗?
测试代码(在最小版本中有效,使用“下划线”包时停止工作):
% Declarations
\documentclass[a4paper, 11pt,twoside]{article}
\usepackage[utf8x]{inputenc}
\usepackage[french]{babel}
%\usepackage{underscore}
% Code listing
\usepackage{listings}
% Begin document
\begin{document}
\pagestyle{empty}
Listing of test\_file.c :
\lstinputlisting{abcd/test_file.c}
\end{document}
回答
当您的文本中有大量下划线需要转义时,“下划线”包可以帮助您,但您必须小心文件名、引用或参考标签:
跳过和惩罚会破坏任何使用下划线字符的字距调整(当使用字符时)。但是,EC 字体中似乎没有太多这样的字距调整,而且从来没有任何使用规则的字距调整。您必须避免在文件名和引用或引用标签中使用“_”,或者您必须使用 babel 包及其活动字符控件,或者您必须提供 [strings] 选项,该选项会尝试重新定义几个命令(并且可能无法完美运行)。即使没有 [strings] 选项或 babel,您也可以偶尔使用下划线,例如:“\include{file\string_name}”。
(来源)
答案1
转义参数中的下划线caption
,但不是在强制论点中:
lstinputlisting[label=source_code,caption=test\_file.c]{abcd/test_file.c}
% ^^^^^ ^^^^^