수학 공식의 가장자리(시작/끝)에서 사라지는 공백

수학 공식의 가장자리(시작/끝)에서 사라지는 공백

수학 공식의 시작이나 끝에서 사라지는 공백을 생성하는 방법이 있나요?

아이디어:공식 최종 사례의 경우 미리 내다보거나 의무적인 인수를 취하는 것이 시작일 수 있습니다. 필수 인수가 수학 공식의 끝으로 끝나는 명령에는 빈 인수가 제공된다는 것을 기억합니다.

몇 가지 실제 예:


실시예 1

고유성 수량자("정확히 하나만 존재합니다")는 종종 "∃!"로 표시됩니다.

시각적인 고려 사항에서 "∃!"이 더 명확하게 보이도록 다음 변수를 느낌표에서 약간 떨어뜨리고 싶습니다. 단일 토큰(여기서 프로그래밍 언어로 구문 분석한다는 의미의 "토큰")으로 간주됩니다. 와 같은 것을 정의할 수 있지만 기호가 단독으로 사용되는 경우 남아 있는 \newcommand*{\existsunique}{\exists!\mskip1.5mu\relax}공간은 다음과 같습니다 .1.5mu

\documentclass{article}
\usepackage{amsmath} % better spacing behavior for \colon
\usepackage{dsfont}

\newcommand*{\existsunique}{\exists!\mskip1.5mu\relax}


\begin{document}

% spacing (1.5mu) as desired
\(\forall x \in \mathds{R}^{+}_{0} \colon
  \existsunique y \in \mathds{R}^{+}_{0} \colon
  y^2 = x\)

% spacing (0mu) too tight
\(\forall x \in \mathds{R}^{+}_{0} \colon
  \exists! y \in \mathds{R}^{+}_{0} \colon
  y^2 = x\)

% spacing (1.5mu) superfluous
The quantifier \(\existsunique\) means ``there is exactly one''.

% spacing (0mu) as desired
The quantifier \(\exists!\) means ``there is exactly one''.

\end{document}

공백이 있거나 없는 고유성 수량자

여기서 각 쌍의 첫 번째 줄에는 1.5mu고유성 수량자 "∃!" 뒤에 추가 간격이 있는 반면, 각 쌍의 두 번째 줄에는 그렇지 않습니다. 첫 번째 쌍의 경우 추가 간격은 원하는 대로입니다. 두 번째 쌍의 경우 모양이 좋지 않습니다.

1.5mu이 예에서는 수식 끝에서 공백이 사라지기를 원합니다 . 동일한 매크로가 위의 줄 1과 4를 생성해야 합니다. 아마도 "∃!"에 대한 다른 접근 방식이 있을 수 있지만 이는 위의 일반적인 질문에 대한 실용적인 예가 됩니다.


실시예 2

Heiko Oberdiek의 중간 길이 화살용

  • \Implies(사이 \Rightarrow\implies길이)
  • \Impliedby(사이 \Leftarrow\impliedby길이)
  • \Iff(사이 \Leftrightarrow\iff길이)

여기에 정의됨, 상황에 맞는 간격 삭제가 양쪽에서 바람직합니다.

답변1

이 수정된 답변은 egreg의 답변을 보고 나온 것입니다.\mathop, \operatorname 및 \DeclareMathOperator의 차이점은 무엇입니까?, 그는 다음 구성을 언급했습니다.\newcommand{\diff}{\mathop{}\!d}

위의 OP 질문에서 Werner와 egreg는 \mathbin및 를 사용하여 제안했지만 \mathopOP는 "나도 고려했지만 \mathop간격을 더 좁히고 싶습니다."라고 대답했습니다.

그래서 와 비슷한 방법을 취하여 \diff다음과 같은 결과를 얻었습니다.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{dsfont}
\usepackage[usestackEOL]{stackengine}
\def\stackalignment{l}
\def\showall{~\fbox{\Longstack{
\text{\detokenize\expandafter{\existsunique}}\\
A \colon  \existsunique y \\
\fboxsep0pt\fbox{$\existsunique$}\\
A \colon  {\existsunique} y
}~}\par}
\begin{document}
\savestack{\Header}{\Longstack{Definition:\\within math:\\boxed:\\brace-isolated:}}
\stackMath
\Header\def\existsunique{\exists!}\showall
\Header\def\existsunique{\exists!\mathop{}\!}\showall
\Header\def\existsunique{\mathop{}\!\exists!\mathop{}\!}\showall
\end{document}

여기에 이미지 설명을 입력하세요

실제 \!커른은 OP의 취향과 다를 수 있지만 아마도 접근 방식은 OP가 선택한 커른에 맞게 조정될 수 있습니다.


원래 접근 방식:

이 솔루션은 귀하의 애플리케이션에 적합한 것을 제공할 수도 있고 제공하지 않을 수도 있습니다. 매크로를 소개합니다 \mymathop{op-name}{op-definition}{pre-kern}{post-kern}.

그것이 하는 일은 새로운 "mymathop" 뒤에 오는 토큰이 무엇인지 살펴보는 것입니다. 귀하의 경우에는 \existsunique. 다음에 오는 것이 $, \)또는 \egroup이면 "op 정의" 자체를 인쇄합니다. 그렇지 않으면 "op 정의"에 대한 사전 및 사후 커른을 추가합니다(참고로 를 사용하면 \@ifnextchar"mymathop"과 다음 토큰 사이에 있는 모든 공백이 제거됩니다).

캐치 를 사용하면 수식 중간에서도 사전/사후를 중괄호로 묶어서 \egroup강제로 억제할 수 있습니다 .\mymathop\kern

아래 MWE는 두 개의 구분 기호 스타일을 사용하여 자체적으로 fbox로 묶인 수식과 자체 중괄호 세트를 사용하여 격리된 수식 내부를 보여줍니다.

\documentclass{article}
\usepackage{amsmath}
\usepackage{dsfont}
\makeatletter
\def\mymathop#1#2#3#4{%
  \def#1{\@ifnextchar${#2}{\@ifnextchar\){#2}{\@ifnextchar\egroup{#2}{\kern#3#2\kern#4}}}}
}
\makeatother
\mymathop{\existsunique}{\exists!}{0pt}{3pt}
\begin{document}
\(\forall x \in \mathds{R}^{+}_{0} \colon
  \existsunique y \in \mathds{R}^{+}_{0} \colon
  y^2 = x\)

\fboxsep0pt\fbox{$\existsunique $} \fbox{\(\existsunique \)}

\(\forall x \in \mathds{R}^{+}_{0} \colon
  {\existsunique} y \in \mathds{R}^{+}_{0} \colon
  y^2 = x\)
\end{document}

여기에 이미지 설명을 입력하세요

답변2

제 생각에는

\newcommand*{\existsunique}{\thinmuskip=1.5mu\mathop{\exists!}\relax}

당신이 원하는 것을합니다.

내 생각에 더 나은 해결책은

    \makeatletter
     \newcommand*{\existsuniquenew}{\@ifnextchar{\)}{\@end}{%
       \@ifnextchar{$}{\@end}{\not@end}}}
     \def\@end{\exists!\relax}%
     \def\not@end{\exists!\mskip1.5mu\relax}
    \makeatother

관련 정보