数式を中央に置き、コメントを右側に配置する

数式を中央に置き、コメントを右側に配置する

環境内の数式のように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 ですが、実行可能であると判断された場合は負の値に設定することもできます。

ご覧のとおり、コードによって方程式の 1 つが左余白を超えて押し出されます (最初の例) が、負のオーバーラップを使用すると収まるようになります。

設定できる別のパラメータはstretch、垂直方向の間隔を広げるためのものです (デフォルトは 1.2、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}

ここに画像の説明を入力してください

関連情報