是否可以自动将包\nomlabelwidth
的设置nomencl
为最宽的元素?
手册只提供了将其设置为固定宽度的选项作为 的参数printbibliography
。对我来说,这有点像反复试验。
如果可能的话,有人知道如何自动实现这一点吗?
我没有 MWE,因为这实际上不是什么问题。
答案1
有一种方法描述在nomencl
手动的,第 5.3 节:“使用长表代替列表”。
首先,nomencl.ist
在您的工作目录中复制一份,并在其末尾添加以下几行:
item_0 ""
delim_t " \\\\\n"
原始文件的路径是TEXMF\makeindex\nomencl
(kpsewhich 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 节:“使用长表代替列表”一切都很好,除了两件事:
- 它不尊重
intoc
选择 - 它不能正确处理不适合一行的注释:即没有自动换行符
我查看了nomencl.sty
修复前者的方法,并切换到longtabu
环境,longtable
从修改的环境禁忌包,它支持X
正确断开长行的列类型,以修复后者。
第一步与命名手册(和卡尔科勒的答案)。在您的工作目录中复制一份nomencl.ist
,并在其末尾添加以下几行:
item_0 ""
delim_t " \\\\\n"
原始文件的路径是TEXMF\makeindex\nomencl
。
然后,我编辑了部分。在您的.tex
文件中,加载包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
梅威瑟:
\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}
输出: