我编写了一个Dupli
环境,允许我在一张 A4 纸上打印两张相同的 A5 纸。
%%%%%%%%%%%%%%%%%%%%%%%%%
% environnement Dupli
\newlength{\ligne}%
\newsavebox{\maboite}%
\newlength\tindent%
\newlength\ttopskip%
\newenvironment{Dupli}[1]{%
\def\mtfois{#1}%
\setlength{\topskip}{0mm}%
\setlength{\tindent}{\parindent}%
\setlength{\parindent}{0pt}%
\setlength{\ligne}{0.46\textwidth}%
\setbox\maboite\hbox\bgroup%
\begin{minipage}[t]{.46\textwidth}%
}{%
\end{minipage}\egroup%
%\noindent%
\vspace*{\stretch{1}}%
\foreach \i in {1,...,\mtfois} {%
%\vspace*{\stretch{1}}%
\parbox{\textwidth}{%
\hfill\usebox{\maboite}%
\hfill\vrule\hfill%
\usebox{\maboite}\hfill{\null}%
}% fin de la parbox
\vspace*{\stretch{1}}%
\par\noindent%
}% fin du foreach \i
%\vfill
\setlength{\parindent}{\tindent}%
\setlength{\topskip}{\ttopskip}%
}
% fin environnement Dupli
%%%%%%%%%%%%%%%%%%%%%%%%%%%
我用它来创建课程摘要这些 tcolorbox。
我希望这个盒子能够使用可拆分选项扩展到多页。
但Dupli
环境不允许中断。
目前,当摘要需要几页时,我会单独创建每一页。我想只创建一个摘要,但保留摘要页码(1/3 2/3 3/3 等)在右上角。
截图完整代码:
\documentclass[a4paper, 11pt,landscape]{article}
\usepackage[margin=0cm]{geometry}
\usepackage{lipsum}
\usepackage{ifthen}
\usepackage{pgffor}
\usepackage{emerald}
\usepackage{xfrac}
\usepackage{emerald}
\usepackage[most]{tcolorbox}
\usepackage{atveryend}
%%%%%%%%%%%%%%%%%%%%%%%%%
% environnement Dupli
\newlength{\ligne}%
\newsavebox{\maboite}%
\newlength\tindent%
\newlength\ttopskip%
\newenvironment{Dupli}[1]{%
\def\mtfois{#1}%
\setlength{\topskip}{0mm}%
\setlength{\tindent}{\parindent}%
\setlength{\parindent}{0pt}%
\setlength{\ligne}{0.46\textwidth}%
\setbox\maboite\hbox\bgroup%
\begin{minipage}[t]{.46\textwidth}%
}{%
\end{minipage}\egroup%
%\noindent%
\vspace*{\stretch{1}}%
\foreach \i in {1,...,\mtfois} {%
%\vspace*{\stretch{1}}%
\parbox{\textwidth}{%
\hfill\usebox{\maboite}%
\hfill\vrule\hfill%
\usebox{\maboite}\hfill{\null}%
}% fin de la parbox
\vspace*{\stretch{1}}%
\par\noindent%
}% fin du foreach \i
%\vfill
\setlength{\parindent}{\tindent}%
\setlength{\topskip}{\ttopskip}%
}
% fin environnement Dupli
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% from https://tex.stackexchange.com/a/470933/138900
% resume box
\NewDocumentCommand{\currentschoolyear}{+o}{%
\IfValueTF{#1}{%
\sfrac{#1}{\the\numexpr#1+1}
}{%
\ifnum\month<9%
\sfrac{\the\numexpr\year-1}{\the\year}%
\else
\sfrac{\the\year}{\the\numexpr\year+1}%
\fi
}%
}
\def\couleurresume{red}%
% style du titre « résumé du cours »
\tcbset{titreresume/.style={
boxed title style={
colframe=\couleurresume!50,%
colback=\couleurresume!10,%
coltext=blue,%
leftrule=1.5mm,rightrule=1.5mm,toprule=1.5pt,bottom=0pt,boxsep=1pt}}
}
% style des soustitres des résumés
\tcbset{soustitre/.style={
subtitle style={%
colback=\couleurresume!7,%
colframe=\couleurresume!50,%
boxsep=1mm,
fontupper={\sffamily\bfseries\large\selectfont\color{\couleurresume!63!black}}}}
}
% style du titre-boxed des encadrés
\tcbset{titrecadre/.style={%
minipage boxed title*=-.5\linewidth,
boxed title style={
boxrule=.8pt,boxsep=0pt,toptitle=0pt,
colframe=\couleurresume!55,colback=white},
halign title=left}
}
\NewTColorBox[auto counter]{resume}{+o+m}{%
minipage boxed title*=-106mm,
attach boxed title to top center={yshift=-3mm,xshift=-\linewidth/5},
enhanced,
nobeforeafter,
breakable,
lower separated=false,
IfValueTF={#1}{%
before upper={\textcolor{\couleurresume!63!black}{\currentschoolyear[#1] \hfill{#2}\hfill\thetcbcounter/\ref{nombre-de-resume}}},
}{%
before upper={\textcolor{\couleurresume!63!black}{\currentschoolyear \hfill{#2}\hfill\thetcbcounter/\ref{nombre-de-resume}}},
},
colframe=\couleurresume!50,%
colback=white,%
coltitle=\couleurresume!63!black,%
leftrule=3mm,rightrule=3mm,toprule=2pt,bottomrule=2pt,left=3pt,right=0pt,top=3mm,
fonttitle=\sffamily\bfseries\large,
titreresume,soustitre,title={\normalsize Résumé}
}
\makeatletter
\AfterLastShipout{%
\immediate\write\@auxout
{\string\newlabel{nombre-de-resume}{{\thetcb@cnt@resume}{}}}%
}
\makeatother
% end of resume box
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\thispagestyle{empty}
\def\couleurresume{red}%
\begin{Dupli}{1}
\begin{resume}{breakable resume}
\tcbsubtitle{long text}
\lipsum[1]
\end{resume}
\end{Dupli}
\end{document}
- 是否可以使我的
Dupli
环境变得可破坏,以便我不需要创建与页面一样多的摘要框? - 如果没有的话,是否可以通过其他方式获得相同的结果?
使用 www.DeepL.com/Translator 翻译
答案1
以下代码展示了一个使用tcolorbox
工具的解决方案。它使用magazine
库将所需文本拆分并存储在 中boxarray
,然后使用 打印这些部分tcbraster
。此解决方案基于Leaflet example
来自tcolorbox
文档。
少了什么东西?:
- 我无法保存数组大小以供标题参考
- 利润率必须调整
- 楼主没有解释破损部件的标题是什么
到目前为止的代码如下所示:
\documentclass[a4paper, 11pt, landscape]{article}
\usepackage[margin=0.5cm]{geometry}
\usepackage{lipsum}
\usepackage{ifthen}
\usepackage{pgffor}
\usepackage{emerald}
\usepackage{xfrac}
\usepackage{emerald}
\usepackage[most]{tcolorbox}
\usepackage{atveryend}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% from https://tex.stackexchange.com/a/470933/138900
% resume box
\NewDocumentCommand{\currentschoolyear}{+o}{%
\IfValueTF{#1}{%
\sfrac{#1}{\the\numexpr#1+1}
}{%
\ifnum\month<9%
\sfrac{\the\numexpr\year-1}{\the\year}%
\else
\sfrac{\the\year}{\the\numexpr\year+1}%
\fi
}%
}
\def\couleurresume{red}%
% style du titre « résumé du cours »
\tcbset{titreresume/.style={
boxed title style={
colframe=\couleurresume!50,%
colback=\couleurresume!10,%
coltext=blue,%
leftrule=1.5mm,rightrule=1.5mm,toprule=1.5pt,bottom=0pt,boxsep=1pt}}
}
% style des soustitres des résumés
\tcbset{soustitre/.style={
subtitle style={%
colback=\couleurresume!7,%
colframe=\couleurresume!50,%
boxsep=1mm,
fontupper={\sffamily\bfseries\large\selectfont\color{\couleurresume!63!black}}}}
}
% style du titre-boxed des encadrés
\tcbset{titrecadre/.style={%
minipage boxed title*=-.5\linewidth,
boxed title style={
boxrule=.8pt,boxsep=0pt,toptitle=0pt,
colframe=\couleurresume!55,colback=white},
halign title=left}
}
\NewTColorBox[auto counter]{resume}{+o+m}{%
minipage boxed title*=-106mm,
attach boxed title to top center={yshift=-3mm,xshift=-3cm},
enhanced,
nobeforeafter,
breakable,
width=.5\textwidth,
break at=\textheight,
reset box array,
store to box array,
lower separated=false,
IfValueTF={#1}{%
before upper={\textcolor{\couleurresume!63!black}{\currentschoolyear[#1] \hfill{#2}\hfill\thetcbbreakpart/\ref{nombre-de-resume}}},
}{%
before upper={\textcolor{\couleurresume!63!black}{\currentschoolyear \hfill{#2}\hfill\thetcbbreakpart/\ref{nombre-de-resume}}},
},
colframe=\couleurresume!50,%
colback=white,%
coltitle=\couleurresume!63!black,%
leftrule=3mm,rightrule=3mm,toprule=2pt,bottomrule=2pt,left=3pt,right=0pt,top=3mm,
fonttitle=\sffamily\bfseries\large,
titreresume,soustitre,title={\normalsize Résumé}
}
\makeatletter
\AfterLastShipout{%
\immediate\write\@auxout
{\string\newlabel{nombre-de-resume}{{\thetcb@cnt@resume}{}}}%
}
\makeatother
% end of resume box
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\thispagestyle{empty}
\def\couleurresume{red}%
%This "resume" is broken in parts and stores in "default" array.
\begin{resume}{breakable resume}
\tcbsubtitle{long text}
\lipsum[1-15]
\end{resume}
%The array is printed inside a `tcbraster`
\boxarraygetsize{\mysize}
\begin{tcbraster}[blankest, raster columns=2]
\foreach \i in {1,...,\mysize}{%
\begin{tcolorbox}
\useboxarray{\i}
\end{tcolorbox}%
\begin{tcolorbox}
\useboxarray{\i}
\end{tcolorbox}%
}
\end{tcbraster}
\end{document}
更新:
下面的代码显示了一些改进(我希望如此!)到之前的解决方案:
geometry
打印边距(见注释)。外部边距在包选项中用hmargin
和定义vmargin
。除此之外,每个框都定义为具有一定的width
。此宽度表示打印的 tcolorbox 的整个宽度,包括文本和边框。如果我们想并行打印两个相等的框,框的最大宽度将为width=.5\textwidth
。低于此值的任何内容都将允许框之间有一些水平空间。- 片段枚举。命令
\boxarraygetsize
将片段数保存到宏中。此宏存储在.aux
文件中并引用以在每个框中编写 fragment-num/total-fragments 标签。 - 片段标题。没有片段标题,但已保留一些空间,
pad after break
并且命令中包含标签 fragment-num/total-fragmentsoverlay
。 - 整体构成。在以下代码中,
tcbraster
已被删除。我不知道如何将存储的框居中放入栅格列(我认为这是不可能的),并且栅格已被 替换\useboxarray{\i}\hspace{...}\consumeboxarray{\i}\\
。这样,每个页面上都会放置两个框,因为原始文本已在 上分散\textheight
。如果width
小于 ,.5\textwidth
则\hspace
可以在同一行上的框之间包含一些。
现在代码:
\documentclass[a4paper, 11pt, landscape]{article}
\usepackage[hmargin={2cm,2cm}, vmargin={2cm,2cm}]{geometry}
\usepackage{lipsum}
\usepackage{ifthen}
\usepackage{pgffor}
\usepackage{emerald}
\usepackage{xfrac}
\usepackage{emerald}
\usepackage[most]{tcolorbox}
\usepackage{atveryend}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% from https://tex.stackexchange.com/a/470933/138900
% resume box
\NewDocumentCommand{\currentschoolyear}{+o}{%
\IfValueTF{#1}{%
\sfrac{#1}{\the\numexpr#1+1}
}{%
\ifnum\month<9%
\sfrac{\the\numexpr\year-1}{\the\year}%
\else
\sfrac{\the\year}{\the\numexpr\year+1}%
\fi
}%
}
\def\couleurresume{red}%
% style du titre « résumé du cours »
\tcbset{titreresume/.style={
boxed title style={
colframe=\couleurresume!50,%
colback=\couleurresume!10,%
coltext=blue,%
leftrule=1.5mm,rightrule=1.5mm,toprule=1.5pt,bottom=0pt,boxsep=1pt}}
}
% style des soustitres des résumés
\tcbset{soustitre/.style={
subtitle style={%
colback=\couleurresume!7,%
colframe=\couleurresume!50,%
boxsep=1mm,
fontupper={\sffamily\bfseries\large\selectfont\color{\couleurresume!63!black}}}}
}
% style du titre-boxed des encadrés
\tcbset{titrecadre/.style={%
minipage boxed title*=-.5\linewidth,
boxed title style={
boxrule=.8pt,boxsep=0pt,toptitle=0pt,
colframe=\couleurresume!55,colback=white},
halign title=left}
}
\NewTColorBox[auto counter]{resume}{+o+m}{%
% minipage boxed title*=-106mm,
attach boxed title to top center={yshift=-3mm,xshift=-3cm},
enhanced,
nobeforeafter,
breakable,
pad after break = 1cm,
overlay middle and last={
\node[anchor=north east, color=\couleurresume!63!black] at (interior.north east) {\thetcbbreakpart/\ref{nombre-de-array}};
},
width=.5\textwidth,
break at=\textheight,
reset box array,
store to box array,
lower separated=false,
IfValueTF={#1}{%
before upper={\textcolor{\couleurresume!63!black}{\currentschoolyear[#1] \hfill{#2}\hfill\thetcbbreakpart/\ref{nombre-de-array}}},
}{%
before upper={\textcolor{\couleurresume!63!black}{\currentschoolyear \hfill{#2}\hfill\thetcbbreakpart/\ref{nombre-de-array}}},
},
colframe=\couleurresume!50,%
colback=white,%
coltitle=\couleurresume!63!black,%
leftrule=3mm,rightrule=3mm,toprule=2pt,bottomrule=2pt,left=3pt,right=0pt,top=3mm,
fonttitle=\sffamily\bfseries\large,
titreresume,soustitre,title={\normalsize Résumé}
}
\makeatletter
\AfterLastShipout{%
% \immediate\write\@auxout
% {\string\newlabel{nombre-de-resume}{{\thetcb@cnt@resume}{}}}%
\immediate\write\@auxout
{\string\newlabel{nombre-de-array}{{\mysize}{}}}%
}
\makeatother
% end of resume box
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\thispagestyle{empty}
\def\couleurresume{red}%
%This "resume" is broken in parts and stores them in "default" array.
\begin{resume}{breakable resume}
\tcbsubtitle{long text}
\lipsum[1-8]
\end{resume}
\boxarraygetsize{\mysize}
\foreach \i in {1,...,\mysize}{%
\centering
\noindent\useboxarray{\i}\hspace*{0mm}%
\consumeboxarray{\i}\\
}
\end{document}
结果如下:
答案2
这利用了atbegshi
由 加载的eso-pic
,将页面内容放入一个框 中\AtBeginShipoutBox
。这个框可以复制。以下是原理证明,无论 都可以工作tcolorbox
。但是,它确实假设用户足够小心,将内容限制在页面左侧。有很多方法可以扩展这一点(我相信有人会这样做,因为这个答案不可能被接受),我公开承认,由于这个原因,我手动设计了一些小的偏移,而不是精确地找出如何根据页面几何形状计算它们。此外,人们不一定需要使用 Ti钾Z 在这里,机制就eso-pic
足够了,但您正在加载,tcolorbox
所以这没什么额外的。无论如何,这个例子展示了这个原则:添加一个钩子,将发货框复制到文档的右半部分。
\documentclass[a4paper, 11pt,landscape]{article}
\usepackage[breakable]{tcolorbox}
\usepackage{lipsum}
\usepackage{eso-pic}
\usepackage{tikz}
\makeatletter
\AddToShipoutPictureFG{\begin{tikzpicture}[overlay,remember picture]
\node at ([xshift=\textwidth/4+2em,yshift=0.9em]current page.center) {\copy\AtBeginShipoutBox};
\end{tikzpicture}}
\makeatother
\pagestyle{empty}
\begin{document}
\foreach \X [count=\Y] in {Duck,Marmot,Koala,Bear,Cat}
{\section{\X}
\begin{tcolorbox}[breakable,width=0.46\textwidth]
\lipsum[\Y]
\end{tcolorbox}}
\end{document}
(我应该提到,有软件可以对 pdf 文件执行相同的操作。至少我是这么认为的,在过去,那是一些 postscript 命令,可能是psnup
,也可能不是,允许人们对 ps 文件执行此操作。)
附录:似乎存在误解:此解决方案确实不是制作与页面数量相同的盒子。为了更清楚地说明这一点,我添加了另一个示例。
\documentclass[a4paper, 11pt,landscape]{article}
\usepackage[breakable,skins]{tcolorbox}
\usepackage{lipsum}
\usepackage{eso-pic}
\usepackage{tikz}
\makeatletter
\AddToShipoutPictureFG{\begin{tikzpicture}[overlay,remember picture]
\node at ([xshift=\textwidth/4+2em,yshift=0.9em]current page.center) {\copy\AtBeginShipoutBox};
\end{tikzpicture}}
\makeatother
\pagestyle{empty}
\begin{document}
\section{One very long box}
\begin{tcolorbox}[enhanced jigsaw,breakable,width=0.46\textwidth]
\lipsum[1-5]
\end{tcolorbox}
\end{document}
这有什么用呢?只是复制左边的列对我来说有点无聊。这里的重点是你可以玩 Ti钾Z. 这是一个镜像左列的应用程序,但显然您可以旋转它,更改不透明度,甚至将其公开(使用fadings
)。
\documentclass[a4paper, 11pt,landscape]{article}
\usepackage[breakable,skins]{tcolorbox}
\usepackage{lipsum}
\usepackage{eso-pic}
\usepackage{tikz}
\makeatletter
\AddToShipoutPictureFG{\begin{tikzpicture}[overlay,remember picture]
\node at ([xshift=\textwidth/4+2em,yshift=0.9em]current page.center)
[xscale=-1]{\copy\AtBeginShipoutBox};
\end{tikzpicture}}
\makeatother
\pagestyle{empty}
\begin{document}
\section{One very long box}
\begin{tcolorbox}[enhanced jigsaw,breakable,width=0.46\textwidth]
\lipsum[1-5]
\end{tcolorbox}
\end{document}