装饰环境的每一页

装饰环境的每一页

我正在尝试创建一个环境,其中包含该环境内容的每个页面都有红色边框。我尝试\EveryShipout过从everyshi包中使用并在启动和停止环境时设置宏,但事实证明这并不可靠(它在第一页上不起作用,有时,随机页面的边框不显示。)

下面是我使用的代码示例。

\documentclass{article}

\usepackage{lipsum}
\usepackage{xparse}
\usepackage{xstring}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{everyshi}

\makeatletter
\EveryShipout{%
    \begingroup\let\protect\@typeset@protect
    \IfStrEq{\inlesson}{1}{%
        \begin{tikzpicture}[remember picture, overlay]
            \draw[line width=25mm, red] ([shift={(-0.55\pgflinewidth,-0.05\pgflinewidth)}]current page.north east) 
                --
                ([shift={(-0.55\pgflinewidth,0.05\pgflinewidth)}]current page.south east);
        \end{tikzpicture}
    }{}
    \endgroup
}
\makeatother

\def\inlesson{0}
\DeclareDocumentEnvironment{lesson}{}{%
    \def\inlesson{1}
    \color{blue}
}{%
    \newpage
}


\begin{document}
    \begin{lesson}
        \lipsum[2-10]
    \end{lesson}

    \lipsum[2-10]
\end{document}

产生

来自示例代码

有没有更好的方法让环境的每一页都具有边框?

答案1

有了eso-pic它(对我来说)似乎更容易使它工作。eso-pic是基于atbegshi但我发现挖掘出相关命令更容易。

\documentclass{article}
\usepackage{lipsum}
\usepackage{xparse}
\usepackage{tikz}
\usepackage{eso-pic}
\newif\ifinlesson

\makeatletter
\AddToShipoutPictureBG{%
    \begingroup\let\protect\@typeset@protect
    \ifinlesson%
        \begin{tikzpicture}[remember picture, overlay]
            \draw[line width=25mm, red] ([shift={(-0.55\pgflinewidth,-0.05\pgflinewidth)}]current page.north east) 
                --
                ([shift={(-0.55\pgflinewidth,0.05\pgflinewidth)}]current page.south east);
        \end{tikzpicture}
    \fi
    \endgroup
}
\makeatother

%\def\inlesson{0}
\DeclareDocumentEnvironment{lesson}{}{%
    \inlessontrue
    \color{blue}
}{%
    \newpage
    \inlessonfalse
}


\begin{document}
    \begin{lesson}
        \lipsum[2-10]
    \end{lesson}

    \lipsum[2-10]
\end{document}

在此处输入图片描述

相关内容