解决方法

解决方法

\nameref除非我删除包,否则下面代码中的交叉引用 ( ) 不会填充titlesec。我需要两个包。我该如何解决这个问题?

\documentclass{article}
\usepackage{titlesec}
\usepackage{hyperref}
\begin{document}
\section*{Section title}\label{first}
See section \nameref{first}.
\end{document}

答案1

README包含hyperref

titlesec
--------
  "nameref" supports titlesec, but hyperref does not
  (unsolved is the anchor setting, missing with unnumbered
  section, perhaps problems with page breaks with numbered ones).

因此,您可以使用namereftitlesechyperref不支持。该示例使用nameref而不是进行编译hyperref

\documentclass{article}
\usepackage{titlesec}
\usepackage{nameref}
\begin{document}
\section*{Section title}\label{first}
See section \nameref{first}.
\end{document}

但是,\nameref{first}为空,因为\label{first}未引用编号部分。不支持未编号部分。

解决方法

以下解决方法定义了一个\starsection将其参数传递给 的宏。然后通过(宏)的内部接口定义\section*一个内部命令 ( )。然后,可以拾取当前节标题以供 使用。\@currentlabelnamenameref\NR@gettitle\label\nameref

\documentclass{article}
\usepackage{titlesec}
\usepackage{nameref}

\makeatletter
\newcommand*{\starsection}[1]{%
  \section*{#1}%
  \NR@gettitle{#1}%
}
\makeatother

\begin{document}
\starsection{Section title}\label{first}
See section \nameref{first}.
\end{document}

结果

答案2

由于这个问题是在我使用 寻找相同冲突的答案时出现的titlesechyperref并且\section*{}需要标记,所以我想分享 Ulrike Fisher 几年后在论坛上发布的解决方法。因此,这个问题将与该答案交叉链接,从而对所有人都有益。

Ulrike 定义了一个新命令,可用于扩充需要标签的星号部分(和其他部分)。您可以在这里找到她的答案:由于 titilesec 和 latexbangla,nameref 不适用于未编号部分

答案3

另一个解决方法是保留编号部分,但使用以下方法在视觉上隐藏它们:删除节的编号删除目录中的编号

\usepackage{tocloft}
\renewcommand\numberline[1]{}
\titleformat{\section}{\normalfont\Large\bfseries}{}{0pt}{}

这将创建一个目录,其中包含对齐良好的无数字链接,链接到对齐良好的无数字部分标题,精确到编号部分将链接的位置。

相关内容