пользовательские команды в дословной среде

можно ли создать новую команду с параметром в дословной среде и с некоторым отступом?

\newcommand{codeblock}[1]{\begin{quote}\begin{verbatim}#1\end{verbatim}\end{quote}}

Это не работает. Есть ли другой способ?


person kiritsuku    schedule 14.12.2010    source источник
comment
Вы можете найти все сообщество на TeX StackExchange, где нет слишком мелких вопросов, связанных с TeX. Там есть много вопросов, связанных с пакетом объявлений, которые могут быть вам полезны.   -  person Matthew Leingang    schedule 14.12.2010


Ответы (2)


Похоже, вы хотите, чтобы код был в вашем документе, и в этом случае вам, вероятно, лучше будет обслуживать листинг пакетов, чем дословно. В листингах также есть такие удобные функции, как нумерация строк и подсветка синтаксиса для многих распространенных языков. См. http://www.ctan.org/tex-archive/macros/latex/contrib/listings/, если он еще не установлен в вашем дистрибутиве LaTeX.

person arnsholt    schedule 14.12.2010

Как \begin{verbatim} работает. кратко и примерно.

  1. \begin{verbatim} расширяется до \verbatim.
  2. Затем \verbatim устанавливает код категории для каждого специального символа на 12. Теперь все символы подобны цифрам или пунктам.
  3. Затем \verbatim устанавливает шрифт, parindent и вызывает \@xverbatim.
  4. \@xverbatim дословно улавливает конец слова, используя следующий трюк:

    \def\@xverbatim#1\end{#1\end}
    
  5. Затем \end{verbatim} заканчивает работу.

Как работает \newcommand{\codeblock}[1]{\begin{quote}\begin{verbatim}#1\end{verbatim}\end{quote}}.

  1. Прежде всего \codeblock{Some {}$&%^_} читает свой аргумент.
  2. #1 --> Some code {}$&%^_

    Примечание. _13 _, _ 14 _, _ 15 _, _ 16 _, _ 17 _, _ 18 _, _ 19_ имеют категории 1,2,3,4,6,7,8 вместо 11 или 12 !!! )

  3. \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.
  4. \begin{quote} заменяется на \quote, а \quote выполняется.
  5. Затем \begin{verbatim} расширяется до \varbatim. \varbatim меняет все категории и шрифт. Но (важно) категория обратной косой черты (в \end) остается равной 0. И категории {, }, $, &, %, ^, _, введенные после Some, остаются из-за "чтения аргументов" "выполняется до того, как \verbatim изменит все категории. Но вам нужно, чтобы у всех char были категории 11 или 12.
  6. Затем \verbatim звонит \@xverbatim.
  7. \@xverbatim пытается уловить ваш аргумент, используя следующий трюк:

    \def\@xverbatim#1\end{#1\end}
    

    но это невозможно из-за того, что \@xverbatim пытается поймать \end, где все буквы (_52 _, _ 53 _, _ 54 _, _ 55_) имеют категории 12 и 11. Но на самом деле есть четыре буквы с другим кодом категории: \ с категорией 0 и _57 _, _ 58_ , d с категорией 11.

    Возможно (я не уверен), что трюк более виртуозный:

    alt text

    Красные символы имеют категорию 12. Зеленые символы имеют категорию 11. \def, \@xverbatim, \end - это макросы с \ (категория 0) и буквами (категория 11).

  8. \@xverbatim пытается найти \end, где обратная косая черта (\) имеет категорию 11, но .... File ended while scanning use of \@xverbatim

Если вы хотите создать новый макрос \codeblock, вы должны сделать что-то вроде текста выше.

person Alexey Malistov    schedule 14.12.2010