![命名组,包括一些命名组和一些未命名组](https://linux22.com/image/433900/%E5%91%BD%E5%90%8D%E7%BB%84%EF%BC%8C%E5%8C%85%E6%8B%AC%E4%B8%80%E4%BA%9B%E5%91%BD%E5%90%8D%E7%BB%84%E5%92%8C%E4%B8%80%E4%BA%9B%E6%9C%AA%E5%91%BD%E5%90%8D%E7%BB%84.png)
我正在尝试使用该包匹配 AIAA 期刊命名格式nomencl
。AIAA 的命名法有点奇怪,因为组名只允许用于上标和下标,其余的英文字母和希腊字母都集中在一起,没有组名。请参阅https://www.aiaa.org/publications/journals/Journal-Author/nomenclature-guidelines作为示例命名法。
到目前为止,我已经很幸运地将命名法格式化为正确的格式,但是在制作按字母顺序正确排列但没有出现在组名下的条目时遇到了麻烦。
这是我的 MWE:
% arara: pdflatex
% arara: nomencl
% arara: pdflatex
\documentclass[english]{article}
\usepackage[utf8]{inputenc}
\usepackage{nomencl, multicol, ifthen, etoolbox} %for nomenclature
\makenomenclature
\newif\ifnomentry
\renewcommand{\nomlabel}[1]{#1\hfill\hspace{\labelsep}\ifnomentry$=$\fi}
\setlength{\nomlabelwidth}{1cm} %space alotted to nomenclature
\renewcommand\nomgroup[1]{%
\nomentryfalse
\item[%
\ifstrequal{#1}{C}{Symbols}{%
\ifstrequal{#1}{G}{Greek Symbols}{%
\ifstrequal{#1}{X}{Superscripts}{%
\ifstrequal{#1}{Y}{Subscripts}{%
{}}}}}%
]
\nomentrytrue
}
\begin{document}
\mbox{}
\printnomenclature
\nomenclature[C]{$c$}{Test english}
\nomenclature[G]{$\gamma$}{Test greek}
\nomenclature[X]{$\alpha$}{Test superscript}
\nomenclature[Y]{$\beta$}{Test subscript}
\end{document}
这产生了如下图所示的命名法:
本质上,我想删除“符号”和“希腊符号”的组名,而不留下空行。我尝试用 替换“符号”一词\vspace{-\parsep}
,但似乎没有任何效果。
在此先感谢您的帮助。
更新:
我在浏览文档时想出了一个办法nomencl
。使用以下命令\nomgroup
\renewcommand\nomgroup[1]{%
\nomentryfalse
\ifstrequal{#1}{C}{\item[]\vspace{-\baselineskip}}{%
\ifstrequal{#1}{G}{\item[]\vspace{-\baselineskip}}{%
\ifstrequal{#1}{X}{\item[Superscripts]}{%
\ifstrequal{#1}{Y}{\item[Subscripts]}{%
{}}}}}%
\nomentrytrue
}
给出了接近正确的效果,但我无法确定\vspace
应该使用多少负数来使垂直间距一致。有没有更擅长 LaTeX 间距的人可以帮我解决?
答案1
只是不要发出\item
:
\renewcommand\nomgroup[1]{%
\nomentryfalse
\ifstrequal{#1}{X}{\item[Superscripts]}{%
\ifstrequal{#1}{Y}{\item[Subscripts]}{%
{}}}%
\nomentrytrue
}
不管怎样,看到这段代码我的眼睛都会出血。;-)
% arara: pdflatex
% arara: nomencl
% arara: pdflatex
\documentclass{article}
\usepackage{nomencl,etoolbox}
\makenomenclature
\newif\ifnomentry
\renewcommand{\nomlabel}[1]{#1\hfill\hspace{\labelsep}\ifnomentry$=$\fi}
\setlength{\nomlabelwidth}{1cm} %space alotted to nomenclature
\ExplSyntaxOn % define a user level interface to \str_case:nn
\NewExpandableDocumentCommand{\stringcase}{mm}
{
\str_case:nn { #1 } { #2 }
}
\ExplSyntaxOff
\renewcommand\nomgroup[1]{%
\nomentryfalse
\stringcase{#1}{
{X}{\item[Superscripts]}
{Y}{\item[Subscripts]}
}
\nomentrytrue
}
\begin{document}
\mbox{}
\printnomenclature
\nomenclature[C]{$c$}{Test english}
\nomenclature[G]{$\gamma$}{Test greek}
\nomenclature[X]{$\alpha$}{Test superscript}
\nomenclature[Y]{$\beta$}{Test subscript}
\end{document}
更短、更具表现力、更易于维护,不是吗?
答案2
好吧,我无意中在这里回答了我自己的问题。下面的方法\nomgroup
似乎可以满足我的要求。如果有人知道比\vspace
连续三个命令更简洁的方法,请告诉我。
\renewcommand\nomgroup[1]{%
\nomentryfalse
\ifstrequal{#1}{C}{\item[]\vspace{-\baselineskip}\vspace{-\itemsep}\vspace{-\parsep}}{%
\ifstrequal{#1}{G}{\item[]\vspace{-\baselineskip}\vspace{-\itemsep}\vspace{-\parsep}}{%
\ifstrequal{#1}{X}{\item[Superscripts]}{%
\ifstrequal{#1}{Y}{\item[Subscripts]}{%
{}}}}}%
\nomentrytrue
}
最后结果: