将多个图形以不同的缩进级别对齐

将多个图形以不同的缩进级别对齐

我想要在enumerate环境中包含位于不同级别的项目的居中图形,以便图像在水平方向上彼此对齐。

我目前有

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\begin{enumerate}
  \item Lorem ipsum dolor
  \begin{center}
    \includegraphics{sin.pdf}
  \end{center}
  \begin{enumerate}
    \item Now is the time for all good men
    \begin{center}
      \includegraphics{cos.pdf}
    \end{center}
  \end{enumerate}
\end{enumerate}
\end{document}

输出为:

在此处输入图片描述

sin.pdfcos.pdf是大小完全相同的图像。使用上述代码,cos.pdf比 稍微向右移动sin.pdf;我希望它们在页面上的水平位置完全相同。

我想也许我想要的是一种将图像放在物理页面中心的方法,而不考虑当前段落的缩进。文本和图形必须如图所示交错排列,所以我无法将两个图形都移到浮动位置。

答案1

在我看来,唯一明智的选择就是将图像相对于整体边距居中。

\documentclass{article}
\usepackage[demo]{graphicx} % demo is just for the example
\usepackage{showframe,lipsum} % just for the example

\makeatletter
\newenvironment{center*}
  {\list{}{\leftmargin=-\@totalleftmargin}\centering\item\relax}
  {\endlist}
\makeatother

\begin{document}

\lipsum*[2]
\begin{enumerate}
  \item Lorem ipsum dolor
  \begin{center*}
    \includegraphics{sin.pdf}
  \end{center*}
  \begin{enumerate}
    \item Now is the time for all good men
    \begin{center*}
      \includegraphics{cos.pdf}
    \end{center*}
  \end{enumerate}
\end{enumerate}
\lipsum[3]

\end{document}

在此处输入图片描述

在参数中,\@totalleftmarginLaTeX 保留当前列表环境的总缩进;在新列表中,它会使用给定的值进行更新\leftmargin。因此,在中center*,缩进级别为零并\centering应用。

答案2

对于一个“上”层和一个“下”层,可以明确地给出移位,即

  • \labelwidth
  • \leftmargin

但是,左边距会随着每个嵌套级别而变化 - 必须更正这些值。

感谢 egreg 的回答,我意识到,有预定义\leftmargini\leftmarginvi命令,对应于嵌套级别。

\leftmargini和的差值\leftmarginii将使图像额外向右移位。


\documentclass[10pt]{article}

\usepackage{calc}
\usepackage[demo]{graphicx}%

\newlength{\levelshift}


\begin{document}
\begin{enumerate}
\item Lorem ipsum dolor
  \setlength{\levelshift}{\labelwidth+\leftmargini-\leftmarginii}%
  \item \the\leftmargin % show the left margin 1st level
  \begin{center}
    \hspace*{\levelshift}\includegraphics{graph1.pdf}
  \end{center}
  \begin{enumerate}
  \item \the\leftmargin % show the left margin 2nd level

  \item Now is the time for all good men
    \begin{center}
      \includegraphics{graph2.pdf}
    \end{center}
  \end{enumerate}
\end{enumerate}
\end{document}

答案3

最简单的方法是使用flushright而不是中心,也许 pad 作为

\begin{flushright}
\includegraphics{foo}\hspace*{2cm}
\end{flushright}

如果您知道图形宽度,则可以根据需要精确居中,例如:

\begin{flushright}
\includegraphics[width=4cm]{foo}\hspace*{\dimexpr(\textwidth-4cm)/2}
\end{flushright}

答案4

一个简单的解决方案可能是figure使用选项[h](此处)的浮动环境,如果您准备好接受这样一个事实:有时即使使用此选项,浮动对象也会浮动,而且可能太大。此站点上的许多问题都讨论了这个问题。这看起来可能是优点,也可能是缺点。在后一种情况下,可以使用包完全避免这种情况float,只需使用选项[H](大写)。

figure使用这种方法的优点center是整个文档中文本和图像之间的间距保持一致、可以使用传统的标题,而且可能跳转到下一页\列(没有周围的文本)比中断所有列/页面要好,因为当没有足够的空间容纳大图像时(也可能没有,这取决于您的喜好...)。

例子:

平均能量损失

\documentclass{article}
\usepackage{graphicx,lipsum}
\begin{document}

\lipsum[2]

\begin{enumerate}
\item Lorem ipsum dolor

   \begin{figure}[h]
   \centering
   \includegraphics[scale=.3]{example-image-a}
   \end{figure}

     \begin{enumerate}
     \item Now is the time for all good men
         \begin{figure}[h]
         \centering
         \includegraphics[scale=.3]{example-image-b}
         \end{figure}
     \end{enumerate}

\end{enumerate}

\lipsum[5]

\end{document}

相关内容