奇数页和偶数页使用不同的 \section

奇数页和偶数页使用不同的 \section

我想让章节标题在偶数页和奇数页上看起来不同。我有以下 MnWE,采用简单的方法。问题是您不知道您的章节标题会移动到下一页。我甚至尝试在章节排版后检查页码的奇怪之处,但没有成功(即“After:”文本)。

\documentclass[a4paper,twoside]{article}

\makeatletter
\let\X@section\section
\def\section#1{%
  \ifodd\c@page\relax
    \X@section{ODD: #1}%
  \else
    \X@section{EVEN: #1}%
  \fi
  \par After:\ifodd\c@page\relax odd\else even\fi \par % <-- for testing purposes
}
\makeatother

\usepackage{lipsum}

\begin{document}

\section{Test section} \lipsum[1]
\section{Test section} \lipsum[1]
\section{Test section} \lipsum[1]
\section{Test section} \lipsum[1]
\section{Test section} \lipsum[1]

\end{document}

答案1

尝试使用titlesec\titleformat包。其中包含的命令可以采用page=oddpage=even选项,根据偶数或奇数页码提供不同的格式,就像您想要的那样。


\usepackage{titlesec}
\titleformat{name=\section,page=odd}{}{ODD:}{.5em}{}
\titleformat{name=\section,page=even}{}{EVEN:}{.5em}{}

在序言中应该给出你想要的东西。

答案2

ifoddpage包会为您进行此项检查。

基本上,您需要使用该\label \pageref机制来获取可靠的页码(并在下次运行乳胶时进行更正),但ifoddpage隐藏混乱的细节。

答案3

尽管我使用了另一种解决方案,但我还是用自己的方式来实现这一点浮动字幕,效果很好(但该ifoddpage包没有解决这个问题)。它要求将目录包含在文档中,并进行 3 次 latex 处理。它没有解决 的可选参数\caption

\def\l@xfloatx#1#2{
    \ifodd#2\relax
        \protected@write\@auxout{}{%
        \string\@setxflxodd{\string\@xflxoddtrue}
        }
    \else
        \protected@write\@auxout{}{%
        \string\@setxflxodd{\string\@xflxoddfalse}
        }
    \fi
}
\newif\if@xflxodd
\def\@writexflxodd{%
  \addcontentsline{toc}{xfloatx}{\relax}%
}
\newcounter{xflxoddpre}
\def\@setxflxodd#1{
    \stepcounter{xflxoddpre}
    \expandafter\gdef\csname @xflxodd@\roman{xflxoddpre}\endcsname{#1}
}
\newcounter{xflxodd}
\def\@usexflxodd{
    \stepcounter{xflxodd}
    \ifodd\c@page\relax
        \@xflxoddtrue
    \else
        \@xflxoddfalse
    \fi
    \csname @xflxodd@\roman{xflxodd}\endcsname%
}
\let\x@caption\caption
\def\caption#1{\@writexflxodd\@usexflxodd\if@xflxodd odd\else even\fi\ #1}

相关内容