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 '19, 11:54

thor's gravatar image

thor
2021916
Akzeptiert-Rate: 28%

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 '19, 12: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 '19, 12:36) gast3

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 '19, 17: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 '19, 23:35

thor's gravatar image

thor
2021916
Akzeptiert-Rate: 28%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×14
×9
×2

gestellte Frage: 14 Jan '19, 11:54

Frage wurde gesehen: 3,869 Mal

zuletzt geändert: 14 Jan '19, 23:35