如何使用 nameref 的标签和 addcontentsline

如何使用 nameref 的标签和 addcontentsline

我试图使用该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

问题在于对\labelinside的重新定义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}

在此处输入图片描述

相关内容