reDeclarePairedDelimiterInnerWrapper를 사용할 때 중간 구분 기호가 누락되었습니다.

reDeclarePairedDelimiterInnerWrapper를 사용할 때 중간 구분 기호가 누락되었습니다.

나는 다음과 같이 매크로 를 정의하기 위해 \DeclarePairedDelimiter(from )을 사용하고 있습니다:mathtools\paren

\providecommand{\given}{\:\vert\:}
\DeclarePairedDelimiterX\paren[1]{(}{)}{%
  \renewcommand{\given}{\:\delimsize\vert\:}#1%
}

이것은 예상대로 작동합니다. 그러나 답변에 따르면이 질문, 저는 \reDeclarePairedDelimiterInnerWrapper다음과 같은 하위/위 첨자의 위치를 ​​수정했습니다.

\reDeclarePairedDelimiterInnerWrapper{\paren}{nostar}{#1#2#3}

이제 \paren{a \given b}농산물을 사용하여(ab), 대신에(a | b). (즉, \given기호가 완전히 생략되었습니다). 그래도 잘 사용하거나 \paren[\big]{a \given b}작동 합니다.\paren*{a \given b}

어떤 아이디어가 있나요?

미리 감사드립니다.

답변1

@egreg가 언급했듯이 이는 주변 울타리에 대해 \MHempty재정의되기 때문입니다 . \@gobble이는 일반적으로 \mathopen/close{...}그룹 역할을 하며 \@gobble지역화되어 수행됩니다. 래퍼의 정의에 따라 \mathopen/close및 그룹화가 사라지고 스케일러가 없을 때 \delimsize를 가리키는 것이 이제 중간 부분을 차지합니다.\MHempty\@gobble

그룹화 없이 작동하는 가장 쉬운 방법은 외부 펜스에서 사용한 후 \MHempty다시 설정하는 것입니다.{}

아래 코드가 작동하는 것 같습니다.

다음 릴리스에는 autoscaled, non-scaled 및 scaled의 세 가지 래퍼가 있을 예정이며, 여기서는 스케일러 를 사용하지 않을 때 부작용이 있는 non-scaled가 사용하게 \mathopen/close...됩니다 .\mathopen/close{...}

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

관련 정보