Гипертекст в PDF документах, созданных средствами LATEX 2ε∗ Содержание 1 Введение 1 2 Мишени команды \label 2.1 Навигация на базе перекрёстных ссылок 2.2 Текст гиперссылки . . . . . . . . . . . . . 2.3 Название раздела как текст гиперссылки 2.4 Гиперссылки в другой документ . . . . . . . . . 2 2 3 3 4 3 Мишени команды \hypertarget 3.1 Навигация внутри документа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Гиперссылки в другой документ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 5 4 Мишени команды \hyperdef 5 5 Гиперссылки на ресурсы в сети 6 6 Цвета гиперссылок 6 7 Обратные гиперссылки из библиографического списка 6 8 Запуск внешнего приложения 7 9 Закладки 9.1 Опции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Алфавитный указатель 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Введение В LATEX’е документ в формате PDF можно создать двумя способами: либо сразу обработать входной файл программой pdflatex, которую написал Hàn Thê Thành, либо сначала обработать входной файла программой latex, а затем конвертировать DVI в PDF. Можно, например, с помощью программы dvips преобразовать dvi-файл в ps-файл, а затем конвертировать последний в pdf-файл, используя Adobe Distiller или ps2pdf.bat из GhostScript версии 5.21 и выше (в GSview надо выбрать устройство pdfwrite в диалоговом окне, которое открывает пункт меню Convert из меню File). В пакете hyperref реализована поддержка гиперссылок и закладок (bookmarks), которые можно использовать при просмотре pdf-документов в Acrobat Reader. Пакет имеет большое количество ∗ c 2002 Владимир Сюткин. Замечания приветствуются: syutkin@ns.kinetics.nsc.ru 1 опций. Опции перечисляются через запятую в необязательном аргументе команды \usepackage при подключении пакета: \usepackage[список опций]{hyperref} либо в аргументе команды \hypersetup{список опций} после подключения пакета. Каждая опция в списке задаётся в формате опция=значение Для опций булевого типа значение true можно опускать. Полный список опций можно найти в [1, 2]. Пакет hyperref рекомендуется загружать последним, поскольку он переопределяет многие команды LATEX’а. При подключении пакета надо указывать драйвер или, другими словами, программу, которая «понимает» команды, введённые в пакете hyperref. Драйвер задаётся в виде опции булевого типа. Если PDF документ создаётся посредством программы pdflatex, то надо указывать опцию pdftex. Для драйвера dvips — опцию dvips. Остальные опции выбора драйвера: hypertex, dviwindo, dvipsone, vtex и latex2html. Пакет hyperref автоматически превращает все перекрёстные ссылки LATEX’а в гипертекстовые ссылки. Гипертекстовыми ссылками становятся все элементы оглавления и списков таблиц и рисунков, а также маркёры сносок и элементов цитированной литературы. Кроме того, все номера страниц в предметном указателе также становятся гипертекстовыми ссылками (опция hyperindex задана по умолчанию; её можно отключить, присвоив значение false). 2 2.1 Мишени команды \label Навигация на базе перекрёстных ссылок LATEX создаёт перекрёстные ссылки следующим образом. Команда \label{name} ставит метку с именем name. Под этим именем в aux-файле запоминается значение счётчика текущего нумеруемого объекта (раздела, уравнения, таблицы и т.п.) и номер страницы, на которую попадает команда \label. Команды \ref{name} \pageref{name} печатают соответственно номер объекта, внутри которого стоит метка name, и номер страницы с меткой name. Пакет hyperref переопределяет описанные выше команды LATEX’а так, что номера объектов и страниц, которые печатают команды \ref и \pageref становятся гиперссылками, а метки, которые ставит команда \label, превращаются в мишени, на которые происходит переход при активизации ссылки. Продемонстрируем выше описанное на примере метки \label{sec:bookmarks}, которой помечен раздел «Закладки» на 7-ой странице: В разделе 9 на стр. 7. В разделе~\ref{sec:bookmarks} на стр.~\pageref{sec:bookmarks}. Для LATEX’овских ссылок, которые не должны трансформироваться в гиперссылки, пакет hyperref вводит *-форму команд \ref и \pageref: \ref*{name} \pageref*{name} Пример: В разделе 9 на стр. 7. В разделе~\ref*{sec:bookmarks} на стр.~\pageref*{sec:bookmarks}. 2 2.2 Текст гиперссылки Текст гиперссылки в виде номера объекта или страницы является слишком коротким для быстрого позиционирования указателя мыши над ним. Поэтому пакет hyperref вводит команду1 \hyperref[name]{text} которая делает текстом гиперссылки на мишень name весь свой аргумент text. Пример: В разделе 9 . . . В \hyperref[sec:bookmarks]{% разделе~\ref*{sec:bookmarks}} \dots Кроме того, пакет hyperref вводит команду \autoref{name} которая печатает в качестве текста гиперссылки на мишень name сначала название нумерованного объекта, а затем его порядковый номер. Названия объектов печатаются, естественно, на английском языке: In section 9 . . . In \autoref{sec:bookmarks} \dots В настоящее время команда \autoref не поддерживает русский язык. Впрочем, она мало эффективна в русскоязычных документах, поскольку слова имеют разные падежные окончания. Тем не менее, её можно использовать в ряде случаев. Для этого надо переопределить команды, хранящие названия объектов. Их полный список можно найти в dtx-файле пакета hyperref. Так, после переопределения команды \sectionautorefname: \renewcommand{\sectionautorefname}{раздел} будем иметь (см. раздел 9) 2.3 (см.~\autoref{sec:bookmarks}) Название раздела как текст гиперссылки В печатном документе номер раздела в качестве ссылки оправдан, поскольку позволяет легко ориентироваться, где находится нужный раздел. Для гиперссылок, когда не требуется вручную листать документ, можно обойтись без номера раздела. Пакет nameref (загружается пакетом hyperref) вводит команду \nameref{name} которая делает текстом гиперссылки на мишень name название раздела, в котором находится мишень. Пример: В разделе Закладки . . . В разделе \nameref{sec:bookmarks} \dots Если у команды секционирования задан необязательный аргумент, то именно он печатается командой \nameref. В печатной версии документа ссылка только на название раздела может затруднить его поиск, поэтому пакет nameref вводит также команду \Nameref{name} которая печатает в виде текста гиперссылки на мишень name как название раздела, в котором находится мишень, так и номер страницы, на которой она находится. По умолчанию ссылка на номер страницы печатается на английском языке: В разделе ‘Закладки’ on page 7 . . . В разделе \Nameref{sec:bookmarks} \dots Поэтому для документов на русском языке команду \Nameref надо переопределить, скажем, так 1 Команда \hyperref без опции описана в разделе 4. 3 \renewcommand{\Nameref}[1]{<<\nameref{#1}>> на стр.~\pageref{#1}} После переопределения имеем В разделе «Закладки» на стр. 7 . . . В разделе \Nameref{sec:bookmarks} \dots Если название раздела и номер страницы, которые печатают команды \nameref и \Nameref, не должны трансформироваться в гиперссылку, то их надо поместить в командные скобки \begin{NoHyper} . . . \end{NoHyper} Они введены в пакете hyperref. Пример: В разделе Закладки . . . В разделе \begin{NoHyper} \nameref{sec:bookmarks} \end{NoHyper} \dots Команда \Nameref, как впрочем и команда \pageref, печатает номер страницы всегда, не исключая ситуаций, когда объект и ссылка на него попадают на одну страницу или оказываются на соседних страницах. Пакет varioref из коллекции tools вводит более «умную» команду \vpageref. Она в перечисленных выше ситуациях печатает не номер страницы, а текст, указывающий, где находится объект. Например, «on the next page», если объект находится по отношению к ссылке на следующей странице. Если объект и ссылка на него находятся друг от друга через одну и более страниц, то \vpageref печатает слова «on page» и номер страницы командой \pageref. В настоящее время пакет varioref поддерживает русский язык: если его подключить с опцией russian, то вместо текста на английском языке будет напечатан соответствующий ему русский текст. Пакет nameref вводит команду \vnameref{name} которая печатает сначала название раздела командой \nameref, а затем командой \vpageref ссылку на страницу, где находится метка name. Пример: В разделе Закладки на с. 7 . . . 2.4 В разделе \vnameref{sec:bookmarks} \dots Гиперссылки в другой документ Пакет xr-hyper является расширенной версией пакета xr из коллекции tools. Его следует загружать перед пакетом hyperref. После этого описанные выше команды создают гиперссылки на мишени, созданные в других документах переопределённой в hyperref командой \label. Имена aux-файлов этих документов объявляются в преамбуле текущего входного файла посредством деклараций \externaldocument[prefix-]{file}[URL] Здесь file — имя файла без расширения. Опция prefix позволяет исключить совпадение имён меток в разных докуметах. При наличии опции все ссылки в текущем документе на объекты из внешний файлов, помеченные как \label{name}, записываются в виде \ref{prefix-name}. Опция URL указывает адрес готового документа. Обратимся к примеру. В документе targets.pdf имеется рисунок, который во входном файле targets.tex был помечен как \label{fig:Sqr}, а в преамбуле входного файла настоящего документа декларировано \externaldocument{targets}[targets.pdf] В результате получилась гиперссылка на рисунок из документа targets.pdf: Figure 1 shows . . . \autoref{fig:Sqr} shows \dots 4 3 Мишени команды \hypertarget Команда \hypertarget{name}{text} создаёт мишень name для гиперссылки. По умолчанию аргумент text печатается как обычный текст. Он может быть пустым. 3.1 Навигация внутри документа Внутри документа гиперссылка на мишень name, поставленную командой \hypertarget, создаётся командой \hyperlink{name}{text} Аргумент text оформляется как текст гиперссылки. Для демонстрации описанного выше механизма первое предложение в разделе «Введение» содержит мишень pdf: В \LaTeX’е документ в формате PDF можно \hypertarget{pdf}{создать} ... Следующий пример содержит ссылку для перехода к этой мишени: Как создать документ в формате PDF, мы обсудили выше. 3.2 Как создать документ в формате PDF, мы обсудили \hyperlink{pdf}{выше}. Гиперссылки в другой документ Гиперссылка на мишень name, поставленную командой \hypertarget в других документах, создаётся командой \href{URL}{text} URL задаёт адрес ресурса, включая имя мишени, а аргумент text оформляется как текст гиперссылки. Так, в документе targets.pdf один из разделов во входном файле targets.tex был помечен как \hypertarget{Debate}{}. В результате получилась гиперссылка в документ targets.pdf: Этот вопрос обсуждается в отдельной статье. 4 Этот вопрос обсуждается в отдельной \href{targets.pdf#Debate}{статье}. Мишени команды \hyperdef Наряду с командой \hypertarget, имеется команда \hyperdef{category}{name}{text} Она создаёт мишень category.name для гиперссылки. Аргумент text может быть пустым. Сама ссылка создаётся командой \hyperref{URL}{category}{name}{text} URL задаёт адрес ресурса (без имени мишени), а аргумент text оформляется как текст гиперссылки. Переход происходит по адресу URL#category.name. Обратимся к примеру. В документе targets.pdf рисунок во входном файле targets.tex был помечен как \hyperdef{figure}{Sqr}{}. В результате получилась гиперссылка в документ targets.pdf: Рисунок . . . \hyperref{targets.pdf}{figure}{Sqr}{% Рисунок} \dots 5 5 Гиперссылки на ресурсы в сети Команда \href{URL}{text} создаёт гиперссылку на документ любого типа, хранящийся в сети по ардесу URL. Аргумент text оформляется как текст гиперссылки. Примеры: TEX User Group \href{http://www.tug.org/}% {\TeX\ User Group} Пишите нам \href{mailto:tug@mail.tug.org}% {Пишите нам} Указатель ресурса URL может быть относительным, если такие параметры ресурса как протокол, адрес машины в сети и часть пути указаны как базовый адрес посредством команды \hyperbaseurl{URL} Базовый адрес можно задать также через опцию baseurl пакета hyperref. Наряду с командом \href можно использовать команду \url{URL} В этом случае URL оформляется как текст гиперссылки. Примеры: http://www.tug.org/ tug@mail.tug.org 6 \url{http://www.tug.org/} \url{tug@mail.tug.org} Цвета гиперссылок По умолчанию текст гиперссылок отображается чёрным цветом и помещается в рамку. Для того, чтобы ссылки выделялись цветом, надо указать опцию colorlinks (по умолчанию она имеет значение false). Следующие опции определяют цвета ссылок разного типа: linkcolor Цвет гиперссылок внутри документа; по умолчанию red. pagecolor Цвет гиперссылок на другие страницы внутри документа; по умолчанию red. filecolor Цвет гиперссылок, которые открывают локальные файлы; по умолчанию cyan. citecolor Цвет библиографических ссылок; по умолчанию green. urlcolor Цвет гиперссылок на ресурсы с URL; по умолчанию magenta. Опция anchorcolor задаёт цвет текста мишени; по умолчанию black. Допустимыми значениями перечисленных выше опций могут быть имена цветов из пакета color или имена, определённые посредством команды \definecolor из этого же пакета. Пример: \usepackage{color} \definecolor{darkgreen}{rgb}{0,.5,0} \usepackage[colorlinks,filecolor=blue,citecolor=darkgreen]{hyperref} 7 Обратные гиперссылки из библиографического списка Пакет hyperref загружает пакет backref, который создаёт «обратные» гиперссылки в библиографическом списке: в конец каждого элемента списка добавляются в виде гиперссылок номера страниц или номера разделов, где встречаются «прямые» ссылки на этот элемент. Обратные гиперссылки в виде номера страниц создаются, если задана опция pagebackref (по умолчанию равна false). При наличие опции backref (по умолчанию равна false) создаются гиперссылки в виде номера 6 разделов, причём только в том случае, когда после каждого элемента библиографического списка оставлена пустая строка или стоит команда \par. Пример: Пакет hyperref поддерживает PDF формы [2]. Пакет hyperref поддерживает PDF формы~\cite{Rahtz}. Надо заметить, что обратные гиперссылки из библиографического списка могут не работать в некоторых библиографических стилях. Кроме того, пакет backref можно использовать без пакета hyperref. 8 Запуск внешнего приложения Команда \href, используя схему run, позволяет запускать из PDF документа внешние приложения2 . Например, если файлы с расширением .jpg связаны с программой ACDSee, то активизация ссылки \href{run:d:/Images/lamp.jpg}{Мой любимый рисунок} приведёт к запуску приложения ACDSee3 и загрузки в него файла lamp.jpg из папки d:/Images. Если необходимо открыть другое приложение и загрузить в него этот же рисунок, то следует указать локализацию программы. Например, активизация ссылки \href{run:c:/Program Files/Paint Shop Pro/psp.exe#d:/Images/lamp.jpg}% {Мой любимый рисунок} приведёт к запуску графического редактора Paint Shop Pro и загрузки в него файла lamp.jpg из папки d:/Images. Если Windows знает, где находится запускаемое приложение, то можно ограничится только именем исполняемого файла. Например, активизация ссылки \href{run:Winword.exe#readme.txt}{Прочти обязательно!} приведёт к запуску текстового процессора MS Word и загрузки в него файла readme.txt из папки, в которой находится PDF документ со ссылкой. 9 Закладки Аргументы команд секционирования, которые используются при составлении оглавления, автоматически оформляются как закладки (опция bookmarks задана по умолчанию; её можно отключить, присвоив значение false). Для документов на русском языке при загрузки пакета надо указать опцию unicode (по умолчанию она имеет значение false): \usepackage[unicode]{hyperref} Если не указать опцию unicode, то в закладках кириллические символы будут пропущены. Закладками становятся также записи, которые добавлены в оглавление посредством команды \addcontentsline. Её надо использовать очень аккуратно. Дело в том, что LATEX ставит в оглавлении номер страницы, на которой находится команда \addcontentsline. Но поскольку она не создаёт мишень для ссылки, то переход происходит не на это место, а на начало раздела, в котором находится команда. Именно команды секционирования являются мишенями. Такая проблема не возникает, когда команда \addcontentsline используется для записи в оглавление имён команд секционирования со звездочкой и располагается сразу после них. 2 Адрес ресурсов (первый аргумент команды \href) не должен содержать русских букв! Acrobar Reader запрашивает разрешение на запуск внешней программы и только при получении положительного ответа запускает его. 3 7 В LATEX’е аргументы команд секционирования могут содержать команды форматирования текста, например, команды переключения шрифта или математические выражения. Такие аргументы не годятся для закладок, поскольку TEX не исполняет эти команды, а Acrobat Reader не умеет работать с TEX’овскими командами. Проблема решается с помощью команды \texorpdfstring{TeX string}{PDF string} Первый аргумент команды \texorpdfstring используется TEX’ом в самом документе, а второй помещается в закладку. Пример: \section{\texorpdfstring{$\alpha$}{Альфа} распад} В аргументе PDF string можно использовать команды, которые определены в кодировке PD1. Эти команды заменяются в закладках соответствующими символами из PDFDocEncoding, которую использует Acrobat Reader. Полный список команд можно найти в файле pd1enc.def, который приходит вместе с пакетом hyperref, или в testbmgl.pdf из документации к пакету. Закладку можно создать самому с помощью команды \pdfbookmark[level]{bookmark text}{anchor name} Здесь level — уровень команд секционирования, на котором должна находиться закладка. В стандартных классах команда \section имеет уровень 1, \subsection — 2 и т.д. В классах book и report команда \part имеет уровень −1, а \chapter — 0. В классе article, в котором нет команды \chapter, уровень 0 присваивается команде \part. Дополнительную информацию о закладках можно найти в статье [3]. 9.1 Опции Наряду с описанными выше опциями bookmarks и unicode, вид закладок в Acrobat Reader регулируется следующими опциями. bookmarksnumbered Задаёт нумерацию разделов; по умолчанию false. bookmarksopen Раскрывает полностью дерево закладок; по умолчанию false. bookmarksopenlevel Задаёт уровень, до которого раскрывается дерево закладок; по умолчанию раскрывается полностью. bookmarkstype Устанавливает, какой файл с таблицей содержания воспроизводится; по умолчанию toc. pdfpagemode Задаёт вид Acrobat Reader сразу после загрузки документа. Допустимые значения: None (без bookmarks и thumbnails), UseOutlines (с bookmarks), UseThumbs (с thumbnails), FullScreen (в полноэкранной моде); по умолчанию None. Список литературы [1] Sebastian Rahtz, hyperrref package options, texmf/doc/latex/hyperref/options.tex 2 [2] Sebastian Rahtz, Hypertext marks in LATEX: the hyperref package, texmf/doc/latex/hyperref/manual.pdf 2, 7 [3] Heiko Oberdiek, PDF information and navigation elements with hyperref, pdf TEX, and thumbpdf, texmf/doc/latex/hyperref/paper.pdf 8 8 Алфавитный указатель a \autoref . . . . . . . . . . . . . . . . . . . . . 3 u \url . . . . . . . . . . . . . . . . . . . . . . . . . 6 e \externaldocument . . . . . . . . . . . . 4 v \vnameref . . . . . . . . . . . . . . . . . . . . 4 \href . . . . . . . . \hyperbaseurl \hyperdef . . . . \hyperlink . . . \hyperref . . . . \hypersetup . . \hypertarget . . . . . . . . h .. .. .. .. .. .. .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o опция anchorcolor . . . . . . . backref . . . . . . . . . . . baseurl . . . . . . . . . . . bookmarks . . . . . . . . . bookmarksnumbered . bookmarksopen . . . . . bookmarksopenlevel bookmarkstype . . . . . citecolor . . . . . . . . . colorlinks . . . . . . . . dvips . . . . . . . . . . . . . dvipsone . . . . . . . . . . dviwindo . . . . . . . . . . filecolor . . . . . . . . . hyperindex . . . . . . . . hypertex . . . . . . . . . . latex2html . . . . . . . . linkcolor . . . . . . . . . pagebackref . . . . . . . pagecolor . . . . . . . . . pdfpagemode . . . . . . . pdftex . . . . . . . . . . . . unicode . . . . . . . . . . . urlcolor . . . . . . . . . . vtex . . . . . . . . . . . . . . 5, 6 .. 6 .. 5 .. 5 3, 5 .. 2 .. 5 l \label . . . . . . . . . . . . . . . . . . . . . . . 2 n \Nameref . . . . . . . . . . . . . . . . . . . . . 3 \nameref . . . . . . . . . . . . . . . . . . . . . 3 NoHyper . . . . . . . . . . . . . . . . . . . . . 4 p \pageref . . . . . . . . . . . . . . . . . . . . . 2 \pageref* . . . . . . . . . . . . . . . . . . . . 2 \pdfbookmark . . . . . . . . . . . . . . . . . 8 r \ref . . . . . . . . . . . . . . . . . . . . . . . . . 2 \ref* . . . . . . . . . . . . . . . . . . . . . . . . 2 t \texorpdfstring . . . . . . . . . . . . . . 8 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 7 8 8 8 8 6 6 2 2 2 6 2 2 2 6 6 6 8 2 7 6 2