我设置了这个新命令:
\newcommand{\dd}{{\rm d}}
我想以通用方式设置相同的命令。如下所示:
\newcommand{\##}{{\rm #}}
怎么做?
编辑:我设置的新命令(\newcommand{\dd}{{\rm d}}
)只对字母有效,d
对吗?
我想写相同的新命令,但现在可以使用任何字母。
答案1
使用 时\newcommand
,您可以为该命令指定“参数”的数量。这些参数就是您为该命令指定的“事物”。
例如,一个命令没有参数是你展示的:
\newcommand{\dd}{{\rm d}}
带有命令一参数可以定义为:
% ↓ number of arguments
\newcommand{\dd}[1]{{\rmfamily #1}}
% ↑↑ The first argument
因此当您使用它时,它将#1
被第一个参数替换。因此当您输入以下内容时:
\dd{hello}
被\dd
替换为:
{\rmfamily hello}
对于具有更多参数的命令也是如此。例如:
% ↓ number of arguments
\newcommand{\dd}[2]{{#1 #2}}
% ↑↑ The second argument
% ↑↑ The first argument
因此你可以使用,例如:
\dd{\rmfamily}{hello}
将被替换为
{\rmfamily hello}
可选参数
您可以通过指定默认值来定义可选参数:
% ↓ number of arguments
% ↓-------↓ Default value for the first argument
\newcommand{\dd}[2][\rmfamily]{{#1 #2}}
% ↑↑ The second argument
% ↑↑ The first argument
所以当你输入
\dd{hello}
或者
\dd[\rmfamily]{hello}
替换是相同的:
{\rmfamily hello}
但是如果你输入
\dd[\bfseries]{hello}
你会得到你好!
PS:不要使用\rm
,它已被弃用。\rmfamily
请使用。
答案2
您不能设置一个名称未知的宏,以便 TeX 解释宏名称,如果有两个相同的字母,则使用{\rmfamily <letter>}
,如果这是您的意思。(实际上这可能是可行的,因为您可以使用 TeX 做几乎任何事情,但对我来说似乎不是一个好主意。)
但是,您可以做的是编写一个包装器来\newcommand
简化这些宏的定义:
\documentclass[]{article}
\newcommand*\rmify[1]
{%
\expandafter\newcommand\csname #1#1\endcsname{{\rmfamily #1}}%
}
\rmify{d}
\rmify{r}
\begin{document}
\sffamily
d\dd r\rr
\end{document}
如果用于数学模式,请将\rmify
上面示例中的定义更改为:
\newcommand*\rmify[1]
{%
\expandafter\newcommand\csname #1#1\endcsname{\mathrm{#1}}
}
答案3
你似乎要求设置 TeX,以便
\xx
只要找到控制序列(x
任意字母),就会\mathrm{x}
产生。
然而,使用类似于您想要输入的简单指令,这是不可能的。每个控制序列都必须有自己的定义。
然而,利用一些技巧,可以用一个通用模式进行“批量定义”。
\documentclass{article}
\makeatletter
\count@=`\a\loop
\begingroup\lccode`X=\count255
\lowercase{\endgroup
\@ifundefined{XX}
{\expandafter\newcommand\csname XX\endcsname{\mathrm{X}}}
{\typeout{not redefining \@backslashchar XX}}%
}
\ifnum\count@<`\z \advance\count@ by 1 \repeat
\makeatother
\begin{document}
\texttt{\meaning\aa} % not changed
\texttt{\meaning\bb}
\texttt{\meaning\zz}
\end{document}
这将打印
控制台将显示
not redefining \aa
not redefining \gg
not redefining \ll
not redefining \ss
not redefining \tt
注意:我假设您想\dd
在数学模式中使用和类似的命令,但该语法{\rm d}
已被弃用二十多年;正确的语法是\mathrm{d}
。