我在LaTeX中为lstlisting
定义新命令时遇到问题。结果是编译挂起而没有错误消息,只有*
。
这挂起了LaTeX编译:
\documentclass[10pt,a4paper,ssfamily]{exam}
\usepackage{listings}
\newcommand{\cs}{\begin{lstlisting}}
\newcommand{\ce}{\end{lstlisting}}
\begin{document}
\cs
program test
! This is a commentary
end program test
\ce
\end{document}
但是这个没有:
\documentclass[10pt,a4paper,ssfamily]{exam}
\usepackage{listings}
\begin{document}
\begin{lstlisting}
program test
! This is a commentary
end program test
\end{lstlisting}
\end{document}
唯一的区别是endmargin和lstlisting
的开头和结尾首先在新命令中定义。问题出现在lstlisting
上,但不适用于\begin{center}
。
答案 0 :(得分:0)
好吧,我发现了一个类似的问题,这里有报道:
似乎无法做我想要的事情,因为\ begin {lstlisting}的编译需要搜索相应的\ end {lstlisting},而new命令会破坏它。
但是,使用例如:
可以获得定义新的lst环境的相同结果
\lstnewenvironment{code}{\lstset{language=[90]Fortran,
xleftmargin=1.5cm
}}{}
\lstnewenvironment{code}{\lstset{language=[90]Fortran,
xleftmargin=1.5cm
}}{}
。然后,可以定义代码部分的许多属性,并且语法更容易(\ begin {code},\ end {code})。
在我的情况下,完整的新环境是:
\lstnewenvironment{code}{\lstset{language=[90]Fortran,
basicstyle=\ttfamily,
keywordstyle=\color{blue},
commentstyle=\color{gray},
xleftmargin=1.5cm,
morecomment=[l]{!\ }% Comment only with space after !
}}{}