我如何告诉列表包注释字符仅在行首有效?

我如何告诉列表包注释字符仅在行首有效?

我正在尝试使用该listings包来格式化原始的、面向行的 DSL。该语言有三种类型的行:注释、命令和数据。

这是一个“可以工作但不完全”的 MWE:

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{%
  basicstyle=\small\ttfamily,
  frame=single,
  morecomment=[l][\color{green}]{*},
  morecomment=[l][\color{red}]{\#},
  }
\begin{document}
\begin{lstlisting}
* A comment
* A # comment
# A command
# A * command
  Data
  Some # data
  Some * data
\end{lstlisting}
\end{document}

结果是:

部分正确的输出

现在,我需要停止将数据中的 # 和 * 解释为开始注释,因此我尝试使用该morecomment=[f]选项来替换我的[l]选项:

  morecomment=[f][0][\color{green}]{*},
  morecomment=[f][0][\color{red}]{\#},

但现在它停在了列表的第一行,

! Missing number, treated as zero. <to be read again>  \protect  l.13
*
     A comment ?

谁能告诉我我做错了什么?

答案1

你快到了,你只需要

  morecomment=[f][\color{green}][0]{*},
  morecomment=[f][\color{red}][0]{\#},

代码输出

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{%
  basicstyle=\small\ttfamily,
  frame=single,
  morecomment=[f][\color{green}][0]{*},
  morecomment=[f][\color{red}][0]{\#},
  }
\begin{document}
\begin{lstlisting}
* A comment
* A # comment
# A command
# A * command
  Data
  Some # data
  Some * data
\end{lstlisting}
\end{document}

相关内容