使用 titlesec 的当前章节标题宏

使用 titlesec 的当前章节标题宏

我有一个包含当前部分标题的宏,但是当使用titlesec包裹,它不再适用于\section\subsection。我知道titlesec重新定义了我正在使用的功能,但还没能找到解决方法。

梅威瑟:

\documentclass{article}

\usepackage{etoolbox}

\makeatletter
\pretocmd{\@sect}{\gdef\currtitle{#7}}{}{}
\pretocmd{\@ssect}{\gdef\currtitle{#5}}{}{}
\pretocmd{\@part}{\gdef\currtitle{#1}}{}{}
\pretocmd{\@spart}{\gdef\currtitle{#1}}{}{}
\makeatother

\usepackage{titlesec}

\begin{document}
\tableofcontents

\part*{First Starred part}
\currtitle

\part{First Un-starred part}
\currtitle

\section*{First Starred Section}
\currtitle

\section{Second Un-starred Section}
\currtitle

\subsection*{First Starred Subsection}
\currtitle

\subsection{Second Un-starred Subsection}
\currtitle

\end{document}

答案1

对于\section较低级别的头衔,你可以

\apptocmd{\ttl@straight@i}{\global\let\currtitle\ttl@savetitle}{}{}

但是,如果你不打算按组隐藏标题,那么简单的

\makeatletter
\newcommand{\currtitle}{\ttl@savetitle}
\makeatother

就足够了。

\part的代码仍然有效,并且我相信类似的代码也有效\chapter

为了仅保存当前第一级部分标题,可以修改代码以

\documentclass{article}
\usepackage{titlesec}
\usepackage{etoolbox,pdftexcmds}

\makeatletter
\apptocmd{\ttl@straight@i}{\update@currsectitle{#1}}{}{}
\def\update@currsectitle#1{%
  \ifnum\pdf@strcmp{#1}{section}=0
    \global\let\currsectitle\ttl@savetitle
  \fi
}
\makeatother

\begin{document}

\section{Title of the first section}

\currsectitle

\subsection{A subsection}

\currsectitle

\section{Title of the second section}

\currsectitle

\end{document}

答案2

仅补充一下 egrep 的答案,这里是获取章节标题所需的代码:

\pretocmd{\ttl@mkchap@i}{\def\ttl@savetitle{#7}}{}{}
\apptocmd{\ttl@mkchap@i}{\global\let\currchaptitle\ttl@savetitle}{}{}

相关内容