
В своей магистерской диссертации я использую пакет glossaries для отслеживания всех моих сокращений и символов. Чтобы различать их, я создал два разных глоссария. Один с использованием стандартного пакета сокращений, а другой я определил сам, список символов (я использовал свой собственный стиль, потому что мне нужно было четыре столбца: один для символа, один для единиц, один для описания и один для страниц).
Я также использую как римскую, так и арабскую нумерацию. Когда я нажимаю на ссылку в глоссарии (символ), она перенаправляет правильно на место в тексте. Но когда я нажимаю на ссылку (символ) в тексте, она перенаправляет на первую страницу (вместо правильного места в списке символов).
Однако для списка сокращений он работает правильно. Ошибка, должно быть, в определении моего нового стиля. Даже если убрать изменение нумерации, он все равно перенаправляет на первую страницу.
hyperrefname
похоже, это не решает проблему. Как это исправить?
Я включилминимальный рабочий пример(MWE), который можно запустить, используя все пакеты и компилятор Perl.
\documentclass[a4paper]{book}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{hyperref}
\hypersetup{colorlinks=true, linkcolor=Maroon, citecolor=ForestGreen, filecolor=magenta, urlcolor=magenta, hypertexnames=false}
%% Glossary properties
\usepackage[nomain,acronym,toc,section]{glossaries}
\newglossary{symbol}{sbl}{smb}{Symbols}
\usepackage{array}
\makeglossaries
\usepackage[xindy]{imakeidx}
\makeindex
%% My own glossary to display the units
\newglossarystyle{tabx4col}{%
% Put the glossary in a longtable environment:
\renewenvironment{theglossary}%
{\begin{longtable}{@{}p{0.12\textwidth}@{}p{0.12\textwidth}@{}p{0.56\textwidth}rp{0.15\textwidth}}}%
{\end{longtable}}%
\renewcommand*{\glossaryentryfield}[5]{%
\glstarget{\textbf{##1}}{\textbf{##2}}% Name
& $[$\glsentryuseri{##1}$]$% Units
& ##3% Description
& ##5% Page list
\\% end of row
}%
%% Nothing between groups:
\renewcommand*{\glsgroupskip}{}%
}
%% Abbreviations
\newacronym{abr1}{ABR1}{Abbreviation 1}
\newacronym{abr2}{ABR2}{Abbreviation 2}
%% Symbols
\newglossaryentry{sym1}
{%
type=symbol,
name={\ensuremath{\alpha}},
description={The first symbol, with a very long description that spans multiple lines},
user1={kg},
sort=alpha
}
\newglossaryentry{sym2}
{%
type=symbol,
name={\ensuremath{\beta}},
description={the second symbol},
user1={m},
sort=beta
}
\begin{document}
\pagenumbering{roman}
\tableofcontents
{\let\cleardoublepage\clearpage
\chapter*{List of abbreviations and symbols}
\addcontentsline{toc}{chapter}{List of abbreviations and Symbols}
\printglossary[type=\acronymtype,title=Abbreviations,toctitle=Abbreviations]
\printglossary[type=symbol,style=tabx4col]
}
\chapter{Introduction}
\pagenumbering{arabic}
\gls{abr1} \gls{abr2} \gls{sym1} \gls{sym2}
\chapter{First chapter}
\gls{abr1} \gls{abr2} \gls{sym1} \gls{sym2}
\end{document}
решение1
Тестовый файл генерирует несколько предупреждений примерно hyperref
следующего содержания:
pdfTeX warning (dest): name{glo:sym1} has been referenced but does not exist,
replaced by a fixed one
что несколько загадочно, но вместе с glossaries
этим может означать, что что-то пошло не так с glossaries
механизмом цели гиперссылки. Отсутствие этой ссылки является причиной того, что гиперссылка переносит вас на первую страницу документа. Команда \glstarget
устанавливает эту гиперссылку в стиле глоссария. Первый аргумент должен быть меткой записи, и вот в чем проблема:
\glstarget{\textbf{##1}}{\textbf{##2}}% Name
В \textbf
первом аргументе запутывается целевой механизм. Вам просто нужно удалить его, чтобы избавиться от проблемы:
\glstarget{##1}{\textbf{##2}}% Name