항상 텍스트 스타일의 수학 연산자

항상 텍스트 스타일의 수학 연산자

표시된 환경에서 사용하더라도 \sum인라인 스타일( )을 사용하여 동일한 기호로 확장되는 매크로를 정의하고 싶습니다 .\textstyle

내가 얻은 것은 다음과 같습니다.

\newcommand{\Alt}{\@ifstar{\sum}{{\textstyle\sum}}}

별표 표시된 버전을 사용하면 예외적인 상황에서 디스플레이 스타일을 선택적으로 활성화할 수 있습니다. 그러나 이는 강력한 요구 사항은 아닙니다.

이것을 매크로로 포장하지 않았다면 다음과 같이 했을 것입니다.

bla {\textstyle \sum_a^b bla} bla

. \sum의 범위를 제한하기 위해 매크로 정의에서 그룹을 래핑하는 것이 약간 불편합니다.\textstyle

내 질문은: 주변의 추가 그룹으로 인해 간격이 깨질 수 있는 상황이 있습니까 \sum?

답변1

의견 토론을 바탕으로 나는 다음의 답변과 비슷한 것을 제안했습니다.대형 사업자는 어떻게 정의되나요?, 형태 \DeclareMathOperator*{\barr}{\textstyle\sum}. 그러나 이 접근 방식은 여전히 ​​합계 위와 아래에 표시 스타일 제한을 둡니다(예: 1). 그럼에도 불구하고 우리는 텍스트 스타일(예: 2)에서 제공되는 간격이 \barrOP가 추구하는 적절한 간격이라는 것을 알고 있습니다.

예에서 해당 간격과 아래 첨자/위 첨자 배치를 다시 만들 수 있었습니다. 3-5, 다양한 접근 방식을 사용합니다. 전. 3은 \mathorda 대신 a 를 사용하여 디스플레이 스타일의 결과를 속입니다 \mathop. 그러나 물론 적절한 간격(예: 2)과 일치하도록 사전 및 사후 간격을 조정해야 합니다.

전. 4와 5는 OP가 제안한 접근 방식의 변형입니다. 예에서. 4, 교정기 안에 사전 및 사후 자료를 추가합니다. 그러나 재료의 특성에 따라 이 방법을 사용하지 못할 수도 있습니다.

전. 5는 얇은 공백이 추가되었다는 점을 제외하면 OP의 접근 방식입니다. 중괄호는 \mathop중괄호 외부로 범위를 확장하기 위해 합계의 edness 기능을 제거하기 때문입니다 .

실제로 이것은 "주변의 추가 그룹에 의해 간격이 깨질 수 있는 상황이 있습니까 \sum?"라는 OP의 질문에 대한 대답입니다. 5, OP 접근 방식의 간격이 정확하지 않습니다.

\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator*{\barr}{\textstyle\sum}
\begin{document}
\centering
\verb|\barr| in \verb|\displaystyle|:
\[
A\barr_{i=3}^{6}B
\]

\verb|\barr| in \verb|\textstyle|:

\medskip inline: \(A A\barr_{i=3}^{6}B B\)

\verb|\mathord| with thin spaces added
\[
A A\,\mathord{\textstyle\sum}_{i=3}^6\, B B
\]

OP's original approach \textit{if} pre- and post- content embraced
\[
A {A \textstyle \sum_{i=3}^6 B} B
\]

OP's original approach, with no embraced pre- and post- content, but thin spaces added

\[
A A {\,\textstyle \sum_{i=3}^6\,} B B
\]
\end{document}

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

답변2

이에 대해 추상적인 접근 방식을 원할 수도 있습니다. 우리는 이름 끝에 기호를 의미하는 것을 amsmath추가함으로써 균일한 방식으로 한계를 취하는 모든 연산자 이름을 변경한다는 사실을 활용할 수 있습니다 .@

