我知道我可以将两个放置tabular
在单个table
环境中并使用cref
包引用两个表格,如下例所示:
\documentclass[oneside,11pt]{book}
\usepackage[semibold,tt=false]{libertine}
\usepackage{libertinust1math}
\usepackage[font={sf,small},labelsep=quad,labelfont=sc]{caption}
\usepackage[subrefformat=parens]{subcaption}
\usepackage[
expansion = false ,
tracking = smallcaps ,
letterspace = 40 ,
]{microtype}
\usepackage[capitalize]{cleveref}
\usepackage{graphicx}
\begin{document}
\begin{table}
\centering
\begin{tabular}{ll}
A & B\\
C & D\\
\end{tabular}
\caption{Table A}\label{tab:a}
\vspace*{2\floatsep}
\begin{tabular}{ll}
W & X\\
Y & Z\\
\end{tabular}
\caption{Table B}\label{tab:b}
\end{table}
Refer to \cref{tab:a} and \cref{tab:b}.
\end{document}
这是强制两个tabular
人处于同一页面上的一种方法。
但是现在我想强制将 atabular
和 an 图像放在同一页上。是否可以将 atabular
和 an 图像放在同一个浮动框中?我尝试了以下方法(类似于这个答案):
\documentclass[oneside,11pt]{book}
\usepackage[semibold,tt=false]{libertine}
\usepackage{libertinust1math}
\usepackage[font={sf,small},labelsep=quad,labelfont=sc]{caption}
\usepackage[subrefformat=parens]{subcaption}
\usepackage[
expansion = false ,
tracking = smallcaps ,
letterspace = 40 ,
]{microtype}
\usepackage[capitalize]{cleveref}
\usepackage{graphicx}
\begin{document}
\begin{figure}
\centering
\begin{tabular}{ll}
E & F\\
G & H\\
\end{tabular}
\caption{Table C}\label{tab:c}
\vspace*{2\floatsep}
\includegraphics[width=0.2\textwidth]{example-image}
\caption{Figure A}\label{fig:a}
\end{figure}
Refer to \cref{tab:c} and \cref{fig:a}.
\end{document}
但是,标签/标题不正确;“图 1”应为“表 1”。我该怎么办?
答案1
使用caption
的\captionof{<float type>}
:
\documentclass[oneside,11pt]{book}
\usepackage[semibold,tt=false]{libertine}
\usepackage{libertinust1math}
\usepackage[font={sf,small},labelsep=quad,labelfont=sc]{caption}
\usepackage[subrefformat=parens]{subcaption}
\usepackage[
expansion = false ,
tracking = smallcaps ,
letterspace = 40 ,
]{microtype}
\usepackage[capitalize]{cleveref}
\usepackage{graphicx}
\begin{document}
\begin{table}
\centering
\begin{tabular}{ll}
E & F\\
G & H\\
\end{tabular}
\caption{Table C}\label{tab:c}
\vspace*{2\floatsep}
\begingroup
\includegraphics[width=0.2\textwidth]{example-image}
\captionof{figure}{Figure A}\label{fig:a}
\endgroup
\end{table}
Refer to \cref{tab:c} and \cref{fig:a}.
\end{document}
这里实际上不需要对进行分组\captionof{figure}{<caption>}
,但建议将其放入\captionof
组中,因为它会在本地更改宏。它已经位于环境提供的组中,并放置在浮动中的最后,因此如果您删除... table
,它不会影响任何内容。\begingroup
\endgroup
答案2
该xcoffins
包旨在将内容放置在页面上,并指定彼此之间的相对位置以及页面中的位置。在这种情况下,您需要垂直堆叠表格和图形并将其视为单个元素。
在这个解决方案中,定义了 4 个棺材(带有手柄的盒子),一个用于桌子,一个用于图形,最后两个用于各自的标题。
我选择表格和图形框的宽度为0.4\textwidth
。标题框将自动调整其宽度以适应其各自的父框宽度。
组装过程只需三个步骤:将 的顶部中心CaptionTablex
与 的底部中心连接起来Tablex
,Y 偏移为 -\floatsep
,然后对图形及其标题重复该操作。(标题不应该在表格上方吗?)
最后,将完整的组件排版在当前插入点,通常是文本区域左侧的基线上方。
这套全套都是文本对象,而不是浮点,因此不受 TeX 浮点机制的影响。这意味着可以将其插入到任何文本之前或之后、边距等处;甚至可以插入到文本区域之外。
[hc,b]
指的是位于框底部水平中心的点,
[hc,t]
指的是位于框顶部水平中心的点。
\documentclass[oneside,11pt]{book}
\usepackage[semibold,tt=false]{libertine}
\usepackage{libertinust1math}
\usepackage[font={sf,small},labelsep=quad,labelfont=sc]{caption}
\usepackage[subrefformat=parens]{subcaption}
\usepackage[%
expansion = false ,
tracking = smallcaps ,
letterspace = 40 ,
]{microtype}
\usepackage[capitalize]{cleveref}
\usepackage{graphicx}
\usepackage{xcoffins} % added
\begin{document}
% allocate
\NewCoffin\Tablex
\NewCoffin\Figx
\NewCoffin\CaptionTablex
\NewCoffin\CaptionFigx
%fill
\SetVerticalCoffin\Tablex{0.4\textwidth}{%
\centering
\begin{tabular}{ll}
E & F\\
G & H\\
\end{tabular}
}
\SetVerticalCoffin\Figx{0.4\textwidth}{%
\centering
\includegraphics[width=0.2\textwidth]{example-image}
}
\SetVerticalCoffin\CaptionTablex{\CoffinWidth\Tablex}{\captionof{table}{Table C \label{tab:c}}}
\SetVerticalCoffin\CaptionFigx{\CoffinWidth\Figx}{\captionof{figure}{Figure A \label{fig:a}}}
% assembly
%\JoinCoffins\Tablex[hc,t]\CaptionTablex[hc,b](0pt,-0.5\floatsep ) % X Y offsets caption above table
\JoinCoffins\Tablex[hc,b]\CaptionTablex[hc,t](0pt,-0.5\floatsep ) % X Y offsets caption below table
\JoinCoffins\Tablex[hc,b]\Figx[hc,t](0pt,-\floatsep ) % X Y offsets
\JoinCoffins\Tablex[hc,b]\CaptionFigx[hc,t](0pt,-0.5\floatsep ) % X Y offsets
%typeset
\noindent\TypesetCoffin\Tablex(0pt, 0pt) % X Y offsets not needed here
\bigskip
Refer to \cref{tab:c} and \cref{fig:a}.
\end{document}
我希望读者能够意识到这种工具方法的效力和潜力,它能够以非常简单的方式处理许多不同的元素:表格、文本、图形、情节、规则等;并使用彼此的相对位置来容纳它们,而不是绝对坐标系。
我的工作方式类似于布局设计程序(几乎没有 GUI),通过在框中填充其内容,每个框都有自己的颜色、字体类型和大小以及图形材料,然后根据设计规范排列和对齐它们。 内容和图形设计之间有明显的分离。
浮动机制非常棒,但是它会将您的材料放在另一页,然后您必须翻页(在印刷文档中)才能看到图形或表格。由于它不是浮动,因此它提供了将任何一组元素定位在文档中的准确位置的可能性,这是本论坛中许多问题的主题,无需进一步的软件包。
答案3
我建议使用这个简单的解决方案floatrow
,它可以让您并排显示表格和图形,以及它们各自的阳离子:
\documentclass[oneside,11pt]{book}
\usepackage[semibold,tt=false]{libertine}
\usepackage{libertinust1math}
\usepackage[font={sf,small}, labelsep=quad, labelfont=sc]{caption}
\usepackage[subrefformat=parens]{subcaption}
\usepackage[expansion=false, tracking=smallcaps, letterspace=40]{microtype}
\usepackage[capitalize]{cleveref}
\usepackage{graphicx}
\usepackage{floatrow}
\begin{document}
\begin{figure}
\centering
\begin{floatrow}\TopFloatBoxes
\killfloatstyle \ttabbox[2\FBwidth]{\begin{tabular}{ll}
E & F\\
G & H\\
\end{tabular}}
{\caption{Table C}\label{tab:c}}
%
\ffigbox{\includegraphics[width=0.2\textwidth]{example-image}}
{\caption{Figure A}\label{fig:a}}
\end{floatrow}
\end{figure}
Refer to \cref{tab:c} and \cref{fig:a}.
\end{document}