Umgebung mit zwei optionalen Argumenten

Umgebung mit zwei optionalen Argumenten

Ich möchte eine Umgebung erstellen, die ein Argument und ein optionales Argument so empfängt, dass das erste Argument ein Titel ist und die beiden optionalen Argumente entscheiden, ob der Titel linksbündig oder zentriert ausgerichtet werden soll und ob der Titel zum Inhaltsverzeichnis hinzugefügt werden soll.

Ich habe diesen Code mit einem optionalen Argument (danke an @egreg), daher möchte ich ihn für den Fall von zwei optionalen Argumenten modifizieren:

\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

Dank im Voraus.


Ich folgte dem Vorschlag vonTipidurch Hinzufügen des folgenden

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

Antwort1

Hier ist eine Option, die zwei optionale Argumente und einen obligatorischen Titel bereitstellt:

Bildbeschreibung hier eingeben

\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}

Der Schlüssel besteht darin, Hilfsmakros zu verwenden, um die Argumente zu erfassen und sie dann für die Verwendung an anderer Stelle zu speichern.

somethingDie UmweltErsteDas optionale Argument gibt die horizontale Ausrichtung an.zweitegibt an, ob der Eintrag im Inhaltsverzeichnis enthalten sein soll oder nicht, gefolgt vom obligatorischen Titel.

verwandte Informationen