我使用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}