1

I am using the \DeclarePairedDelimiterXPP command from the mathtools package to declare some new delimiters, for which scaling can be turned on and off easily. Specifically, I want to declare the command \evalat, which indicates the evaluation of an expression at a given point: e.g. $\left.\frac{x}{2}\right|_{x=1}$.

As I said before, I want it to have the scaling options as provided by the \DeclarePairedDelimiter-type commands. This means that \evalat{\frac{x}{2}}{x=1} gives a non-scaled vertical line on the right, \evalat*{\frac{x}{2}}{x=1} gives a scaled vertical line on the right and \evalat[\size]{\frac{x}{2}}{x=1} gives a vertical bar with size \size.

I tried the following definitions:

\DeclarePairedDelimiterXPP{\evalat}[2]{}{.}{|}{_{#2}}{#1}

and

\DeclarePairedDelimiterXPP{\evalat}[2]{}{\left.}{\right|}{_{#2}}{#1}

The first one works correctly in the starred (automatic scaling) version. Its non-starred version however results in $.\frac{x}{2}|_{x=1}$, with the dot still shown on the left side. The second version always scales the delimiters, both in the starred and the non-starred version.

I understand why the commands behave as they do, but I do not know how to get the behaviour that I want?

PS. This answer to another question could be a fall-back solution, but I would rather have the _{x=1} as an argument to the command.

  • As is the declarepaired cannot handle "empty" fences. I tend to make the Eval at macro completely manual as I find the \EvalAt{expression}{point} cumbersome and unnatural to read. I tend to just have expression \EvalAt[scaler]{point}` – daleif Jul 1 at 16:32
5

It's simpler to define the command directly:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\NewDocumentCommand{\evalat}{sO{}mm}{%
  \IfBooleanTF{#1}
    {\kern-\nulldelimiterspace\left.#3\right|_{#4}}
    {#3#2|_{#4}}%
}

\begin{document}

\[
\evalat{x^2}{x=1}=1
\qquad
\evalat*{\frac{x^2}{3}}{x=6}=12
\qquad
\evalat[\Big]{\frac{x^2}{3}}{x=6}=12
\]

\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.