„Ausgewertet bei“-Leiste für Ableitungen: \Bigr, \biggr oder \left...\right?

„Ausgewertet bei“-Leiste für Ableitungen: \Bigr, \biggr oder \left...\right?

Ich versuche herauszufinden, ob es eine bewährte Methode zum Setzen der Leiste „evaluated at“ für Ableitungen gibt. Die drei Möglichkeiten, die mir in den Sinn kommen, sind im folgenden Codeausschnitt dargestellt:

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

Bildbeschreibung hier eingeben

Die \BigrOption erreicht nicht ganz die Ober- und Unterseite des Bruchs. Die \biggrOption geht etwas über die Ober- und Unterseite des Bruchs hinaus. Und die \left...\rightOption hat die gleiche Höhe wie die \biggrOption, fügt aber etwas zusätzlichen Abstand zwischen +und dem Bruch ein. Ich habe Schwierigkeiten, mich zwischen diesen Optionen zu entscheiden. Gibt es eine bewährte Methode, dies zu setzen?

Antwort1

Da \bigdies ohnehin die erforderliche Mindestgröße ist, ist ein einfacherer Ansatz besser:

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

Beachten Sie, dass der Balken beim letzten eindeutig zu groß ist.

Bildbeschreibung hier eingeben

Antwort2

Weitere Erläuterungen zu Daleifs Vorschlag:

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

Und hier ist die Ausgabe:

Ausgabe des Codes


Nachträglicher Einfall

Da der OP den Schwerpunkt auf Fragen des Stils und der besten Verwendung gelegt hat, muss ich einen offensichtlichen Mangel des obigen Codes korrigieren: Obwohl der \evaluat Befehl in allen Varianten eine mathematische Liste erzeugt, die mit einem Open-Atom beginnt und mit einem Close-Atom endet, \evaluat*fügt er dennoch \nulldelimiterspacelinks vom obligatorischen Argument ein, während die anderen Formen dies nicht tun. Dies lässt sich leicht korrigieren:

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

Die Ausgabe ist:

Ausgabe des geänderten Codes

Vergrößern wir auch den Teil, der sich auf den \nulldelimiterspace Test bezieht:

Ausschnitt aus dem vorigen Bild

Natürlich \DeclarePairedDelimiterlag der Grund für die Wahl von „Verwendung von“ darin, dass eine einfache Definition ausreichen würde, mit derMathetoolsPaket, das sich um alle Details kümmert; wenn man so häufig auf Callback-Routinen zurückgreifen muss, stimme ich mit egreg überein, dass dieser Ansatz seinen Sinn verliert und dass es besser ist, direkt einen entsprechenden Befehl zu definieren, wie er es tut (ich würde jedoch die gleiche Korrektur auch in seinem Code empfehlen und auch dafür sorgen, dass die generierte mathematische Liste immer mit einem offenen Atom beginnt – obwohl dies unwahrscheinlich ist, könnte ein Op vorangehen).

Antwort3

Ich habe vor kurzem adoptiertDas physicsPaketals Teil meines üblichen Werkzeugkastens, mit dem Vorteil, dass es explizit hierfür \evaluated{}(oder \eval{}) ein Werkzeug bereitstellt.

Es scheint eine Mindestgrößenleiste anzuwenden und diese nach Bedarf zu vergrößern.

Hier ist ein minimales Beispiel aus einem Dokument, das ich kürzlich für den Unterricht geschrieben habe

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

das folgende Ausgabe erzeugt:

Bildbeschreibung hier eingeben

Die Verwendung \evalerfolgt in der zweiten Zeile der alignUmgebung.

Antwort4

Beim Versuch, sich anzupassenBernards Antwortauf eine ähnliche Frage (Senkrechter Strich für „ausgewertet bei“), ist mir aufgefallen, dass es einen Mangel aufweist, da es die Höhe der „ausgewerteten“ Teilformel zerstört, wie man in diesem modifizierten Beispiel deutlich sehen kann.

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

Das Ergebnis ist folgende:

Ausgabe des ersten Codebeispiels

Mir gefiel jedoch die Idee, anstelle eines \vertTrennzeichens eine vertikale Linie zu verwenden, und so erarbeitete ich eine andere Lösung, die auf demselben Prinzip basiert. Die Höhe und Tiefe der Linie werden unter Berücksichtigung der in Anhang G vonDas TeXbookfür die Platzierung von Indizes (Regeln 18a und 18b). Natürlich bin ich offen für Vorschläge, was den Wert der verschiedenen Parameter betrifft.

Hier ist mein aktueller Vorschlag:

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

Dies ist die Ausgabe, die es liefert:

Ausgabe des zweiten Codebeispiels

verwandte Informationen