
Ich verwende \DeclarePairedDelimiter
(von mathtools
), um ein \paren
Makro wie folgt zu definieren:
\providecommand{\given}{\:\vert\:}
\DeclarePairedDelimiterX\paren[1]{(}{)}{%
\renewcommand{\given}{\:\delimsize\vert\:}#1%
}
Dies funktioniert wie erwartet. Aber nach der Antwort aufdiese Frage, habe ich früher \reDeclarePairedDelimiterInnerWrapper
die Position folgender tiefgestellter/hochgestellter Zeichen festgelegt:
\reDeclarePairedDelimiterInnerWrapper{\paren}{nostar}{#1#2#3}
Jetzt mit \paren{a \given b}
produziert(ab), anstatt(ein | b). (D. h. das \given
Symbol wird vollständig weggelassen). Die Verwendung von \paren[\big]{a \given b}
oder \paren*{a \given b}
funktioniert jedoch einwandfrei.
Irgendwelche Ideen?
Dank im Voraus.
Antwort1
Wie @egreg erwähnt, liegt dies daran, dass es für die umgebenden Zäune \MHempty
neu definiert wurde \@gobble
. Dies geschieht normalerweise über „which“ ( \mathopen/close{...}
das als Gruppe fungiert und \@gobble
lokalisiert wird). Mit der Definition des Wrappers \mathopen/close
ist das und die Gruppierung verschwunden und „which“ \delimsize
(das auf zeigt, \MHempty
wenn kein Scaler vorhanden ist) ist jetzt „ \@gobble
which“ (das den mittleren Teil frisst).
Die einfachste Methode, damit dies ohne Gruppierung funktioniert, besteht darin, \MHempty
es {}
nach der Verwendung in den äußeren Zäunen zurückzusetzen.
Der folgende Code scheint zu funktionieren.
Bitte beachten Sie, dass es in der nächsten Version drei Wrapper geben wird: automatisch skaliert, nicht skaliert und skaliert, wobei der nicht skalierte Wrapper „ \mathopen/close...
nicht“ verwendet \mathopen/close{...}
, was Nebenwirkungen hat, wenn keine Skalierer verwendet werden.
\documentclass[a4paper]{memoir}
\usepackage{mathtools}
\MHInternalSyntaxOn
\makeatletter
\def\MHempty{}
\def\DeclarePairedDelimiterX#1[#2]#3#4#5{%
\@ifdefinable{#1}{
\MT_paired_delimx_arg_test:n{#2}
\MT_delim_default_inner_wrappers:n{#1}
\@xp\@xp\@xp
\newcommand
\@xp\csname MT_delim_\MH_cs_to_str:N #1 _star:\endcsname
[#2]
{
\begingroup
\def\delimsize{\middle}
%\mathopen{}\mathclose\bgroup\left#3 #5 \aftergroup\egroup\right#4
\@nameuse{MT_delim_\MH_cs_to_str:N #1 _star_wrapper:nnn}
{\left#3}{#5}{\right#4}
\endgroup
}
\@xp\@xp\@xp
\newcommand
\@xp\csname MT_delim_\MH_cs_to_str:N #1 _nostar:\endcsname
[1][\MHempty]
{
\begingroup
\def\delimsize{##1}
\@nameuse{MT_delim_\MH_cs_to_str:N #1 _nostar_inner:}
}
\@xp\@xp\@xp
\newcommand
\@xp\csname MT_delim_\MH_cs_to_str:N #1 _nostar_inner:\endcsname
[#2]
{
%\mathopen{%
% \let\MHempty\@gobble
% \@xp\@xp\@xp\csname\@xp\MH_cs_to_str:N \delimsize l\endcsname #3}
%#5
%\mathclose{%
% \let\MHempty\@gobble
% \@xp\@xp\@xp\csname\@xp\MH_cs_to_str:N \delimsize r\endcsname #4}
\@nameuse{MT_delim_\MH_cs_to_str:N #1 _nostar_wrapper:nnn}
{
\let\MHempty\@gobble
\@xp\@xp\@xp\csname\@xp\MH_cs_to_str:N \delimsize l\endcsname #3
\def\MHempty{}
}
{#5}
{
\let\MHempty\@gobble
\@xp\@xp\@xp\csname\@xp\MH_cs_to_str:N \delimsize r\endcsname #4
\def\MHempty{}
}
\endgroup
}
\DeclareRobustCommand{#1}{
\@ifstar
{\@nameuse{MT_delim_\MH_cs_to_str:N #1 _star:}}
{\@nameuse{MT_delim_\MH_cs_to_str:N #1 _nostar:}}
}
}
}
\makeatother
\MHInternalSyntaxOff
\providecommand{\given}{\:\vert\:}
\DeclarePairedDelimiterX\paren[1]{(}{)}{%
\renewcommand{\given}{\:\delimsize\vert\:}
#1%
}
\reDeclarePairedDelimiterInnerWrapper{\paren}{nostar}{#1#2#3}
\begin{document}
\[
\paren{ a \given b }
\]
\end{document}