如何检查可选参数是否具有其默认值?

如何检查可选参数是否具有其默认值?

是否可以检查某些宏的可选参数是否具有其默认值并根据此条件生成不同的输出?

例如,我定义:

\documentclass{article}

\newcounter{item}[section]
\newcommand{\myitem}[1][the default]{\refstepcounter{item}Item{{~\theitem}}: This is #1.\newline}

\begin{document}

\section{Default Item}

\myitem

\section{Special Items}

\myitem[special case 1]
\myitem[special case 2]

\end{document}

如果参数不是其默认值,如何才能输出双花括号中的计数器?具体来说,我想仅从此示例中第一部分中的单个项目中删除计数器。

在此处输入图片描述

答案1

您可以使用xparse

\documentclass{article}
\usepackage{xparse}

\newcounter{item}[section]
\NewDocumentCommand{\myitem}{o}{%
  \par\noindent
  \refstepcounter{item}%
  Item\IfValueT{#1}{~\theitem}: %
  This is \IfNoValueTF{#1}{the default}{#1}.\par
}

\begin{document}

\section{Default Item}

\myitem

\section{Special Items}

\myitem[special case 1]
\myitem[special case 2]

\end{document}

在此处输入图片描述

答案2

不是最好的方法(除非跳入latex.ltx并跟踪\@xargdef等定义)

首先将默认参数定义为检查外部\myitem和内部的宏(比如)。\myitem\ifx\@temp@\myitemdefault

\documentclass{article}

\newcounter{item}[section]

\makeatletter
\def\myitemdefault{the default}

\newcommand{\myitem}[1][\myitemdefault]{%
  \edef\@temp@{#1}
  \ifx\myitemdefault\@temp@%
  This is the default stuff!%
  \else
  \refstepcounter{item}Item{{~\theitem}}: This is #1.%

  \fi
}
\makeatother

\begin{document}

\section{Default Item}

\myitem

\section{Special Items}

\myitem[special case 1]
\myitem[special case 2]

\end{document}

相关内容