子图边缘的水平对齐

子图边缘的水平对齐

我正在使用 memoir 类,我有两个不同宽度的子图,我想垂直布局。理想情况下,这两个子图应该对齐,以便

  • 最宽的子图位于中心(至\textwidth)。
  • 其他子图的右边缘与最宽子图的右边缘对齐。

我怎样才能实现这一点?下面的代码可以作为起点。

\documentclass{memoir}
\usepackage{lipsum}
\newsubfloat{figure}

\begin{document}
\lipsum[1]
\begin{figure}
\centering
\subbottom[]{\framebox{Narrow subfig}}
\\
\subbottom[]{\framebox{Wide subfigure with lots of stuff}}
\end{figure}
\end{document}

我首先尝试在图形环境中使用 minipage,其中 minipage 中的内容是右对齐的。问题是将 minipage 的宽度设置为最宽子图的宽度;如果这个问题有解决方案,我认为它会起作用。

一种解决方案是使用 将图形编译为单独的文件standalone。我希望避免这种情况。

答案1

您可以使用varwidth同名包中的环境。

在此处输入图片描述

\documentclass{memoir}
\usepackage{lipsum,varwidth}
\newsubfloat{figure}

\begin{document}
\lipsum[1]
\begin{figure}
\centering
\begin{varwidth}{\linewidth}
\raggedleft
\subbottom[]{\framebox{Narrow subfig}}
\\
\subbottom[]{\framebox{Wide subfigure with lots of stuff}}
\end{varwidth}
\end{figure}
\end{document}

答案2

我回答了寻找三张上下叠放且每张下方都有文字的图片,更改了图形(规则)宽度以使其不同,并向添加了[r]用于右对齐的可选说明符。引用的答案解释了如何将变体与类似包结合\Shortstack使用可以为图形布局提供极大的灵活性。\subcaptionboxstackengine

\documentclass{article}
\usepackage{hyperref}
\usepackage[usestackEOL]{stackengine}
\usepackage{subcaption}
\begin{document}
\begin{figure}[ht]
  \centering
  \def\figa{\rule{1.5in}{1.1in}}
  \def\figb{\rule{1.2in}{1.5in}}
  \def\figc{\rule{1in}{0.9in}}
  \def\capa{subfig a caption}
  \def\capb{subfig b caption}
  \def\capc{subfig c caption which may be longer}
  \savestack{\capfiga}{\subcaptionbox{\capa\label{fg:a}}{\figa}}
  \savestack{\capfigb}{\subcaptionbox{\capb\label{fg:b}}{\figb}}
  \savestack{\capfigc}{\subcaptionbox{\capc\label{fg:c}}{\figc}}
  \setstackgap{S}{12pt}
  \Shortstack[r]{\capfiga\\ \capfigb\\ \capfigc}%
  \caption{This is my figure\label{fg:}}
\end{figure}
In figure \ref{fg:}, \ref{fg:a}, \ref{fg:b} and \ref{fg:c}...
\end{document}

在此处输入图片描述

为了扩大我所吹捧的灵活性,只需\def\useanchorwidth{T}在之前的任意位置添加说明符\Shortstack,堆栈的底部(窄)图像就会居中(而不是最宽的图像),其他图像则向左突出:

在此处输入图片描述

相关内容