在函数式编程范式中,函数接受其他函数作为参数是很常见的。LaTeX 中也可以遵循这种范式:宏可以接受参数,这些参数本身可以是宏或环境名称。对于这种用例,LaTeX 中缺少“恒等函数”的等价物:一个宏和一个表现得像不存在的环境。
基本上,我正在寻找类似这样的东西:
\documentclass{article}
\begin{document}
\newenvironment{identity}{}{}
\begin{identity}
This will be parsed as if not surrounded by anything.
\end{identity}
\end{document}
如果标准 LaTeX 或任何“标准”包中已经存在类似的东西,我不愿意定义这个环境。LaTeX 中如何称呼“身份”?
答案1
除了egreg的回答之外:
如果取消它添加的组,则可以使环境更加透明。但是,您需要在最终代码中定义环境名称以使最终测试顺利进行。请注意,如果您使用其中一个\begin{identity}
或\end{identity}
不使用另一个,这将不会给您正确的警告消息。相反,您会在警告消息中得到一个不同的环境名称。
\documentclass{article}
\makeatletter
\newenvironment{identity}
{\endgroup\ignorespaces}
{\begingroup\def\@currenvir{identity}\ignorespacesafterend}
\makeatother
\begin{document}
\newcommand\test{Grouping!}
\begin{identity}
Some text ...
\renewcommand\test{No Grouping!}
This is the environment ``\csname @currenvir\endcsname''.
%\tracingonline=1
%\showgroups
\end{identity}
Grouping? \test
\end{document}
测试文件显示,内容没有进行有效的分组。
答案2
没有一个预定义的环境什么都不做。你可以用
\begin{empty}
Text
\end{empty}
但这会增加不必要的空格。所以可能
\newenvironment{identity}
{\ignorespaces}
{\ignorespacesafterend}
就是你所需要的。请注意,这将添加一个分组级别,因此真的“没做什么”。