![如何在纯 TeX 中定义类似 LaTeX 的环境?](https://linux22.com/image/332738/%E5%A6%82%E4%BD%95%E5%9C%A8%E7%BA%AF%20TeX%20%E4%B8%AD%E5%AE%9A%E4%B9%89%E7%B1%BB%E4%BC%BC%20LaTeX%20%E7%9A%84%E7%8E%AF%E5%A2%83%EF%BC%9F.png)
如何使用 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