想要将目录首页样式定义为plain

发布于 2025-02-17 16:04:27

各位大佬好,我想将目录中的样式改为plain形式的,但我在ctexset命令中已经定义了chapter/pagestyle = myfancy,这个命令也会将效果渲染到目录首页,测试后发现目录的等级应该是和chapter一致的?在\tableofcontents命令处使用\pagestyle似乎无法覆盖ctexset设置的效果。

12826c9c2be9f2fb0804727620c5a1d7.png

这是MWE:

\documentclass[11pt]{ctexrep}
%自定义样式
\usepackage{fancyhdr}
\fancypagestyle{myfancy}{%
    \fancyhf{}
    \fancyhead[C]{\heiti 毕业设计(论文)}
    \fancyfoot[C]{第\quad \thepage \quad 页}  % 改用 \thepage 显示页码
}
\ctexset{
    chapter/pagestyle = myfancy
}
\begin{document}
\tableofcontents
\chapter{1}
\chapter{2}
\end{document}

查看更多

关注者
0
被浏览
160
Sagittarius Rover
我要成为Typst糕手/(ㄒoㄒ)/~~

related link

出现这一现象的原因是ctexrep.cls中定义:
image.png

其中\CTEX@setthispagestyle定义如下,这会将myfancy赋值给了\chapter的原始定义,将原来的\thispagestyle{plain}全部替换为\thispagestyle{myfancy}

image.png

同时又因为\tableofcontents定义中将目录也定义为一个\chapter*,于是导致了“目录的等级应该是和chapter一致的”的现象

\newcommand\tableofcontents{%
    \if@twocolumn
      \@restonecoltrue\onecolumn
    \else
      \@restonecolfalse
    \fi
    \chapter*{\contentsname
        \@mkboth{%
           \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
    \@starttoc{toc}%
    \if@restonecol\twocolumn\fi
    }

要想解决这一问题。可以尝试分离\chapter\chapter*的样式。

OS:我感觉让\chapter样式和ToC中的\chapter*样式分离的需求还蛮常见的,是否有可能让ctex提供ToC/pagestyle的接口选项呢(这也许值得一个issues...我先去翻翻看...有空会提)?

我不太确定这是不是一个好的实践来分离\chapter\chapter*的样式

一个想法是修改\chapter*的样式设置,即下面的代码:
image.png

\documentclass[11pt]{ctexrep}
\usepackage{etoolbox}
\makeatletter
\pretocmd{\@schapter}{\thispagestyle{plain}}{}{}
\makeatother
%自定义样式
\usepackage{fancyhdr}
\fancypagestyle{myfancy}{%
    \fancyhf{}
    \fancyhead[C]{\heiti 毕业设计(论文)}
    \fancyfoot[C]{第\quad \thepage \quad 页}  % 改用 \thepage 显示页码
}
\ctexset{
    chapter/pagestyle=myfancy,
}

\begin{document}
\tableofcontents
\chapter{1}
\chapter{2}
\chapter{1}
\chapter{2}
\chapter{1}
\chapter{2}
\chapter{1}
\chapter{2}
\chapter{1}
\chapter{2}
\chapter{1}
\chapter{2}
\chapter{1}
\chapter{2}
\chapter{1}
\chapter{2}
\end{document}

image.png

当然,这也会修改所有\chapter*{}页面的行为...

个人感觉更好的实践是上面issues中提到的,使用\frontmatter\mainmatter来分划文档的不同部分的样式,但是ctexrap没有提供这几个命令。

Editted Version

也许是一个使用\frontmatter,\mainmatter以及\backmatter划分的例子。

\documentclass[12pt,oneside]{ctexbook}
\usepackage{zhlipsum}
\usepackage{fancyhdr}
\fancypagestyle{myfancy}{%
    \fancyhf{}
    \fancyhead[C]{\heiti 我是\texttt{myfancy}的样式}
    \fancyfoot[C]{第\quad \thepage \quad 页}
}
\fancypagestyle{myfront}{%
    \fancyhf{}
    \fancyhead[C]{\heiti 我是\texttt{myfront}的样式}
}
\fancypagestyle{myback}{%
    \fancyhf{}
    \fancyhead[C]{\heiti 我是\texttt{myback}的样式}
}
% \ctexset{
%     chapter/pagestyle=myfancy,
% }
\begin{document}
\frontmatter
\pagestyle{myfront}
\tableofcontents % 目录页首页由于\chapter*被重置为plain样式

\clearpage
\zhlipsum %其他页码为myfront样式

\mainmatter
\pagestyle{myfancy}

\chapter{111}\zhlipsum \clearpage

\chapter{222}\zhlipsum \clearpage

\backmatter
\pagestyle{myback}
\chapter*{Appendix} % 首页由于\chapter*被重置为plain样式

\zhlipsum[1-5] %其他页码为myback样式

\end{document}

image.png

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览