導関数の「評価された」バーをタイプセットするためのベストプラクティスがあるかどうかを調べようとしています。私が考えている 3 つの可能性は、以下のコード抜粋に示されています。
\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
の 2 行目にあります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}
出力されるのは次のようになります。