Newcommand挂起LaTeX编译

时间:2016-03-22 14:28:50

标签: latex renewcommand

我在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}

1 个答案:

答案 0 :(得分:0)

好吧,我发现了一个类似的问题,这里有报道:

https://tex.stackexchange.com/questions/25597/wrapping-code-listings-verbatim-or-other-method-inside-a-newcommand

似乎无法做我想要的事情,因为\ 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 !
}}{}