
Я столкнулся с проблемой в latex, которую не смог решить. Хотя пакет hyperref генерирует кликабельные ссылки в таблице содержания, он не связывает ни один подраздел с фактическим подразделом, а с разделом, в котором они находятся. Можно ли как-то изменить это поведение, чтобы оно либо связывало сам подраздел, либо страницу, на которой находится подраздел?
После более детального изучения, похоже, что для отображения этой проблемы требуется отключить нумерацию разделов и использовать пакет titlesec. Ниже приведен пример этой проблемы:
\documentclass{report}
\usepackage[linktoc=all]{hyperref}
\setcounter{secnumdepth}{0}
\usepackage{titlesec}
\hypersetup{
colorlinks,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black
}
\begin{document}
\tableofcontents
\chapter{test}
Test text
\newpage
\section{A section}
Lorem Ipsum
\newpage
\subsection{This link is wrong}
\end{document}
решение1
Поскольку вы устанавливаете значение secnumdepth
на ноль, для гиперссылок не создаются якоря, и это приводит к упомянутому нежелательному эффекту; следующий код работает так, как и ожидалось:
\documentclass{report}
\usepackage[linktoc=all]{hyperref}
\usepackage{titlesec}
\hypersetup{
colorlinks,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black
}
\begin{document}
\tableofcontents
\chapter{test}
Test text
\newpage
\section{A section}
Lorem Ipsum
\newpage
\subsection{This link is correct}
\end{document}
Если вы хотите, чтобы все ваши разделы и подразделы были ненумерованными, но включены в оглавление и при этом генерировали правильные гиперссылки, одним из вариантов будет использование команды \phantomsection
для генерации якорей:
\documentclass{report}
\usepackage[linktoc=all]{hyperref}
\setcounter{secnumdepth}{0}
\usepackage{titlesec}
\hypersetup{
colorlinks,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black
}
\begin{document}
\tableofcontents
\chapter{test}
Test text
\newpage
\phantomsection
\section{A section}
Lorem Ipsum
\newpage
\phantomsection
\subsection{This link is correct}
\end{document}
Другим вариантом было бы использование пакетов titlesec
и titletoc
для удаления нумерации как из тела документа, так и из оглавления:
\documentclass{report}
\usepackage[linktoc=all]{hyperref}
\usepackage{titlesec}
\usepackage{titletoc}
\titleformat{\section}
{\normalfont\Large\bfseries}{}{1em}{}
\titleformat{\subsection}
{\normalfont\large\bfseries}{}{1em}{}
\titlecontents{section}
[1.5em] {}{}{}
{\titlerule*[1em]{.}\contentspage}
\titlecontents{subsection}
[3.8em] {}{}{}
{\titlerule*[1em]{.}\contentspage}
\hypersetup{
colorlinks,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black
}
\begin{document}
\tableofcontents
\chapter{test}
Test text
\newpage
\section{A section}
Lorem Ipsum
\newpage
\subsection{This link is correct}
\end{document}
Еще одним вариантом было бы использование отмеченных звездочкой версий секционных единиц (т. е. \section*
, \subsection*
) и использование \addcontentsline
для ручного добавления записей в оглавление:
\documentclass{report}
\usepackage[linktoc=all]{hyperref}
\hypersetup{
colorlinks,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black
}
\begin{document}
\tableofcontents
\chapter{test}
Test text
\newpage
\section*{A section}
\addcontentsline{toc}{section}{A section}
Lorem Ipsum
\newpage
\subsection*{This link is correct}
\addcontentsline{toc}{subsection}{This link is correct}
\end{document}