在下面的例子中,我引入了一个页码条件\ifnum\c@page=1\relax\else...
。页码条件(在本例中)检查页码是否为 1,如果条件满足,则不执行任何操作。该条件似乎还会产生奇怪的垂直空白,高度为\baselineskip
。\relax
用替换\vskip-\baselineskip
会产生预期的结果,放置文本(例如,xyz
在第一节标题之前)也会产生预期的结果。这些都不是问题的真正解决方案,因为我仍然不明白发生了什么。
顺便说一句,如果条件之前没有文本(例如两个相继的章节标题),则将条件更改为不同的页码会导致同样的问题。
那么空间从何而来?
\documentclass{article}
\usepackage[explicit]{titlesec}%
\makeatletter
\usepackage{changepage}
\usepackage{showframe}
\newenvironment{somenevironment}%
{\begin{adjustwidth*}{0pt}{100pt}%%%<<<<<
}%
{\end{adjustwidth*}%%%<<<<<<
}%
\titleformat{name=\section}%
{}{}{\z@}%
{%
\ifnum\c@page=1\relax%
\else%
\expandafter\clearpage\fi%
% ^^^^^^^^^^^
\begin{somenevironment}%
#1
\end{somenevironment}%%%%<<<<
}%
[\clearpage]
\makeatother
\begin{document}
\section{My section}xyz
\section{My section}xyz
\section{My section}xyz
\section{My section}xyz
\section{My section}xyz
\section{My section}xyz
\section{My section}xyz
\section{My section}xyz
\section{My section}xyz
\section{My section}xyz
\section{My section}xyz
\section{My section}xyz
\section{My section}xyz
\end{document}
答案1
开头的垂直空间是由 引起的adjustwidth
。有更简单的方法可以实现您想要的效果:
\documentclass{article}
\usepackage{titlesec}
\usepackage{showframe}
\newcommand{\somecommand}[1]{%
\makebox[\textwidth][l]{\parbox[t]{\dimexpr\textwidth+100pt}{#1}}%
}
\titleformat{name=\section}
{}{}{0pt}
{%
\ifnum\value{page}=1
\else
\clearpage
\fi
\somecommand
}[\clearpage]
\begin{document}
\section{My section}xyz
\section{My section}xyz
\end{document}