如何在自定义环境下启用 verbatim 环境?

如何在自定义环境下启用 verbatim 环境?

所以我想定义一个内联环境!foo!,并写入foo外部文件。这是我的源代码:

\catcode`!=13
\newwrite\mmtlatexfile
\immediate\openout\mmtlatexfile=\jobname.mmtlatex
\newcounter{ExprNum}
\def!#1!{\outputmmtlatex{#1}}
\def\outputmmtlatex#1{%
    \stepcounter{ExprNum}%
    \immediate\write\mmtlatexfile{expression_\roman{ExprNum} = #1}%
}%

显然我不能写类似的内容!a % b = c!,因为%在 LaTeX 中具有特殊含义。

有什么办法可以忽略& % $ # _ { } ~ ^ \里面这些特殊含义的字符()!!

答案1

您需要逐字逐句地获取输入。使用类似的方法\verb可能看起来像

\documentclass{article}
\makeatletter
\catcode`\!=\active
\newcounter{ExprNum}
\newwrite\mmtlatexfile
\immediate\openout\mmtlatexfile=\jobname.mmtlatex\relax
\def!{%
  \begingroup
  \let\do\@makeother
  \dospecials
  \mmttoend
}
\def\mmttoend#1!{%
    \stepcounter{ExprNum}%
    \immediate\write\mmtlatexfile{expression_\roman{ExprNum} = #1}%
  \endgroup
}
\makeatother
\begin{document}
some!a % b = c!thing
\end{document}

关键是不是抓取参数,直到特殊命令被停用(\dospecials)。由于这是逐字逐句的,因此它不会在其他命令的参数中起作用,

相关内容