双列布局中 tikz 图片的环绕

双列布局中 tikz 图片的环绕

我目前正在以两列布局排版文档。许多文本块被放入彩色框中,目前使用 TikZ 实现。这可行;但是,我必须手动将文本块拆分到两列之间,否则整个列将移动到第二列,因为 tikzpicture 太大了。有没有办法在到达列底部时自动拆分 tikzpicture 的所有节点?如果没有,我可以使用定理包来实现这一点吗?

\documentclass[twocolumn]{scrartcl}
\usepackage{lipsum}
\usepackage{tikz}

\newcommand\mybox[1]{%
  \noindent\begin{tikzpicture}%
  \node[rectangle, draw=red!40, fill=red!20, inner sep=10pt] (box){%
    \begin{minipage}{0.9\columnwidth}%
      #1%
    \end{minipage}%
  };%
  \end{tikzpicture}%
}

\begin{document}
\section{Observe overflow:}
\mybox{\lipsum[1]}
\mybox{\lipsum[3]}

\newpage
\section{Correctly set:}
\mybox{\lipsum[4]}

\end{document}

答案1

根据 @Yiannis Lazarides 的评论,下面是一个如何使用的示例mdframed。在这种情况下,您确实不需要 TikZ 包:

\documentclass[twocolumn]{scrartcl}
\usepackage{lipsum}
\usepackage{mdframed}

\newcommand\mybox[1]{%
%   \minsizebox{0.9\columnwidth}{\textheight}{\parbox{0.9\columnwidth}{#1}}
\begin{mdframed}[linewidth=1pt,linecolor=red!40,backgroundcolor=red!20]
    #1
\end{mdframed}
}

\begin{document}
\section{Observe no overflow:}
\mybox{\lipsum[1-3]}

\mybox{\lipsum[3]}

\newpage
\section{Also correctly set:}
\mybox{\lipsum[4]}

\end{document}

在此处输入图片描述

该线有三个“层”,可以单独进行调整(例如,框架的多色线)等,如包文档中所述。

答案2

TikZ 对于这种用途来说绝对是过度的,除非你希望除了背景颜色和规则之外,你的盒子有更精美的装饰。

我尝试过mdframed包,但我得到了一些无关的规则和颜色框,它们延伸到了第二列。包文档说它不适用于multicolumn环境。

这是一种解决方案framed包裹:

\documentclass[twocolumn]{scrartcl}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage{framed}

\makeatletter
\newenvironment{MyBox}{%
\colorlet{framecolor}{red!40}%
\colorlet{shadecolor}{red!20}%
\setlength{\fboxrule}{2pt}%
\def\FrameCommand{\fcolorbox{framecolor}{shadecolor}}%
  \MakeFramed {\FrameRestore\@setminipage}}%
 {\par\unskip\endMakeFramed}
\newcommand{\mybox}[1]{\begin{MyBox}#1\end{MyBox}}
\makeatother


\begin{document}
\section{Observe overflow:}
\mybox{\lipsum[1-2]}
\mybox{\lipsum[3]}

\newpage
\section{Correctly set:}
\mybox{\lipsum[4]}

\end{document}

示例代码输出页面

我说“有点”是因为我不认为你希望每个段落都有一个框,而这个包就是发生这种情况的原因。

相关内容