如何使用 nomencl 将标签宽度设置为最宽元素?

如何使用 nomencl 将标签宽度设置为最宽元素?

是否可以自动将包\nomlabelwidth的设置nomencl为最宽的元素?

手册只提供了将其设置为固定宽度的选项作为 的参数printbibliography。对我来说,这有点像反复试验。

如果可能的话,有人知道如何自动实现这一点吗?

我没有 MWE,因为这实际上不是什么问题。

答案1

有一种方法描述在nomencl手动的,第 5.3 节:“使用长表代替列表”

首先,nomencl.ist在您的工作目录中复制一份,并在其末尾添加以下几行:

item_0  ""
delim_t " \\\\\n"

原始文件的路径是TEXMF\makeindex\nomenclkpsewhich nomencl.ist如果您不确定在哪里找到它,请从命令行运行)。

然后,在您的.tex文件中,加载包longtable并在序言中添加以下几行:

\makeatletter
\def\@@@nomenclature[#1]#2#3{%
  \def\@tempa{#2}\def\@tempb{#3}%
  \protected@write\@nomenclaturefile{}%
    {\string\nomenclatureentry{#1\nom@verb\@tempa @{\nom@verb\@tempa}&%
      \begingroup\nom@verb\@tempb\protect\nomeqref{\theequation}%
        |nompageref}{\thepage}}%
    \endgroup
  \@esphack}
\def\thenomenclature{%
  \@ifundefined{chapter}{\section*}{\chapter*}{\nomname}%
  \nompreamble
  \begin{longtable}[l]{@{}ll@{}}}
\def\endthenomenclature{%
  \end{longtable}%
  \nompostamble}  
\makeatother

您的thenomenclature环境现在是一个longtable环境,而不是一个列表。

梅威瑟:

\documentclass{article}

\usepackage{nomencl}
\usepackage{longtable}

\makeatletter
\def\@@@nomenclature[#1]#2#3{%
  \def\@tempa{#2}\def\@tempb{#3}%
  \protected@write\@nomenclaturefile{}%
    {\string\nomenclatureentry{#1\nom@verb\@tempa @{\nom@verb\@tempa}&%
      \begingroup\nom@verb\@tempb\protect\nomeqref{\theequation}%
        |nompageref}{\thepage}}%
    \endgroup
  \@esphack}
\def\thenomenclature{%
  \@ifundefined{chapter}{\section*}{\chapter*}{\nomname}%
  \nompreamble
  \begin{longtable}[l]{@{}ll@{}}}
\def\endthenomenclature{%
  \end{longtable}%
  \nompostamble}  
\makeatother

\makenomenclature

\begin{document}

\[F=ma\]

\nomenclature{$F$}{Force}
\nomenclature{$a$}{Acceleration}
\nomenclature{$m$}{Mass}

\nomenclature{very long entry}{A very long entry}

\printnomenclature

\end{document} 

输出:

在此处输入图片描述

答案2

这个答案延伸卡尔科勒的答案。在命名手册,第 5.3 节:“使用长表代替列表”一切都很好,除了两件事:

  1. 它不尊重intoc选择
  2. 它不能正确处理不适合一行的注释:即没有自动换行符

我查看了nomencl.sty修复前者的方法,并切换到longtabu环境,longtable从修改的环境禁忌包,它支持X正确断开长行的列类型,以修复后者。

第一步与命名手册(和卡尔科勒的答案)。在您的工作目录中复制一份nomencl.ist,并在其末尾添加以下几行:

item_0  ""
delim_t " \\\\\n"

原始文件的路径是TEXMF\makeindex\nomencl

然后,我编辑了部分。在您的.tex文件中,加载包longtabletabu在序言中添加以下几行:

\makeatletter
\def\@@@nomenclature[#1]#2#3{%
  \def\@tempa{#2}\def\@tempb{#3}%
  \protected@write\@nomenclaturefile{}%
    {\string\nomenclatureentry{#1\nom@verb\@tempa @{\nom@verb\@tempa}&%
      \begingroup\nom@verb\@tempb\protect\nomeqref{\theequation}%
        |nompageref}{\thepage}}%
    \endgroup
  \@esphack}
\def\thenomenclature{%
  \@ifundefined{chapter}%
  {
    \section*{\nomname}
    \if@intoc\addcontentsline{toc}{section}{\nomname}\fi%
  }%
  {
    \chapter*{\nomname}
    \if@intoc\addcontentsline{toc}{chapter}{\nomname}\fi%
  }%
  \nompreamble
  \begin{longtabu} to \textwidth {@{}lX@{}}}
\def\endthenomenclature{%
  \end{longtabu}
  \nompostamble}
\makeatother

梅威瑟:

\documentclass{article}

\usepackage[intoc]{nomencl}
\usepackage{longtable,tabu}

\makeatletter
\def\@@@nomenclature[#1]#2#3{%
  \def\@tempa{#2}\def\@tempb{#3}%
  \protected@write\@nomenclaturefile{}%
    {\string\nomenclatureentry{#1\nom@verb\@tempa @{\nom@verb\@tempa}&%
      \begingroup\nom@verb\@tempb\protect\nomeqref{\theequation}%
        |nompageref}{\thepage}}%
    \endgroup
  \@esphack}
\def\thenomenclature{%
  \@ifundefined{chapter}%
  {
    \section*{\nomname}
    \if@intoc\addcontentsline{toc}{section}{\nomname}\fi%
  }%
  {
    \chapter*{\nomname}
    \if@intoc\addcontentsline{toc}{chapter}{\nomname}\fi%
  }%
  \nompreamble
  \begin{longtabu} to \textwidth {@{}lX@{}}}
\def\endthenomenclature{%
  \end{longtabu}
  \nompostamble}
\makeatother

\makenomenclature

\begin{document}

\[F=ma\]

\tableofcontents{}

\nomenclature{$F$}{Force}
\nomenclature{$a$}{Acceleration}
\nomenclature{$m$}{Mass}

\nomenclature{very long entry}{A very long entry that is also large enough to not fit a single line, and so on, and so forth}

\printnomenclature

\end{document}

输出:

在此处输入图片描述

相关内容