情况

情况

情况

我正在使用 nomencl 和自定义 *.ist 文件。我在各种帖子中找到了所需的代码片段,我将它们组合起来以满足我的需求,但不幸的是,我从未真正理解我在做什么,尤其是\makeatletter和之间的“样式”代码\makeatother

MikTex 2.9
TeXnicCenter 2.02

问题描述

现在输出几乎是我想要的,但每个 nomgroup 都有相同的子标题,符号 - 说明 - 单位(见下面的示例截图)。单元是强制性的常量组,这是不希望的缩略词或者上标组。因此,我希望每个组都有不同的子标题。

到目前为止有帮助的手动解决方法是

  1. 编译多次,直到一切正常
  2. 打开 *.nls 文件,搜索单元并手动删除/更改它
  3. 使用调整后的 *.nls 运行最终编译

显然,每次我编译文档时都需要重复这种手动干预,因为每次都会重新生成 *.nls。

我的问题

  1. 如何/是否可以使用布尔变量来触发出现单元
    或者
  2. 如何/如果我可以使用放置在位置的变量(可能在 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"

最终输出(没有对 *.nls 文件进行手动调整)如下所示: 在此处输入图片描述

答案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

相关内容