我如何自动从列表中排除评论?

我如何自动从列表中排除评论?

在使用该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 语法

上述代码的输出

相关内容