我正在尝试创建一个环境,其中包含该环境内容的每个页面都有红色边框。我尝试\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}