如何使用 TeX 基元定义类似 LaTeX 的环境?我刚刚开始使用 Knuth 的 TeX 书学习 TeX,发现很难使用 TeX 基元实现类似 LaTeX 的环境。我所说的环境的一个例子是\begin{document} ... \end{document}
。环境是否像 一样实现\def\begin#1\end#1{some conditional statement..}
?
答案1
基本思想是,\begin{foo}
执行\foo
并\end{foo}
执行组\endfoo
内的所有内容\begingroup..\endgroup
。
因此,忽略错误检查(和新添加的环境挂钩等),普通的 tex 实现将如下所示,我重命名了 begin 和 end 以避免与\end
原始内容发生冲突(LaTeX 将其重命名为\@@end
)
% define environment syntax
\def\zbegin#1{\begingroup\csname#1\endcsname}
\def\zend#1{\csname end#1\endcsname\endgroup}
% a sample environment
\def\table#1{\halign\bgroup#1\cr}
\def\endtable{\crcr\egroup}
\zbegin{table}{\hfil#\quad&#\hfil}
rrr&lll\cr
1&2\cr
33&44
\zend{table}
\bye