如何对齐逐项列表中的某些数学项目?

如何对齐逐项列表中的某些数学项目?

我想将itemize列表中列出的一些数学项目对齐。如果不使用大量幻影符号进行破解,这是否可行?这里有一个 MWE 供您玩得开心:

\documentclass[11pt,letterpaper,twoside]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[total={6in,10in},left=1.5in,top=0.5in,includehead,includefoot]{geometry}
\usepackage[nodisplayskipstretch]{setspace}
\setstretch{1.1}
\usepackage{amsmath}
\usepackage{mathtools}

\begin{document}

Blablabla:
\medskip
\begin{itemize}
\renewcommand{\labelitemi}{$\circ$}
    \item Some comment: $y^2 = x$,
    \smallskip
    \item Another small comment: $a x = z$,
    \smallskip
    \item Insert a joke here: $x - y = z$.
\end{itemize}
\medskip
Blablabla.
\end{document}

下面是一个让您开怀大笑的小预览,其中我的问题以红色显示:

在此处输入图片描述

正如您所猜测的,我希望数学表达式左对齐,而文本保持不变。这个有趣的技巧可行吗?

答案1

你可以使用eqparbox它。在

\eqmakebox[meow][l]{<content>} 

meow是一个标识符,所有具有该标识符的框在第二次运行后将具有相同的宽度,并且l是对齐方式。

\documentclass[11pt,letterpaper,twoside]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[total={6in,10in},left=1.5in,top=0.5in,includehead,includefoot]{geometry}
\usepackage[nodisplayskipstretch]{setspace}
\setstretch{1.1}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{eqparbox}
\begin{document}

Blablabla:
\medskip
\begin{itemize}
\renewcommand{\labelitemi}{$\circ$}
    \item \eqmakebox[meow][l]{Some comment:} $y^2 = x$,
    \smallskip
    \item \eqmakebox[meow][l]{Another small comment:} $a x = z$,
    \smallskip
    \item \eqmakebox[meow][l]{Insert a joke here:} $x - y = z$.
\end{itemize}
\medskip
Blablabla.
\end{document}

在此处输入图片描述

我还想鼓励您使用该enumitem软件包,而不是列表中的更多手动调整。如果需要,我很乐意详细说明这一点。

答案2

eqparboxhas的用法已被建议。虽然答案大部分都很好并且代码可以运行,但每次使用构造时都必须发出不同的“喵呜”声,这变得很乏味且容易出错。

问题在于代码中的meow代表任意标签,但这个标签应该是独特的对于每个系列的\eqparbox位。

这是一个简化版本,它还可以消除所有手动添加的跳过。

\documentclass{article}
\usepackage{amsmath}
\usepackage{enumitem,eqparbox}

\newenvironment{tabbeditems}
 {%
  \begin{itemize}[
    topsep=\medskipamount,
    itemsep=\smallskipamount,
    label=$\circ$,
  ]%
  \stepcounter{tabbeditem}
 }
 {\end{itemize}}
\newcounter{tabbeditem}
\renewcommand{\thetabbeditem}{\arabic{tabbeditem}TI}
\newcommand{\tabitem}[1]{\item\eqmakebox[\thetabbeditem][l]{#1}}

\begin{document}

Blablabla
\begin{tabbeditems}
\tabitem{Some comment:} $y^2 = x$,

\tabitem{Another small comment:} $a x = z$,

\tabitem{Insert a joke here:} $x - y = z$.
\end{tabbeditems}
Blablabla.
\begin{tabbeditems}
\tabitem{A comment:} $y^2 = x$,

\tabitem{A comment:} $a x = z$,

\tabitem{Joke:} $x - y = z$.
\end{tabbeditems}

\end{document}

如您所见,唯一标签已自动提供。可能需要运行几次 LaTeX 才能同步。

在此处输入图片描述

答案3

这是一个只需要使用array包的解决方案。

在此处输入图片描述

\documentclass[11pt,letterpaper,twoside]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[total={6in,10in}, left=1.5in, top=0.5in,
            includehead, includefoot]{geometry}
\usepackage[nodisplayskipstretch]{setspace}
\setstretch{1.1}
%\usepackage{amsmath} % amsmath package is loaded automatically by mathtools package
\usepackage{mathtools}

\usepackage{array}
\newcolumntype{L}{>{$}l<{$}}
\newcommand{\listtab}[1]{\begingroup\par\medskip%
  \renewcommand\arraystretch{1.25}
  \begin{tabular}{>{$\circ$\,\,} l L @{}}
     #1
  \end{tabular}%
  \endgroup\par\medskip\noindent\ignorespaces}

\begin{document}
\noindent
Blablabla:
\listtab{
   Some comment:          & y^2 = x,\\
   Another small comment: & a x = z,\\
   Insert a joke here:    & x - y = z .}
Blablabla.
\end{document}

答案4

以下类似于eqparbox方法,使用盒子将元素均匀地隔开。将较小的元素放在\makebox[0pt][l]l左对齐、零宽度)盒子内,将最宽的元素放在盒子内,\phantom以获得适当的水平间距。

在此处输入图片描述

\documentclass{article}

\usepackage{enumitem}

\begin{document}

Blablabla:
\begin{itemize}[
  label=$\circ$,
  before=\medskip,
  itemsep=\smallskipamount,
  after=\medskip
]
  \item \makebox[0pt][l]{Some comment:}\phantom{Another small comment: }$y^2 = x$,

  \item Another small comment: $a x = z$,

  \item \makebox[0pt][l]{Insert a joke here:}\phantom{Another small comment: }$x - y = z$.
\end{itemize}
Blablabla.

\end{document}

相关内容