\ end {verbatim} et.al的Latex \ newcommand无法正常工作

时间:2010-10-07 16:35:35

标签: latex

我试图通过引入一些timeavers来使Latex可用,但我在定义终止环境的新命令方面遇到了麻烦,完全是随机的。

这有效:
\newcommand{\bcv}{\ensuremath{\begin{smallmatrix}}} \newcommand{\ecv}{\ensuremath{\end{smallmatrix}}} \newcommand{\be}{\begin{enumerate}}
\newcommand{\ee}{\end{enumerate}}

这不起作用:
\newcommand{\bal}{\begin{align*}}
\newcommand{\eal}{\end{align*}}

\newcommand{\verbass}[1]{\begin{verbatim} #1 \end {verbatim}}

具体来说,我认为\ end值只是被忽略了?

当我尝试使用\verbass{Halp}时出现错误:!File ended while scanning use of \@xverbatim.

显然我可以根据需要在所有位置使用\ begin {foo} ... \ end {foo},但实际上,这应该可行!

3 个答案:

答案 0 :(得分:5)

\begin{verbatim}如何运作。简要而粗略地说。

  1. \begin{verbatim}已扩展为\verbatim
  2. 然后\verbatim将每个字符的类别代码设置为11。 现在所有的字符都是字母。
  3. 然后\verbatim设置字体,parindent并调用\@xverbatim
  4. \@xverbatim使用以下技巧捕获逐字结尾:

    \def\@xverbatim#1\end{#1\end}
    
  5. 然后\ end {verbatim}完成工作。

  6. \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所有字母(\end)都属于类别11。   但实际上有四个字母与其他类别代码:   {0}的\和{11}的end

    7. \@xverbatim正在尝试查找\end,其中反斜杠(\)的类别为11但.... File ended while scanning use of \@xverbatim

答案 1 :(得分:0)

有关动词和逐字的简短解释here。基本上,LaTeX坚持动词和逐字首先“看”他们的内容。

答案 2 :(得分:-1)

我远不是一名专业的程序员,但是快速而肮脏的解决方案可能是:

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

输出不是很好,因为忽略了换行符。如果需要,可以逐行重复命令(?)。