代码之家  ›  专栏  ›  技术社区  ›  Dervin Thunk

乳胶/新需求问题

  •  5
  • Dervin Thunk  · 技术社区  · 14 年前

    有人能告诉我这里做错了什么吗?

    \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 回复  |  直到 14 年前
        1
  •  8
  •   Alexey Malistov    14 年前

    怎么 \begin{verbatim} 作品。简明扼要。

    1. \开始{逐字} 扩展到 \verbatim .
    2. 那么 \逐字 将每个特殊字符的类别代码设置为12。 现在所有的字符都像数字或点号。
    3. 那么 \逐字 设置字体、parindent和调用 \@xverbatim .
    4. \@逐字 使用以下技巧捕获逐字记录的结尾:

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

    怎么 newcommand{\bc}{\small\begin{verbatim}} 作品。

    1. \bс 扩展到 \small\begin{verbatim} .
    2. 那么 \开始{逐字} 扩展到 \varbatim . \瓦巴蒂姆 更改所有类别和字体。
    3. 那么 \逐字 电话 \@逐字 .
    4. \@逐字 试图用以下技巧抓住你的论点:

      \def\@xverbatim#1结束{1结束}
      

      但这是不可能的,因为 \@逐字 试图抓住 \end 所有字母( \ , e , n , d )有12类和11类。 但事实上 \ec 存在。

    5. \@逐字 正在努力寻找 \结束 其中反斜杠( \ )有12类但是。。。。 File ended while scanning use of \@xverbatim
        2
  •  2
  •   smilingthax    14 年前

    verbatim 是特别的,它会扫描 字面意义的 \end{verbatim} ,因为在 \begin{verbatim} .

        3
  •  2
  •   Konrad Rudolph    14 年前

    一些环境,例如 verbatim ,需要在前面的文本中手动查找其结尾。所以不像一般的环境, 逐字 需要找到文本 \end{verbatim} 在输入文本中,逐字输入。

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

    作为解决方法,您可以使用 fancyvrb 定义 Verbatim 打包并允许定义自定义逐字记录环境。