\documentclass{article}
\usepackage{amsmath,etoolbox}
\makeatletter
\newtoggle{reducedop}
\newcommand{\reduceoperatorsize}[1]{%
  \csletcs{#1saved}{#1}%
  \csletcs{#1@saved}{#1@}%
  \@namedef{#1}{%
    \@ifstar
      {\togglefalse{reducedop}\@nameuse{#1saved}}%
      {\toggletrue{reducedop}\@nameuse{#1saved}}%
  }
  \@namedef{#1@}{%
    \iftoggle{reducedop}
      {\reduced@operator{#1}}
      {\@nameuse{#1@saved}}
  }%
}
\newcommand{\reduced@operator}[1]{%
  \mathop{\mathpalette\reduced@operator@i{#1}\relax}%
}
\newcommand\reduced@operator@i[2]{%
  \ifx#1\displaystyle\textstyle\else#1\fi
  \csname #2@saved\endcsname
}
\makeatother

\reduceoperatorsize{sum}

\begin{document}
$\sum*_{k=1}^n$\quad$\sum_{k=1}^n$\quad$\sum\limits_{k=1}^n$
\[
\sum*_{k=1}^n\quad\sum_{k=1}^{n} k^2=\frac{n(n+1)(2n+1)}{6}
\]
\end{document}

첫 번째 줄은 일반적인 행동이 존중된다는 것을 보여주기 위한 것입니다.

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

패키지 는 다음 과 같이 amsmath재정의됩니다 .\sum

\let\sum@\sum
\def\sum{\DOTSB\sum@\slimits@}

\coprod, \bigvee, \bigwedge, \biguplus, \bigcap, , , 및 에도 동일한 작업을 수행 \bigcup합니다 . 이렇게 하면 기호가 "점을 인식"하고 or 옵션을 존중하게 됩니다.\prod\bigotimes\bigoplus\bigodot\bigsqcupsumlimitsnosumlimits

\DeclareOption{sumlimits}{\let\slimits@\displaylimits}
\DeclareOption{nosumlimits}{\let\slimits@\nolimits}

이를 바탕으로 나는 다음 \sum과 같이 재정의한다.

\togglefalse{reducedop}\sumsaved

\sum*발견 되면

\toggletrue{reducedop}\sumsaved

그렇지 않으면. 여기 에 정의된 것과 \sumsaved동일합니다 . 그런 다음 토글이 false로 설정된 경우 do를 재정의합니다 . 여기서는 원본과 동일합니다 . 토글이 true로 설정되면 대신 실행됩니다. 내에서 스타일을 확인합니다. 이면 을 사용하고 , 그렇지 않으면 현재 스타일과 조판을 사용합니다 . 주변은 이전과 마찬가지로 이어집니다 .\sumamsmath\sum@\sum@saved\sum@saved\sum@\mathop{\mathpalette\reduced@operator@i{sum}}\mathpalette\displaystyle\textstyle\sum@saved\mathop\slimits@

답변3

오래된 글인줄 알지만 오늘 읽었습니다. 내가 사용하는 것은 이것이다:

\newcommand{\sumt}[2][]{
    \ifthenelse{\isempty{#1}}
    {\textstyle \sum_{#2}      \displaystyle}
    {\textstyle \sum_{#2}^{#1} \displaystyle}
}

가 필요하다는 점에 유의하세요 \usepackage{xifthen}.

예를 들어 나는 \sumt[n-1]{i=1} k_i에서 받은 것과 동일한 것을 얻기 위해 전화합니다 \sum_{i=1}^{n-1} k_i. 이는 이후의 모든 항목이 디스플레이 모드에 있도록 강제하므로 도움이 되지 않을 수도 있습니다. 일단 \int및 와 비슷한 작업을 수행합니다 \prod. 평소와 비교해서 거꾸로 쓰여 있으니 참고하세요.

이상적으로는 두 가지 인수를 선택적으로 사용하고 순서대로 \sum[lower][upper]. (빈칸이 어떤 효과를 주는지는 잘 모르겠습니다 ^{}.) 하지만 그러기 위해서는 나보다 텍스 능력이 더 뛰어난 사람을 불러야 할 것입니다!


예를 들어, 최소한의 코드

\begin{align*}
    a &+ \sumt[n-1]{i=1} i = 3\\
    a &+ \textstyle\sum_{i=1}^{n-1} i = 3
\end{align*}

다음 이미지를 생성합니다.

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

관련 정보