我有一个包含当前部分标题的宏,但是当使用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}{}{}