如何使用 `titlesec` 包中的 `\nameref{}` 命令来查看带星号的部分?

如何使用 `titlesec` 包中的 `\nameref{}` 命令来查看带星号的部分?

我想在文档中添加具有替代编号的子小节(A1..A3、B1..B3 等)。这些子小节应添加到ToC,但应隐藏原始编号,替代编号应出现在数字线上。

我设法用这个包做到了这一点titlesec,但命令却中断了\nameref{}。有人建议修复这个答案,但这会使带星号的部分也显示在 中ToC,并带有原始的部分编号。

如何使用-package\nameref{}命令来获取带星号的部分titlesec

梅威瑟:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{hyperref}
\usepackage{titlesec} 

\titleformat{\subsubsection}[hang]{\normalfont\bfseries}{}{0pt}{\tempSectNumber\quad}

\newcommand{\mySubSubSection}[1]{\def\tempSectNumber{\thesubsubsection}\subsubsection{#1}\label{s:#1}}
\newcommand{\myStarredSubSubSection}[1]{\def\tempSectNumber{X1}\subsubsection*{#1}\label{s:#1}\addcontentsline{toc}{subsubsection}{\protect{\numberline{X1}}#1}}
\begin{document}
\tableofcontents
\setlength{\parindent}{0pt}
\mySubSubSection{Normal}
\myStarredSubSubSection{Special}

Reference to Normal: \autoref{s:Normal}/\nameref{s:Normal}\par
Reference to Special: \autoref{s:Special}/\nameref{s:Special}\par
\end{document}

期望的结果:

Contents
0.0.1 Normal  . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1
X1    Special . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1

0.0.1  Normal
X1  Special

Reference to Normal: subsubsection 0.0.1/Normal
Reference to Special: subsubsection 0.0.1/Special

答案1

步进subsubsection计数器以触发\label-ref机制,定义\@currentlabelname\@currentlabel达到所需值。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{titlesec} 
\usepackage{hyperref}

\titleformat{\subsubsection}[hang]
  {\normalfont\bfseries}
  {}
  {0pt}
  {\tempSectNumber\quad}

\newcommand{\mySubSubSection}[1]{%
  \def\tempSectNumber{\thesubsubsection}%
  \subsubsection{#1}%
  \label{s:#1}%
}
\makeatletter
\newcommand{\myStarredSubSubSection}[1]{%
  \def\tempSectNumber{X1}%
  \refstepcounter{subsubsection}%
  \subsubsection*{#1}%
  \addtocounter{subsubsection}{-1}%
  \def\@currentlabelname{#1}%
  \def\@currentlabel{\thesubsubsection}%
  \label{s:#1}%
  \addcontentsline{toc}{subsubsection}{\protect{\numberline{X1}}#1}%
}
\makeatother


\begin{document}
\tableofcontents
\setlength{\parindent}{0pt}

\mySubSubSection{Normal}
\myStarredSubSubSection{Special}

Reference to Normal: \autoref{s:Normal}/\nameref{s:Normal}\par
Reference to Special: \autoref{s:Special}/\nameref{s:Special}\par

\end{document}

在此处输入图片描述

我不建议以这种方式设置标签。如果您的标题包含特殊字符,那么您就完蛋了。标签应该是助记符。

相关内容