2010-11-12 81 views
4

有人可以告訴我在這裏做錯了嗎?乳膠新命令問題

\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

屬於上http://tex.stackexchange.com/ – 2010-11-12 14:34:17

+4

我以前說過的這,但這種「堆棧交換」東西的擴散是荒謬的。很快,它將是error.newcommand.tex.stackexchange.com ...無論發生什麼集中知識的想法?那麼標籤是什麼?嘖嘖,有人有一個好主意,然後它爆炸成無數愚蠢的人。 – 2010-11-12 16:28:21

+2

關於'error.newcommand.tex.stackexchange.com'的好處。優秀。我的想法。我的互聯網瀏覽器無法容納這麼多標籤。 – 2010-11-12 17:19:50

回答

7

如何\begin{verbatim}的作品。簡單和粗略。

  1. \begin{verbatim}擴展到\verbatim
  2. Then \verbatim將每個特殊字符的分類代碼設置爲12. 現在所有的字符都是數字或點子。
  3. 然後\verbatim設置字體,parindent和呼叫\@xverbatim
  4. \@xverbatim漁獲逐字使用下面的技巧的末尾:

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

newcommand{\bc}{\small\begin{verbatim}}如何工作。

  1. \bс擴大爲\small\begin{verbatim}
  2. 然後\begin{verbatim}擴大爲\varbatim\varbatim更改所有類別和字體。
  3. Then \verbatim calls \@xverbatim
  4. \@xverbatim嘗試使用下面的技巧來抓住你的論點:

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

    ,但它是不可能的,因爲\@xverbatim的嘗試趕上 \end所有字母(\end)有類別12和11. 但實際上只有\ec exsits。

  5. \@xverbatim嘗試,並試圖找到\end其中反斜線(\)有12類,但是.... File ended while scanning use of \@xverbatim
+0

哇。振聾發聵! – 2010-11-12 17:11:31

2

verbatim是特殊的,它掃描文字\end{verbatim},因爲任何宏替換不在\begin{verbatim}後執行。

2

某些環境(例如verbatim)需要在前面的文本中進行掃描以手動查找其結尾。因此,與「正常」環境不同,verbatim需要在輸入文本中逐字找到文本\end{verbatim}

在你的榜樣,它不會(因爲輸入的文本包含\ec代替。

作爲一種變通方法,您可以改用fancyvrb包定義Verbatim包,並允許定義自定義的逐字環境。