目前,我正在使用该acronym
软件包来保持我的论文清晰易懂,因为它在某些部分大量使用首字母缩略词。正因为如此,有些页面的首字母缩略词太多,看起来就像有人用蓝色文本着色工具乱七八糟一样。
acronym
所以我的问题是:包或包是否可以hyperref
每页每个缩写词仅使用一个超链接?因此,如果某人在页面上第一次遇到缩写词,他将能够单击它并转到缩写词定义列表。同一页面上的其余相同缩写词将不带链接打印。
我不知道在编写文档时是否有可能LaTeX
对页面和链接进行这种“反思”。对此进行搜索没有得到任何结果,这就是为什么我求助于这里的专家。
答案1
我不知道如何使用该acronym
包来实现你想要的功能,但是这里有一个解决方案glossaries
。为了使其尽可能接近包acronym
,我使用了shortcuts
、nonumberlist
和包选项,并使用了 4.04 版中引入的新命令,这些命令允许您创建首字母缩略词列表nogroupskip
,而无需使用或。您只需使用两次即可使首字母缩略词列表出现。nopostdot
glossaries
makeindex
xindy
pdflatex
\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}
第一页:
第二页:
第三页:
这种方法的唯一缺点是,页码只有在跨页段落完成后才会更新。(见页面开头的页码错误。)需要使用一些技巧将页码写入辅助文件来修复此问题。
编辑:
我刚刚将glossaries
4.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
而不是\makenoidxglossaries
and\printnoidxglossary
组合。该\printunsrtglossary
命令与包最接近匹配,acronym
因为它不排序或生成位置列表,而只是按定义顺序列出术语。这意味着您只需使用pdflatex
一次使列表出现。
第一页开始:
第二页: