方程式中有多个对齐点,并且没有用于校正间距的花括号

方程式中有多个对齐点,并且没有用于校正间距的花括号

请考虑以下示例:

\documentclass{article}

\usepackage{amsmath}
\usepackage{siunitx}

\begin{document}

\begin{alignat*}{5}
  &\text{Honning:}\qquad
  &&\frac{\SI{16710}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{\num{16710} \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx{} &\SI{182}{\degree}&;\\
  &\text{Pollen:}
  &&\frac{\SI{10155}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{\num{10155} \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx{} &\SI{111}{\degree}&;\\
  &\text{Vand:}
  &&\frac{\SI{6210}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{6210 \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx{} &\SI{68}{\degree}&.
\end{alignat*}

\end{document}

输出

{}如果不添加,是否可以获得相同的对齐方式和间距\approx

更新

简化后沃纳的回答更进一步,我想出了以下解决方案:

\documentclass{article}

\usepackage{amsmath}
\usepackage{siunitx}

\ExplSyntaxOn
  \cs_new_eq:NN \calculate \fp_eval:n
\ExplSyntaxOff

\newcommand*\pieSlice[1]{%
  \dfrac{\SI{#1}{\g}}{\SI{\total}{\g}} \cdot \SI{360}{\degree}
  & {\mkern -3mu}\biggl(\dfrac{\num{#1} \cdot 360}{\num{\total}}\biggr){\mkern -3mu} \si{\degree}
  & \calculate{round(#1*360/\total)} \si{\degree}
  &
}
\newcommand*\total{\calculate{\honning+\pollen+\vand}}


\begin{document}

\begin{equation*}
\def\honning{16710}
\def\pollen{10155}
\def\vand{6210}
 \renewcommand*\arraystretch{2.2}
  \begin{array}{l@{\qquad} l@{{}={}} l@{{}\approx{}} r@{} l}
    \text{Honning:} & \pieSlice{\honning}; \\
    \text{Pollen:}  & \pieSlice{\pollen}; \\
    \text{Vand:}    & \pieSlice{\vand}.
  \end{array}
\end{equation*}

\end{document}

答案1

由于构造是一致的并且不需要编号,因此可以定义一个宏来处理每一行,根据需要构造一个数组:

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath,siunitx}
\ExplSyntaxOn
\newcommand{\calculation}[2]{% \calculation{<num>}{<denom>}
  \dfrac{\SI{#1}{\g}}{\SI{#2}{\g}} \cdot \SI{360}{\degree}
  & \biggl( \dfrac{\num{#1} \cdot 360}{\num{#2}} \biggr) \si{\degree}
  & \fp_eval:n {round(#1 * 360 / #2)} \si{\degree}
  &
}
\ExplSyntaxOff

\begin{document}

\[
  \renewcommand{\arraystretch}{2.1}
  \begin{array}{l@{\qquad}l@{{}={}}l@{{}\approx{}}r@{}l}
    \text{Honning:} & \calculation{16710}{33075}; \\
    \text{Pollen:}  & \calculation{10155}{33075}; \\
    \text{Vand:}    & \calculation{6210}{33075}.
  \end{array}
\]


\end{document}

除了列规范(处理间距;可以修改)之外,代码可能更易于阅读。当然,它可以进一步简化。

答案2

如果删除&以下内容\approx,则可以通过以下两种方式实现所需的结果:

  1. 为最后一种情况添加\phantom{1}以使其右对齐。
  2. 定义一个自定义的MySI,用于\makebox确保文本在适当的宽度内右对齐。

代码:\phantom

\documentclass{article}

\usepackage{amsmath}
\usepackage{siunitx}

\begin{document}

\begin{alignat*}{5}
  &\text{Honning:}\qquad
  &&\frac{\SI{16710}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{\num{16710} \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx \SI{182}{\degree}&;\\
  &\text{Pollen:}
  &&\frac{\SI{10155}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{\num{10155} \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx \SI{111}{\degree}&;\\
  &\text{Vand:}
  &&\frac{\SI{6210}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{6210 \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx \phantom{1}\SI{68}{\degree}&.
\end{alignat*}

代码:\MySI

\documentclass{article}

\usepackage{amsmath}
\usepackage{siunitx}
\usepackage{calc}

\newcommand*{\MySI}[2]{\makebox[\widthof{\SI{999}{#2}}][r]{\SI{#1}{#2}}}%

\begin{document}

\begin{alignat*}{5}
  &\text{Honning:}\qquad
  &&\frac{\SI{16710}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{\num{16710} \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx \MySI{182}{\degree};\\
  &\text{Pollen:}
  &&\frac{\SI{10155}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{\num{10155} \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx \MySI{111}{\degree};\\
  &\text{Vand:}
  &&\frac{\SI{6210}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{6210 \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx \MySI{68}{\degree}.
\end{alignat*}

\end{document}

答案3

该答案用刚刚发布的包中\alignat的替换了(可能已经或尚未传播到您附近的 CTAN 镜像)。\alignShortstacktabstackengine

好消息是:1)不需要approx{}2)结果看起来相同

坏消息是:1)它运行非常慢(我不确定为什么);2)孤独\qquad需要一个{}(我不确定为什么)。

已编辑,因为我可以在某些情况下使用它\centering(通过将 EOL 字符从 更改为\\,例如\#

\documentclass{article}
\usepackage{siunitx}
\usepackage{tabstackengine}
\stackMath
\makeatletter
\newcommand\TABstackDisplay{\renewcommand\TAB@delim[1]{\displaystyle##1}}
\makeatother
\TABstackDisplay
\setstackaligngap{0ex}
\setstackgap{S}{4pt}
\setstackEOL{\#}
\begin{document}
{\centering
\alignShortstack{
  &\text{Honning:}\qquad{}
  &&\frac{\SI{16710}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{\num{16710} \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx &\SI{182}{\degree}&;\#
  &\text{Pollen:}
  &&\frac{\SI{10155}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{\num{10155} \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx &\SI{111}{\degree}&;\#
  &\text{Vand:}
  &&\frac{\SI{6210}{\g}}{\SI{33075}{\g}} \cdot \SI{360}{\degree}
  &&= {\mkern -6mu}\left(\frac{6210 \cdot 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
  &&\approx &\SI{68}{\degree}&.
}
}
\end{document}

答案4

仅具有 3 个对齐点和一对括号的解决方案one(作为 alignat* 环境的间距参数 - 第一行):

\documentclass[12pt]{article}

\usepackage{mathtools}
\usepackage{siunitx}

\begin{document}

\begin{alignat*}{3}
 &   \text{Honning:}\qquad
 &\frac{\SI{16710}{\g}}{\SI{33075}{\g}}  · \SI{360}{\degree}
 &= {\mkern -6mu}\left(\frac{\num{16710}  · 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
 &{}&\approx {} \SI{182}{\degree};\\
 &  \text{Pollen:}
 &\frac{\SI{10155}{\g}}{\SI{33075}{\g}}  · \SI{360}{\degree}
 &= {\mkern -6mu}\left(\frac{\num{10155}  · 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
 & & \approx{} \SI{111}{\degree};\\
 &  \text{Vand:}
 & \frac{\SI{6210}{\g}}{\SI{33075}{\g}}  · \SI{360}{\degree}
 &= {\mkern -6mu}\left(\frac{6210  · 360}{\num{33075}}\right){\mkern -6mu}\,\si{\degree}
 &&\approx{} \SI{68}{\degree} .
\end{alignat*}

\end{document}

导致:

在此处输入图片描述

如果您希望最后一组单元右对齐,只需\hphantom{0}在前面添加 \SIunit{68}

在此处输入图片描述

相关内容