插入格式化文本的宏:def、let 还是什么?

插入格式化文本的宏:def、let 还是什么?

我想用一个命令插入格式化文本(我事先知道文本):

 {\addfontfeature{LetterSpace=20.0}Решение}\

如何将其“绑定”到宏?我试过:

 \def\sol#0 {{\addfontfeature{LetterSpace=20.0}Решение}}
 \let\sol {{\addfontfeature{LetterSpace=20.0}Решение}}

两者都出错了。我肯定我漏掉了一些琐碎的事情。

答案1

不要用于\def这些事情,只\newcommand在使用 LaTeX 时使用:

\newcommand*\sol{{\addfontfeature{LetterSpace=20.0}Решение}}

\def\let是纯 TeX 命令,建议使用 LaTeX 等效命令。对于你的情况,正确的使用方式\def是:

\def\sol{{\addfontfeature{LetterSpace=20.0}Решение}}

\let允许您复制命令,例如:

\let\solcopy\sol

现在您可以\sol用进行更改\renewcommand

另请参阅:

答案2

\def您对和的调用\let都是有缺陷的。对于第一个,要定义一个没有参数的宏,您只需编写\def\sol{...},而不使用#0:这些术语#n并不意味着“这个宏有这么多参数”,而是“这是第 n 个参数”。因此,对于一个参数,您可以使用\def\sol#1{...},对于两个参数\def\sol#1#2{...},等等。也可以在参数之间散布其他内容来为宏创建上下文,但这与此无关。

对于第二个,\let定义一个宏名称等于其他标记,而不是括号组。所以你写的

\let\sol {{\addfontfeature{LetterSpace=20.0}Решение}}

与写一些具有以下更明显意图的内容相同:

\let\sol {
{\addfontfeature{LetterSpace=20.0}Решение}}

意思是\sol变成了左括号,然后 TeX 尝试处理剩余部分,而剩余部分有一个多余的右括号(因为另一对括号刚好被 吃掉了\let)。这就是你的错误。

话虽如此,正如 Silex 所写,最好只使用\newcommand;\def并且\let对于高级文档来说太原始​​了。所以:

\newcommand\sol{{\addfontfeature{LetterSpace=20.0}Решение}}

附注:你应该省略\defand后面的空格\let;虽然这在这里是无害的,但 TeX 中不必要的空格将要导致问题(见这个)。

答案3

噢,我找到了:

\newcommand\sol{{\addfontfeature{LetterSpace=20.0}Решение}\par}

相关内容