如何在新命令中添加可选参数?

如何在新命令中添加可选参数?

我正在寻找一个命令,如果我只写入,它将输出 $C$,\c如果我写入,它将输出 $15C$ \c{15}。如何做到这一点?

\newcommand{\c}{$C$}

答案1

虽然从技术上讲可行,但创建带有括号分隔的可选参数的命令并不是一个好主意:这在 LaTeX 中非常不标准,而且可能会造成混淆。LaTeX 的标准语法是用方括号分隔可选参数,您可以这样操作:

\newcommand*{\cc}[1][]{$#1C$}

[]意味着该命令有一个可选参数,并且其默认值为空(\newcommand最多支持一个可选参数,并且必须放在第一位;如果您想要更多的权力和自由,请使用\NewDocumentCommand和朋友,如果您使用 2020-10-01 或更高版本的 LaTeX 格式,它们已经可用,否则只需要一个\usepackage{xparse})。如果用 替换[][abc]默认值为abc

$C$这是一个有效的定义,当没有[时,就会产生\cc$15C$例如,当您输入\cc[15]

请注意,我没有使用您建议的名称\c,否则会出现错误LaTeX Error: Command \c already defined。事实上,该\c命令在纯 TeX 和 LaTeX 中已经存在:它用于生成变音符。例如,\c{e}打印e带有变音符的(无论其含义如何;çÇ,可以使用和获得\c{c}\c{C}用于法语单词,例如“remplaçant”和“Ça”)。

在命名个人宏时,你可以选择你想要的名称,只要它们不与已经定义的命令冲突。一般来说,应该避免使用单字母命令名,因为它们很可能被某些标准宏包(普通的 TeX、LaTeX,amsmath也许……)使用。安全名称包含你或你的项目独有的部分;在编写类或包时,几乎总是使用这样的名称(至少对于内部宏而言)。在这个网站上,我们经常使用诸如\myCommand或 之类的名称\my@command,暗示你用my更个性化的东西来替换(因为如果你\myCommand从一个答案中取一个,而\myCommand从另一个答案中取另一个,它们很可能会发生冲突!)。TeX 没有模块或命名空间的概念;谨慎使用唯一的前缀(或后缀)是应对这一缺失功能的合理方法。

相关内容