在 y multicol 环境中跨越 x 列

在 y multicol 环境中跨越 x 列

目前我使用的是baposter文档类,我的一个图形正好占据给定海报块的 3/4。所以,基本上,有一个框,

\headerbox{options}{
    sketch goes here
}

我想要像这样的草图

enter image description here

进去。

数字与文本路径相对应。请注意,1、2、3 中可能都有数字,我添加这些数字很简单,\includegraphics而 5 是一个巨大的数字(或一组水平排列的数字)。

我尝试过multicols但没找到实现这种布局的方法。另外,我考虑过使用表格来表示 1-5,但\multirow\multicolumn命令无法调整表格的高度。有办法实现吗?

答案1

这可能是xcoffins包装可能会很方便;在下面的例子中,我在每个棺材周围画了一个框架,仅用于视觉引导;我只是在每个棺材上都放了一个“a”作为例子,但你可以放置任何材料:

\documentclass{article}
\usepackage{xcoffins}

\newlength\Wi% width for 1,2,3,4
\newlength\Wii% width for 5
\newlength\Wiii% width for 6,7
\newlength\Hi% height for 1
\newlength\Hii% height for 6,7
\newlength\Hiii% height for 2,3,4,5
\newlength\gap% separation between coffins

\setlength\gap{4pt}

\setlength\Wi{\dimexpr0.25\textwidth-0.75\gap\relax}
\setlength\Wii{\dimexpr\textwidth-\gap-\Wi\relax}
\setlength\Wiii{\dimexpr0.5\textwidth-0.5\gap\relax}

\setlength\Hi{.2\textheight}
\setlength\Hii{.1\textheight}
\setlength\Hiii{\dimexpr0.5\Hi-0.5\gap\relax}

\begin{document}

\NewCoffin\result
\NewCoffin\aaa
\NewCoffin\bbb
\NewCoffin\ccc
\NewCoffin\ddd
\NewCoffin\eee
\NewCoffin\fff
\NewCoffin\ggg

\SetHorizontalCoffin\result{}

% Fill the coffins in
\SetHorizontalCoffin\aaa{\frame{%
  \begin{minipage}[t][\Hi][t]{\Wi}
  a % put contents here
  \end{minipage}}}
\SetHorizontalCoffin\bbb{\frame{%
  \begin{minipage}[t][\Hiii][t]{\Wi}
  a % put contents here
  \end{minipage}}}
\SetHorizontalCoffin\ccc{\frame{%
  \begin{minipage}[t][\Hiii][t]{\Wi}
  a % put contents here
  \end{minipage}}}
\SetHorizontalCoffin\ddd{\frame{%
  \begin{minipage}[t][\Hiii][t]{\Wi}
  a % put contents here
  \end{minipage}}}
\SetHorizontalCoffin\eee{\frame{%
  \begin{minipage}[t][\Hiii][t]{\Wii}
  a % put contents here
  \end{minipage}}}
\SetHorizontalCoffin\fff{\frame{%
  \begin{minipage}[t][\Hii][t]{\Wiii}
  a % put contents here
  \end{minipage}}}
\SetHorizontalCoffin\ggg{\frame{%
  \begin{minipage}[t][\Hii][t]{\Wiii}
  a % put contents here
  \end{minipage}}}

% put \aaa into \result
\JoinCoffins\result\aaa

% align all other of coffins
\JoinCoffins\result [\aaa-t,\aaa-r] \bbb [t,l](\gap,0pt)
\JoinCoffins\result [\bbb-t,\bbb-r] \ccc [t,l](\gap,0pt)
\JoinCoffins\result [\ccc-t,\ccc-r] \ddd [t,l](\gap,0pt)
\JoinCoffins\result [\aaa-b,\aaa-r] \eee [b,l](\gap,0pt)
\JoinCoffins\result [\aaa-b,\aaa-l] \fff [t,l](0pt,-\gap)
\JoinCoffins\result [\fff-t,\fff-r] \ggg [t,l](\gap,0pt)

% Typeset \result
\noindent\TypesetCoffin\result

\end{document}

enter image description here

通过更改 s 的第三个可选参数minipage,您可以控制棺材内部材料的垂直定位;这是一个更现实的棺材填充示例:

\documentclass{article}
\usepackage{graphicx}
\usepackage{xcoffins}

\newlength\Wi% width for 1,2,3,4
\newlength\Wii% width for 5
\newlength\Wiii% width for 6,7
\newlength\Hi% height for 1
\newlength\Hii% height for 6,7
\newlength\Hiii% height for 2,3,4,5
\newlength\gap% separation between coffins

\setlength\gap{4pt}

\setlength\Wi{\dimexpr0.25\textwidth-0.75\gap\relax}
\setlength\Wii{\dimexpr\textwidth-\gap-\Wi\relax}
\setlength\Wiii{\dimexpr0.5\textwidth-0.5\gap\relax}

\setlength\Hi{.2\textheight}
\setlength\Hii{.1\textheight}
\setlength\Hiii{\dimexpr0.5\Hi-0.5\gap\relax}

\begin{document}

\NewCoffin\result
\NewCoffin\aaa
\NewCoffin\bbb
\NewCoffin\ccc
\NewCoffin\ddd
\NewCoffin\eee
\NewCoffin\fff
\NewCoffin\ggg

\SetHorizontalCoffin\result{}

