我想要在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.pdf
和cos.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}
在参数中,\@totalleftmargin
LaTeX 保留当前列表环境的总缩进;在新列表中,它会使用给定的值进行更新\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}