파생 상품에 대한 "평가 위치" 막대를 조판하는 모범 사례가 있는지 확인하려고 합니다. 내가 생각하는 세 가지 가능성은 아래 발췌 코드에 나와 있습니다.
\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}
이것이 산출하는 결과입니다: