
\nameref
прерывается для star
версий section
, paragraph
когда titlesec
загружен. У меня есть документ, который нумерует абзацы по умолчанию, но у меня есть несколько, которые я не хочу нумеровать, но хотел бы ссылаться на них. Они отмечены \paragraph*
, однако, если titlesec
пакет загружается в то же время, это приводит nameref
к отображению пустой строки (ссылочное поле hyperref все еще видимо).
МВЭ:
\documentclass[12pt]{article}
\usepackage[sf]{titlesec} %comment this out and it works fine.
\usepackage{hyperref}
\begin{document}
\section{Sections}
\label{sec}
This is \nameref{sec}
\paragraph{A named Paragraph}
\label{par}
This is \nameref{par}
\paragraph*{A starred named Paragraph}
\label{par:star}
This is \nameref{par:star}
\end{document}
Я подозреваю, что titlesec вызывает этот дефект для ВСЕХ вариантов star команд секционирования, но не проверял это. Для меня paragraph*
это актуально только для меня, однако исправление для всех вариантов было бы лучшим.
У меня есть подозрение, что это может быть связано вот с чем:https://tex.stackexchange.com/a/6658/19326Однако это выходит далеко за рамки моих познаний в области латекса и для меня является просто «магией».
решение1
Добавьте в преамбулу следующее:
\makeatletter
\def\ttl@useclass#1#2{%
\@ifstar
{\ttl@labeltrue\@dblarg{#1{#2}}}% {\ttl@labelfalse#1{#2}[]}%
{\ttl@labeltrue\@dblarg{#1{#2}}}}
\makeatother
Это позволяет обрабатывать обычные аргументы \<section>[<ToC>]{<regular>}
с секционным блоком \<section>
. Кроме того, настройка \ttl@labeltrue
вставляет соответствующиеhyperref
якорь.
\documentclass[12pt]{article}
\usepackage[sf]{titlesec} %comment this out and it works fine.
\usepackage{hyperref}
\makeatletter
\def\ttl@useclass#1#2{%
\@ifstar
{\ttl@labelfalse\@dblarg{#1{#2}}}% {\ttl@labelfalse#1{#2}[]}%
{\ttl@labeltrue\@dblarg{#1{#2}}}}
\makeatother
\begin{document}
\section{Sections}
\label{sec}
This is \nameref{sec}
\paragraph{A named Paragraph}
\label{par}
This is \nameref{par}
\paragraph*{A starred named Paragraph}
\label{par:star}
This is \nameref{par:star}
\end{document}
Тщательных испытаний не проводилось.