这里有一个简单的问题:如何使章节标题不可见,但仍然获得目录和标题中的正确章节列表?例如,在第 10 页,如果我执行\section{New section}
,我一定看不到文本“X. 新章节”,但我仍然希望该章节位于目录中,并位于\rightmark
以下页面中,直到出现新章节为止。
我正在使用一个极简文档(类文章,没有用于调整章节标题样式的包)
答案1
像这样:
\newcommand\invisiblesection[1]{%
\refstepcounter{section}%
\addcontentsline{toc}{section}{\protect\numberline{\thesection}#1}%
\sectionmark{#1}}
...
\invisiblesection{Blah}
答案2
Boris 的解决方案效果很好,但是\nameref
部分无法正常工作。这是另一个基于他们的解决方案的解决方案。
前\begin{document}
\makeatletter
\def\invisiblesection#1{%
\refstepcounter{section}%
\addcontentsline{toc}{section}{\protect\numberline{\thesection}#1}%
\sectionmark{#1}}
\protected@edef\@currentlabelname{#1} % Set correct name
...}
\makeatother
\invisiblesection{Blah} \label{blah}
...
\nameref{blah}
最小工作示例(MWE):
\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\usepackage[unicode=true,pdfusetitle,
bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,bookmarksopenlevel=3,
breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=false]
{hyperref}
\usepackage[demo]{graphicx}
\newcommand\invisiblesectionwithoutname[1]{%
\refstepcounter{section}%
\addcontentsline{toc}{section}{\protect\numberline{\thesection}#1}%
\sectionmark{#1}\phantom{}
}
\makeatletter
\def\invisiblesection#1{%
\refstepcounter{section}%
\addcontentsline{toc}{section}{\protect\numberline{\thesection}#1}%
\sectionmark{#1}\phantom{}
\protected@edef\@currentlabelname{#1} % Set correct name
}
\makeatother
\begin{document}
\tableofcontents{}\clearpage{}
\invisiblesectionwithoutname{One} \label{one}
\begin{figure}
\caption{\protect\includegraphics{logo}}
\end{figure}
\clearpage{}
\invisiblesection{Two} \label{two}
\begin{figure}
\caption{\protect\includegraphics{logo}}
\end{figure}
\\
Without setting correct label: \nameref{one}
With setting correct label: \nameref{two}
\end{document}
输出 (\nameref
):