내부 매개변수에 따라 출력이 달라지는 새 명령 정의

내부 매개변수에 따라 출력이 달라지는 새 명령 정의

누군가가 \LaTeX에서 하나의 필수 값과 다른 선택적 값(매개변수)을 입력으로 사용할 수 있는 새 명령을 정의하는 방법을 알려줄 수 있을 것입니다. 이 경우 선택적 인수의 값에 따라 출력 객체의 유형이 변경되어야 합니다.

\dependSet(<arg>, <opt par>)특히 제 경우에는 괄호를 그리는 명령을 지정해야 합니다 . 이 경우 선택적 인수의 유무에 따라 출력이 변경되어야 합니다(내부 수직선의 유무).

기능 산출
\dependSet{x, y} 여기에 이미지 설명을 입력하세요
\dependSet{x, y}{a} 열

따라서 유용성을 위해서는 매개변수가 명령 인수 뒤에 오고, 대괄호가 아닌 중괄호로 선택하는 것이 중요합니다.

추신:실제로 LaTex가 다소 불편한 표기법(ALGOL 60과 같은 냄새가 나는)을 사용하고 Python과 같은 스타일로 새 명령을 정의하는 것을 가능하게 하는 데 아무 것도 하지 않는다는 것은 유감스러운 일입니다.

답변1

어떤 이유로 인해 (x,y)입력 을 원하지 않는다고 가정해 보겠습니다 . (x,y\mid a)그리고 그렇게 하지 않는 데에는 타당한 이유가 있습니다. 예를 들어 표기법을 변경하고 싶거나 변경해야 할 수도 있습니다. 유선 입력은 작업을 매우 어렵게 만듭니다.

아이디어는 입력하는 것입니다

\dependSet{x,y}
\dependSet{x,y|a}

그러나 최종 출력에는 영향을 미치지 않습니다. 입력은 매우 자연스럽고 너무 많은 교정 장치로 인한 합병증을 방지합니다.

어떻게 해야 하나요? 우리는 \NewDocumentCommand그 기능을 사용할 수 있습니다 \SplitArgument.

\documentclass{article}
%\usepackage{xparse} % uncomment for older versions of LaTeX

\NewDocumentCommand{\dependSet}{>{\SplitArgument{1}{|}}m}{%
  \dependSetAux#1%
}
\NewDocumentCommand{\dependSetAux}{mm}{%
  \IfNoValueTF{#2}{% no | found
    (#1)%
  }{% found |
    (#1\mid #2)%
  }%
}

\begin{document}

$\dependSet{x}+\dependSet{x,y}+\dependSet{x,y|a}$

\end{document}

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

코멘트.

이 명령은 두 개의 중괄호 그룹으로 \dependSet인수를 전달합니다 . 초기 인수에 \dependSetAux없는 경우 두 번째 중괄호 그룹 은 표시된 대로 테스트할 수 있습니다.|{-NoValue-}

최종 형식을 변경하려면 다음 작업을 수행하세요 \dependSetAux.

아마도 더 효율적이지만 덜 간단한 코드는 다음과 같습니다.

\NewDocumentCommand{\dependSetAux}{mm}{%
  (#1\IfValueT{#2}{\mid #2})%
}

답변2

다음 코드는 완전한 예를 통해 제공되는 사양과 완벽하게 호환됩니다.

\documentclass[onecolumn]{article}

\newcommand\ds[1]{%
    (#1)%
}

\begin{document}
    This can be used as text:
    
    \ds{x, y}
    
    \ds{x, y|a}
    
    It can also be used inline in math-mode: $\ds{x, y}$, see also: $\ds{x, y|a}$.
\end{document}

보시다시피, 아이디어는 인수와 기능을 분리하는 것입니다. 이는 사용하고 싶지 않거나 사용하지 않을 수 있는 모든 종류의 조합을 생각하는 것보다 쉽습니다.

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

관련 정보