파생상품의 "평가 위치" 막대: \Bigr, \biggr, 또는 \left...\right?

파생상품의 "평가 위치" 막대: \Bigr, \biggr, 또는 \left...\right?

파생 상품에 대한 "평가 위치" 막대를 조판하는 모범 사례가 있는지 확인하려고 합니다. 내가 생각하는 세 가지 가능성은 아래 발췌 코드에 나와 있습니다.

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

이것이 산출하는 결과입니다:

두 번째 코드 샘플의 출력

관련 정보