导数的“求值点”栏:\Bigr,\biggr,还是 \left...\right?

导数的“求值点”栏:\Bigr,\biggr,还是 \left...\right?

我正在尝试确定是否存在排版衍生品“评估于”栏的最佳实践。我想到的三种可能性显示在下面的代码摘录中:

\begin{gather*}
5 + \frac{df}{dt} \Bigr\rvert_{t = 0} \\
5 + \frac{df}{dt} \biggr\rvert_{t = 0} \\
5 + \left. \frac{df}{dt} \right\rvert_{t = 0} \\
\end{gather*}

在此处输入图片描述

选项\Bigr没有完全到达分数的顶部和底部。\biggr选项稍微超出了分数的顶部和底部。选项\left...\right的高度与\biggr选项的高度相同,但它在和分数之间引入了一点额外的空间+。我在这两个选项之间难以抉择。有没有排版的最佳实践?

答案1

由于\big无论如何都是请求的最小大小,因此最好使用更简单的方法:

\documentclass{article}
\usepackage{amsmath,mleftright}
\usepackage{xparse}

\NewDocumentCommand{\evalat}{sO{\big}mm}{%
  \IfBooleanTF{#1}
   {\mleft. #3 \mright|_{#4}}
   {#3#2|_{#4}}%
}

\begin{document}

\begin{align}
& \evalat{f(x)}{x=0} \\
& \evalat[\big]{f(x)}{x=0} \\
& \evalat[\Big]{\frac{\partial f}{\partial x}}{x=0} \\
& \evalat[\bigg]{\frac{\partial f}{\partial x}}{x=0} \\
& \evalat*{\frac{\partial f}{\partial x}}{x=0} \\
& \evalat[\bigg]{\frac{\partial^2 f}{\partial x^2}}{x=0} \\
& \evalat*{\frac{\partial^2 f}{\partial x^2}}{x=0} \\
& \evalat[\bigg]{\left(1+\frac{1}{x}\right)^{\!x^2}}{x=1} \\
& \evalat*{\left(1+\frac{1}{x}\right)^{\!x^2}}{x=1}
\end{align}

\end{document}

请注意,最后一个的条肯定太大了。

在此处输入图片描述

答案2

详细阐述daleif的建议:

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{mathtools}

\DeclarePairedDelimiter\evaluat{.}{\rvert}
\reDeclarePairedDelimiterInnerWrapper\evaluat{nostar}{\mathopen{}#2\mathclose{#3}}

\begin{document}

Some examples:
\begin{itemize}
    \item with \verb|\evaluat[\big]|
        \[\evaluat[\big]{\frac{\partial f}{\partial x}}_{x=0}\]
    \item with \verb|\evaluat[\Bigg]|
        \[\evaluat[\Bigg]{\frac{\partial f}{\partial x}}_{x=0}\]
    \item with \verb|\evaluat*|
        \[\evaluat*{\frac{\partial f}{\partial x}}_{x=0}\]
        (in this case, a \verb|\left|\ \ldots\verb|\right| construction is
        used);
    \item and with \verb|\evaluat| (thanks again, egreg~;-)
        \[\evaluat{\frac{\partial f}{\partial x}}_{x=0}\]
\end{itemize}

\end{document}

输出如下:

代码输出


事后想法

由于 OP 强调了风格和最佳用法的问题,我必须纠正上述代码的一个明显缺陷:尽管该\evaluat 命令在所有变体中都会生成一个以 Open 原子开头并以 Close 原子结尾的数学列表,但它仍然\evaluat*插入到 \nulldelimiterspace强制参数的左侧,而其他形式则不会。这很容易纠正:

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{mathtools}

\DeclarePairedDelimiter\evaluat{.}{\rvert}
\reDeclarePairedDelimiterInnerWrapper\evaluat{nostar}{%
    \mathopen{}#2\mathclose{#3}%
}
\reDeclarePairedDelimiterInnerWrapper\evaluat{star}{%
    \mathopen{}\mathclose\bgroup #1\hskip -\nulldelimiterspace \relax
    #2\aftergroup\egroup #3%
}

\begin{document}

Some examples:
\begin{itemize}
    \item with \verb|\evaluat[\big]|
        \[\evaluat[\big]{\frac{\partial f}{\partial x}}_{x=0}\]
    \item with \verb|\evaluat[\Bigg]|
        \[\evaluat[\Bigg]{\frac{\partial f}{\partial x}}_{x=0}\]
    \item with \verb|\evaluat*|
        \[\evaluat*{\frac{\partial f}{\partial x}}_{x=0}\]
        (in this case, a \verb|\left|\ \ldots\verb|\right| construction is
        used);
    \item and with \verb|\evaluat| (thanks again, egreg~;-)
        \[\evaluat{\frac{\partial f}{\partial x}}_{x=0}\]
\end{itemize}

Difference between non-\verb|\big| and \verb|\big|:
$\evaluat{x}$, $\evaluat[\big]{x}$.

Test for \verb|\nulldelimiterspace|:
\begin{align*}
    & 1+\evaluat{f(x)}_{x=0} \\
    & 1+\evaluat*{f(x)}_{x=0}
\end{align*}

\end{document}

输出为:

修改后的代码输出

让我们放大与测试有关的部分\nulldelimiterspace

上一张图片的细节

当然,选择使用 \DeclarePairedDelimiter是,一个简单的定义就足够了,数学工具包处理所有细节;如果需要大量依赖回调例程,我同意 egreg 的观点,认为这种方法失去了意义,最好直接定义一个适当的命令,就像他做的那样(但是,我也建议在他的代码中进行同样的修正,并安排生成的数学列表始终以 Open 原子开头——尽管不太可能,但 Op 可以放在前面)。

答案3

我最近采用了physics\evaluated{}作为我常用工具包的一部分,其优点是它明确为此(或)提供了工具\eval{}

它似乎应用了最小尺寸栏,并根据需要将其扩大。

下面是从我最近为课堂撰写的一篇文档中提取的一个最小示例

\documentclass{minimal}

\usepackage{physics}

\begin{document}
here we recognize the terminal velocity in the denominator of the
RHS
\begin{align*}
  \Delta x 
  &= \mp\frac{m}{k} \int_{v_1}^{v_2}
    \frac{v\dd{v}}{v^2 \pm v_t^2}  \\
  \\
  &= \mp\frac{m}{k} \frac{1}{2} \eval{\ln\qty({v^2 \pm
    v_t^2})}_{v_1}^{v_2}  \\
  \\
  &= \mp\frac{m}{2k} 
    \qty[\ln\qty(v_2^2 \pm v_t^2) - \ln\qty(v_1^2 \pm v_t^2)]  \,.
\end{align*}
\end{document}

生成以下输出:

在此处输入图片描述

的使用\eval在环境的第二行align

答案4

在努力适应的同时伯纳德的回答类似问题(竖线表示“评估于”),我注意到它的缺陷在于它破坏了“评估”子公式的高度,正如在这个修改后的例子中可以清楚地看到的那样,

\documentclass{article}
\usepackage{amsmath}
\newcommand\eval[1]{\begin{array}[t]{@{}c@{\,}|@{\,}}% 
\raisebox{0pt}[0.33\height][1.33\depth]{$ \displaystyle#1 $}\end{array}}

\begin{document}

\begin{align*}
    & 5 + \eval{\dfrac{df}{dt}}_{t = 0} \\[2ex]
    & 5 + \eval{\frac{d\Bigl(\dfrac{f}{g}\Bigr)}{dt}}_{t = 0}
\end{align*}

\end{document}

输出结果如下:

第一个代码示例的输出

但是,我喜欢使用垂直线而不是分隔符的想法\vert,因此我根据同一原理制定了另一种解决方案。计算线的高度和深度时要牢记附录 G 中详述的规则TeXbook下标的位置(规则 18a 和 18b)。当然,我愿意听取有关各种参数值的建议。

这是我当前的建议:

% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly 
                                 % declare the paper format.

\usepackage[T1]{fontenc}         % Not always necessary, but recommended.
% End of standard header.  What follows pertains to the problem at hand.

\usepackage{amsmath} % I always load it when dealing with math!

\makeatletter

\newcommand*\evaluateat[2]{%
    #1% first, typeset the base symbol(s)
    \mkern .5\thinmuskip % too little? too much?
    \mathpalette{\EA@evaluate@at{#2}}{#1}% then, add the vertical bar
}
\newcommand*\EA@evaluate@at[3]{%
    % #1 <- subscripted annotation
    % #2 <- style selector, e.g., "\textstyle"
    % #3 <- base symbol(s)
    \setbox\z@ \hbox{$\m@th\color@begingroup #2#3\color@endgroup$}%
    \dimen@ \dimexpr \ht\z@ *\tw@/\thr@@ \relax
    \dimen@ii \dp\z@
    \ifx #2\scriptscriptstyle
        \EA@calc@style@dependent@values \scriptscriptfont \scriptscriptfont
    \else \ifx #2\scriptstyle
        \EA@calc@style@dependent@values \scriptfont \scriptscriptfont
    \else
        \EA@calc@style@dependent@values \textfont \scriptfont
    \fi \fi
    \vrule \@height\dimen@ \@depth\dimen@ii \@width\dimen4
    \mathord{% or "\mathclose{}\mathopen{}\mathinner{"?
        \vrule \@depth\dp\z@ \@height\z@ \@width\z@
    }% } brace match
    _{\,#1}%
}
\newcommand*\EA@calc@style@dependent@values[2]{%
    % #1 <- main font selector, e.g., "\textfont"
    % #2 <- relative script font selector, e.g., "\scriptfont"
    \advance \dimen@ii \fontdimen19#2\tw@
    \dimen4 \fontdimen16#1\tw@
    \ifdim \dimen@ii<\dimen4
        \dimen@ii \dimen4
    \fi
    \advance \dimen@ii \dimen4 % extra depth
    % \dimen4 \dimexpr \fontdimen5#1\tw@ *6/5\relax
    \dimen4 \fontdimen5#1\tw@ % the ex-height
    \ifdim \dimen4 <\z@
        \dimen4 -\dimen4
    \fi
    \ifdim \dimen@<\dimen4
        \dimen@ \dimen4
    \fi
    % Now re-use "\dimen4" to hold the default rule thickness:
    \dimen4 \fontdimen8#1\thr@@
}

\makeatother



\begin{document}

In-line: \( \evaluateat{\mathord.}{x=0} + \evaluateat{f}{x=0} +
\evaluateat{f(x)}{x=0} + \evaluateat{\frac{df}{dx}}{x=0} \).  And displayed:
\[
    \evaluateat{f}{x=0}+\evaluateat{\frac{df}{dx}}{x=0}
        - \evaluateat{\,\frac{\frac{df}{dx}\,}{\,\frac{df}{dy}\,}}{x=0,y=0}
\]

Example in \verb|\scriptstyle|:
\( \frac{\evaluateat{f(x)}{x=0}}{g\left(\evaluateat{f(x)}{x=0}\right)} \).

Another example:
\[ \evaluateat{df}{x} \colon T_{x}M\longrightarrow T_{y}N \]

\end{document}

这是其产生的输出:

第二个代码示例的输出

相关内容