我正在寻找一个命令,如果我只写入,它将输出 $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 没有模块或命名空间的概念;谨慎使用唯一的前缀(或后缀)是应对这一缺失功能的合理方法。