Латекс \ newcommand for \ end {verbatim} et.al не работает - PullRequest
3 голосов
/ 07 октября 2010

Я пытаюсь сделать латекс пригодным для использования, вводя некоторые временные ограничения, но у меня возникают проблемы с определением новых команд, которые завершают среды, совершенно случайно.

Это работает:
\newcommand{\bcv}{\ensuremath{\begin{smallmatrix}}} \newcommand{\ecv}{\ensuremath{\end{smallmatrix}}} \newcommand{\be}{\begin{enumerate}}<br> \newcommand{\ee}{\end{enumerate}}

Это не работает:
\newcommand{\bal}{\begin{align*}}<br> \newcommand{\eal}{\end{align*}}
\newcommand{\verbass}[1]{\begin{verbatim} #1 \end {verbatim}}

В частности, я думаю, что \ end value просто игнорируется?

Когда я пытаюсь использовать \verbass{Halp}, я получаю сообщение об ошибке: !File ended while scanning use of \@xverbatim.

Очевидно, что я могу использовать \ begin {foo} ... \ end {foo} во всех местах по мере необходимости, но на самом деле, это должно работать!

Ответы [ 3 ]

5 голосов
/ 08 октября 2010

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

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

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

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

  1. Прежде всего \verbass{Halp} читает свой аргумент.
  2. #1 --> Halp
  3. \verbass расширяется до \begin{verbatim} Halp \end {verbatim}. Важно: обратная косая черта \end имеет категорию 0, а не 11. Более того, { и } имеют категории 1 и 2, а не 11.
  4. Затем \begin{verbatim} расширяется до \varbatim.\varbatim меняет все категории и шрифт.Но ( важно ) категория обратной косой черты (в \end) остается равной 0.
  5. Тогда \verbatim вызывает \@xverbatim.
  6. \@xverbatim пытается поймать ваш аргумент, используя следующую уловку:

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

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

  7. \@xverbatim пытается и пытается найти \end, где обратная косая черта (\) имеет категорию 11, но .... File ended while scanning use of \@xverbatim
0 голосов
/ 07 февраля 2015

Я далёк от того, чтобы быть профессиональным программистом, но быстрые и грязные решения могут быть:

\newcommand{\myverbatim}[1]{\begin{tt} \detokenize{#1} \end{tt} \\ }

Вывод не очень хороший, потому что разрывы строк игнорируются.Если это необходимо, можно повторить команду построчно (?).

0 голосов
/ 08 октября 2010

Здесь очень краткое объяснение здесь о глаголе и дословно. По сути, LaTeX настаивает на том, чтобы глагол и дословно получили «взгляд» на их содержание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...