上次我问过:如何检查命令是否被使用多次?
这次,我希望如果两个或多个命令具有相同的定义,LaTeX 会抛出一条错误消息。
这是允许的
\documentclass{article}
\newcommand{\one}{Definition 1}
\newcommand{\two}{Definition 2}
\newcommand{\three}{Definition 3}
\begin{document}
\one
\two
\three
\end{document}
这应该会抛出一个错误消息
\documentclass{article}
\newcommand{\one}{Definition 1}
\newcommand{\two}{Definition 1} % Definition already exists!
\newcommand{\three}{Definition 3}
\begin{document}
\one
\two
\three
\end{document}
编辑
- 我希望在定义点出现错误。
- 如果该定义已存在于另一个命令中,则会出错。
答案1
使用\newuniquecommand
而不是\newcommand
。
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \newuniquecommand { m O{0} o +m }
{
\bool_set_false:N \l_schneider_alreadydefined_bool
\prop_map_inline:Nn \g_schneider_commands_prop
{
\str_if_eq:nnT { ##2 } { #4 }
{
\bool_set_true:N \l_schneider_alreadydefined_bool
\prop_map_break:
}
}
\bool_if:NTF \l_schneider_alreadydefined_bool
{ <ERROR! add what you want to output in case of error> }
{
\prop_gput:Nnn \g_schneider_commands_prop { #1 } { #4 }
\IfValueTF {#3}
{ \newcommand #1 [#2] [#3] {#4} }
{ \newcommand #1 [#2] {#4} }
}
}
\bool_new:N \l_schneider_alreadydefined_bool
\prop_new:N \g_schneider_commands_prop
\ExplSyntaxOff