我想将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
eqparbox
has的用法已被建议。虽然答案大部分都很好并且代码可以运行,但每次使用构造时都必须发出不同的“喵呜”声,这变得很乏味且容易出错。
问题在于代码中的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}