我正在尝试指定我在 Fortran 77 程序中使用的两种注释样式( ac
和 a !
)。目前,当前程序只识别!
而不能识别c
。有谁知道如何让 LaTeX 识别两者并将它们着色(红色)?
这是我的 LaTeX 代码(浓缩版):
\documentclass{article}
\usepackage{listings,xcolor}
\lstset{language=[77]fortran,
showstringspaces=false,
keywordstyle=\color{blue},
stringstyle=\color{purple},
commentstyle=\color{red},
morecomment=[s]{!}{c},
breakatwhitespace=false,
}
\begin{document}
\begin{lstlisting}[language=fortran]
program main
implicit integer (A-Z)
c Asking it to calculate
x = y+1 !The equation
end program
\end{lstlisting}
\end{document}
答案1
您没有在列表中选择 Fortran-77 方言。根据语言定义手册,Fortran-90 及更高版本中删除了c
和注释,否则可能会引发注释。Fortran 77 版本未定义注释,我相信您的编译器正在将其作为 Fortran-77 的扩展提供。C
CONTAINS
listing
!
因此,当您选择 时language=[77]fortran
,您不会获得!
注释,而当您选择 时language=fortran
,您不会获得c
或C
注释。但是,当您为单个列表选择一种语言时,它会重新加载该语言的注释规则并覆盖 中的全局设置\listset
。因此,在全局中添加缺失的定义并从单个列表中\lstset
删除不必要的定义是可行的:language=
\documentclass{article}
\usepackage{libertinus} % Or your font of choice
\usepackage{listings,xcolor}
\lstset{language=[77]Fortran,
showstringspaces=false,
keywordstyle=\color{blue},
stringstyle=\color{purple},
commentstyle=\color{red},
breakatwhitespace=false,
morecomment=[l]!
}
\begin{document}
\begin{lstlisting}
program main
implicit integer (A-Z)
c Asking it to calculate
x = y+1 !The equation
end program
\end{lstlisting}
\end{document}
加载语言后添加缺失的注释样式也是如此。请注意,在选项中,任何包含括号的设置都必须用大括号括起来。
\begin{lstlisting}[language={[77]fortran},
morecomment={[l]!}]
您应该这样做,如果您混合使用不同语言的列表,则删除morecomment=
中的行,并且不应在所有列表中开始注释。如果您必须经常这样做,您可以定义自己的环境来包装它。\lstset
!
理论上,您还可以为 Fortran-77 定义自己的 Fortran 列表自定义方言,并使用 Fortran-90 注释。
答案2
您的morecomment
设置表明评论以 开头!
并以 结尾c
。请改为这样做。
morecomment=[l]{!}
C
已被定义为 fortran77 样式中的注释,因此您不需要声明它。
所有这些都未经测试。