我有一些作为命令和环境实现的功能。
\NewDocumentCommand{\dkmKtlog}{ O{0.3cm} m m }
{
DO THIS
}
\NewDocumentEnvironment{dkmKtlog}{ O{0.3cm} m }
{ DO THAT }
{ CLOSE THAT }
已经决定命名它们的最佳方法是让命令以通常的 开头,\
而环境版本只使用不带 的名称\
。这是一种明智的做法吗?或者是否有一些标准方法可以解决所有这些问题?
答案1
latex 环境foo
通过两个命令\foo
和来实现\endfoo
。
如果您尝试建议的代码,那么您将收到环境已定义的错误
\documentclass{article}
\NewDocumentCommand{\dkmKtlog}{ O{0.3cm} m m }
{
DO THIS
}
\NewDocumentEnvironment{dkmKtlog}{ O{0.3cm} m }
{ DO THAT }
{ CLOSE THAT }
\begin{document}
\end{document}
生产
! LaTeX cmd Error: Environment 'dkmKtlog' already defined.
For immediate help type H <return>.
...
l.9 { CLOSE THAT }
?
原则上可以\dkmKtlog
检测到它处于环境的开始代码中,从而改变其行为,例如 beamer 可以拥有它\begin{frame}
,\frame{....}
但它会导致非标准接口,因此并不真正推荐。
答案2
可能您不需要额外定义环境:
使用许多宏,您可以同时执行\macro{<argument>}
和\begin{macro}{<argument>}...\end{macro}
,这\begin{macro}{<argument>}
只是\macro{<argument>}
在组/本地范围内调用的一种更微妙的方式。
以防万一,您\end{macro}
只\relax
需要定义\endmacro
“手动”。
例如,\begingroup\bfseries...\endgroup
您可以这样做\begin{bfseries}...\end{bfseries}
。
然而,当环境启动一种机制时,情况就不同了,该机制本身不仅处理环境的参数,而且还处理本地范围内环境主体的标记,例如,通过处理-type -argumentverbatim
定义的环境。\NewDocumentEnvironment
b