\newcommand 带有可选参数

\newcommand 带有可选参数

这个想法是将命令定义为

\newcommand{\mycommand}{This is the official long name}

我使用它作为\mycommand在文档中多次使用它。但有时我想要一个简短的名称,例如 \mycommand[short name],其中简称代替这是官方的长名称。这能以简单的方式实现吗?

答案1

比 Peter Grill 的更简单,但使用了相同的理念。

\documentclass{article}

\usepackage{xparse}

\NewDocumentCommand{\definealtcommand}{mmm}{%
  \NewDocumentCommand{#1}{s}{\IfBooleanTF{##1}{#3}{#2}}%
}

\definealtcommand{\mycommand}{This is the official long name}{Short name}

\begin{document}

\mycommand\ (Long version)

\mycommand* (Short version)

\end{document}

如果您希望输出中出现空格,请记住在 后面添加{}或而不添加\\mycommand*

在此处输入图片描述

答案2

以下是我的做法。使用\SetMyTitle{<sort title>}{<long title>}来定义两个都长标题和短标题。然后使用,\MyTitle您将获得长标题和\MyTitle*短标题:

在此处输入图片描述


另一个选项是\SetMyTitle{<long title>}通过 定义和访问它\MyTitle。如果您希望提供一个简短的标题,您可以提供可选参数\MyTitle{<short title>}

代码:Recommended

\documentclass{article}
\usepackage{xparse}

\makeatletter
\newcommand*{\@MyLongTitle}{}
\newcommand*{\@MyShortTitle}{}
\newcommand*{\SetMyTitle}[2]{%
    \def\@MyLongTitle{#2}%
    \def\@MyShortTitle{#1}%
}
\NewDocumentCommand{\MyTitle}{s}{%
    {\bfseries\IfBooleanTF{#1}{\@MyShortTitle}{\@MyLongTitle}}%
}%
\makeatother

\begin{document}

\SetMyTitle{ShortTitle}{This is the official long name}

Long title is: \MyTitle

Short title is: \MyTitle*

\end{document}

代码:Alternate

\documentclass{article}
\usepackage{xparse}

\makeatletter
\newcommand*{\@MyTitle}{}
\newcommand*{\SetMyTitle}[1]{%
    \def\@MyTitle{#1}%
}
\NewDocumentCommand{\MyTitle}{o}{%
    {\bfseries\IfNoValueTF{#1}{\@MyTitle}{#1}}%
}%
\makeatother

\begin{document}

\SetMyTitle{This is the official long name}

Long title is: \MyTitle

Short title is: \MyTitle[Short Title]

\end{document}

答案3

acronym也可以使用功能强大的软件包来实现此目的:

\documentclass{article}
\usepackage{acronym}
\newacro{my}[short name]{This is the official long name}

\begin{document}
``\acl{my}'' is the long version.

The short version is ``\acs{my}''.
\end{document}

结果

当然,该软件包acronym还有很多其他功能,请参阅软件包文档

答案4

还有一个简单的版本:

\documentclass{article}
\newcommand{\mycommand}[1][This is the official long name]{#1}    

\begin{document}
    \mycommand

    \mycommand[Short name]
\end{document}

相关内容