Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Latex \newcommand problem

Tags:

latex

can someone please tell what I'm doing wrong here?

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

and then

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

but I get

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

I thought it was pretty safe to do that, since most commands are just text substitutions... any hints?

like image 948
Dervin Thunk Avatar asked Nov 12 '10 14:11

Dervin Thunk


Video Answer


2 Answers

How \begin{verbatim} works. briefly and roughly.

  1. \begin{verbatim} is expanded to \verbatim.
  2. Then \verbatim sets category code of each special characters to 12. Now all chars is like digits or puncts.
  3. Then \verbatim sets font, parindent and calls \@xverbatim.
  4. \@xverbatim catches the end of verbatim using the following trick:

    \def\@xverbatim#1\end{#1\end}
    
  5. Then \end{verbatim} finishes work.

How newcommand{\bc}{\small\begin{verbatim}} works.

  1. \bс expands to \small\begin{verbatim}.
  2. Then \begin{verbatim} expands to \varbatim. \varbatim changes all categories and font.
  3. Then \verbatim calls \@xverbatim.
  4. \@xverbatim tries to catch your argument using the following trick:

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

    but it is impossible because of \@xverbatim tries to catch \end where all letters (\,e,n,d) have the category 12 and 11. But in fact there are only \ec exsits.

  5. \@xverbatim is trying and trying to find \end where backslash (\) has category 12 but.... File ended while scanning use of \@xverbatim
like image 156
Alexey Malistov Avatar answered Nov 09 '22 12:11

Alexey Malistov


verbatim is special, it scans for a literal \end{verbatim}, as any macro substitutions are not executed after the \begin{verbatim}.

like image 31
smilingthax Avatar answered Nov 09 '22 14:11

smilingthax