
다음과 같은 두 가지 선택적 인수를 사용하여 환경을 만들고 싶습니다.
\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
하는 옵션을 정의합니다 . 옵션이 없으면 아무 것도 확장되지 않습니다.\Opts
s
\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}