因此,我定义了一个环境{sseqpage}
,其中环境主体由控制图像外观的选项组成。如果没有主体,则图像仍可以正常显示。因此,我定义了一个命令,它是我的环境副本的简写,其中主体为空\begin{sseqpage}[#1]\end{sseqpage}
。
我现在想定义该命令来检查它是否被用作环境,如下所示:
\def\sseqpage{%
\def\sseq@temp{sseqpage}%
\ifx\@currenvir\sseq@temp
\@xp\sseqpage@environmentcase % we're being used as an environment
\else
\@xp\sseqpage@commandcase
\fi
}
例如请注意,tikz
可以使用像这样的恶作剧来制作\tikz
和\begin{tikz} ... \end{tikz}
工作,而不是调用环境形式{tikzpicture}
。
这样做有什么缺点?
答案1
虽然从技术上讲这是可行的,但这会破坏记录的乳胶语法(或者是记录的语法,取决于不清楚的细节)。
LaTeX 文档规定任何命令都可以用作环境,因此
\begin{small}...\end{small}
就像
{\small ...}
即使没有small
定义特定的环境。
类似地,如果你已经定义了一个命令
\newcommand\sseqpage[1][foo]{....}
那么已经支持以下任何一项
\sseqpage
\sseqpage[zzz]
\begin{sseqpage}...\end{sseqpage}
\begin{sseqpage}[zzz]...\end{sseqpage}
如果您的定义草图\sseqpage
在环境范围内,它的行为会有所不同sseqpage
,这本身并不一定是坏事(例如enumerate
,如果它在范围内,它的行为会有所不同enumerate
),但您的编码暗示两个\...case
命令的语法可能不同,这会使上下文相关的语法\ssseqpage
可能会造成混淆,并且并不真正遵循乳胶语法风格。