排版精美的图形网格

排版精美的图形网格

因此,我需要 TeX 来排列页面,如下所示。更具体地说,将矢量图形.pdf图形排列在矩形网格中,具有严格的固定边界、下方和上方的标题、页面空间的最佳利用以及每个单元格内的空间(图形整齐地排列),以及可能/可选的边框线,我还没有决定。

动机:由于要处理大量图像,我决定专门为它们开辟一个单独的工作部分,并希望答案(展示如何为下面的示例页面执行此操作)能够指导我自己完成其余工作。目前,我正在尝试从 TeXbook 学习框和对齐,但不幸的是,时间不在我这边,我需要尽快获得视觉效果。

目前,我正在使用一种简单的快速修复方法,包括\includegraphics[]{}、、\null\hfill同一行上图像的左/右对齐以及文本的手动制表,这非常不吸引人,很难进行 TeX 类型处理,并且如果有 3 列则会失败。

非常感谢您的帮助,

此致,

皮奥特

图表页面

答案1

这很愚笨。

\documentclass{article}
\usepackage{cellspace}
\usepackage{graphicx}
\begin{document}
\begin{figure}[htb]
\setkeys{Gin}{width=5.5cm}\renewcommand\arraystretch{2}%
\cellspacetoplimit4pt
\cellspacebottomlimit4pt
\centering
 \begin{tabular}{|@{}c@{}|@{}c@{}|}
 \hline
 \begin{tabular}[t]{c@{}p{5.5cm}@{}c}
 &\multicolumn{1}{@{}Sc@{}}{\includegraphics{example-image-a}}&\\
 &Caption A&\\
 \hline
 &\multicolumn{1}{@{}Sc@{}}{\includegraphics[height=5.5cm]{example-image-c}}&\\
 &Caption C&\\
 \hline
 &\multicolumn{1}{@{}Sc@{}}{\includegraphics[height=2cm]{example-image-c}}&\\
 &Caption E&\\
 \end{tabular}
 &
 \begin{tabular}[t]{c@{}p{5.cm}@{}c}
 &\multicolumn{1}{@{}Sc@{}}{\includegraphics{example-image-b}}&\\
 &Caption B&\\
 \hline
 &\multicolumn{1}{@{}Sc@{}}{\includegraphics{example-image-duck}}&\\
 &Caption D&\\
 \hline
 &\multicolumn{1}{@{}Sc@{}}{\includegraphics[height=3cm]{example-image-c}}&\\
 &Caption F&\\
 \end{tabular}\\
 \hline
 \end{tabular}
\end{figure}
\end{document}

在此处输入图片描述

答案2

在幸运的情况下,您无需选择可选边框,只需在两列布局中使用带有选项的标准图形浮动即可。您可以在单列文档中使用此方法(使用和[p]切换页面布局 )。\twocolumn\onecolumn

妇女权利委员会:

姆韦

\documentclass[twocolumn]{article}
\usepackage[margin=3.5cm,tmargin=2cm,bmargin=2cm,columnsep=1.5cm]{geometry}
\usepackage{graphicx}
\usepackage{lipsum} % dummy text

% some tuning of vertical spaces
\abovecaptionskip0pt
\belowcaptionskip0pt
\floatsep 0pt plus 10em minus 10em

% macros to simplify float typing   
\def\image#1{\begin{figure}[p]\centering
\includegraphics[width=\linewidth]{#1}\caption{{\lipsum[1][1-1]}}
\end{figure}}
\def\imager#1{\begin{figure}[p]\centering
\includegraphics[height=\linewidth,angle=90]{#1}\caption{{\lipsum[1][1-1]}}
\end{figure}}


\begin{document}
\image{example-image}
\imager{example-image-4x3}
\image{example-image-golden}
\image{example-image-a}
\image{example-image-golden}
\imager{example-image-4x3}
\end{document}

\image\imager只是为了以简化的方式显示,您只需输入一个接一个的浮点数,仅此而已。在现实生活中,您会希望直接输入浮点数,或者更改宏以获得更大的更改自由(至少是标题文本!)。

