在twoside, twocolumn
文档中,我尝试创建一个新的章节命令,该命令会改变章节开始处的左侧页面和其后的右侧页面的页面几何形状。这两个页面都应该有一个较大的页眉部分,以便在章节双页上放置双页展开图像。但是,文本可能不限于这两页,因此之后的任何其他页面都可以恢复到正确的以文本为中心的几何形状。
我在这里发现的有关该主题的大多数问题都不同,因为它们只需要改变单个页面的几何形状,而不是连续两页。
我在下一章的开头找到了恢复几何形状的解决方案(作为安全网),事实上一个办法对于我在此处提出的问题,但该解决方案也会破坏我在文档中使用的浮点数(也添加到代码中)。
示例代码实现了上述答案(不同之处在于我的文档是两列的,这会改变 \afterpage 的行为)。它确实做了我想要的事情,但它还破坏了我的浮点。如果我注释掉这些行,浮点可以正常工作,但显然几何图形不起作用。
\documentclass[a4paper, 11pt, twocolumn, twoside]{book}
\usepackage{lipsum}
\usepackage{geometry}
\usepackage[many]{tcolorbox}
\usepackage{fancyhdr}
\usepackage{changepage}
\usepackage{xcolor}
\usepackage{afterpage}
\usepackage{etoolbox}
\usepackage{pagecolor}
\strictpagecheck
\geometry{a4paper,
includeheadfoot,
top=0cm,
bottom=7mm,
headheight=22mm,
headsep=7mm,
footskip=23mm,
left=20mm,
right=15mm
}
\makeatletter
\pagestyle{fancy}
%To reset my page layout at the beginning of a new chapter, just in case.
\cspreto{chapter}{\cleardoublepage\restoregeometry\restorepagecolor}
%To make new chapters start on the left-hand side.
\renewcommand*\cleardoublepage{\clearpage\if@twoside
\ifodd\c@page \hbox{}\newpage\if@twocolumn\hbox{}%
\newpage\fi\fi\fi}
\newif\ifTitleSpread
\fancypagestyle{story}{
\fancyhf{}
\fancyhead[LE]{
\ifTitleSpread
\Huge\leftmark
\fi
}
\fancyfoot[LE]{
\LARGE\thepage\hspace{1cm}\Large\leftmark
}
\fancyfoot[RO]{
\Large\leftmark\hspace{1cm}\LARGE\thepage
}
}
%Example of the float that breaks with the current solution.
\newenvironment{twocolumnbox}{
\checkoddpage
\ifoddpage
\begin{tcolorbox}[
enhanced,
top=4mm,
bottom=4mm,
left=25mm,
right=5mm,
opacityframe=1,
opacityback=1,
colback=red,
colframe=black,
coltext=black,
text width=\textwidth-7mm,
boxrule=2mm,
arc is angular,
arc=6mm,outer arc=7mm,
float*=h!tb,
every float=\hspace*{-32mm}
]
\else
\begin{tcolorbox}[
enhanced,
top=4mm,
bottom=4mm,
left=5mm,
right=25mm,
opacityframe=1,
opacityback=1,
colback=red,
colframe=black,
coltext=black,
text width=\textwidth-7mm,
boxrule=2mm,
arc is angular,
arc=6mm,outer arc=7mm,
float*=h!tb
]
\fi
}{\end{tcolorbox}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FUNCTION IN QUESTION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\storychapter}[1]{
\cleardoublepage
\newpagecolor{gray}
\global\TitleSpreadtrue
\pagestyle{story}
\newgeometry{
includeheadfoot,
top=0cm,
bottom=7mm,
headheight=15cm,
headsep=5mm,
footskip=23mm,
left=20mm,
right=15mm
}
\par\refstepcounter{chapter}% Increase section counter
\chaptermark{#1}% Add section mark (header)
\addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% CURRENT SOLUTION ATTEMPT
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\afterpage{\afterpage{\afterpage{\afterpage{
\global\TitleSpreadfalse
%This works, but it also breaks my floats.
% \/
%\globaldefs=1 \restoregeometry
%\globaldefs=0
}}}}
}
\makeatother
\pagecolor{white}
\begin{document}
\pagestyle{empty}
\begin{titlepage}
\begin{center}
{\Huge\bfseries Title}
\end{center}
\end{titlepage}
\chapter{Test}
\lipsum
\lipsum
\storychapter{Storytest}
\lipsum
\lipsum
\lipsum
\lipsum[1-5]
\chapter{NewTest}
\lipsum
\begin{twocolumnbox}
\lipsum[1-3]
\end{twocolumnbox}
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\end{document}
我想知道是否有更好的(或使用浮点数)解决方案来解决我的问题。除此之外,使用\afterpage
和全局变量感觉相当肮脏。
答案1
编辑:
我利用 fancyhdr 中 headercode 的重复特性修改了设计,并将值的重置放在那里,这样几何图形在新的章节之后的奇数页上被重置为正常,以供下一个偶数页使用。这完全省去了从afterpage
文本主体中删除代码的需要,消除了浮点数带来的一些不良副作用。
\fancypagestyle{story}{
\fancyhf{}
\fancyhead[LE]{
\ifTitleSpread
\Huge\leftmark
\fi
}
\fancyhead[LO]{
\global\setlength{\headheight}{22mm}%
\global\setlength{\headsep}{7mm}%
\global\setlength{\textheight}{237mm}
}
\fancyfoot[LE]{
\LARGE\thepage\hspace{1cm}\Large\leftmark
}
\fancyfoot[RO]{
\Large\leftmark\hspace{1cm}\LARGE\thepage
}
}
原始解决方案:
我设法通过忽略几何包并自己重新设置相关布局值来解决这个问题。
\afterpage{\afterpage{\afterpage{
\global\setlength{\textheight}{237mm}
\afterpage{
\global\setlength{\headheight}{22mm}%
\global\setlength{\headsep}{7mm}%
\global\setlength{\footskip}{23mm}
\global\TitleSpreadfalse
}}}}