创建一个与环境同名的命令是不是一个坏主意?

创建一个与环境同名的命令是不是一个坏主意?

因此,我定义了一个环境{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可能会造成混淆,并且并不真正遵循乳胶语法风格。

相关内容