这种方法的优点:

  • 在双列文档中,您不必将浮动元素放在一起。您可以将每个浮动元素放在与文本相关的位置(例如,在第 1、3、4、7、12、15 页),但您仍然会得到一页只有图的页面,其中有 6 个图,位于第 15 页左右。

  • 由于上述原因,更改文本中的图形布局非常容易:只需删除 [p] 或更改为另一个浮动选项。但是,在包含多幅图像的文档中,最明智的决定是使用p以及一些其他选项,例如[htbp][tbp!],这样 LaTeX 只会在需要时制作图形页面,并且图形页面不完整的可能性会更小。

  • 使用 `[tbp!] 等选项可以更轻松地重新排序、添加或删除图形,但您需要检查图形页面中的横向/纵向图像的顺序是否仍然正确,以填充可用空间。

当然,您可以在同一文档中确定一页图中包含哪些图形(使用[p])或不包含哪些图形(使用[<whatever except p>]),但由于更受限制的选项意味着妨碍 LaTeX 以时尚的方式放置浮动图形的风险更大,因此我将仅在最终草稿中使用它。

答案3

下面是一个使用的示例flowfram。它比其他两个解决方案更复杂,因为它为您提供了更多控制选项。

从流程框架的角度来看,它可能并不完美,但应该能给你一些线索和动力。所以让我们来看看实现这一目标的一些重要步骤结果和往常一样:电视这里A总是s矿石电视西艾托ot,即使有这个包。 最终的 (1)有三行代码,您可以打开/关闭一些选项来查看效果:

flowframs draft-option,几何图形show frame;正如你在其他图片中看到的那样,flowfram 在这里和那里采取了一些自由

\usepackage[
%   draft
]{flowfram}
\usepackage[
%   show frame
]{geometry}

操作“标题”文本来演示帧与帧之间的流动,使用\img简单的宏来放置一些图像(参见下文)

    \img{c}{E}
%   \img{c}{E, followed by some longer extra text ...

(2)最重要的步骤是定义框架,这里是流程框架:还有静态框架,例如固定徽标,以及动态框架,例如用于章节标题的布局操作。

  • 大多数高度都经过修改以避免重叠
  • 右框架的 x 位置需要一些间隙,通过使用因子 0.54 而不是 0.5 来解决(懒惰方法)
% ~~~ all required flow-frames ~~~~~~~~~~
%     they are filled in their order of creation
%     W H x y, positions from bottom left
%
\newflowframe{.5\textwidth}{.3\textheight-0\flowframesep}
             {0pt}{.7\textheight}
\newflowframe{.5\textwidth}{.3\textheight-0\flowframesep}
             {.54\textwidth}{.7\textheight}
             
\newflowframe{.5\textwidth}{.4\textheight-\flowframesep}
             {0pt}{.3\textheight}
\newflowframe{.5\textwidth}{.3\textheight-\flowframesep}
             {.54\textwidth}{.4\textheight}
             
\newflowframe{.5\textwidth}{.3\textheight-\flowframesep}
             {0pt}{0pt}
\newflowframe{.5\textwidth}{.4\textheight-\flowframesep}
             {.54\textwidth}{0pt}

这些允许像这样编写内容,但让它按照给定的顺序从流框架流到流框架,就像 LaTeX 让内容从文本区域流到文本区域一样:

\begin{document}
    \img{a}{A}
    \img{b}{B}
    \img{c}{C}
    \img{duck}{D}
    \img{c}{E}
...

draft这是同时使用和的结果show frame(见下文!)。框架已标出,边缘框架已覆盖。页面布局在下一页上重复,它还提供了一些坐标和 flowfram 不时具有的特性,具体取决于您提供的显示文本。 有框架 当你切换线路时\img{E}{...},你会再次看到流程,这在删除草稿框时可能会非常分散注意力,即切换到选项final流动的文本

(3)网格布局的准备。

如果您曾经使用过 FrameMaker、Scribus 或 MS Publisher 等布局驱动程序,您就会知道您必须适应这种方法。例如

  • 你需要(提前)修改图纸
  • 鸭子形象遇见了宽高比通过所选的布局框架以某种方式定义(太大的图像([width=\linewidth])将标题推到下一个流框架);而其他图像具有“错误”的纵横比
  • 您需要根据需要定义长度和重叠,例如,如果您想保持在设置的边界内geometry
  • 你的控制,你的责任

是的,我开始喜欢了flowframe,而且它的学习曲线会让人惊喜。它做得很好,不过,还带有一点数学知识,对许多复杂程度在一定范围内的非标准布局很有用。

(代码)

% https://tex.stackexchange.com/questions/529766/typesetting-a-fancy-grid-of-figures

\documentclass{article}
\usepackage{graphicx}
\usepackage{calc}
\usepackage{lipsum}
\usepackage[
%   draft
]{flowfram}
\usepackage[
%   show frame
]{geometry}

% ~~~ default graphics and captions ~~~~~~~~~~~~~~~~
\newcommand\img[2]{\includegraphics[height=.23\textheight]{example-image-#1}\\%
Caption #2\\}
% ~~~ printing frame-data ~~~~~~~~~
\newcommand\FD[1]{\getflowbounds{#1}%
            FF-#1: \the\ffareawidth / \the\ffareaheight / %
                    \the\ffareax / \the\ffareay\\}
% ~~~ printing textarea-data ~~~~~~
\newcommand\TA[0]{textwidth: \the\textwidth / textheight: \the\textheight\\}


% ~~~ all required flow-frames ~~~~~~~~~~
%     they are filled in their order of creation
%     W H x y, positions from bottom left
%
\newflowframe{.5\textwidth}{.3\textheight-0\flowframesep}
             {0pt}{.7\textheight}
\newflowframe{.5\textwidth}{.3\textheight-0\flowframesep}
             {.54\textwidth}{.7\textheight}
             
\newflowframe{.5\textwidth}{.4\textheight-\flowframesep}
             {0pt}{.3\textheight}
\newflowframe{.5\textwidth}{.3\textheight-\flowframesep}
             {.54\textwidth}{.4\textheight}
             
\newflowframe{.5\textwidth}{.3\textheight-\flowframesep}
             {0pt}{0pt}
\newflowframe{.5\textwidth}{.4\textheight-\flowframesep}
             {.54\textwidth}{0pt}

\setallflowframes{border=none}
%\ffvadjustfalse

\parindent0pt

\begin{document}
    \img{a}{A}
    \img{b}{B}
    \img{c}{C}
    \img{duck}{D}
    \img{c}{E}
%   \img{c}{E, followed by some longer extra text, which can be quite long, and needs to be long, to flow into the next flow-frame. This may or may not be a nice feature. Sometimes it is, sometimes it's not.\\}
    \img{c}{F}
    
    \clearpage
    
    % ~~~ some data ~~~~~~~~~~~~~
    \TA{}   
    flowframesep: \the\flowframesep \\
    
    \FD{1}
    \FD{2}
    
    \FD{3}
    \FD{4}
    
    \FD{5}
    \FD{6}
    
    \lipsum[1-3]
    
\end{document}

相关内容