두 개의 선택적 인수가 있는 환경

두 개의 선택적 인수가 있는 환경

첫 번째 인수가 제목이 되고 두 개의 선택적 인수가 제목을 왼쪽으로 정렬할지 아니면 가운데로 정렬해야 할지 결정하는 방식으로 인수와 선택적 인수를 받는 환경을 만들고 싶습니다. ToC에 추가됩니다.

@egreg 덕분에 하나의 선택적 인수가 있는 이 코드가 있으므로 두 개의 선택적 인수가 있는 경우를 수정하고 싶습니다.

\makeatletter
\newenvironment{something}[2][c]
 {\begin{\csname #1@somethingtitle\endcsname}
  \bfseries #2
  \end{\csname #1@somethingtitle\endcsname}}
 {\par\addvspace{\topsep}}
\newcommand\l@somethingtitle{flushleft}
\newcommand\c@somethingtitle{center}
\makeatother

미리 감사드립니다.


나는 님의 제안을 따랐다.티피엠다음을 추가하여

\if\detokenize{C}\detokenize{#1}\relax
 \addcontentsline{toc}{chapter}{#2}
\fi
\if\detokenize{L}\detokenize{#1}\relax
 \addcontentsline{toc}{chapter}{#2}
\fi

답변1

다음은 두 개의 선택적 인수와 필수 제목을 제공하는 옵션입니다.

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

\documentclass{article}

\makeatletter

\newcommand{\something@aux@A}[1][c]{%
  \def\something@halign{#1}%
  \something@aux@B%
}
\newcommand{\something@aux@B}[2][y]{%
  \expandafter\begin\expandafter{\csname\something@halign @somethingtitle\endcsname}
    \csname phantomsection\endcsname% If you're using hyperref
    \bfseries #2
  \expandafter\end\expandafter{\csname\something@halign @somethingtitle\endcsname}
  \def\something@toc{#1}
  \ifx\something@toc\something@toc@y
    \addcontentsline{toc}{section}{#2}%
  \fi
  \par\addvspace{\topsep}
}
\newenvironment{something}
 {\something@aux@A}
 {}
\newcommand{\l@somethingtitle}{flushleft}
\newcommand{\c@somethingtitle}{center}
\newcommand{\r@somethingtitle}{flushright}
\def\something@toc@y{y}

\makeatother

\begin{document}

\tableofcontents

\begin{something}{titleA}
Here is something without any optional argument.
\end{something}

\begin{something}[l]{titleB}
Here is something with a single optional argument.
\end{something}

\begin{something}[r][n]{titleC}
Here is something with two optional arguments.
\end{something}

\end{document}

핵심은 보조 매크로를 사용하여 인수를 캡처한 다음 다른 곳에서 사용할 수 있도록 저장하는 것입니다.

환경 something첫 번째선택적 인수는 가로 정렬을 지정합니다. 그만큼두번째항목이 ToC에 있어야 하는지 여부를 지정하고 그 뒤에 필수 제목이 옵니다.

관련 정보