2つのオプション引数を持つ環境

2つのオプション引数を持つ環境

最初の引数がタイトルになり、2 つのオプションの引数によってタイトルを左揃えにするか中央揃えにするか、さらにタイトルを ToC に追加するかどうかが決定されるような、引数とオプションの引数を受け取る環境を作成したいと考えています。

このコードにはオプションの引数が 1 つあります (@egreg に感謝)。オプションの引数が 2 つの場合に変更したいと思います。

\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

以下は、2 つのオプション引数と必須のタイトルを提供するオプションです。

ここに画像の説明を入力してください

\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初めオプションの引数は水平方向の配置を指定します。2番エントリが ToC に含まれるかどうかを指定し、その後に必須のタイトルが続きます。

関連情報