Я пытаюсь сделать математику как в gather*
среде, где математические уравнения центрированы в своем пространстве, но также есть комментарии справа, объясняющие шаги. Как я могу это сделать? Ниже приведен код, который выравнивает математические уравнения по правому краю в их пространстве. Как я могу сделать это центрированным вместо этого? Я хочу сделать это без выравнивания всех символов равенства, потому что некоторые уравнения имеют длинные правые стороны, а другие — длинные левые стороны.
\begin{align*}
y'+Py=Q & \quad\textrm{by \eqref{eq:1}}\\
e^{\int Pdx}(y'+Py)=e^{\int Pdx}Q & \quad\textrm{multiply both sides by }I=J=e^{\int Pdx}\\
(ye^{\int Pdx})'=e^{\int Pdx}Q & \quad\textrm{by \eqref{eq:3}}\\
ye^{\int Pdx}=\int e^{\int Pdx}Q dx + C\\
y=e^{-\int Pdx}\int e^{\int Pdx}Q dx + Ce^{-\int Pdx}\\
\end{align*}
РЕДАКТИРОВАТЬ:
Я обнаружил, что можно использовать среду массива, чтобы сделать это, но математические строки выглядят очень близко друг к другу. Есть ли способ это исправить?
\begin{displaymath}
\begin{array}{cl}
y'+Py=Q & \quad\textrm{by \eqref{eq:1}}\\
e^{\int Pdx}(y'+Py)=e^{\int Pdx}Q & \quad\textrm{multiply both sides by }I=J=e^{\int Pdx}\\
(ye^{\int Pdx})'=e^{\int Pdx}Q & \quad\textrm{by \eqref{eq:3}}\\
ye^{\int Pdx}=\int e^{\int Pdx}Q dx + C\\
y=e^{-\int Pdx}\int e^{\int Pdx}Q dx + Ce^{-\int Pdx}\\
\end{array}
\end{displaymath}
решение1
Примените \displaystyle
в столбце математики и растяните содержимое, чтобы оно соответствовало тому, что вы обычно получаете для align
сред типа -:
\documentclass{article}
\usepackage{amsmath,array}
\newcommand{\dx}{\mathrm{d}x}
\newcommand{\eqcomment}[1]{\qquad\textrm{#1}}
\begin{document}
\[
\renewcommand{\arraystretch}{1.5}
\begin{array}{ >{\displaystyle}c l }
y' + Py = Q & \eqcomment{by (1)} \\
e^{\int P \dx}(y' + Py) = e^{\int P\dx} Q & \eqcomment{multiply both sides by $I = J = e^{\int P \dx}$} \\
(ye^{\int P \dx})' = e^{\int P \dx} Q & \eqcomment{by (3)} \\
ye^{\int P \dx} = \int e^{\int P \dx}Q \dx + C \\
y = e^{-\int P \dx}\int e^{\int P \dx}Q \dx + Ce^{-\int P\dx}
\end{array}
\]
\end{document}
решение2
Вот реализация, которая измеряет комментарии: если нет перекрытия, код центрирует уравнения, как с помощью gather
; в противном случае он центрирует их в оставшемся пространстве.
Допуск на перекрытие составляет 1em, но его можно установить и отрицательным значением, если мы увидим, что это осуществимо.
Как видите, ваш код вынесет одно из уравнений за левое поле (первый пример), но с помощью отрицательного перекрытия мы можем заставить его поместиться.
Другой параметр, который можно задать stretch
, — это увеличение вертикального интервала (по умолчанию 1,2, во втором примере установлено значение 1,8).
\documentclass{article}
\usepackage{amsmath,xparse,environ,array}
\usepackage{showframe} % just to see the text block borders
\ExplSyntaxOn
\NewEnviron{gathercomment}[1][]
{
\keys_set:nn { gathercomment } { #1 }
\begin{equation*}
\gathercomment:V \BODY
\end{equation*}
}
\keys_define:nn { gathercomment }
{
overlap .dim_set:N = \l__gathercomment_overlap_dim,
stretch .code:n = \renewcommand{\arraystretch}{#1},
stretch .initial:n = 1.2,
}
\seq_new:N \l__gathercomment_lines_seq
\seq_new:N \l__gathercomment_arow_seq
\dim_new:N \l__gathercomment_equations_dim
\dim_new:N \l__gathercomment_comments_dim
\box_new:N \l__gathercomment_equation_box
\box_new:N \l__gathercomment_comment_box
\cs_new_protected:Nn \gathercomment:n
{
\seq_set_split:Nnn \l__gathercomment_lines_seq { \\ } { #1 }
\dim_zero:N \l__gathercomment_equations_dim
\dim_zero:N \l__gathercomment_comments_dim
\seq_map_function:NN \l__gathercomment_lines_seq \__gathercomment_measure:n
% compare the widths
\dim_compare:nTF
{
\l__gathercomment_equations_dim + \l__gathercomment_comments_dim + \l__gathercomment_overlap_dim
>
0.5\displaywidth
}
{% there would be overlap
\begin{tabular}
{
@{}
>{$\displaystyle}w{c}{\dim_eval:n {\displaywidth-\l__gathercomment_comments_dim - \l__gathercomment_overlap_dim}}<{$}
@{\hspace{\l__gathercomment_overlap_dim}}
w{r}{\l__gathercomment_comments_dim}
@{}
}
\seq_use:Nn \l__gathercomment_lines_seq { \\ }
\end{tabular}
}
{% no overlap
\begin{tabular}
{
@{}
>{$\displaystyle}w{c}{\displaywidth}<{$}
@{}
w{r}{0pt}
@{}
}
\seq_use:Nn \l__gathercomment_lines_seq { \\ }
\end{tabular}
}
}
\cs_generate_variant:Nn \gathercomment:n { V }
\cs_new_protected:Nn \__gathercomment_measure:n
{
\seq_set_split:Nnn \l__gathercomment_arow_seq { & } { #1 }
% measure the half widths of the equations
\hbox_set:Nn \l__gathercomment_equation_box
{ $\displaystyle \seq_item:Nn \l__gathercomment_arow_seq { 1 }$ }
\dim_set:Nn \l__gathercomment_equations_dim
{
\dim_max:nn
{ \l__gathercomment_equations_dim }
{ \box_wd:N \l__gathercomment_equation_box / 2 }
}
% measure the widths of the comments
\hbox_set:Nn \l__gathercomment_comment_box
{ \seq_item:Nn \l__gathercomment_arow_seq { 2 } }
\dim_set:Nn \l__gathercomment_comments_dim
{
\dim_max:nn
{ \l__gathercomment_comments_dim }
{ \box_wd:N \l__gathercomment_comment_box }
}
}
\ExplSyntaxOff
\begin{document}
\begin{gathercomment}
y'+Py=Q & by \eqref{eq:1} \\
e^{\int P\,dx}(y'+Py)=e^{\int P\,dx}Q & multiply both sides by $I=J=e^{\int P\,dx}$ \\
(ye^{\int P\,dx})'=e^{\int P\,dx}Q & by \eqref{eq:3} \\
ye^{\int P\,dx}=\int e^{\int Pdx}Q dx + C \\
y=e^{-\int P\,dx}\int e^{\int P\,dx}Q\,dx + Ce^{-\int P\,dx}
\end{gathercomment}
\begin{gathercomment}[stretch=1.8,overlap=-2em]
y'+Py=Q & by \eqref{eq:1} \\
e^{\int P\,dx}(y'+Py)=e^{\int P\,dx}Q & multiply both sides by $I=J=e^{\int P\,dx}$ \\
(ye^{\int P\,dx})'=e^{\int P\,dx}Q & by \eqref{eq:3} \\
ye^{\int P\,dx}=\int e^{\int Pdx}Q dx + C \\
y=e^{-\int P\,dx}\int e^{\int P\,dx}Q\,dx + Ce^{-\int P\,dx}
\end{gathercomment}
\begin{gathercomment}
abc=def & xyz \\
x=y & xx \\
1=2 \\
xxx=xxxxxxx & x
\end{gathercomment}
\end{document}