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 Ö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 |
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 Ö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} beantwortet 14 Jan '19, 23:35 thor |
Du hast die Argumente in der falschen Reihenfolge angegeben:
\begin{test}{Titel}{5cm}
. Im Fall A wird das letzte Argument fürheight
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.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.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.