如何检查一个命令的定义是否被使用了多次?

如何检查一个命令的定义是否被使用了多次?

上次我问过:如何检查命令是否被使用多次?

这次,我希望如果两个或多个命令具有相同的定义,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

相关内容