使用 Patchcmd 命令更改一组新章节的默认垂直页面位置

使用 Patchcmd 命令更改一组新章节的默认垂直页面位置

我使用patchcmd序言中的命令来指定新(未编号)章节在页面上开始的垂直位置默认值:

\makeatletter
\patchcmd{\@makeschapterhead}{\vspace*{50\p@}}{}{}{}
\makeatother

稍后在同一文档中,我想将该默认值更改为其他内容 - 并尝试使用相同的方法(之后\begin{document})。

虽然当我编译代码时没有出现错误,但我无法成功改变之前指定的默认值。

梅威瑟:

\documentclass[openany]{book}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage{etoolbox}

% For unnumbered chapters:
\makeatletter
\patchcmd{\@makeschapterhead}{\vspace*{50\p@}}{}{}{}
\makeatother

\begin{document}
\thispagestyle{empty}
\Large
INTRODUCTION.

\chapter*{\textcolor{red}{Chapter 1}}
\lipsum[3]

\makeatletter
\patchcmd{\@makeschapterhead}{\vspace*{150\p@}}{}{}{}
\makeatother

\chapter*{\textcolor{red}{Chapter 2}}
\lipsum[3]
\end{document}

第 1 章的定位与预期一致:

在此处输入图片描述

但是,尽管从 变为\vspace*{50\p@}\vspace*{150\p@}对(新)第 2 章的起始位置没有影响:

在此处输入图片描述

我如何更改文档中一组新章节(未编号)(例如第 2-5 章)的默认起始位置,然后恢复为原始默认值(在\vspace*{50\p@}本例中)?

答案1

你应该看看电子工具箱文档第13页。

\patchcmd[prefix]{command}{search}{replace}{success}{failure}

\patchcmd{\@makeschapterhead}{\vspace*{50\p@}}{}{}{}

根据您的实现,您\@makeschapterhead通过搜索字符串\vspace*{50\p@}并将其替换为空来修补命令。因此命令的第二次调用

\patchcmd{\@makeschapterhead}{\vspace*{150\p@}}{}{}{}

由于命令\vspace*{150\p@}中没有字符串而失败。\@makeschapterhead

实现您想要的正确方法如下(我添加\@latex@info{true}\@latex@info{false}在日志文件中显示修补结果):

\documentclass[openany]{book}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage{etoolbox}

% For unnumbered chapters:
\makeatletter
\patchcmd{\@makeschapterhead}{\vspace*{50\p@}}{\vspace*{0\p@}}{\@latex@info{true}}{\@latex@info{false}}
\makeatother

\begin{document}
\thispagestyle{empty}
\Large
INTRODUCTION.

\chapter*{\textcolor{red}{Chapter 1}}
\lipsum[3]

\makeatletter
\patchcmd{\@makeschapterhead}{\vspace*{0\p@}}{\vspace*{150\p@}}{\@latex@info{true}}{\@latex@info{true}}
\makeatother

\chapter*{\textcolor{red}{Chapter 2}}
\lipsum[3]
\end{document}

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

相关内容