선택적 인수를 사용하여 환경 만들기

선택적 인수를 사용하여 환경 만들기

다음과 같은 두 가지 선택적 인수를 사용하여 환경을 만들고 싶습니다.

\begin{myenvir}[]
    Title

    #1
\end{myenvir}

\begin{myenvir}[s]
    Titles

    #1
\end{myenvir}

\begin{myenvir}[a]
    Title (with something)

    #1
\end{myenvir}

\begin{myenvir}[sa]
    Titles (with something)

    #1
\end{myenvir}

어떻게 해야 합니까? 인터넷에서 그렇게 할 수 있는 항목을 찾지 못했습니다.

편집 : 나는 그런 것을 생각하고있었습니다 :

% Pseudo-Declaration
\begin{envir}[#1]
    if #1 == a:
        Title (admis) % or admise but it depends of the envir
    elif #1 == s:
        Titles
    else:
        Titles (admis) % or admise
    % And then the text
\end{envir}

답변1

당신이 사용하고 있기 때문에 당신이 원하는 것이 정확히 무엇인지 명확하지 않습니다.#1환경 내부에서 사용되는 것처럼 예제에서정의환경.

하지만 상황은 정확하게 이해합니다. 적어도 gernot에 대한 귀하의 반응에서는 환경의 용도에 따라 변경해야 할 사항이 다를 것입니다.

따라서 한 가지 접근 방식이 아래에 설명되어 있습니다. 환경 내에서는 환경에 설정된 옵션에 응답하는 두 가지 대안이 있는 특수 명령을 사용할 수 있습니다. xstring옵션을 구문 분석하기 위해 패키지를 사용합니다 .\NewDocumentEnvironment 커널에 새로 추가된xparse 패키지에 대한 문서필요한 경우),

\documentclass{article}
\usepackage{xstring}% for \IfSubStr command

% set booleans for the options
\newif\ifmysoption
\newif\ifmyaoption

% define commands that respond to the options
\newcommand{\IfAOption}[2]{\ifmyaoption{#1}\else{#2}\fi}
\newcommand{\IfSOption}[2]{\ifmysoption{#1}\else{#2}\fi}

% define environment that sets the values of the booleans
\NewDocumentEnvironment{myenvir}{o}{%
    \IfValueTF{#1}{% check if optional argument exists
        \IfSubStr{#1}{a}% check if it contains an a
            {\myaoptiontrue}% if so, set a option boolean true
            {\myaoptionfalse}% if not, set it false
        \IfSubStr{#1}{s}% check if it contains an s
            {\mysoptiontrue} % if so, set s option boolean true
            {\mysoptionfalse} % if not, set it false
    }{
        % no option given, so both are false
        \mysoptionfalse\myaoptionfalse
    }
}{%
}

\begin{document}

With no option:

\begin{myenvir}
Title\IfSOption{s}{}\IfAOption{ (Something)}{}
\end{myenvir}

\bigskip

With just ``a'':

\begin{myenvir}[a]
Title\IfSOption{s}{}\IfAOption{ (Something)}{}
\end{myenvir}

\bigskip

With just ``s'':

\begin{myenvir}[s]
Title\IfSOption{s}{}\IfAOption{ (Something)}{}
\end{myenvir}

\bigskip

With both:

\begin{myenvir}[sa]
Title\IfSOption{s}{}\IfAOption{ (Something)}{}
\end{myenvir}

\end{document}

옵션 출력

답변2

#1어쩌면 다음과 같은 내용이 있을 수도 있습니다( 환경의 샘플 사용에서 무엇을 의미하는지 잘 모르겠지만 ).

X옵션을 나타내는 모든 문자 (여기 a및 )에 대해 기본값(옵션이 선택되지 않은 경우 사용됨)을 제공하는 s명령 과 옵션이 선택될 때 의미하는 내용을 재정의하는 명령을 정의합니다. 예를 들어, 정의\OptX\setOptX\OptX

\newcommand\Opts{}% default value
\newcommand\setOpts{\renewcommand\Opts{s}}

로 확장 s하는 옵션을 정의합니다 . 옵션이 없으면 아무 것도 확장되지 않습니다.\Optss\Opts

옵션은 \processOptions옵션 문자 문자열을 인수로 사용하고 해당 \setOpt명령을 호출하여 처리됩니다.

\documentclass{article}
\newcommand\processOptions[1]{\processOptionsX#1\relax}
\newcommand\processOptionsX[1]{%
  \ifx\relax#1\relax
    \let\tmp\relax
  \else
    \csname setOpt#1\endcsname
    \let\tmp\processOptionsX
  \fi
  \tmp  
}
\newcommand\Opta{}% default value
\newcommand\setOpta{\renewcommand\Opta{ (with something)}}
\newcommand\Opts{}% default value
\newcommand\setOpts{\renewcommand\Opts{s}}
\newenvironment{myenvir}[1][]{%
  \processOptions{#1}%
  \begin{center}
}{%
  \end{center}
}
\begin{document}

\begin{myenvir}
    Title\Opts\Opta
\end{myenvir}
\begin{myenvir}[s]
    Title\Opts\Opta
\end{myenvir}
\begin{myenvir}[a]
    Title\Opts\Opta
\end{myenvir}
\begin{myenvir}[sa]
    Title\Opts\Opta
\end{myenvir}

\end{document}

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

관련 정보