每侧页面边距中的图形取决于奇数/偶数

每侧页面边距中的图形取决于奇数/偶数

我想要一个像 fancyhdr 一样的东西,但位于页边距上:每个页面上都覆盖一个彩色框,上面有文档标题(或任何其他文本),垂直放置在页边距内。该框应放置在外边距上(奇数页的右侧,偶数页的左侧),并且应易于启用/禁用(例如使用花哨的样式)。下图中偶数页左侧的蓝色框就是一个例子:

偶数页示例

在奇数页上,我希望有相同的框/文本,但旋转 180°:

在此处输入图片描述

我的具体例子是一个蓝色的盒子,但是也非常感谢能够允许图形的通用解决方案!

答案1

这使用了\AddToHook{shipout/background},它相对较新并且内置于 LaTeX 中。

请注意,shipout\value{page}是可靠的。只有在使用浮动或页面最后一段(好吧,任何可能排在最后的段落)时,才需要 changepage 或 ifoddpage 之类的东西。

\documentclass[a4paper]{article}

\usepackage{lipsum}
\usepackage{tikz}
\usepackage{xcolor}

\definecolor{MyBlue}{HTML}{0053A6}

\newcommand\ColorMargin{%
\ifodd\value{page}% 
  \put (1 cm,-1cm){% relative to upper left corner
  \begin{tikzpicture}[baseline=(current bounding box.north)]
    \node[rotate=90, minimum height=1 cm, minimum width=10 cm, fill=MyBlue, text=white] at (0, 0) {\bfseries\large MY TEXT};
  \end{tikzpicture}}%
\else
  \put (\paperwidth - 2 cm,-1cm){%
  \begin{tikzpicture}[baseline=(current bounding box.north)]
    \node[rotate=270, minimum height=1 cm, minimum width=10 cm, fill=MyBlue, text=white] at (0, 0) {\bfseries\large MY TEXT};
  \end{tikzpicture}}%
\fi
}

\AddToHook{shipout/background}[myhook]{\ColorMargin}

\begin{document}

\sloppy\lipsum[1-50]\lipsum[1-50]
\RemoveFromHook{shipout/background}[myhook]
\lipsum[1-50]

\end{document}

答案2

对我的问题的评论让我得到了很多不同的答案。我使用以下方法从中编译了一个 MWE eso-picture

\documentclass{article}[a4paper]

\usepackage{lipsum}
\usepackage{tikz}
\usepackage{ifthen}
\usepackage{changepage}
\strictpagecheck
\usepackage{xcolor}
\usepackage{eso-pic}

\definecolor{MyBlue}{HTML}{0053A6}

\newcommand\ColorMargin{%
\checkoddpage
\ifoddpage
    \put (1 cm,480){
    \begin{tikzpicture}
  \node[rotate=90, minimum height=1 cm, minimum width=10 cm, fill=MyBlue, text=white] at (0, 0) {\bfseries\large MY TEXT};
\end{tikzpicture}}
  \else
    \put (\paperwidth - 2 cm,480){
    \begin{tikzpicture}
  \node[rotate=270, minimum height=1 cm, minimum width=10 cm, fill=MyBlue, text=white] at (0, 0) {\bfseries\large MY TEXT};
\end{tikzpicture}}
  \fi
}

\AddToShipoutPicture{\ColorMargin}

\begin{document}

\sloppy\lipsum[1-50]\lipsum[1-50]
\ClearShipoutPicture
\lipsum[1-50]

\end{document}

结果是输出

相关内容