Гиперссылки в латексном документе начинаются с начала страницы - PullRequest
4 голосов
/ 21 сентября 2009

У меня есть латексный документ. Я использую пакеты hyperref, makeidx и глоссарий для своего документа.

Каждая вещь создана хорошо; содержание (все ссылки работают хорошо), глоссарий и указатель, за исключением того, что номера страниц, напечатанные в глоссарии и указателе, являются правильными, но они указывают на номера страниц, начиная с начала документа, где первые 10 страниц представлены арабскими номерами, а затем римскими с 1 запуска.

например. У меня есть 10 страниц для начальной темы (аннотация, декларация, оглавление и т. Д.). После этого начинается mainmatter, и номера страниц по-римски начинаются с 1. Итак, на этой странице 1 у меня есть индексная запись "hello"

Теперь в индексе он печатает «привет 1», что правильно, за исключением того, что когда кто-то нажимает на 1, он идет вправо в начале документа, а не нумерованной страницы 1.

Ваша помощь будет высоко ценится.

Спасибо, Омер

Ответы [ 6 ]

4 голосов
/ 21 сентября 2009

ОК, googlefu (*) предоставляет http://www.tex.ac.uk/cgi-bin/texfaq2html?label=pdfpagelabels где is говорит, что это известная проблема, и предлагает два варианта пакета hyperref:

  • plainpages=false
  • pdfpagelabels

хотя и предупреждает, что они не будут работать в в каждой ситуации (но я верю, что это будет в вашей). Приложение будет выглядеть примерно так:

\usepackage[plainpages=false,pdfpagelabels,pagebackref]{hyperref}

в вашей преамбуле.

В противном случае http://en.wikibooks.org/wiki/LaTeX/Hyperlinks обеспечивает более хитрый трюк, который будет работать в местах, где вышеперечисленное не работает. (Прокрутите вниз до раздела «Проблемы со ссылками».)

Надеюсь, это поможет.

(*) Оказывается, я нашел этот материал из-за опечатки и спросил у Google "hyperef frontmatter" вместо "hyperref frontmatter" . В некоторые дни тебе просто везет.

2 голосов
/ 21 сентября 2009

Я недавно написал в блоге об этом, объясняя, как просто нумеровать ваши страницы 1 ... n , избавляясь от римских цифр. Это решает вашу проблему и обеспечивает разумную нумерацию страниц в PDF-ридере. Если это то, что вы хотите, введите следующий код в преамбулу:

\let\oldsetcounter=\setcounter
\renewcommand\setcounter[2]{%
  \ifx\not{#1}{page}\oldsetcounter{#1}{#2}\fi}
1 голос
/ 27 марта 2014

Хорошо, этот вопрос старый, но я столкнулся с той же проблемой и должен был найти решение. Решение включает в себя небольшую хакерскую переписку и не является универсальным, но вы должны иметь возможность адаптировать его к вашему конкретному случаю.

Проблема

Пакет индекса генерирует ссылки, используя макрос \hyperpage, который принимает только один аргумент: он напечатает это число и ссылку на страницу, которая имеет это абсолютное число.

Специальное решение

Сохранение количества страниц в начале в макросе, а затем смещение всех якорей страниц на это же число.

На практике

Это решение хрупкое, поскольку, если код стиля вашей книги или пакетов hyperref изменится, он больше не будет работать. Тем не менее это рабочее решение для меня. Я изменил макрос \frontmatter в своем стиле книги:

(добавлены новые строки: строки 2 и 3, обратите внимание, что нам нужно уменьшить на 1, так как вычисление происходит на новой странице с номером «1»)

 \newcommand\mainmatter{\clearemptydoublepage
    \count0=\value{page}\advance\count0 by -1
    \xdef\pagesfrontmatter{\the\count0}
    \@mainmattertrue\pagenumbering{arabic}}

Затем наступает более сложная часть. \hyperpage содержит много кода и может обрабатывать, например, аргументы типа '2,4' или '3-5', поэтому нам нужно изменить макрос конца, который фактически выводит текст и гиперссылку. Если вы посмотрите на hyperref.sty, вы найдете его с именем \HyInd@removespaces. Нам нужно переопределить его только для индекса , чтобы каждая ссылка имела один и тот же текст, но якорь был смещен на нужную величину (измененные строки, включая ссылки на \count0):

{ % open local group
% locally change how hyperpage creates hyperlinks to take
% frontmatter pages into account
\makeatletter
\def\HyInd@removespaces#1 #2\@nil{%
  \toks@=\expandafter{\the\toks@#1}%
  \ifx\\#2\\%
    \edef\x{\the\toks@}%
    \ifx\x\@empty
    \else
      \count0=\the\toks@\advance\count0 by \pagesfrontmatter%
      \hyperlink{page.\the\count0}{\the\toks@}%
    \fi
  \else
    \ltx@ReturnAfterFi{%
      \HyInd@removespaces#2\@nil
    }%
  \fi
}
\makeatother

\printindex
} % close local group
0 голосов
/ 11 ноября 2016

Просто вставьте опцию hypertextnames=true в ваш \usepackage{hyperref}, т.е. вставьте что-то вроде

\usepackage[hypertexnames=true]{hyperref}

в вашу преамбулу.

0 голосов
/ 15 марта 2010

Это подвох, но он работает

\newcounter{glshyperpage}%
\def\glshyper#1#2{%
\setcounter{glshyperpage}{#2}%
\addtocounter{glshyperpage}{6}%number of front-matter pages
(\hyperlink{#1.\theglshyperpage}{#2})}
0 голосов
/ 21 сентября 2009

Я не уверен, будет ли это вообще работать, но вы пробовали добавить

\ frontmatter

\ mainmatter

\ backmatter

в соответствующих местах?

обратите внимание, что это относится только к книгам и подобным книгам классам, а не к статье, письму и т. Д.

...