有人可以告诉我这里做错了吗?
\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
我认为这样做非常安全,因为大多数命令只是文本替换...任何提示?
答案 0 :(得分:8)
\begin{verbatim}
如何运作。简要而粗略地说。
\begin{verbatim}
已扩展为\verbatim
。 \verbatim
将每个特殊字符的类别代码设置为12。
现在所有的字符都像数字或字符。\verbatim
设置字体,parindent并调用\@xverbatim
。 \@xverbatim
使用以下技巧捕获逐字结尾:
\def\@xverbatim#1\end{#1\end}
然后\ end {verbatim}完成工作。
newcommand{\bc}{\small\begin{verbatim}}
如何运作。
\bс
扩展为\small\begin{verbatim}
。\begin{verbatim}
展开为\varbatim
。
\varbatim
更改所有类别和字体。 \verbatim
拨打\@xverbatim
。 \@xverbatim
尝试使用以下技巧捕捉您的论点:
\def\@xverbatim#1\end{#1\end}
但由于\@xverbatim
试图抓住,这是不可能的
\end
所有字母(\
,e
,n
,d
)都有类别12和11。
但实际上只有\ec
例外。
\@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
包,并允许定义自定义逐字环境。