% Fill the coffins in
\SetHorizontalCoffin\aaa{%
  \begin{minipage}[t][\Hi][t]{\Wi}
  Some text here in the first coffin, just to illustrate a real example. Let's add some more text so we can see the real scenario.
  \end{minipage}}
\SetHorizontalCoffin\bbb{%
  \begin{minipage}[c][\Hiii][c]{\Wi}
  \centering
  Here we have a centered text.
  \end{minipage}}
\SetHorizontalCoffin\ccc{%
  \begin{minipage}[c][\Hiii][c]{\Wi}
  \centering
  Here we have a centered text.
  \end{minipage}}
\SetHorizontalCoffin\ddd{%
  \begin{minipage}[c][\Hiii][c]{\Wi}
  \centering
  Here we have a centered text.
  \end{minipage}}
\SetHorizontalCoffin\eee{\frame{%
  \begin{minipage}[c][\Hiii][c]{\Wii}
  \hfill\includegraphics[height=1.5cm]{example-image-a}\hfill
  \includegraphics[height=1.5cm]{example-image-b}\hfill
  \includegraphics[height=1.5cm]{example-image-c}\hfill\null
  \end{minipage}}}
\SetHorizontalCoffin\fff{%
  \begin{minipage}[t][\Hii][t]{\Wiii}
  Some text here in this coffin, it's vertically aligned at the top of the coffin.
  \end{minipage}}
\SetHorizontalCoffin\ggg{%
  \begin{minipage}[b][\Hii][b]{\Wiii}
  Some text here in this coffin, it's vertically aligned at the bottom of the coffin.
  \end{minipage}}

% put \aaa into \result
\JoinCoffins\result\aaa

% align all other of coffins
\JoinCoffins\result [\aaa-t,\aaa-r] \bbb [t,l](\gap,0pt)
\JoinCoffins\result [\bbb-t,\bbb-r] \ccc [t,l](\gap,0pt)
\JoinCoffins\result [\ccc-t,\ccc-r] \ddd [t,l](\gap,0pt)
\JoinCoffins\result [\aaa-b,\aaa-r] \eee [b,l](\gap,0pt)
\JoinCoffins\result [\aaa-b,\aaa-l] \fff [t,l](0pt,-\gap)
\JoinCoffins\result [\fff-t,\fff-r] \ggg [t,l](\gap,0pt)

% Typeset \result
\noindent\TypesetCoffin\result

\end{document}

enter image description here

答案2

如果您熟悉 html,那么思考此类布局的一种方法就是使用divs在 html 中放置的框,但使用迷你页面。

enter image description here

这是 MWE

\documentclass[a4paper]{article}
\usepackage{calc}
\usepackage{graphicx}
\def\lorem{This is some text}
\newlength\Wi% width for 1,2,3,4
\newlength\Hi% height for 1
\newlength\gap% separation between boxes
\setlength\gap{4pt}
\setlength\Wi{\dimexpr0.25\textwidth-0.75\gap\relax}
\setlength\Hi{.2\textheight}
\parindent0pt
\begin{document}
\fboxsep0pt
\fboxrule0pt

\newcommand\area[1]{
\frame{%
  \begin{minipage}[b][2\Hi][t]{\Wi}%
     \centering
     \includegraphics[width=.9\textwidth]{#1}  % put contents here
      Some text.
  \end{minipage}}%
}
\area{one}%
\fbox{%
\begin{minipage}[b][2\Hi][t]{3\Wi+2\gap}
\frame{%
  \begin{minipage}[t][\Hi][t]{\Wi}
     \centering
     \includegraphics[width=.9\textwidth]{three}\par
    \lorem
  \end{minipage}}
\frame{%
  \begin{minipage}[t][\Hi][t]{\Wi}
      \centering
      \includegraphics[width=.9\textwidth]{two} % put contents here
  \end{minipage}}
\frame{%
  \begin{minipage}[t][\Hi][t]{\Wi}
       \centering
      \includegraphics[width=.9\textwidth]{three}
  \end{minipage}}
\frame{%
  \begin{minipage}[t][\Hi][t]{3\Wi+2\gap}
       \centering
      \includegraphics[width=.95\linewidth]{four}
     \lorem
  \end{minipage}}
\end{minipage}}
\par
\frame{%
  \begin{minipage}[t][\Hi][t]{2\Wi+1\gap}
     \centering
      \includegraphics[width=.95\linewidth]{five}
     Figure overflows
  \end{minipage}}%
\frame{%
  \begin{minipage}[t][\Hi][t]{2\Wi+1\gap}
    \centering
      \includegraphics[width=.95\linewidth]{six}
      Figure overflows
  \end{minipage}}

\end{document}

area是为了说明,如果您有很多这样的布局,您可能需要稍微抽象一下框以简化捕获。它们会变得有点难以阅读。我认为 Gonzalo 的解决方案xcoffins比这里概述的更灵活,但您需要xcoffins好好理解。另一种方法是使用 tikz,我相信有人也会发布解决方案。底部图像与框不太匹配,会溢出。我将它们包括在内是为了说明图像的纵横比必须与框的纵横比成比例。

我使用过fbox\frame。我个人更喜欢\fbox全屏模式,因为这样更容易关闭paddingframe。在开发过程中,您需要看到框架,但在最终布局中,您可能希望隐藏它们。带有这些调整的代码可以在以下位置找到Github

enter image description here

相关内容