在变量说明旁边排版公式

在变量说明旁边排版公式

我已经使用下面的代码片段很长时间来排版文档中的重要公式了。到目前为止,我总是复制粘贴代码片段并手动调整,直到间距看起来令人满意,但这不是我们使用 LaTeX 的原因,对吧?

我希望我的片段自动平衡间距(说起来,下面截图中的三个标记空间应该是相同的大小)。还有某种宏,可以给它一个更好的输入格式减少多余的复制粘贴会很好(例如不必每次都输入\vspace{\baselineskip}\begingroup)。我该如何实现这一点?(我想还有很多可能性可以完善它,所以我当然也愿意接受其他建议。)

\documentclass{article}
\usepackage{multirow}
\usepackage{siunitx}
\usepackage{amsmath}
\usepackage{lipsum}

\begin{document}
\lipsum[1]

\vspace{\baselineskip}
\begingroup
\setlength{\tabcolsep}{0pt}
\begin{tabular}{crl}
\multirow{4}{.3\textwidth}{%
\centering
$Re = \dfrac{v\cdot d}{\nu}$
}
&$Re$&\dots Reynolds number $[-]$\\
&$v$&\dots velocity of the fluid $[\si{\milli\meter\per\second}]$\\
&$d$&\dots characteristic linear dimension $[\si{\milli\meter}]$\\
&$\nu$&\dots kinematic viscosity $[\si{\milli\meter\squared\per\second}]$
\end{tabular}
\endgroup
\vspace{\baselineskip}

\lipsum[2]
\end{document}

示例截图

答案1

编辑添加方程式编号并照顾\si{...}

下面的代码定义了一个命令\ExplainedFormula,当给出

\ExplainedFormula{\Re = \dfrac{v\cdot d}{\nu}}
     {\Re: Reynolds number:,
        v: velocity of the fluid: \milli\meter\per\second,
        d: characteristic linear dimension: \milli\meter,
      \nu: kinematic viscosity: \milli\meter\squared\per\second
     }
Nulla malesuada porttitor diam. Donec felis erat, congue non,
volutpat at, tincidunt tristique, libero. Vivamus viverra fermentum
felis. Donec nonummy pellentesque ante.
\ExplainedFormula*{\Re = \dfrac{v\cdot d}{\nu}}
     {\Re: Reynolds number:,
        v: velocity of the fluid: \milli\meter\per\second,
        d: characteristic linear dimension: \milli\meter,
      \nu: kinematic viscosity: \milli\meter\squared\per\second
     }

将产生如下输出:

在此处输入图片描述

