我希望在文本中将我的章节命名为“练习 x - 名称”,但在目录和 中将其命名为“练习 x” \leftmark
。有人对此有想法吗?我尝试过\leftmark
使用 来操作我的\thesection
章节。我的问题在于,我使用 命令\setcounter{secnumdepth}{-1}
,因此没有章节编号。
答案1
最简单的方法是使用\section[Exercise x]{Exercise x - name}
。强制参数用于文本,可选参数用于标题和目录。
为了更容易编写,你可以定义命令
\newcommand{\exercise}[2]{\section[Exercise #1]{Exercise #1 - #2}}
并将其与 一起使用\exercise{x}{name}
,或者,如果所有练习都是连续编号的,您可以使用
\newcounter{Exercise}
\newcommand{\exercise}[1]{\stepcounter{Exercise}
\section[Exercise \arabic{Exercise}]{Exercise \arabic{Exercise} - #1}}
获得自动编号。
答案2
我假设您设置secnumdepth
为 -1 来手动调整分段命名。如果您策略性地更新三个要求(目录/标题/命名)和仅用于\section
代表你的练习,那么以下内容就足够了:
\documentclass{article}
\usepackage{etoolbox,fancyhdr}% http://ctan.org/pkg/{etoolbox,fancyhdr}
\fancyhf{}% Clear header/footer
\fancyhead[R]{\thepage}% Page number in Right header
\fancyhead[L]{\leftmark}% \leftmark in Left header
\pagestyle{fancy}
\makeatletter
\patchcmd{\l@section}{#1}{Exercise #1}{}{}% Correct ToC
\renewcommand{\sectionmark}[1]{\markboth{Exercise~\thesection}{}}% Header mark
\renewcommand{\@seccntformat}[1]{Exercise \csname the#1\endcsname~--~}% Correct in-text \section # format
\let\oldsection\section% Store \section in \oldsection
\makeatother
\begin{document}
\tableofcontents
\renewcommand{\section}[1]{\oldsection[]{#1}}% Sections don't have a title in the ToC
\section{ABC}
\pagebreak
\section{DEF}
\pagebreak
\section{GHI}
\end{document}