是否可以检查某些宏的可选参数是否具有其默认值并根据此条件生成不同的输出?
例如,我定义:
\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}