所以我想定义一个内联环境!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
)。由于这是逐字逐句的,因此它不会在其他命令的参数中起作用,