我正在尝试制作一个文档,以便双栏书籍文档中的彩色框跨越两栏,但我不知道该怎么做。这是我的测试。
\documentclass[10pt,twoside,twocolumn,openany]{book}
\usepackage[most]{tcolorbox}
\usepackage{xcolor}
\usepackage{lipsum}
\definecolor{monstertan}{HTML}{FDF1DC} %e.g. used for newer monsterblock
\definecolor{iron}{HTML}{CBCDCD} %e.g. used for older monsterbox
\definecolor{undergold}{HTML}{C9AD6A} % e.g. used for titlerules
\definecolor{uppergold}{HTML}{B89A67} %e.g. used for pagenumbers and footer
\definecolor{brass}{HTML}{B5A642}
\definecolor{copper}{HTML}{b87333}
\definecolor{black}{HTML}{000000}
\DeclareTColorBox{paperbox}{O{} m O{iron}}{
frame hidden,
boxrule=0pt,
breakable,
enhanced,
before skip=11pt plus 1pt,
toptitle=3mm,
boxsep=0.25ex,
left=8pt,
right=8pt,
fonttitle=\fontfamily{fosj}\selectfont\scshape\bfseries\color{brass},
fontupper=\fontfamily{lmss}\selectfont,
title=#2,
arc=0mm,
parbox = false,
borderline north={1pt}{-0.5pt}{brown},
borderline south={1pt}{-0.5pt}{brown},
colback=#3,
colframe=#3,
colbacktitle=#3,
fuzzy shadow={0mm}{-3.5pt}{-0.5pt}{0.4mm}{black!60!white},
overlay={
\fill [fill=brown] (frame.south west) -- ++(7pt,0) -- ++(0,-5pt) -- cycle;
\fill [fill=brown] (frame.north west) -- ++(7pt,0) -- ++(0,5pt) -- cycle;
\fill [fill=brown] (frame.north east) -- ++(-7pt,0) -- ++(0,5pt) -- cycle;
\fill [fill=brown] (frame.south east) -- ++(-7pt,0) -- ++(0,-5pt) -- cycle;
},
after={\vspace{10pt plus 1pt}\noindent},
#1
}
\begin{document}
\lipsum*
\begin{paperbox}[width=200px]{lipsum}
\lipsum
\end{paperbox}
\end{document}
我该如何去做呢?
答案1
答案2
这是一个多列解决方案。另请参阅tcolorbox 中的多色
\documentclass[10pt,twoside,openany]{book}
\usepackage[most]{tcolorbox}
\usepackage{xcolor}
\usepackage{lipsum}
\usepackage{multicol}
\definecolor{monstertan}{HTML}{FDF1DC} %e.g. used for newer monsterblock
\definecolor{iron}{HTML}{CBCDCD} %e.g. used for older monsterbox
\definecolor{undergold}{HTML}{C9AD6A} % e.g. used for titlerules
\definecolor{uppergold}{HTML}{B89A67} %e.g. used for pagenumbers and footer
\definecolor{brass}{HTML}{B5A642}
\definecolor{copper}{HTML}{b87333}
\definecolor{black}{HTML}{000000}
\DeclareTColorBox{paperbox}{O{} m O{iron}}{
frame hidden,
boxrule=0pt,
breakable,
enhanced,
before skip=11pt plus 1pt,
toptitle=3mm,
boxsep=0.25ex,
left=8pt,
right=8pt,
fonttitle=\fontfamily{fosj}\selectfont\scshape\bfseries\color{brass},
fontupper=\fontfamily{lmss}\selectfont,
title=#2,
arc=0mm,
parbox = false,
borderline north={1pt}{-0.5pt}{brown},
borderline south={1pt}{-0.5pt}{brown},
colback=#3,
colframe=#3,
colbacktitle=#3,
fuzzy shadow={0mm}{-3.5pt}{-0.5pt}{0.4mm}{black!60!white},
overlay={
\fill [fill=brown] (frame.south west) -- ++(7pt,0) -- ++(0,-5pt) -- cycle;
\fill [fill=brown] (frame.north west) -- ++(7pt,0) -- ++(0,5pt) -- cycle;
\fill [fill=brown] (frame.north east) -- ++(-7pt,0) -- ++(0,5pt) -- cycle;
\fill [fill=brown] (frame.south east) -- ++(-7pt,0) -- ++(0,-5pt) -- cycle;
},
after={\vspace{10pt plus 1pt}\noindent},
#1
}
\begin{document}
\begin{multicols}{2}
\lipsum[1-4]
\end{multicols}
\begin{paperbox}{lipsum}
\lipsum[1-4]
\end{paperbox}
\begin{multicols}{2}
\lipsum[1-4]
\end{multicols}
\end{document}
答案3
在以前的解决方案中,文本在 tcolorbox 之前从左列流向右列,并在 tcolorbox 之前继续从左列流向右列。如果这是所需的行为,我没有什么可补充的。但是,如果您希望文本在 tcolorbox 之前和之后在左列流动,然后流向右列,以下代码显示了部分(手动)解决方案。
它使用tcolorbox
magazine
和tcbraster
库以及multicol
选项twocolumn
。
您应该知道文本的哪一部分将出现在中断的页面上,并决定四个文本片段的长度。我通过反复试验确定它们的大小。所有这些文本将插入到环境中,该环境将对其进行分段并产生 6 个片段。稍后,所有这些片段都将放在我们的纸上。带有 tcolorbox 的页面由一个放置了 4 个中心片段的环境mybox
组成。tcbraster
为了区分fragmented
文本和常规文本,我在每个片段后面添加了水印编号。
我必须说最终的调整并不完美,但我不知道如何改进它。
最终的构图如下:
tcolorbox 页面的详细信息如下:
\documentclass[12pt,a4paper]{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\usepackage{multicol}
\newtcolorbox{mybox}[1][]{
enhanced,
breakable,
blanker,
notitle,
colback=green!7,
break at=\pagegoal-\pagetotal-8mm/5cm/10.5cm/5cm/10.5cm/0pt,
reset box array,
store to box array,
watermark text=\arabic{tcbbreakpart},
width=\linewidth,
#1
}
\begin{document}
\begin{multicols}{2}
\lipsum[1-3]
\begin{mybox}
\lipsum[4-9]
\end{mybox}
\consumetcboxarray{1}{blanker,before=\par\vfill\noindent}
\end{multicols}
\begin{tcbitemize}[raster columns=2, raster valign=top]
\tcbitem[blanker]\consumeboxarray{2}
\tcbitem[blanker]\consumeboxarray{4}
\tcbitem[raster multicolumn=2, title=A tcolorbox, rounded corners, colframe=black, colback=pink, size=normal]
\lipsum[2]
\tcbitem[blanker]\consumeboxarray{3}
\tcbitem[blanker]\consumeboxarray{5}
\end{tcbitemize}
\begin{multicols}{2}
\consumetcboxarray{6}{blanker,before=\par\vfill\noindent}
\lipsum[10-13]
\end{multicols}
\end{document}