Панель «Оценено» для производных инструментов: \Bigr, \biggr или \left...\right?

Панель «Оценено» для производных инструментов: \Bigr, \biggr или \left...\right?

Я пытаюсь определить, есть ли наилучшая практика для набора строки "evaluated at" для производных инструментов. Три возможности, которые я думаю, показаны в отрывке кода ниже:

\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

Развивая предложение Далейфа:

\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было то, что было бы достаточно простого определения, сmathtoolspackage заботится обо всех деталях; если необходимо так часто прибегать к процедурам обратного вызова, я согласен с 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разделителя, поэтому я разработал другое решение, основанное на этом же принципе. Высота и глубина линейки вычисляются с учетом правил, подробно описанных в Приложении GTeXbookдля размещения индексов (Правила 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}

Вот что получается на выходе:

Вывод второго примера кода

Связанный контент