每页每个缩略词一个超链接

每页每个缩略词一个超链接

目前,我正在使用该acronym软件包来保持我的论文清晰易懂,因为它在某些部分大量使用首字母缩略词。正因为如此,有些页面的首字母缩略词太多,看起来就像有人用蓝色文本着色工具乱七八糟一样。

acronym所以我的问题是:包或包是否可以hyperref每页每个缩写词仅使用一个超链接?因此,如果某人在页面上第一次遇到缩写词,他将能够单击它并转到缩写词定义列表。同一页面上的其余相同缩写词将不带链接打印。

我不知道在编写文档时是否有可能LaTeX对页面和链接进行这种“反思”。对此进行搜索没有得到任何结果,这就是为什么我求助于这里的专家。

答案1

我不知道如何使用该acronym包来实现你想要的功能,但是这里有一个解决方案glossaries。为了使其尽可能接近包acronym,我使用了shortcutsnonumberlist和包选项,并使用了 4.04 版中引入的新命令,这些命令允许您创建首字母缩略词列表nogroupskip,而无需使用或。您只需使用两次即可使首字母缩略词列表出现。nopostdotglossariesmakeindexxindypdflatex

\documentclass{report}

\usepackage{lipsum} % dummy text

\usepackage{etoolbox}
\usepackage[colorlinks]{hyperref}
\usepackage
 [
   acronyms,% create list of acronyms
   nohypertypes={acronym},% disable automated hyperlinks
   shortcuts,% enable acronym-like commands
   nonumberlist,% suppress location list
   nogroupskip,% suppress gap between letter groups
   nopostdot% suppress terminating full stop after descriptions
 ]{glossaries}

% Adjust the way entries are displayed:

\newif\ifshowacrlink

\newacronymstyle{long-short-hyperlinkperpage}
{%
  \ifglsused{\glslabel}%
  {%
    \ifcsdef{ac@curpg@\glslabel}%
    {%
      \edef\thispage{\thepage}%
      \ifcsequal{ac@curpg@\glslabel}{thispage}%
      {% on the same page
        \showacrlinkfalse
      }%
      {% now on a new page
        \showacrlinktrue
        \csedef{ac@curpg@\glslabel}{\thepage}%
      }%
    }%
    {%
      \csedef{ac@curpg@\glslabel}{\thepage}%
      \showacrlinktrue
    }%
  }%
  {%
    % don't hyperlink on first use:
    \showacrlinkfalse
  }%
  \ifshowacrlink
    \glshyperlink[\glsgenacfmt]{\glslabel}%
  \else
    \glsgenacfmt
  \fi
}%
{%
  \GlsUseAcrStyleDefs{long-short}%
}%

\setacronymstyle{long-short-hyperlinkperpage}

\makenoidxglossaries

\newacronym{html}{HTML}{hypertext markup language}
\newacronym{xml}{XML}{extensible markup language}

\begin{document}

\chapter{Sample Chapter}

First use: \ac{html}, \ac{xml}.
Subsequent use: \ac{html}, \ac{xml}.

Filler text: \lipsum[1]

Use acronyms again: \ac{html}, \ac{xml}.

More filler text: \lipsum[2]

Use acronyms again: \ac{html}, \ac{xml} and have a page spanning
paragraph of filler text. \lipsum*[3] Use acronyms again: \ac{html},
\ac{xml}.

Next paragraph: \ac{html}, \ac{xml}.
And again: \ac{html}, \ac{xml}.

\printnoidxglossary
[
  type=acronym,% list of acronyms
  sort=def% list in order of definition
]

\end{document}

第一页:

首页图片

第二页:

第二页图片

第三页:

第三页图片

这种方法的唯一缺点是,页码只有在跨页段落完成后才会更新。(见页面开头的页码错误。)需要使用一些技巧将页码写入辅助文件来修复此问题。

编辑:

我刚刚将glossaries4.06 版上传到 CTAN。(可能需要几天时间才能完成所有镜像并上传到 TeX 发行版。)此版本引入了一个新命令 ( \glsifhyper),该命令可在首字母缩略词样式中使用,以确定是否使用了带星号或不带星号的命令版本\ac。这意味着您可以强制关闭单个条目的超链接(尽管您可能希望等到文档的最终版本后再进行此类手动调整)。

更新的 MWE:

\documentclass{report}

\usepackage{lipsum} % dummy text

\usepackage{etoolbox}
\usepackage[colorlinks]{hyperref}

