2010-12-14 1 views
1

Возможно ли создать новую команду с параметром в verbatim environment и некоторым отступом?пользовательские команды в стенографической среде

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

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

+1

Вы можете найти полное сообщество на [TeX StackExchange] (http://tex.stackexchange.com/), где вопрос, связанный с TeX, слишком мал. Существует много [вопросов, связанных с пакетом листингов] (http://tex.stackexchange.com/questions/tagged/listings), которые могут вам пригодиться. –

ответ

2

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

+0

Спасибо, пакет объявлений работает нормально. – sschaef

5

Как работает \begin{verbatim}. кратко и грубо.

  1. \begin{verbatim} расширен до \verbatim.
  2. Затем \verbatim задает код категории для каждого специального символа до 12. Теперь все символы напоминают цифры или пункции.
  3. Затем \verbatim устанавливает шрифт, побочные эффекты и звонки \@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 {}$&%^_

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

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

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

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

    alt text

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

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

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

+0

+1 для объяснения, хотя я не все понял. – sschaef