我有一个自定义词汇表,并且我在词汇表条目字段中定义了 user1 键,但它没有出现在词汇表列表中。
我希望单位列(useri)位于名称和描述之间。
\documentclass[11pt, a4paper]{article}
\usepackage{tabu}
% \usepackage{kima}% package style defined in a separate .sty file
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{float}
\usepackage[utf8]{inputenc}
\usepackage[toc, nonumberlist, acronym, section, nopostdot]{glossaries}
\makeglossaries
\begin{document}
\newglossarystyle{mystyle}{%
% put the glossary in a longtable environment:
\renewenvironment{theglossary}%
{\begin{longtable}{@{}p{0.12\textwidth}@{} p{0.08\textwidth}@{}p{0.6\textwidth}}}%
{\end{longtable}}
% Set the table’s header:
\renewcommand*{\glossaryheader}{%
%\bfseries Term & \bfseries Description & \bfseries Units &
%\bfseries Symbol & \bfseries Dimensions & \bfseries Page List
%\\\endhead
}%
% No heading between groups:
\renewcommand*{\glsgroupheading}[1]{}%
% Main (level 0) entries displayed in a row optionally numbered:
\renewcommand*{\glossentry}[2]{%
\glsentryitem{##1}% Entry number if required
\glstarget{##1}{\glossentryname{##1}}% Name
& \glsentryuseri{##1}% Units
& \glossentrydesc{##1}% Description
%& \glossentrysymbol{##1}% Symbol
%& \glsentryuserii{##1}% Dimensions
%& ##2% Page list
\tabularnewline % end of row
}%
}%
\glsaddallunused
\printglossary[title=List of Symbols, toctitle=List of Symbols,style =mystyle]
\newglossaryentry{length}{name=$l$, description={Diffusion length}, user1={m} , sort=length}
\gls{length}
\end{document}
答案1
问题是由于在 之后定义条目而导致的\printglossary
。最简单(也是推荐的)修复方法是将定义移至前言部分。
3.07 及以下版本将name
、description
和symbol
信息写入外部词汇表文件,这意味着即使稍后定义了该条目,这些值也可以在词汇表中使用,但在定义该条目之前,其他任何字段都不能被引用。
3.07 之后的版本只将标签写入外部字段(包裹在 的参数中\glossentry
),以避免由脆弱的命令或超出makeindex
缓冲区的过长描述引起的问题。为了确保向后兼容性,环境中出现的任何条目定义都document
将写入临时文件(扩展名为.glsdefs
),然后在\begin{document}
下次运行 LaTeX 时读入。这意味着即使它发生在条目定义之前,也可以访问字段\printglossary
。不幸的是,这种方法存在缺点,这就是为什么glossaries
用户手册建议在序言中定义所有条目。
我猜你用的版本是 3.07 或更低版本,因为此时所有字段都应该可以使用较新版本访问,除非你修改了条目定义并且没有重新运行。