Barra "Evaluado en" para derivadas: \Bigr, \biggr o \left...\right?

Barra "Evaluado en" para derivadas: \Bigr, \biggr o \left...\right?

Estoy tratando de determinar si existe una mejor práctica para componer la barra "evaluado en" para derivados. Las tres posibilidades en las que estoy pensando se muestran en el siguiente extracto de código:

\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*}

ingrese la descripción de la imagen aquí

La \Bigropción no llega a la parte superior e inferior de la fracción. La \biggropción sobrepasa un poco la parte superior e inferior de la fracción. Y la \left...\rightopción tiene la misma altura que la \biggropción, pero introduce un poco de espacio extra entre +y la fracción. Tengo problemas para decidir entre estas opciones. ¿Existe alguna práctica recomendada para componer esto?

Respuesta1

Dado que \bigde todos modos es el tamaño mínimo solicitado, es mejor utilizar un enfoque más simple:

\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}

Tenga en cuenta que el último tiene una barra definitivamente demasiado grande.

ingrese la descripción de la imagen aquí

Respuesta2

Ampliando la sugerencia de 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}

Y aquí está el resultado:

Salida del código


Idea tardía

Dado que el OP puso énfasis en cuestiones de estilo y mejor uso, debo corregir una imperfección evidente del código anterior: aunque el \evaluat comando produce, en todas las variantes, una lista matemática que comienza con un átomo Abierto y termina con un átomo Cerrado, sin embargo, \evaluat*se inserta \nulldelimiterspacea la izquierda del argumento obligatorio, mientras que las otras formas no lo hacen. Esto se corrige fácilmente:

\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}

La salida es:

Salida del código modificado.

Ampliemos también la porción correspondiente a la \nulldelimiterspace prueba:

Detalle de la imagen anterior

Por supuesto, la razón detrás de la elección del uso \DeclarePairedDelimiterfue que una definición simple sería suficiente, con laherramientas matemáticaspaquete cuidando todos los detalles; Si es necesario recurrir tanto a rutinas de devolución de llamada, estoy de acuerdo con egreg en que este enfoque pierde su sentido y que es mejor definir directamente un comando apropiado, como lo hace él (sin embargo, recomendaría la misma corrección en su código también, y también para organizar que la lista matemática generada siempre comience con un átomo abierto (aunque es poco probable, podría preceder una operación).

Respuesta3

He adoptado recientementeel physicspaquetecomo parte de mi kit de herramientas habitual, con la ventaja de que proporciona una herramienta explícitamente para esto \evaluated{}(o \eval{}).

Parece aplicar una barra de tamaño mínimo y ampliarla según sea necesario.

Aquí hay un ejemplo mínimo extraído de un documento que escribí recientemente para una clase.

\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}

que genera esta salida:

ingrese la descripción de la imagen aquí

El uso de \evalestá en la segunda línea del alignmedio ambiente.

Respuesta4

Mientras intentaba adaptarseLa respuesta de Bernardoa una pregunta similar (Barra vertical para "evaluado en"), noté que tiene un defecto porque supera la altura de la subfórmula “evaluada”, como se puede ver claramente en este ejemplo modificado,

\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}

que produce el siguiente resultado:

Salida del primer ejemplo de código

Sin embargo, me gustó la idea de usar una regla vertical en lugar de una\vert delimitador, así que ideé otra solución basada en este mismo principio. La altura y la profundidad de la regla se calculan teniendo en cuenta las reglas detalladas en el Apéndice G delEl libro de textopara la colocación de subíndices (Reglas 18a y 18b). Por supuesto, estoy abierto a sugerencias sobre lo que concierne al valor de los distintos parámetros.

Aquí está mi propuesta actual:

% 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}

Este es el resultado que produce:

Salida del segundo ejemplo de código

información relacionada