можно ли создать новую команду с параметром в дословной среде и с некоторым отступом?
\newcommand{codeblock}[1]{\begin{quote}\begin{verbatim}#1\end{verbatim}\end{quote}}
Это не работает. Есть ли другой способ?
можно ли создать новую команду с параметром в дословной среде и с некоторым отступом?
\newcommand{codeblock}[1]{\begin{quote}\begin{verbatim}#1\end{verbatim}\end{quote}}
Это не работает. Есть ли другой способ?
Похоже, вы хотите, чтобы код был в вашем документе, и в этом случае вам, вероятно, лучше будет обслуживать листинг пакетов, чем дословно. В листингах также есть такие удобные функции, как нумерация строк и подсветка синтаксиса для многих распространенных языков. См. http://www.ctan.org/tex-archive/macros/latex/contrib/listings/, если он еще не установлен в вашем дистрибутиве LaTeX.
Как \begin{verbatim}
работает. кратко и примерно.
\begin{verbatim}
расширяется до \verbatim
.\verbatim
устанавливает код категории для каждого специального символа на 12. Теперь все символы подобны цифрам или пунктам.\verbatim
устанавливает шрифт, parindent и вызывает \@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 {}$&%^_
Примечание. _13 _, _ 14 _, _ 15 _, _ 16 _, _ 17 _, _ 18 _, _ 19_ имеют категории 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. И _25 _, _ 26 _, _ 27 _, _ 28 _, _ 29_ имеют категории 3,4,6, 7,8.\begin{quote}
заменяется на \quote
, а \quote
выполняется.\begin{verbatim}
расширяется до \varbatim
. \varbatim
меняет все категории и шрифт. Но (важно) категория обратной косой черты (в \end
) остается равной 0. И категории {
, }
, $
, &
, %
, ^
, _
, введенные после Some
, остаются из-за "чтения аргументов" "выполняется до того, как \verbatim
изменит все категории. Но вам нужно, чтобы у всех char были категории 11 или 12.\verbatim
звонит \@xverbatim
.\@xverbatim
пытается уловить ваш аргумент, используя следующий трюк:
\def\@xverbatim#1\end{#1\end}
но это невозможно из-за того, что \@xverbatim
пытается поймать \end
, где все буквы (_52 _, _ 53 _, _ 54 _, _ 55_) имеют категории 12 и 11. Но на самом деле есть четыре буквы с другим кодом категории: \
с категорией 0 и _57 _, _ 58_ , d
с категорией 11.
Возможно (я не уверен), что трюк более виртуозный:
Красные символы имеют категорию 12. Зеленые символы имеют категорию 11. \def
, \@xverbatim
, \end
- это макросы с \
(категория 0) и буквами (категория 11).
\@xverbatim
пытается найти \end
, где обратная косая черта (\
) имеет категорию 11, но .... File ended while scanning use of \@xverbatim
Если вы хотите создать новый макрос \codeblock
, вы должны сделать что-то вроде текста выше.