
이 질문은 문제를 해결하려는 나의 시도입니다.주요 문제(MWE가 있습니다).
매크로를 사용한다는 것을 깨달았습니다.
\newcommand{\veca}{|_{\vec{a}}}
next to는 \bigg
단일 토큰으로 처리되므로 두 쿼리의 출력은 동일합니다.
\bigg\veca
\bigg{|_{\vec{a}}}
먼저 확장되는 방식을 정의하는 방법을 모르기 때문에 두 번째 인수가 항상 한 번 확장되도록 \veca
재정의하려고 했습니다.\bigg
나는 를 찾아보고 모든 , , 가 다음을 사용하여 정의된다는 amsmath.sty
것을 알아냈습니다 .\big
\Big
\bigg
\Bigg
\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
그리고 다음은 다음을 사용하여 확장을 구현하려는 시도입니다.expl3
\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}
어떤 제안이라도 높이 평가됩니다. 순수한 LaTeX2 솔루션도 정말 환영합니다.
답변1
거의 다 왔습니다. 그러나 o 유형 확장은 기본적으로 결과를 중괄호로 지정하므로 중괄호가 아닌 확장이 필요합니다.
\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}
o 확장은 #2
가새 균형을 이루어야 합니다.
이것은 다른 사용법을 깨뜨릴 것입니다. 예를 들어 주석을 참조하십시오. 문제를 해결하기 위해 확인할 수 있는 한 가지 방법은 내부 매크로가 "확장되기를 원하는" 매크로인지 테스트하는 것입니다.
\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}
}
}
(보세요, TeX는 마술이 아닙니다. 그런 다음 매크로를 "확장할지 여부"로 표시하기 위한 시스템을 원한다면 일부 보조 매크로 등을 정의할 수 있습니다. 빠르게 복잡해집니다. functional
패키지는 내부 매크로가 있는지 확인하기 위해 비슷한 작업을 수행합니다. 인수의 매크로는 "함수입니다")