
Diese Frage ist mein Versuch zur Lösung desHauptproblem(MWE dort).
Mir ist aufgefallen, dass die Verwendung von Makros
\newcommand{\veca}{|_{\vec{a}}}
next to \bigg
wird als einzelnes Token behandelt, sodass diese beiden Abfragen die gleiche Ausgabe haben
\bigg\veca
\bigg{|_{\vec{a}}}
Ich weiß nicht, wie ich \veca
die Art und Weise definieren soll, wie es zuerst erweitert wird, also habe ich versucht, es \bigg
so neu zu definieren, dass das zweite Argument immer einmal erweitert wird
Ich habe in nachgeschaut amsmath.sty
und herausgefunden, dass alle \big
, \Big
, \bigg
, \Bigg
wie folgt definiert sind \bBigg@
:
\renewcommand{\big}{\bBigg@\@ne}
\renewcommand{\Big}{\bBigg@{1.5}}
\renewcommand{\bigg}{\bBigg@\tw@}
\renewcommand{\Bigg}{\bBigg@{2.5}}
\ifx\leavevmode@ifvmode\@undefined
\def\bBigg@#1#2{%
{\@mathmeasure\z@{\nulldelimiterspace\z@}%
{\left#2\vcenter to#1\big@size{}\right.}%
\box\z@}}
\else
\def\bBigg@#1#2{\leavevmode@ifvmode
{\@mathmeasure\z@{\nulldelimiterspace\z@}%
{\left#2\vcenter to#1\big@size{}\right.}%
\box\z@}}
\fi
Und hier ist mein Versuch, die Erweiterung zu implementieren mitexpl3
\documentclass{article}
\usepackage{amsmath}
\newcommand{\veca}{|_{\vec{a}}}
\makeatletter
\ExplSyntaxOn
\cs_set_eq:NN \better_big:nn \bBigg@
\cs_generate_variant:Nn \better_big:nn {no}
\cs_set:Npn \bBigg@ #1#2 {
\better_big:no #1 #2
}
\ExplSyntaxOff
\makeatother
\begin{document}
\[
\frac{f(\vec{x})}{g(\vec{x})}\bigg\veca \qquad
\frac{f(\vec{x})}{g(\vec{x})}\bigg|_{\vec{a}}
\]
\end{document}
Aber es scheint überhaupt nicht zu funktionieren
Alle Vorschläge sind herzlich willkommen. Auch reine LaTeX2-Lösungen sind herzlich willkommen.
Antwort1
Sie sind fast am Ziel. Aber die O-Typ-Erweiterung klammert das Ergebnis standardmäßig, Sie benötigen also eine Erweiterung, die keine Klammern verwendet.
\documentclass{article}
\usepackage{amsmath}
\newcommand{\veca}{|_{\vec{a}}}
\makeatletter
\ExplSyntaxOn
\cs_set_eq:NN \better_big:nn \bBigg@
\cs_set:Npn \bBigg@ #1#2 {
\exp_last_unbraced:Nno \better_big:nn {#1} {#2}
}
\ExplSyntaxOff
\makeatother
\begin{document}
\[
\frac{f(\vec{x})}{g(\vec{x})}\bigg\veca \qquad
\frac{f(\vec{x})}{g(\vec{x})}\bigg|_{\vec{a}}
\]
\end{document}
Beachten Sie, dass die O-Erweiterung durch #2
Klammern ausgeglichen werden muss.
Beachten Sie, dass dies einige andere Verwendungen unterbricht, siehe z. B. den Kommentar. Eine Möglichkeit, das Problem zu beheben, besteht meiner Meinung nach darin, zu testen, ob das innere Makro eines ist, das „erweitert werden möchte“, z. B.
\cs_set:Npn \bBigg@ #1#2 {
\tl_if_eq:nnTF {#2} {\veca} {
\exp_last_unbraced:Nno \better_big:nn {#1} {#2}
}
{
\better_big:nn {#1} {#2}
}
}
(Sehen Sie, TeX ist keine Zauberei. Wenn Sie dann möchten, dass ein System kennzeichnet, ob ein Makro „erweitert werden soll oder nicht“, können Sie ein Hilfsmakro usw. definieren. Das wird schnell komplex. functional
Das Paket macht etwas Ähnliches, um zu sehen, ob ein inneres Makro im Argument „eine Funktion ist“)