2016-03-22 9 views
1

Ich habe ein Problem bei der Definition eines neuen Befehls in LaTeX für lstlisting. Das Ergebnis ist, dass die Kompilierung ohne Fehlermeldung, nur eine * hängt.Newcommand hängt LaTeX Kompilierung

Dies hängt das LaTeX Compilation:

\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} 

Aber dies nicht:

\documentclass[10pt,a4paper,ssfamily]{exam} 
\usepackage{listings} 
\begin{document} 
\begin{lstlisting} 
program test 
    ! This is a commentary 
end program test 
\end{lstlisting} 
\end{document} 

Der einzige Unterschied ist, dass der Beginn und das Ende der endmargin und von lstlisting in einem neuen Befehl definiert werden an erster Stelle. Das Problem tritt beispielsweise für lstlisting, aber nicht für \begin{center} auf.

Antwort

0

Nun, fand ich ein ähnliches Problem, das hier berichtet wurde:

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

Es scheint, dass es nicht möglich ist, zu tun, was ich will, weil die Zusammenstellung von \ begin {lstlisting} muss suchen für die entsprechende \ end {lstlisting} und die neuen Befehle brechen das.

Jedoch kann das gleiche Ergebnis erhalten werden, um eine neue lst Umgebung definieren, unter Verwendung von, zum Beispiel:

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

zum Beispiel. Dann ist es möglich, viele Eigenschaften des Codeabschnitts zu definieren, und die Syntax ist einfacher (\ begin {code}, \ end {code}).

Der vollständige lstnewenvironment, in meinem Fall ist:

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