在词汇表中插入“页面”时出现问题

在词汇表中插入“页面”时出现问题

我读这个问题在词汇表条目出现的页面前插入“页面”。

我尝试过建议的解决方案,依赖于以下代码:

\renewcommand{\glsnumberformat}[1]{%
 (\ifthenelse{\DTLisSubString{#1}{\delimN}\OR\DTLisSubString{#1}{\delimR}}%
  {pages #1}{page #1})}

我在frontmattermainmatter和中使用了首字母缩略词backmatter。问题是它们都有不同的编号:

  • frontmatter:一、二、三、四、...
  • mainmatter:1、2、3、...
  • backmatter:A1、A2、...

因此给出了如下结果: 问题概述

出现了几个问题:

  1. 当相同的首字母缩略词出现在至少 2 个不同的部分时,它们在首字母缩略词列表中的出现不再在一起

  2. 使用不同的命令时,“组合”会失败。我\acrlong在第 1 页和\acrfull第 3 页使用了...

  3. 页码上的超链接消失了(但文本中引用表格的超链接仍然出现)

  4. 当首字母缩略词出现在标题中时,目录中指向此部分的超链接将消失,只保留指向首字母缩略词列表的链接

编辑LaTeX + Glossary + LaTeX + LaTeX下面是使用编译时的 MWE TeX + DVI

\documentclass[a4paper,11pt,oneside]{book}

\usepackage[hyperindex, breaklinks,
    linktoc=all,
    pdfborder={0 0 0}]{hyperref}

% List of abbreviations
\usepackage[acronym,toc]{glossaries}

\makeglossaries
\glsnoexpandfields

% Enable entry counting
\glsenableentrycount

% Columns in acronym table
\newglossarystyle{mylong}{%
  \setglossarystyle{long}%
  \renewenvironment{theglossary}%
     {\begin{longtable}[l]{@{}p{\dimexpr 2cm-\tabcolsep}p{0.8\hsize}}}% <-- change the value here
     {\end{longtable}}%
      \renewcommand{\glossentry}[2]{%
      \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
      \glossentrydesc{##1}\glspostdescription\space 
      \ifnum\glsentryprevcount{##1}=1\relax
        Page
      \else
        Pages
      \fi
      ##2\tabularnewline
     }%
 }


\newacronym{TLS}{TLS}{Transport Layer Security}
\newacronym{CLV}{CLV}{Some Acronym}

\begin{document}

\frontmatter


\printglossary[type=\acronymtype,style=mylong,title=Abbreviations]

\mainmatter

\chapter{Sample Chapter}

\section[\glsentryshort{TLS}]{\acrshort{TLS}}

\newpage
\subsection{Section}

\chapter{Other chapter}
\acrfull{TLS}

\acrfull{CLV}


\backmatter
\appendix
\setcounter{page}{1}
\renewcommand{\thepage}{A\arabic{page}}

\chapter{Sample Appendix}
\acrlong{TLS}

\end{document}

它表明仅使用过一次的首字母缩略词仍然被引用为pages 3,如下面截图所证明的: 分子量结果

答案1

方法 1:

(我稍微简化了你的例子。)\glsnumberformat我认为,与其重新定义,不如对你的新词汇表样式进行修改:

\documentclass[a4paper,11pt,oneside]{book}

\usepackage[hyperindex, breaklinks,
    linktoc=all,
    pdfborder={0 0 0}]{hyperref}

% List of abbreviations
\usepackage[acronym,toc]{glossaries}

\makeglossaries
\glsnoexpandfields

% Enable entry counting
\glsenableentrycount

% Columns in acronym table
\newglossarystyle{mylong}{%
  \setglossarystyle{long}%
  \renewenvironment{theglossary}%
     {\begin{longtable}[l]{@{}p{\dimexpr 2cm-\tabcolsep}p{0.8\hsize}}}% <-- change the value here
     {\end{longtable}}%
      \renewcommand{\glossentry}[2]{%
      \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
      \glossentrydesc{##1}\glspostdescription\space 
      \ifnum\glsentryprevcount{##1}=1\relax
        page
      \else
        pages
      \fi
      ##2\tabularnewline
     }%
 }


\newacronym{TLS}{TLS}{Transport Layer Security}
\newacronym{aa}{AA}{Another Abbreviation}

\begin{document}

\frontmatter

\tableofcontents

\printglossary[type=\acronymtype,style=mylong,title=Abbreviations]

\mainmatter

\chapter{Sample Chapter}

\section[\glsentryshort{TLS}]{\acrshort{TLS}}

\gls{aa}.

\newpage
\subsection{Section}

\chapter{Other chapter}
\acrfull{TLS}

\backmatter
\appendix
\setcounter{page}{1}
\renewcommand{\thepage}{A\arabic{page}}

\chapter{Sample Appendix}
\acrlong{TLS}

\end{document}

使用latex, makeglossaries, latex, latex(或pdflatex, makeglossaries, pdflatex, pdflatex)得出

缩写列表图片

如果需要,您可以使用包选项将page/更改pagesPage/Pages或抑制帖子描述点。nopostdot

导致此方法失败的情况有:

  • 重置条目:这将使条目的计数器重置为 0
  • 在一个页面上多次使用某个条目,但在其他页面上未使用。例如,如果\gls{aa}在第 1 页上使用 3 次,但在其他页面上未使用,则位置列表将仅包含第 1 页,但由于该条目已使用 3 次,因此条件\ifnum\glsentryprevcount{##1}=1将为假。
  • 条目计数用于计算条目被标记为已使用的次数。这意味着,只有\glsunset使用时计数才会增加。这由 之类的命令在内部完成\gls,但不适用于 之类的命令\acrfull,因此,此方法仅在您仅使用 -like 命令时才有用\gls

方法 2:

正如您在问题中链接到的答案一样,第二种方法假设位置列表中存在\delimN\delimR意味着列表中有多个页面。另一个答案尝试解析位置列表中的这些命令的实例,但这很棘手,因为它们可能包含在参数中。这种替代方法定义了一个新的条件\ifpages并重新定义\delimN并将\delimR其切换为 true。这当然意味着我们只有在排版位置列表后才知道所需的信息,因此需要将信息写入辅助文件,以便在下一次 (pdf|xe|lua) 运行时获取它latex

\documentclass[a4paper,11pt,oneside]{book}

\usepackage[hyperindex, breaklinks,
    linktoc=all,
    pdfborder={0 0 0}]{hyperref}

% List of abbreviations
\usepackage[acronym,toc]{glossaries}

\makeglossaries
\glsnoexpandfields

\newif\ifpages

\renewcommand*{\delimN}{\pagestrue, }
\renewcommand*{\delimR}{\pagestrue--}

\makeatletter
\newcommand*{\savepagestag}[2]{%
 \protected@write\@auxout{}{\string\pages@tag{#1}{#2}}}
\newcommand*{\pages@tag}[2]{\csgdef{pages@tag@#1}{#2}}
\newcommand*{\usepagestag}[1]{\csuse{pages@tag@#1}}
\makeatother

% Columns in acronym table
\newglossarystyle{mylong}{%
  \setglossarystyle{long}%
  \renewenvironment{theglossary}%
     {\begin{longtable}[l]{@{}p{\dimexpr 2cm-\tabcolsep}p{0.8\hsize}}}%
     {\end{longtable}}%
      \renewcommand{\glossentry}[2]{%
      \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
      \glossentrydesc{##1}\glspostdescription\space 
      \pagesfalse
      \usepagestag{##1}\space
      ##2%
      \ifpages
        \savepagestag{##1}{pages}%
      \else
        \savepagestag{##1}{page}%
      \fi
      \tabularnewline
     }%
 }


\newacronym{TLS}{TLS}{Transport Layer Security}
\newacronym{CLV}{CLV}{Some Acronym}

\begin{document}

\frontmatter


\printglossary[type=\acronymtype,style=mylong,title=Abbreviations]

\mainmatter

\chapter{Sample Chapter}

\section[\glsentryshort{TLS}]{\acrshort{TLS}}

\newpage
\subsection{Section}

\chapter{Other chapter}
\acrfull{TLS}

\acrfull{CLV}


\backmatter
\appendix
\setcounter{page}{1}
\renewcommand{\thepage}{A\arabic{page}}

\chapter{Sample Appendix}
\acrlong{TLS}

\end{document}

方法 3

此方法使用glossaries-extra扩展包:

\documentclass[a4paper,11pt,oneside]{book}
\usepackage[colorlinks]{hyperref}

% List of abbreviations
\usepackage[acronym,postdot]{glossaries-extra}

\makeglossaries

\setabbreviationstyle[acronym]{long-short}

\newacronym{TLS}{TLS}{Transport Layer Security}
\newacronym{aa}{AA}{Another Abbreviation}

\begin{document}

\frontmatter

\tableofcontents

\printglossary[type=\acronymtype,style=long,title=Abbreviations]

\mainmatter

\chapter{Sample Chapter}

\section{\glsfmtshort{TLS}}

\gls{aa}.

\newpage
\subsection{Section}

\chapter{Other chapter}
\glsxtrfull{TLS}

\backmatter
\appendix
\setcounter{page}{1}
\renewcommand{\thepage}{A\arabic{page}}

\chapter{Sample Appendix}
\glsxtrlong{TLS}

\end{document}

缩写 AA 另一个缩写。第 1 页 TLS 传输层安全性。第 3 页,A1

相关内容