\nameref прерывается для звездных версий раздела/абзаца при загрузке titlesec

\nameref прерывается для звездных версий раздела/абзаца при загрузке titlesec

\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}

Тщательных испытаний не проводилось.

Связанный контент