Ich möchte gerne ein Argument in einer selbst definierten Umgebung optional ignorieren. In Fall A soll die Höhe der Box (#3) als Argument verwendet werden, in Fall B soll #3 ignoriert werden.

Dafür habe ich mir folgendes gebaut aber ich bekomme bei \Testtrue eine Fehlermeldung. Das MBB ist hier:

Öffne in Overleaf
\documentclass{article}
\usepackage[most]{tcolorbox}
\begin{document}

\newif\ifTest

% \Testtrue

\ifTest
% Fall A
\newenvironment{test}[3][\linewidth]
{%
\begin{tcolorbox}[width=#1,title=#2,height=#3]
    \color{red!75!black}
}%
{\end{tcolorbox}}
\else
% Fall B
\newenvironment{test}[2][\linewidth]
{%
\begin{tcolorbox}[width=#1,title=#2]
}%
{\end{tcolorbox}}
\fi

\begin{test}{5cm}{Titel}
    abc
\end{test}

\end{document}

gefragt 14 Jan, 05:54

thor's gravatar image

thor
202313
Akzeptiert: 80%

1

Du hast die Argumente in der falschen Reihenfolge angegeben: \begin{test}{Titel}{5cm}. Im Fall A wird das letzte Argument für height verwendet, muss also eine Länge sein. Dein Fall B erwartet dagegen nur zwei Argumente, das erste davon optional. So wie Dein Beispiel jetzt aussieht, wird der Inhalt der zweiten geschweiften Klammer im Fall B in der Box ausgegeben. Wenn das Argument einfach ignoriert werden soll, musst Du im Fall B die Umgebung mit der gleichen Argumentanzahl definieren. Sollen Fall A und B in einem Dokument vorkommen? Dann musst Du das sowieso anders machen.

(14 Jan, 06:35) esdd
1

Ich würde übrigens eine Umgebung mit einem optionalen Argument empfehlen, das dann einfach an tcolorbox übergeben wird. Siehe dazu das leaflet-Beispiel in Abschnitt 18.5 der Anleitung.

(14 Jan, 06:36) Ijon Tichy

Stimmt, ich habe bei der zweiten Umgebung ein Argument vergessen. Das war ein Flüchtigkeitsfehler. Ich möchte, dass in einem Dokument je nachdem, ob ifTest falsch oder wahr ist, die Box mit vorgegebener Höhe und nicht angezeigtem Text oder mit angezeigtem Text, in roter Farbe und ohne vergegebene Höhe angezeigt wird. Das möchte ich in einer Umgebung realisieren. Das Ganze ist für eine Klassenarbeit gedacht. Vielleicht ist es jetzt etwas klarer. @Ijon, das leaflet-Beispiel sehe ich mir gleich mal an.

(14 Jan, 11:11) thor

Ich habe eine Lösung gefunden und poste sie hier, das alte MBB lasse ich so stehen, damit der Zusammenhang nicht verloren geht.

Hier ist eine Lösung mit xparse und einem zusätzlich definierten \newcommand. So funktioniert es hier gut. Möglicherweise nicht sehr elegant aber es geht.

Öffne in Overleaf
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{xparse}
\begin{document}

\newif\ifTest

\newcommand{\answerboxheight}[1]{%
  % Fall A
  \ifTest
  0cm
  % Fall B
  \else
  #1
  \fi
}

\NewDocumentEnvironment{answerbox}{o O{\linewidth} m }
{%
  \tcbset{%
    colframe = gray,
    colback = lightgray!20,
    fonttitle= \bfseries,
    before skip = 6pt,
    after skip = 3pt,
    add to natural height=\answerboxheight{#1},
    width = #2,
    title=#3,
    }
  \begin{tcolorbox}
      \ifTest
      \color{red!75!black}
      \else
      \color{lightgray!20}
      \fi
    }%
    {%
  \end{tcolorbox}%
}

% \Testtrue

\begin{answerbox}[10cm]{Titel}
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
    tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
    vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
    no sea takimata sanctus est Lorem ipsum dolor sit amet.
\end{answerbox}

\end{document}
Permanenter link

beantwortet 14 Jan, 17:35

thor's gravatar image

thor
202313

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×12
×9
×1

Frage gestellt: 14 Jan, 05:54

Frage wurde angeschaut: 580 Mal

Zuletzt aktualisiert: 14 Jan, 17:35