我试图使用该nameref
\label
功能以及使用来\addcontentsline
创建出现在中的不可见部分和子部分\tableofcontents
。
命令如下所示:
\documentclass{article}
\usepackage{nameref}
\newcommand{\fakesection}[1]{%
\par\refstepcounter{section}% Increase section counter
\addcontentsline{toc}{section}{\protect\numberline{\thesection}#1}% Add section to ToC
\label{sec:\thesection}
}
\newcommand{\fakesubsection}[1]{%
\par\refstepcounter{subsection}% Increase subsection counter
\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}#1}% Add subsection to ToC
\label{subsec:\thesubsection}
}
\begin{document}
\fakesection{Fs}
\fakesubsection{s}
\nameref{sec:\thesection}
\end{document}
但是,当我尝试这样做时,没有任何输出!空白页。
答案1
你只要教一下nameref
标题是什么就可以了。
我修改了你的方法,因为自动分配标签没有多大意义,因为你惯于能够知道要使用什么数字(除非您的文档具有非常严格的格式)。您可以按照自己的喜好进行操作,添加\label
定义正是您实现方法所需要的。
\documentclass{article}
\usepackage{nameref}
\makeatletter
\newcommand{\fakesection}[1]{%
% go to vertical mode and don't allow a page break here
\par\nopagebreak
% step up the counter
\refstepcounter{section}
% teach nameref the title
\def\@currentlabelname{#1}
% add to TOC
\addcontentsline{toc}{section}{\protect\numberline{\thesection}#1}
}
\newcommand{\fakesubsection}[1]{%
\par\nopagebreak
\refstepcounter{subsection}
\def\@currentlabelname{#1}
\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}#1}
}
\makeatother
\begin{document}
\tableofcontents
\section{A section just for testing}\label{ts}
Here is the title: \nameref{ts}.
\fakesection{A fake section}\label{Fs}
\fakesubsection{A fake subsection}\label{s}
Here is the title of the fake section: \nameref{Fs}
Here is the title of the fake subsection: \nameref{s}
\end{document}
答案2
问题在于对\label
inside的重新定义nameref
。您必须伪造标签设置:
\documentclass{article}
\usepackage{nameref}
\makeatletter
\newcommand\fakesection[1]{{%
\let\newlabel\relax
\par\refstepcounter{section}%
\immediate\write\@mainaux{\newlabel{sec:\thesection}{{\thesection}{\arabic{page}}{#1}{}{}}}%
\addcontentsline{toc}{section}{\protect\numberline{\thesection}#1}% Add section to ToC
}}
\newcommand\fakesubsection[1]{{%
\let\newlabel\relax
\par\refstepcounter{subsection}% Increase subsection counter
\immediate\write\@mainaux{\newlabel{subsec:\thesubsection}{{\thesubsection}{\arabic{page}}{#1}{}{}}}%
\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}#1}% Add subsection to ToC
}}
\makeatother
\begin{document}
\tableofcontents
\fakesection{foo}
\fakesubsection{bar}
\section{baz}\label{sec:bazzz}
\nameref{sec:1}
\nameref{subsec:1.1}
\nameref{sec:bazzz}
\end{document}