Newcommand зависает от компиляции LaTeX
У меня проблема с определением новой команды в 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 ответ
Ну, я нашел похожую проблему, о которой сообщалось здесь:
Кажется, что невозможно сделать то, что я хочу, потому что компиляция \begin{lstlisting} должна искать соответствующий \end{lstlisting}, а новые команды это нарушают.
Однако тот же результат может быть получен при определении новой среды lst, например, с использованием:
\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 ! }}{}