这是我在 tex.stack 上的第一个问题。我希望我的 SRE 足够简短和精确,能够帮助我。基本上,我想对齐“=”下的所有方程式。在对齐环境中,我们使用“&”来处理这个问题。但是,如果我想覆盖“=”,它就不起作用了:
\documentclass[a4paper, bibtotocnumbered,liststotoc,12pt]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{mathtools}
\newcommand{\matr}[1]{\mathbf{#1}}
\newcommand{\X}{\matr{X}} %Matrix von X
\newcommand{\y}{\matr{y}} %y
\begin{document}
\begin{align*}
0 &=\partial \Big(\frac{1}{2N} ||\y- \X\beta||_{2}^2\Big) \\
&\overset{\mathrm{Def. 1}}{=} \nabla \Big(\frac{1}{2N} ||\y- \X\beta||_{2}^2\Big)
\end{align*}
\end{document}
我还尝试在里面设置&
\overset{\mathrm{Def. 1}}{&=} \nabla \Big(\frac{1}{2N} ||\y- \X\beta||_{2}^2\Big)
但我收到一个错误
答案1
一个快速而粗略的版本,对两者使用相同的宽度,从而实现正确的对齐。如果您经常使用这种方法,我不推荐这种方法(尽管如果您的“Def X.”始终具有相同的宽度,例如表格编号,它可能会产生所需的结果)。
\documentclass[a4paper, bibtotocnumbered,liststotoc,12pt]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{mathtools}
\newcommand{\matr}[1]{\mathbf{#1}}
\newcommand{\X}{\matr{X}} %Matrix von X
\newcommand{\y}{\matr{y}} %y
\newlength{\tempdef}
\settowidth{\tempdef}{\({}\overset{\mathrm{Def. 1}}{=}{}\)}
\begin{document}
\begin{align*}
0 &\makebox[\tempdef][c]{=}\partial \Big(\frac{1}{2N} ||\y- \X\beta||_{2}^2\Big) \\
&\overset{\mathrm{Def. 1}}{=} \nabla \Big(\frac{1}{2N} ||\y- \X\beta||_{2}^2\Big)
\end{align*}
\end{document}
答案2
这是一个解决方案,它设置了一个名为的专用宏\defeq
;它接受一个参数,即被调用的定义的编号。该解决方案还设置了一个宏来表示 L2 范数。
\documentclass[a4paper, bibtotocnumbered,liststotoc,12pt]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amssymb,amsthm,mathtools}
\DeclarePairedDelimiter{\norm}{\lVert}{\rVert} % L_2 norm
\newcommand\defeq[1]{\overset{\mathclap{%
\scriptscriptstyle\mathrm{Def.}\mkern1.5mu#1}}{=}\:}
\newcommand{\matr}[1]{\mathbf{#1}}
\newcommand{\X}{\matr{X}} %Matrix von X
\newcommand{\y}{\matr{y}} %y
\begin{document}
\begin{align*}
0 &= \partial \bigl(\tfrac{1}{2N} \norm{\y- \X\beta}_{2}^2\bigr) \\
&\defeq{1} \nabla \bigl(\tfrac{1}{2N} \norm{\y- \X\beta}_{2}^2\bigr)
\end{align*}
\end{document}
答案3
您可以使用\clap
定义的命令mathtools
来设置重叠内容,之后必须添加一个小空格,或者使用\eqmathbox
基于\eqmakebox
from 包的命令eqparbox
,并将每个对齐符号括在这样的框中。我借此机会用易于扩展的命令替换您的双杠对\norm
,在我看来,这会使代码更清晰:
\documentclass[a4paper, bibtotocnumbered,liststotoc,12pt]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{eqparbox}
\newcommand{\eqmathbox}[2][eq]{\eqmakebox[#1]{$\displaystyle #2$}}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{mathtools}
\DeclarePairedDelimiter{\norm}{\lVert}{\rVert}
\newcommand{\matr}[1]{\mathbf{#1}}
\newcommand{\X}{\matr{X}} %Matrix von X
\newcommand{\y}{\matr{y}} %y
\begin{document}
\begin{align*}
0 &=\:\partial \Big(\frac{1}{2N} \norm{\y- \X\beta}_{2}^2\Big) \\
&\overset{\mathclap{\mathrm{Def. 1}}}{=}\: \nabla \Big(\frac{1}{2N} \norm{\y- \X\beta}_{2}^2\Big)
\end{align*}
\begin{align*}
0 &\mathrel{\eqmathbox{=}}\partial \Big(\frac{1}{2N} \norm{\y- \X\beta}_{2}^2\Big) \\
&\mathrel{\eqmathbox{\overset{\mathrm{Def.1}}{=}}} \nabla \Big(\frac{1}{2N}\norm{\y- \X\beta}_{2}^2\Big)
\end{align*}
\end{document}
答案4
利用该包,您可以通过在覆盖和之间aligned-overset
写入来做到这一点:&
=
\documentclass[a4paper, bibtotocnumbered,liststotoc,12pt]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{mathtools}
\usepackage{aligned-overset}
\newcommand{\matr}[1]{\mathbf{#1}}
\newcommand{\X}{\matr{X}} %Matrix von X
\newcommand{\y}{\matr{y}} %y
\begin{document}
\begin{align*}
0 &=\partial \Big(\frac{1}{2N} ||\y- \X\beta||_{2}^2\Big) \\
\overset{\mathrm{Def. 1}}&{=} \nabla \Big(\frac{1}{2N} ||\y- \X\beta||_{2}^2\Big)
\end{align*}
\end{document}