情况
我正在使用 nomencl 和自定义 *.ist 文件。我在各种帖子中找到了所需的代码片段,我将它们组合起来以满足我的需求,但不幸的是,我从未真正理解我在做什么,尤其是\makeatletter
和之间的“样式”代码\makeatother
。
MikTex 2.9
TeXnicCenter 2.02
问题描述
现在输出几乎是我想要的,但每个 nomgroup 都有相同的子标题,符号 - 说明 - 单位(见下面的示例截图)。单元是强制性的常量组,这是不希望的缩略词或者上标组。因此,我希望每个组都有不同的子标题。
到目前为止有帮助的手动解决方法是
- 编译多次,直到一切正常
- 打开 *.nls 文件,搜索单元并手动删除/更改它
- 使用调整后的 *.nls 运行最终编译
显然,每次我编译文档时都需要重复这种手动干预,因为每次都会重新生成 *.nls。
我的问题
- 如何/是否可以使用布尔变量来触发出现单元?
或者 - 如何/如果我可以使用放置在位置的变量(可能在 nomgroup 定义中?)单元在副标题中?
我的第二个问题
我发现了许多适用于 nomencl 的 MWE,不需要额外的软件包,但无论是在我的电脑还是在我同事的电脑上,都没有对我有用。在我的 MWE 中调用的软件包是启用 nomencl 所必需的(即使对于超级简单的 MWE),尤其是\longtable
、\nomentbl
、\booktabs
,当然\etoolbox
只有在更高级的修改时才需要。
平均能量损失
\documentclass{article}
\usepackage{nomencl}
\usepackage{longtable}
\usepackage{nomentbl}
\usepackage{booktabs}
\usepackage{etoolbox}
% define and format nomenclature groups
\renewcommand\nomgroup[1]{%
\Large\sffamily\bfseries
\ifstrequal{#1}{A}{Acronyms}{%
\ifstrequal{#1}{L}{Latin Symbols}{%
\ifstrequal{#1}{G}{Greek Symbols}{%
\ifstrequal{#1}{S}{Superscripts}{%
\ifstrequal{#1}{U}{Subscripts}{%
\ifstrequal{#1}{C}{Constants}{}}}}}}
}
% nomenclature style
\makeatletter
\def\@@@nomenclature[#1]#2#3#4#5{%
\def\@tempa{#2}\def\@tempb{#3}%
\protected@write\@nomenclaturefile{}%
{\string\nomenclatureentry{%
#1\nom@verb\@tempa @{\nom@verb\@tempa}&%
\begingroup\nom@verb\@tempb\endgroup &\begingroup#4\endgroup&%
\begingroup#5\endgroup&\begingroup\protect\nomeqref{\theequation}%
|nompageref}{\thepage}}%
\endgroup
\@esphack}
\renewcommand\nomenclature[4][]{\@nomenclature[#1]{#2}{#3}{}{#4}}
\makeatother
\makenomenclature
\begin{document}
\mbox{}
\nomenclature[l]{$l$}{Length No 1}{m}
\nomenclature[L]{$m$}{Mass}{kg}
\nomenclature[l]{$l$}{Length No 2}{m}
\nomenclature[A]{$a$}{a test}{}
\nomenclature[G]{$\eta$}{Efficiency}{1}
\nomenclature[S]{0}{Standard State}{}
\nomenclature[U]{th}{thermal}{}
\nomenclature[C]{$F$}{Faraday Constant}{96485\,As\,mol\textsuperscript{-1}}
\printnomenclature
\end{document}
*.ist 文件
actual '@'
quote '%'
delim_0 ""
delim_1 ""
delim_2 ""
item_0 ""
delim_t " \\\\\n"
line_max 1000
heading_prefix "\\multicolumn{4}{l}{\\nomgroup{"
heading_suffix "}} \\\\\n\\nopagebreak\\\\*\n\\nopagebreak
\\multicolumn{1}{l}{\\bfseries Symbol} & \\multicolumn{1}{l}{\\bfseries Description} & & %
\\multicolumn{1}{l}{\\bfseries Unit} \\\\ \\toprule \n\\nopagebreak"
headings_flag 1
group_skip "\\\\*"
preamble "\n\\begin{thenomenclature}\n%
\\begin{longtable}[l]{lp{\\textwidth*\\real{0.5}}c!{\\extracolsep{\\fill}}ll}\n%
\\endfirsthead
\\bfseries Symbol & \\bfseries Description & & \\bfseries%
Unit \\\\ \\toprule \\endhead"
postamble "\n\\end{longtable}\n\n\\end{thenomenclature}\n"
keyword "\\nomenclatureentry"
答案1
在您的.ist
文件中,替换Unit
为\\Unit
。
在您的.tex
文件中,将\nomgroup
定义替换为
% define and format nomenclature groups
\newcommand{\Unit}{Unit}
\newcommand{\noUnit}{\gdef\Unit{}}
\renewcommand\nomgroup[1]{%
\gdef\Unit{Unit}%
\Large\sffamily\bfseries
\ifstrequal{#1}{A}{Acronyms\noUnit}{%
\ifstrequal{#1}{L}{Latin Symbols}{%
\ifstrequal{#1}{G}{Greek Symbols}{%
\ifstrequal{#1}{S}{Superscripts\noUnit}{%
\ifstrequal{#1}{U}{Subscripts\noUnit}{%
\ifstrequal{#1}{C}{Constants}{}}}}}}
}
makeindex
然后再次运行(pdf)latex
。