相关(但不相同):
将枚举中的数字与方程式对齐
在列表中显示方程式
今天早些时候,我问了一个关于在环境中对齐方程的问题enumerate
,并得到了一个似乎适用于我给出的例子的答案,但事实证明我对我的问题还不够具体。
我使用align*
环境,通常将其作为列表项的唯一部分。(如果您想知道为什么我不使用更多词语来介绍align*
,这些大多是家庭作业解决方案,其中大部分工作是代数等。)
这是我的代码及其效果(中间线以上):
\begin{enumerate}
\item \begin{align*}
x^2 + y^2 &= x^2 + (iy)^2 \\
&= (x + iy) (x - iy)
\end{align*}
\item \begin{align*}
\frac{1}{n^2-4} &= \frac14 \frac{4}{(n-2)(n+2)} \\
&= \frac14 \left( \frac{1}{n-2}-\frac{1}{n+2} \right)
\end{align*}
\end{enumerate}
我试图使环境第一行的基线align*
与数字的基线相同——我希望环境的第一行align*
相对于其数字具有与图片后半部分相同的垂直位置(以相同的方式水平居中)。(附带问题:为什么开始之前有这么多空间align*
?)
答案1
我一直在使用 Philippe Goutet 在此处发布的解决方案,但最近发现了一种更简单的解决方案,即使用aligned
具有可选[t]
对齐的环境:
\item $\begin{aligned}[t]
x^2 + y^2 &= x^2 + (iy)^2 \\
&= (x + iy) (x - iy)
\end{aligned}$
得出的结果是:
笔记:
- 包裹
showframe
用于显示页边距。
代码:
\documentclass{article}
\usepackage{showframe}
\usepackage{amsmath}
\begin{document}
\begin{enumerate}
\item $\begin{aligned}[t]
x^2 + y^2 &= x^2 + (iy)^2 \\
&= (x + iy) (x - iy)
\end{aligned}$
\item $\begin{aligned}[t]
\frac{1}{n^2-4} &= \frac14 \frac{4}{(n-2)(n+2)} \\
&= \frac14 \left( \frac{1}{n-2}-\frac{1}{n+2} \right)
\end{aligned}$
\end{enumerate}
\end{document}
如果您希望它们水平居中(这是环境的默认设置),您可以在任一侧align
添加:\hfill
\item \hfill$\begin{aligned}[t]
x^2 + y^2 &= x^2 + (iy)^2 \\
&= (x + iy) (x - iy)
\end{aligned}$\hfill\null
代码:
\documentclass{article}
\usepackage{showframe}
\usepackage{amsmath}
\begin{document}
\begin{enumerate}
\item \hfill$\begin{aligned}[t]
x^2 + y^2 &= x^2 + (iy)^2 \\
&= (x + iy) (x - iy)
\end{aligned}$\hfill\null
\item \hfill$\begin{aligned}[t]
\frac{1}{n^2-4} &= \frac14 \frac{4}{(n-2)(n+2)} \\
&= \frac14 \left( \frac{1}{n-2}-\frac{1}{n+2} \right)
\end{aligned}$\hfill\null
\end{enumerate}
\end{document}
答案2
有一种方法可以使用 pdftex 原语自动测量 的开头\item
和 第一行之间的间距。{align*}
\pdfsavepos
savepos
zref 包为该功能提供了相当不错的界面。
代码的工作原理如下:将\mi
宏放置在需要放置材料的位置,然后将\md
(如果不喜欢这些名称,可以更改)放置在材料所在的位置。例如,
\item \mi\begin{align*}\md
x^2 + y^2 &= x^2 + (iy)^2 \\
&= (x + iy) (x - iy)
\end{align*}
经过几次编译(最多可能需要 4 次),您将获得方程式和项目编号的完美对齐。
这是完整的代码,通过几个方程和一个表格展示了对齐是如何进行的。我还添加了一个我重新定义的变体,{align*}
这样\mi
和就\md
不再是必需的(这样更容易输入)。
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage[savepos]{zref}
\makeatletter
\newcounter{autoenumvspace}
\setcounter{autoenumvspace}{0}
\newcommand{\mi}{\markitemstart}
\newcommand{\markitemstart}{%
\addtocounter{autoenumvspace}{1}%
\@ifundefined{autoenumvspacevalue\romannumeral\value{autoenumvspace}}%
{\edef\autoenumvspace@value{0pt}}%
{\edef\autoenumvspace@value{\csname autoenumvspacevalue\romannumeral\value{autoenumvspace}\endcsname}%
}
\ifnum\zposy{auto@enum@\number\value{autoenumvspace}@bottom}=%
\zposy{auto@enum@\number\value{autoenumvspace}@top}
\@ifundefined{autoenumvspacevalue\romannumeral\value{autoenumvspace}}%
{}%
{\immediate\write\@mainaux{\gdef\expandafter\noexpand\csname autoenumvspacevalue\romannumeral\value{autoenumvspace}\endcsname{\csname autoenumvspacevalue\romannumeral\value{autoenumvspace}\endcsname}}}%
\else
\ifdim\dimexpr\zposy{auto@enum@\number\value{autoenumvspace}@bottom}sp-\zposy{auto@enum@\number\value{autoenumvspace}@top}sp\relax=\autoenumvspace@value
\immediate\write\@mainaux{\gdef\expandafter\noexpand\csname autoenumvspacevalue\romannumeral\value{autoenumvspace}\endcsname{\the\dimexpr\zposy{auto@enum@\number\value{autoenumvspace}@bottom}sp-\zposy{auto@enum@\number\value{autoenumvspace}@top}sp\relax}}%
\else
\edef\autoenumvspace@value{0pt}%
\immediate\write\@mainaux{\gdef\expandafter\noexpand\csname autoenumvspacevalue\romannumeral\value{autoenumvspace}\endcsname{\the\dimexpr\zposy{auto@enum@\number\value{autoenumvspace}@bottom}sp-\zposy{auto@enum@\number\value{autoenumvspace}@top}sp\relax}}%
\fi
\fi
\vspace*{-\autoenumvspace@value}%
\leavevmode
\zsavepos{auto@enum@\number\value{autoenumvspace}@top}%
\vspace*{\autoenumvspace@value}%
}
\newcommand{\md}{\markdisplaystart}
\newcommand{\markdisplaystart}{%
\zsavepos{auto@enum@\number\value{autoenumvspace}@bottom}%
}
\makeatother
\begin{document}
\section{Manual version}
\begin{enumerate}\belowdisplayskip=0pt \abovedisplayskip=0pt % optional
\item \mi\begin{align*}\md
x^2 + y^2 &= x^2 + (iy)^2 \\
&= (x + iy) (x - iy)
\end{align*}
\item \mi\begin{align*}\md
\frac{1}{n^2-4} &= \frac14 \frac{4}{(n-2)(n+2)} \\
&= \frac14 \left( \frac{1}{n-2}-\frac{1}{n+2} \right)
\end{align*}
\begin{enumerate}
\item \mi\[\md x^n + y^n = z^n\]
\item \mi\[\md \sum_{n=1}^{+\infty}{\frac{1}{n^2}} = \frac{\pi^2}{6}\]
\item \mi
\begin{center}\begin{tabular}{|c|c|c|}
\hline
\md text & text & text \\
\hline
text & text & text \\
\hline
\end{tabular}\end{center}
\end{enumerate}
\end{enumerate}
\section{Automatic version}
\begin{enumerate}\belowdisplayskip=0pt \abovedisplayskip=0pt % optional
\makeatletter
\renewenvironment{align*}{%
\mi\start@align\@ne\st@rredtrue\m@ne\md
}{%
\math@cr \black@\totwidth@
\egroup
\ifingather@
\restorealignstate@
\egroup
\nonumber
\ifnum0=`{\fi\iffalse}\fi
\else
$$%
\fi
\ignorespacesafterend
}
\expandafter\def\expandafter\[\expandafter{\expandafter\mi\[\md}
\makeatother
\item \begin{align*}
x^2 + y^2 &= x^2 + (iy)^2 \\
&= (x + iy) (x - iy)
\end{align*}
\item \begin{align*}
\frac{1}{n^2-4} &= \frac14 \frac{4}{(n-2)(n+2)} \\
&= \frac14 \left( \frac{1}{n-2}-\frac{1}{n+2} \right)
\end{align*}
\begin{enumerate}
\item \[ x^n + y^n = z^n\]
\item \[ \sum_{n=1}^{+\infty}{\frac{1}{n^2}} = \frac{\pi^2}{6}\]
\item \mi
\begin{center}\begin{tabular}{|c|c|c|}
\hline
\md text & text & text \\
\hline
text & text & text \\
\hline
\end{tabular}\end{center}
\end{enumerate}
\end{enumerate}
\end{document}
答案3
align*
如果您使用选项,您可以将数字作为公式标签放入环境的第一行leqno
:\tag*{1.}
。如果您想获得自动编号,以下代码可以帮助您:
\documentclass[12pt,leqno]{article}
\usepackage{amsmath}
\newcounter{exercisenumber}
\setcounter{exercisenumber}{0}
\newcommand\leftnum{%
\addtocounter{exercisenumber}{1}%
\tag*{\phantom{99.}\llap{\arabic{exercisenumber}.}}%
}
\begin{document}
\begin{align*}\leftnum
x^2 + y^2 &= x^2 - (iy)^2 \\
&= (x + iy) (x - iy)
\end{align*}
\begin{align*}\leftnum
\frac{1}{n^2-4} &= \frac14 \frac{4}{(n-2)(n+2)} \\
&= \frac14 \left( \frac{1}{n-2}-\frac{1}{n+2} \right)
\end{align*}
\end{document}
关于您在评论中提出的其他问题:我不知道您的目标输出是什么,但您可以尝试这个:
\newcounter{exercisenumber}
\newcounter{subnumber}
\setcounter{exercisenumber}{0}
\newcommand\leftnum{%
\addtocounter{exercisenumber}{1}%
\tag*{\phantom{99.}\llap{\arabic{exercisenumber}.}}%
}
\newenvironment{subnumbering}{%
\addtocounter{exercisenumber}{1}%
\setcounter{subnumber}{0}
\renewcommand\leftnum{%
\addtocounter{subnumber}{1}%
\tag*{\phantom{99(a)}\llap{%
\ifnum\value{subnumber}=1 \arabic{exercisenumber}\fi
(\alph{subnumber})}}%
}
}{}
答案4
@Herbert 的一个小变体版本。
\documentclass[12pt]{article}
\usepackage{amsmath}
\begin{document}
\begin{enumerate}
\item \parbox[t]{\textwidth}{
\vspace{-2.2em}\begin{align*}
x^2 + y^2 &= x^2 + (iy)^2 \\
&= (x + iy) (x - iy)
\end{align*}}
\item \parbox[t]{\textwidth}{
\vspace{-2.2em}\begin{align*}
\frac{1}{n^2-4} &= \frac14 \frac{4}{(n-2)(n+2)} \\
&= \frac14 \left( \frac{1}{n-2}-\frac{1}{n+2} \right)
\end{align*}}
\end{enumerate}
\end{document}