逐字环境的别名

逐字环境的别名

我正在尝试为 verbatim 环境创建一个别名,如下所示:

\newcommand{\vb}[1]{\begin{verbatim} #1 \end{verbatim}}

所以我可以像这样使用它:

 \vb{
      word.
  }

但是在使用它时,我收到此错误:

! Missing $ inserted.
<inserted text> 
            $
l.93 \end{verbatim}

第 93 行是我在关闭文件后使用的逐字环境的结尾\vb。如果我用语法替换所有verbatim环境\vb,则会出现此错误:

Runaway argument?
zip([],B) = case ([],B) of ([],_) => [] | (_,[]) => [] | (x::L,y::R\ETC.
! File ended while scanning use of \@xverbatim.
<inserted text> 
            \par 

所以看起来好像\vb没有正确关闭环境?我该如何让它工作?最终目标是获得一个\vb我可以像上面描述的那样使用的命令,如果我可以将命令中的内容缩进\vb几毫米,则可以获得加分。

答案1

一般规则是不能\begin{verbatim}或该\verb命令是另一个命令的参数,包括的参数\newcommand

如果你真的想要使用该语法,您当然不能在参数中使用括号并希望它们被打印为自己:要么它们界定参数,要么它们必须被打印。

如果这个限制让你满意,那么

\makeatletter
\newcommand{\vb}{%
  \begingroup
  \advance\@totalleftmargin\parindent
  \@verbatim
  \catcode`{=1 \catcode`}=2 \catcode` =10
  \frenchspacing
  \@vb}
\def\@vb#1{#1\endtrivlist\endgroup} 
\makeatother

可以让你写

\vb{
    word.
  }

我不认为这比说

\begin{verbatim}
word.
\end{verbatim}

如果您想要逐字缩进,请查看包所提供的环境xleftmargin中的选项。Verbatimfancyvrb

相关内容