我使用以下命令创建了一本书的各个部分:
\section{Content}
在 PDF 中(以及在目录中)它看起来像这样:
1.1 内容
我想将其改为“内容 1.1”,而不是“1.1 内容”。我该怎么做?提前致谢!
示例代码:
\documentclass[twoside, 10pt]{book}
\usepackage[]{geometry}
\usepackage[explicit]{titlesec}
\usepackage{titletoc}
\usepackage{tocloft}
\titleformat{\section}{\Large\bfseries}{}{0pt}{#1\enspace\thesection}
\titlecontents{section}[15pt]{}%
{}{\partname{}}%
{\cftdotfill{\cftdotsep}\contentspage}%
\usepackage{fancyhdr}%header & footer
\usepackage[english]{babel}
\usepackage{blindtext}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[RE]{\leftmark}
\fancyhead[LO]{\rightmark}
\fancyhead[LE,RO]{\thepage}
\renewcommand{\headrulewidth}{0.8pt}
\begin{document}
\tableofcontents
\chapter{chapter}
\section{Content}
\blindtext
\pagebreak
\blindtext
\pagebreak
\blindtext
\end{document}
答案1
使用包来扩展功能总是好的。但是,如果您处于困境中,您可以使用以下方法来操纵/更改基本功能\@sect
并\l@section
实现您想要的功能。
\documentclass{book}
\usepackage{fancyhdr,etoolbox}
\usepackage{lipsum}
\pagestyle{fancy}
\fancyhf{}% Clear header/footer
\fancyhead[RE]{\leftmark}
\fancyhead[LO]{\rightmark}
\fancyhead[LE,RO]{\thepage}
\renewcommand{\headrulewidth}{0.8pt}
\makeatletter
% Update placement of sectional units within text
% \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\patchcmd{\@sect}% <cmd>
{\interlinepenalty \@M #8}% <search>
{\hskip #3\relax\@svsec}% <replace>
{}{}% <success><failure>
\patchcmd{\@sect}% <cmd>
{\hskip #3\relax\@svsec}% <search>
{\interlinepenalty \@M #8}% <replace>
{}{}% <success><failure>
\renewcommand{\@seccntformat}[1]{\quad\csname the#1\endcsname}
% Reverse display of numbering and title in ToC
\patchcmd{\@sect}% <cmd>
{\ifnum #2>\c@secnumdepth \else
\protect \numberline {\csname the#1\endcsname }%
\fi #7}% <search>
{#7 \protect\quad \ifnum #2>\c@secnumdepth \else
\csname the#1\endcsname
\fi}% <replace>
{}{}% <success><failure>
% Change section mark in headers
\renewcommand{\sectionmark}[1]{%
\markright{\MakeUppercase{#1\ \ifnum\c@secnumdepth>\z@ \thesection}}%
}
\makeatother
\begin{document}
\tableofcontents
\chapter{A chapter}
\section{A section}
\subsection{A subsection}
\sloppy\lipsum[1-50]
\end{document}
由于我们正在更新,因此\@sect
变化反映在所使用的每个部分单元中(\section
,,,...)。\subsection
\subsubsection
答案2
您不应同时使用titletoc
和tocloft
以避免冲突。这是一个简单的解决方案。由于我不明白\partname{}
您的代码在做什么,所以我删除了它。
\documentclass[twoside, 10pt]{book}
\usepackage[]{geometry}
\usepackage[explicit]{titlesec}
\usepackage{titletoc}
\titleformat{\section}{\Large\bfseries}{}{0pt}{#1\enspace\thesection}
\titlecontents{section}[15pt]{}%
{}{}%\partname{}
{\enspace\thecontentslabel\hspace{0.2em}\titlerule*[0.67pc]{.}\contentspage}%
\usepackage{fancyhdr}%header & footer
\usepackage[english]{babel}
\usepackage{blindtext}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[RE]{\leftmark}
\fancyhead[LO]{\rightmark}
\fancyhead[LE,RO]{\thepage}
\renewcommand{\headrulewidth}{0.8pt}
\begin{document}
\tableofcontents
\chapter{chapter}
\section{Content}
\blindtext
\pagebreak
\blindtext
\pagebreak
\blindtext
\end{document}
编辑:这里有一个代码,它可以替换fancyhdr
标题titleps
并执行您想要的操作:
\documentclass[twoside, 10pt]{book}
\usepackage[]{geometry}
\usepackage[explicit, pagestyles]{titlesec}
\usepackage{titletoc}
\titleformat{\section}{\Large\bfseries}{}{0pt}{#1\enspace\thesection}
\titlecontents{section}[15pt]{}%
{}{}%
{\enspace\thecontentslabel\hspace{0.2em}\titlerule*[0.67pc]{.}\contentspage}%
\usepackage[english]{babel}
\usepackage{blindtext}
}
\newpagestyle{mine}{%
\setheadrule{0.8pt}
\headrule
\sethead[\thepage][][\ifthechapter{\MakeUppercase{\chaptername} \thechapter\quad}{}\MakeUppercase{\chaptertitle}]%
{\MakeUppercase{\sectiontitle}\enspace\thesection}{}{\thepage}
}%
\pagestyle{mine}
\begin{document}
\tableofcontents
\chapter{chapter}
\section{Content}
\blindtext
\pagebreak
\blindtext
\pagebreak
\blindtext
\pagebreak
\blindtext
\pagebreak
\blindtext
\end{document}