因此,我一直在使用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
}