\usepackage
 [
   acronyms,% create list of acronyms
   nohypertypes={acronym},% disable automated hyperlinks
   shortcuts,% enable acronym-like commands
   nonumberlist,% suppress location list
   nogroupskip,% suppress gap between letter groups
   nopostdot% suppress terminating full stop after descriptions
 ]{glossaries}

% Adjust the way entries are displayed:

\newif\ifshowacrlink

\newacronymstyle{long-short-hyperlinkperpage}
{%
  \glsifhyper
  {% unstarred version used
    \ifglsused{\glslabel}%
    {%
      \ifcsdef{ac@curpg@\glslabel}%
      {%
        \edef\thispage{\thepage}%
        \ifcsequal{ac@curpg@\glslabel}{thispage}%
        {% on the same page
          \showacrlinkfalse
        }%
        {% now on a new page
          \showacrlinktrue
          \csedef{ac@curpg@\glslabel}{\thepage}%
        }%
      }%
      {%
        \csedef{ac@curpg@\glslabel}{\thepage}%
        \showacrlinktrue
      }%
    }%
    {%
      % don't hyperlink on first use:
      \showacrlinkfalse
    }%
  }%
  {% starred version has been used so switch off the link:
     \showacrlinkfalse
  }%
  \ifshowacrlink
    \glshyperlink[\glsgenacfmt]{\glslabel}%
  \else
    \glsgenacfmt
  \fi
}%
{%
  \GlsUseAcrStyleDefs{long-short}%
}%

\setacronymstyle{long-short-hyperlinkperpage}

\makenoidxglossaries

\newacronym{html}{HTML}{hypertext markup language}
\newacronym{xml}{XML}{extensible markup language}

\begin{document}

\chapter{Sample Chapter}

First use: \ac{html}, \ac{xml}.
Subsequent use: \ac{html}, \ac{xml}.

Filler text: \lipsum[1]

Use acronyms again: \ac{html}, \ac{xml}.

More filler text: \lipsum[2]

Use acronyms again: \ac{html}, \ac{xml} and have a page spanning
paragraph of filler text. \lipsum*[3] Use acronyms again: \ac{html},
\ac{xml}.

Next paragraph: \ac{html}.
Suppress the link on this one: \ac*{xml}.
And again: \ac{html}, \ac{xml}.

\printnoidxglossary
[
  style=tree,%
  type=acronym,% list of acronyms
  sort=def% list in order of definition
]

\end{document}

第二页如下所示:

第二页图片

更新:

这是一个使用的解决方案glossaries-extra(至少是 v1.08)。它与上面的略有不同,因为它在第一次使用时有一个超链接,而上面的例子中,第一个超链接是第一次后续使用。(跨页段落的问题仍然存在。)该glossaries-extra包自动实现该nopostdot选项,所以我从选项列表中省略了它。

\documentclass{report}

\usepackage{lipsum}
\usepackage[colorlinks]{hyperref}
\usepackage
[
   acronyms,% create list of acronyms
   shortcuts,% enable acronym-like commands
   nogroupskip% suppress gap between letter groups
]{glossaries-extra}

\GlsXtrEnableEntryUnitCounting{acronym}{0}{page}

\setabbreviationstyle[acronym]{long-short}

\newacronym{html}{HTML}{hypertext markup language}
\newacronym{xml}{XML}{extensible markup language}

\renewcommand*{\glslinkcheckfirsthyperhook}{%
  \ifnum\glsentrycurrcount\glslabel>0
   \setkeys{glslink}{hyper=false}%
  \fi
}

\begin{document}
\chapter{Sample Chapter}

First use: \ac{html}, \ac{xml}.
Subsequent use: \ac{html}, \ac{xml}.

Filler text: \lipsum[1]

Use acronyms again: \ac{html}, \ac{xml}.

More filler text: \lipsum[2]

Use acronyms again: \ac{html}, \ac{xml} and have a page spanning
paragraph of filler text. \lipsum*[3] Use acronyms again: \ac{html},
\ac{xml}.

Next paragraph: \ac{html}.
Suppress the link on this one: \ac*{xml}.
And again: \ac{html}, \ac{xml}.

\printunsrtglossary[type=\acronymtype]

\end{document}

这使用条目计数机制来关闭超链接。它还使用新命令\printunsrtglossary而不是\makenoidxglossariesand\printnoidxglossary组合。该\printunsrtglossary命令与包最接近匹配,acronym因为它不排序或生成位置列表,而只是按定义顺序列出术语。这意味着您只需使用pdflatex 一次使列表出现。

第一页开始:

首页顶部图片

第二页:

第二页的图片

相关内容