默认情况下,\ExplainedFormula将添加公式编号,还有一个带星号的版本,,\ExplainedFormula*省略了公式编号。公式编号在左侧,因为我总是把它放在这里:)要把它放在右边,请移动该行,\IfBooleanF{#1}{\refstepcounter{equation}\rlap{(\theequation)}}使其位于最后一个之后\hfil,然后将更\ExplainedFormula改为...也许我应该自动执行此操作...`\rlap\llap

完整代码如下:

\documentclass{article}
\usepackage{multirow}
\usepackage{siunitx}
\usepackage{amsmath}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{xparse}

\renewcommand\Re{\mathop{\textrm{Re}}}
\def\Explain#1:#2:#3!!!{% \Explain variable : description : unit !!!
  $#1$ & #2 $[\if\relax\detokenize{#3}\relax-\else\si{#3}\fi]$
  \\
}% add a line of explanation
\NewDocumentCommand\ExplainedFormula{ s m m }{% 
% usage: \ExplainedFormula{formula}{csv explanation}
  \begin{center}
  \hbox to\textwidth{%
        \IfBooleanF{#1}{\refstepcounter{equation}\rlap{(\theequation)}}
        \hfil$\displaystyle#2$
        \hfil\renewcommand*\do[1]{\Explain##1!!!}%
          \begin{tabular}{r@{\dots}l}\docsvlist{#3}\end{tabular}
        \hfil%
  }%
  \end{center}
}

\begin{document}

\ExplainedFormula{\Re = \dfrac{v\cdot d}{\nu}}
     {\Re: Reynolds number:,
        v: velocity of the fluid: \milli\meter\per\second,
        d: characteristic linear dimension: \milli\meter,
      \nu: kinematic viscosity: \milli\meter\squared\per\second
     }
Nulla malesuada porttitor diam. Donec felis erat, congue non,
volutpat at, tincidunt tristique, libero. Vivamus viverra fermentum
felis. Donec nonummy pellentesque ante.
\ExplainedFormula*{\Re = \dfrac{v\cdot d}{\nu}}
     {\Re: Reynolds number:,
        v: velocity of the fluid: \milli\meter\per\second,
        d: characteristic linear dimension: \milli\meter,
      \nu: kinematic viscosity: \milli\meter\squared\per\second
     }

\end{document}

一些解释:

  • \ExplainedFormula定义使用\NewDocumentCommand使用解析包。s m m规范说\ExplainedFormula有三个参数,一个可选参数和两个强制参数。如果存在,*则不打印方程编号。*
  • 强制性论据\ExplainedFormula是针对公式和逗号分隔列表“解释”。反过来,每个“解释”由一个变量、:一个解释、另一个解释:\si单位组成,如果没有,则应留空(例如上例中的雷诺数)。解释不应包含,!!!因为这是用来\Explain分隔公式和描述部分的。公式的部分不应被包围,$...$因为它们是由\ExplainedFormula
  • 逗号分隔的解释列表使用以下方式处理\docsvlist来自电子工具箱包装在一起,并使用一些技巧(通过\Explain),将公式组件和描述分开。发生的事情是,它\do获得了逗号分隔的描述的每个部分,例如\Re: Reynolds number:,它将其赋予末尾添加的,以便\Explain宏 知道在哪里结束。!!!\Explain#3
  • 所有东西都放在一个\hbox宽度为 的盒子里\textwidth,盒子的组件之间用 分隔\hfil,每个组件都会均匀扩展以填满可用空间。这应该会给出所需的等距间距
  • 我已经Re用替换了\Re,其结果是\renewcommand\Re{\mathop{\textrm{Re}}}
  • 我不太喜欢\dots解释中的 。我可能会在两边添加空格,使用类似@{\,\dots\,}表格定义中的方法,或者改用冒号或等号...

答案2

我完全消除了multirowtabular。我使用\hfill来实现等间距,使用 TABstack 来表示解释,使用\vcentered\hbox来表示公式。别忘了\noindent

\documentclass{article}
\usepackage{siunitx}
\usepackage{amsmath}
\usepackage{lipsum}
\usepackage{tabstackengine}
\begin{document}
\lipsum[1]

\vspace{\baselineskip}%
\noindent\hfill%
$\vcenter{\hbox{$Re = \dfrac{v\cdot d}{\nu}$}}$%
\hfill%
\alignCenterstack{%
$Re$&\dots Reynolds number $[-]$\\
$v$&\dots velocity of the fluid $[\si{\milli\meter\per\second}]$\\
$d$&\dots characteristic linear dimension $[\si{\milli\meter}]$\\
$\nu$&\dots kinematic viscosity $[\si{\milli\meter\squared\per\second}]$
}%
\hfill%
\vspace{\baselineskip}

\lipsum[2]
\end{document}

在此处输入图片描述

易于放置在宏中,如下所示\explainedFormula

\documentclass{article}
\usepackage{siunitx}
\usepackage{amsmath}
\usepackage{lipsum}
\usepackage{tabstackengine}
\newcommand\explainedFormula[2]{%
  \vspace{\baselineskip}%
  \noindent\hfill%
  $\vcenter{\hbox{$#1$}}$\hfill%
  \alignCenterstack{#2}\hfill%
  \vspace{\baselineskip}
}
\begin{document}
\lipsum[1]

\explainedFormula{Re = \dfrac{v\cdot d}{\nu}}
{%
$Re$&\dots Reynolds number $[-]$\\
$v$&\dots velocity of the fluid $[\si{\milli\meter\per\second}]$\\
$d$&\dots characteristic linear dimension $[\si{\milli\meter}]$\\
$\nu$&\dots kinematic viscosity $[\si{\milli\meter\squared\per\second}]$
}%

\lipsum[2]
\end{document}

答案3

简单但不太通用的实现。环境必须包含命令\description(不作为命令执行)。

\documentclass{article}
\usepackage{multirow}
\usepackage{siunitx}
\usepackage{amsmath}
\usepackage{lipsum}

\usepackage{environ,pbox}

\NewEnviron{MaxD}{%
  \expandafter\parseMaxD\BODY\endparseMaxD%
}

\long\def\parseMaxD#1\description#2\endparseMaxD{
  \vspace{\baselineskip}%
  \hfill%
  \pbox{0.45\linewidth}{$#1$}%
  \hfill%
  \begin{tabular}{@{}r@{\dots}l@{}}%
    #2%
  \end{tabular}%
  \hfill%
  \vspace{\baselineskip}}


\begin{document}
\lipsum[1]

\vspace{\baselineskip}
\begingroup
\setlength{\tabcolsep}{0pt}
\begin{tabular}{crl}
\multirow{4}{.3\textwidth}{%
\centering
$Re = \dfrac{v\cdot d}{\nu}$
}
&$Re$&\dots Reynolds number $[-]$\\
&$v$&\dots velocity of the fluid $[\si{\milli\meter\per\second}]$\\
&$d$&\dots characteristic linear dimension $[\si{\milli\meter}]$\\
&$\nu$&\dots kinematic viscosity $[\si{\milli\meter\squared\per\second}]$
\end{tabular}
\endgroup
\vspace{\baselineskip}


\begin{MaxD}
  Re = \dfrac{v\cdot d}{\nu}
  \description
  $Re$& Reynolds number $[-]$\\
  $v$& velocity of the fluid $[\si{\milli\meter\per\second}]$\\
  $d$& characteristic linear dimension $[\si{\milli\meter}]$\\
  $\nu$& kinematic viscosity $[\si{\milli\meter\squared\per\second}]$
\end{MaxD}

\lipsum[2]
\end{document}

为了使其至少更加通用,您可以使用tabularx包并使用以下内容作为定义\parseMaxD

\usepackage{tabularx}
\long\def\parseMaxD#1\description#2\endparseMaxD{
  \vspace{\baselineskip}%
  \hfill%
  \pbox{0.45\linewidth}{$#1$}%
  \hfill%
  \begin{tabularx}{0.5\linewidth}{@{}r@{\dots}X@{}}%
    #2%
  \end{tabularx}%
  \hfill%
  \vspace{\baselineskip}}

\displaystyle您也可以始终使用来排版公式\pbox{0.45\linewidth}{$\displaystyle #1$}

答案4

这很简单;但请注意\Ren雷诺数(Re在数学模式下使用会在字母之间添加不必要的空间)。

\documentclass{article}
\usepackage{siunitx}
\usepackage{amsmath}
\usepackage{lipsum}

\newcommand{\Ren}{\mathit{Re}}

\begin{document}

\lipsum*[1]
\begin{equation}
\Ren = \frac{vd}{\nu}
\qquad
\begin{aligned}
\Ren &\dots\text{Reynolds number (--)}\\
v    &\dots\text{velocity of the fluid (\si{\milli\meter\per\second})}\\
d    &\dots\text{characteristic linear dimension (\si{\milli\meter})}\\
\nu  &\dots\text{kinematic viscosity (\si{\milli\meter\squared\per\second})}
\end{aligned}
\end{equation}
\lipsum[2]

\end{document}

在此处输入图片描述

或者,减少垂直间距并可能更容易输入:

\documentclass{article}
\usepackage{siunitx}
\usepackage{amsmath}
\usepackage{array}
\usepackage{lipsum}

\newcommand{\Ren}{\mathit{Re}}

\begin{document}

\lipsum*[1]
\begin{equation}
\Ren = \frac{vd}{\nu}
\qquad
\begin{tabular}{@{}>{$}r<{$}@{$\dots$}l@{}}
\Ren & Reynolds number (--)\\
v    & velocity of the fluid (\si{\milli\meter\per\second})\\
d    & characteristic linear dimension (\si{\milli\meter})\\
\nu  & kinematic viscosity (\si{\milli\meter\squared\per\second})
\end{tabular}
\end{equation}
\lipsum[2]

\end{document}

在此处输入图片描述

如果您更喜欢单一环境:

\documentclass{article}
\usepackage{siunitx}
\usepackage{amsmath}
\usepackage{array}
\usepackage{lipsum}

\newcommand{\Ren}{\mathit{Re}}
\newenvironment{formulaexplained}
 {\qquad\begin{tabular}{@{}>{$}r<{$}@{$\dots$}l@{}}}
 {\end{tabular}}
\newenvironment{explainformula}[1]
 {\begin{equation}#1\begin{formulaexplained}}
 {\end{formulaexplained}\end{equation}}
\newenvironment{explainformula*}[1]
 {\begin{equation*}#1\begin{formulaexplained}}
 {\end{formulaexplained}\end{equation*}}

\begin{document}

\lipsum*[3]
\begin{explainformula}{
  \Ren = \frac{vd}{\nu}
}
\Ren & Reynolds number (--)\\
v    & velocity of the fluid (\si{\milli\meter\per\second})\\
d    & characteristic linear dimension (\si{\milli\meter})\\
\nu  & kinematic viscosity (\si{\milli\meter\squared\per\second})
\end{explainformula}
\lipsum*[3]
\begin{explainformula*}{
  \Ren = \frac{vd}{\nu}
}
\Ren & Reynolds number (--)\\
v    & velocity of the fluid (\si{\milli\meter\per\second})\\
d    & characteristic linear dimension (\si{\milli\meter})\\
\nu  & kinematic viscosity (\si{\milli\meter\squared\per\second})
\end{explainformula*}
\lipsum[3]

\end{document}

在此处输入图片描述

相关内容