在使用该listings
包时,我想自动从输入代码文件中排除注释。
这个答案建议美白注释。但这并不是我所期望的。我希望注释行被完全排除。
我认为不需要 MWE。不过,我还是添加了一个,以便让潜在的响应者能够更快地开始尝试。
\documentclass{article}
\usepackage{listings}
\usepackage{filecontents}
\begin{filecontents*}[overwrite]{\jobname.c}
/* This is a multiline
comment. */
#include <stdio.h>
void main()
{
// Also a single-line comment.
printf("Hello\n");
}
\end{filecontents*}
\begin{document}
% I would like to automatically not include the comments
\lstinputlisting[language=C]{\jobname.c}
\end{document}
我理解注释和实际代码在同一行会使问题更加复杂。但是,独立的单行和多行注释解决方案就足够了。
答案1
这是一个解决方案。
\documentclass{article}
\usepackage{listings,xcolor}
\begin{filecontents*}[overwrite]{\jobname.c}
/* This is a multiline
comment. */
#include <stdio.h>
void main()
{
// Also a single-line comment.
printf("Hello\n");
}
\end{filecontents*}
\begin{document}
\lstset{language = C}
\lstset{
morecomment=[is]{//}{\^^M} ,
morecomment=[is]{/*}{*/}
}
\lstinputlisting{\jobname.c}
\end{document}
在说明morecomment=[is]{//}{\^^M}
和中morecomment=[is]{/*}{*/}
,选项中的字母i
表示无形的.字母s
表示后面会指定两个分隔符。
\^^M
是行尾字符的 TeX 语法