Как работает \begin{verbatim}
. кратко и грубо.
\begin{verbatim}
расширен до \verbatim
.
- Затем
\verbatim
задает код категории для каждого специального символа до 12. Теперь все символы напоминают цифры или пункции.
- Затем
\verbatim
устанавливает шрифт, побочные эффекты и звонки \@xverbatim
.
\@xverbatim
ловит конец дословное используя следующий трюк:
\def\@xverbatim#1\end{#1\end}
Затем \end{verbatim}
заканчивает работу.
Как \newcommand{\codeblock}[1]{\begin{quote}\begin{verbatim}#1\end{verbatim}\end{quote}}
работ.
- Прежде всего
\codeblock{Some {}$&%^_}
читает свой аргумент.
#1 --> Some code {}$&%^_
Примечание:{
, }
, $
, &
, %
, ^
, _
имеют категории 1,2,3,4,6,7,8 , а не 11 или 12 !!!)
\codeblock
распространяется до \begin{quote}\begin{verbatim} Some {}$&%^_\end {verbatim}\end {quote}
. Важно: обратный слэш из \end
имеет категорию 0, а не 11. Кроме того {
и }
имеют категории 1 и 2, а не 11. И $
, &
, %
, ^
, _
имеют категории 3,4,6,7, 8.
\begin{quote}
распространяется до \quote
и \quote
Выполняется.
- Затем
\begin{verbatim}
расширился до \varbatim
. \varbatim
изменяет все категории и шрифт. Но (important) категория обратной косой черты (в \end
) остается равной 0.И категории {
, }
, $
, &
, %
, ^
, _
впечатать после Some
остается из-за «чтение аргумента» выполняются до \verbatim
изменений всех категорий. Но вам нужно, чтобы весь шар имел категории 11 o 12.
- Затем
\verbatim
звонки \@xverbatim
.
\@xverbatim
пытается поймать свой аргумент, используя следующий трюк:
\def\@xverbatim#1\end{#1\end}
, но это невозможно из-за \@xverbatim
пытается поймать \end
где все буквы (\
, e
, n
, d
) имеют категорию 12 и 11. Но на самом деле есть четыре буквы с другим кодом категории: \
категории 0 и e
, n
, d
с категорией 11.
Возможно (я не уверен), что трюк более виртуозно:
![alt text](https://i.stack.imgur.com/w8ZBf.png)
Красных символы имеют категорию 12. Зеленые символы имеют категорию 11. \def
, \@xverbatim
, \end
- это макросы с \
(категория 0) и буквы (категория 11).
\@xverbatim
пытается и пытается найти \end
где обратный слэш (\
) имеет категорию 11, но .... File ended while scanning use of \@xverbatim
Если вы хотите создать новый макрос \codeblock
вы должны сделать что-то вроде вышеприведенного текста.
Вы можете найти полное сообщество на [TeX StackExchange] (http://tex.stackexchange.com/), где вопрос, связанный с TeX, слишком мал. Существует много [вопросов, связанных с пакетом листингов] (http://tex.stackexchange.com/questions/tagged/listings), которые могут вам пригодиться. –