Latex \ newcommand问题

时间:2010-11-12 14:32:08

标签: latex

有人可以告诉我这里做错了吗?

\newcommand{\bc}{\small\begin{verbatim}}
\newcommand{\ec}{\normalsize\end{verbatim}}

然后

\bc
1  3       6 7 89 10
 22 7  7  45
\ec

但我得到

Runaway argument?
^^M1  3       6 7 89 10^^M 22 7  7  45^^M\ec^^M^^M\section{Reading on\ETC.
! File ended while scanning use of \@xverbatim.
<inserted text> 
                \par 
<*> i4c.tex

? 
! Emergency stop.
<inserted text> 
                \par 
<*> i4c.tex

我认为这样做非常安全,因为大多数命令只是文本替换...任何提示?

3 个答案:

答案 0 :(得分:8)

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

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

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

  6. newcommand{\bc}{\small\begin{verbatim}}如何运作。

    1. \bс扩展为\small\begin{verbatim}
    2. 然后\begin{verbatim}展开为\varbatim。  \varbatim更改所有类别和字体。
    3. 然后\verbatim拨打\@xverbatim
    4. \@xverbatim尝试使用以下技巧捕捉您的论点:

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

      但由于\@xverbatim试图抓住,这是不可能的   \end所有字母(\end)都有类别12和11。   但实际上只有\ec例外。

    5. \@xverbatim正在尝试查找\end反斜杠(\)的类别为12但.... File ended while scanning use of \@xverbatim

答案 1 :(得分:2)

verbatim很特别,它会扫描文字 \end{verbatim},因为在\begin{verbatim}之后不会执行任何宏替换。

答案 2 :(得分:2)

某些环境(例如verbatim)需要在前面的文本中扫描以手动查找其结尾。因此,与“普通”环境不同,verbatim需要在输入文本中逐字找到文本\end{verbatim}

在您的示例中,它没有(因为输入文本包含\ec

作为一种变通方法,您可以改为使用定义fancyvrb包的Verbatim包,并允许定义自定义逐字环境。