我使用了给出的答案这个问题(尤其,这个答案由 egreg 编写,代码如下:
\documentclass{article}
\makeatletter
\def\ifemptyarg#1{%
\if\relax\detokenize{#1}\relax % H. Oberdiek
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\makeatother
\newcommand{\InfinityCircle}[1][]{%
\ifemptyarg{#1}
{S^1_\infty}%
{S^1_\infty\left(#1\right)}%
}
\begin{document}
\begin{enumerate}
\item Correct: $\InfinityCircle$
\item Incorrect: $\InfinityCircle{\lambda}$
\item What (2) should be: $\InfinityCircle(\lambda)$
\end{enumerate}
\end{document}
然而,正如输出中提到的,该命令不是相当正确,因为它似乎忽略了其定义中的括号:
遗憾的是,我对后端了解不够,不知道为什么会发生这种情况或如何修复它。有人能帮我得到想要的输出和/或展示一种更适合我想要完成的任务的替代方法吗?笔记:我真的如果可能的话,希望有一种方法可以避免加载任何包。
答案1
好吧,命令检查是否为空参数,在这种情况下,空参数是可选参数,应该以 而\InfinityCircle[\lambda]
不是 的形式给出\InfinityCircle{\lambda}
。
如果给出了可选项,则的命令定义\newcommand{\foo}[1][]
将只给出一个非空参数。但是仍然是空的。[...]
[]
在我看来,在 之后应该有一些负空间,\infty
或者直接使用(...)
来代替\left(...\right)
。
\documentclass{article}
\makeatletter
\def\ifemptyarg#1{%
\if\relax\detokenize{#1}\relax % H. Oberdiek
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\makeatother
\newcommand{\InfinityCircle}[1][]{%
\ifemptyarg{#1}
{S^1_\infty}%
{S^1_\infty\left(#1\right)}%
}
\begin{document}
\begin{enumerate}
\item Correct: $\InfinityCircle$
\item Incorrect: $\InfinityCircle[\lambda]$
\item What (2) should be: $\InfinityCircle(\lambda)$
\end{enumerate}
\end{document}
更新没有可选参数的版本
\documentclass{article}
\makeatletter
\def\ifemptyarg#1{%
\if\relax\detokenize{#1}\relax % H. Oberdiek
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\makeatother
\newcommand{\InfinityCircle}[1][]{%
\ifemptyarg{#1}{S^1_{\infty}}%
{S^1_{\infty}\left(#1\right)}%
}
\newcommand{\OtherInfinityCircle}[1]{%
\ifemptyarg{#1}{S^1_{\infty}}%
{S^1_{\infty}\left(#1\right)}%
}
\begin{document}
\begin{enumerate}
\item Correct: $\InfinityCircle$
\item Correct: $\InfinityCircle[\lambda]$
\item Also correct: $\OtherInfinityCircle{}$
\item Also correct: $\OtherInfinityCircle{\lambda}$
\end{enumerate}
\end{document}
更新 - 带有可选{}
分隔符的错误命令/编码样式 - 参数在前面;-)
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\InfinityCircle}{g}{%
\IfValueTF{#1}{%
S^1_{\infty}\left(#1\right)%
}{%
S^1_{\infty}%
}%
}
\begin{document}
\begin{enumerate}
\item Correct: $\InfinityCircle$
\item Correct: $\InfinityCircle{\lambda}$
\end{enumerate}
\end{document}