![排版精美的图形网格](https://linux22.com/image/480010/%E6%8E%92%E7%89%88%E7%B2%BE%E7%BE%8E%E7%9A%84%E5%9B%BE%E5%BD%A2%E7%BD%91%E6%A0%BC.png)
因此,我需要 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米矿石电视韩哦恩西艾托德o我t,即使有这个包。
(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}