1

我在 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 和 of 的开头和结尾首先lstlisting在新命令中定义。例如,问题发生在lstlisting,但不是\begin{center}

4

1 回答 1

0

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

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

似乎不可能做我想做的事情,因为 \begin{lstlisting} 的编译需要搜索相应的 \end{lstlisting} 并且新命令会破坏它。

但是,可以通过定义一个新的 lst 环境来获得相同的结果,例如:

\lstnewenvironment{code}{\lstset{language=[90]Fortran,
  xleftmargin=1.5cm
}}{}

例如。然后,可以定义代码段的许多属性并且语法更容易(\begin{code},\end{code})。

就我而言,完整的 lstnewenvironment 是:

\lstnewenvironment{code}{\lstset{language=[90]Fortran,
  basicstyle=\ttfamily,
  keywordstyle=\color{blue},
  commentstyle=\color{gray},
  xleftmargin=1.5cm,
  morecomment=[l]{!\ }% Comment only with space after !
}}{}

于 2016-03-22T19:50:54.570 回答