从现有命令创建 \newcommand

从现有命令创建 \newcommand

因此,我一直在使用nomencl以下包\newcommand,以避免必须输入缩写然后输入命令\nomenclature

\newcommand*{\nom}[2]{#1\nomenclature{#1}{#2}}  %shortcut to \nom & leave abbv in place

我想在使用 \nomenclature 的可选参数时复制此功能 -\nomenclature[]{}{}因此输入(\nom[g]{N}{nematic})将在文本中给出 (n) 并在命名法列表中给出一个条目...

我尝试过这个:

\newcommand*{\nom}[3]{#2\nomenclature[#1]{#2}{#3}}

这不管用,我不太明白我该怎么做,而且我显然做错了什么。希望得到一些帮助。

谢谢

答案1

也许是这样的?

\NewDocumentCommand{\nom}{somm}{%
  \IfBooleanF{#1}{%
    (#3)%
  }%
  \IfValueTF{#2}{%
    \nomenclature[#2]{#3}{#4}%
  }{%
    \nomenclature{#3}{#4}%
  }%
}

这定义了\nom可选参数#2(用于前缀)和两个强制参数#3#4。如果\nom*使用,则(#3)禁用的显式打印。

检查\IfValueTF{#2}是否[]已经使用过(True/False), the same is true of\IfBooleanTF{#1}`,用于检查带星号的版本。

\documentclass{article}

\usepackage{nomencl}

\usepackage{xparse}


\NewDocumentCommand{\nom}{somm}{%
  \IfBooleanF{#1}{%
    (#3)%
  }%
  \IfValueTF{#2}{%
    \nomenclature[#2]{#3}{#4}%
  }{%
    \nomenclature{#3}{#4}%
  }%
}
\makenomenclature


\begin{document}


\nom[g]{N}{nematic}

\nom*{F}{oomatic}

\nom{T}{eX}

\printnomenclature
\end{document}

在此处输入图片描述

答案2

尝试

\newcommand*{\nom}[3][]{#2\nomenclature[#1]{#2}{#3}}

答案3

如果缺少可选参数,则必须以不同的方式调用,因此更方便的方法是xparse

\usepackage{xparse}

[...]

\NewDocumentCommand{\nom}{ o m m }{%
  #2% the text to print
  \IfNoValueTF{#1}
    {\nomenclature{#2}{#3}}% no optional argument
    {\nomenclature[#1]{#2}{#3}}% with optional argument
}

遗留定义(没有xparse)可能是

\newcommand{\nom}[3][]{% default value of opt arg is empty
  #2% the text to print
  \if\relax\detokenize{#1}\relax
    \nomenclature{#2}{#3}% no optional argument
  \else
    \nomenclature[#1]{#2}{#3}% with optional argument
  \fi
}

相关内容