我想在文档中添加具有替代编号的子小节(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}
我不建议以这种方式设置标签。如果您的标题包含特殊字符,那么您就完蛋了。标签应该是助记符。