huebi hat geschrieben: ↑Mi 26. Jan 2022, 07:02
Leider funktioniert die einfach aussehemde Lösung mit lettrine nicht, und mit vspace mag ich nicht arbeiten, da ich ja dann für jede Box mit wenig Text diese individuell nachjustieren müsste.
Eigentlich nicht. Denn bei Boxen mit weniger Text funktioniert ja die triviale Lösung mit
\parbox oder
minipage neben der Grafik, wie sie in den wichtigen Hinweisen (allererster Link in der Diskussion) gezeigt wird. Man braucht dann nur noch den Rahmen, für den ja bereits
tcolorbox empfohlen wurde (aber auch
eine schier unendliche Menge weiterer Pakete verfügbar ist). Außerdem kann man das, wie oben erwähnt, sogar automatisch bestimmen, weil man bei LaTeX die Höhe des Ergebnisses von etwas eben ausmessen kann. (Ich werde unten zeigen, dass man das aber gar nicht muss.) Das fällt aber nicht vom Himmel, sondern man muss LaTeX eben lernen – und je komplexere Probleme man hat, desto intensiver lernen – bevor man solche Dinge angeht. Halbwissen (wie meines) kann dabei zwar nützlich sein. Es genügt auch nie zu sagen: »Ich mache jetzt seit 25 Jahren LaTeX, ich muss keine Anleitungen mehr lesen.«. (Nein, ich unterstelle Dir das nicht, ich selbst könnte mich auf dieses hohe Ross stellen und damit kläglich scheitern). In konkreten Fällen muss man einfach die Bereitschaft haben, ggf. einmal 1–2 Stunden oder ggf. auch mehr Anleitungen intensiver zu studieren. Man macht das ja nie umsonst, sondern lernt dabei eigentlich immer etwas dazu.
Du hast wohl schlicht unterschätzt, dass wenn man bei LaTeX gleich zu Anfang alles wissen/können will, das nichts wird. Der Einstieg in LaTeX ist nicht ganz so schwer, wie oft dargestellt – vorausgesetzt man will nicht gleich alles anders haben. Bei LaTeX gibt es für komplexere Probleme auch oftmals unzählige unterschiedliche Ansätze (wie man an meinem zweiten Link im vorherigen Absatz sieht

). Da lohnt es sich ggf. durchaus nachzufragen und auf Ratschläge – wie den zu
tcolorbox oben – zu hören. Wobei
tcolorbox hier ja lediglich den Teil des Rahmens liefert. Dafür reicht im ersten Ansatz schon die
Quick Reference in der Anleitung (zuzüglich eventuell einiger gezielter Suchen, wie ich gleich zeigen werde).
Bilder mit Text umfließen ist übrigens eines der Probleme, das man mit LaTeX eher mäßig gut lösen kann. Für einfache Fälle funktioniert das (beispielsweise mit dem erwähnten
wrapfig, das übrigens eine sehr kurze Anleitung hat) recht gut. Du hast hier aber bereits einen recht speziellen Fall, auch wenn das auf den ersten Blick nicht so scheinen mag. Das ist übrigens auch nichts, was man wirklich häufig tut oder tun sollte. Wechselnde Zeilenlängen stören nämlich den Lesefluss. Wenn ich das richtig verstanden habe, hast du hier einen speziellen Fall, weil du so eine Art Alertbox realisieren willst. Das ist legitim und durchaus auch realisierbar. Und man muss das auch nicht gleich zu Anfang perfekt haben. Für den ersten Schritt würde ja etwas wie:
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{tcolorbox}
\usepackage{mwe}% Für kleine Beispiele nützlich.
\newcommand{\Alert}[2]{% #1 = filename of image, #2 = text
\begin{tcolorbox}
\raisebox{\dimexpr\ht\strutbox-\totalheight}{% siehe die wichtigen Hinweise zu diesem Foremabschnitt
\includegraphics[width=2cm]{#1}%
}\hskip 1em
\parbox[t]{\dimexpr\linewidth-2cm-1em}{%
\setlength{\parindent}{1em}\noindent\ignorespaces
#2%
}%
\end{tcolorbox}
}
\begin{document}
\blindtext
\Alert{example-image}{Das ist ein ganz kurzer Beispieltext}
\blindtext
\Alert{example-image-a}{\blindtext}
\blindtext
\Alert{example-image}{Es geht auch, wenn man zwei Absätze hat, wie in diesem
Beispiel hier.\par\blindtext}
\blindtext
\end{document}
genügen.
Das Umfließen kann man dann irgendwann später realisieren, wenn man unter weniger Lerndruck steht. Dem kann man sich auch relativ einfach annähern, indem man unter Zuhilfenahme des bereits ganz weit oben erwähnten Pakets
wrapfig erst einmal etwas wie:
\newcommand{\Alert}[2]{% #1 = filename of image, #2 = text
\begin{tcolorbox}
\setlength{\intextsep}{0pt}
\begin{wrapfigure}{l}{0pt}
\includegraphics[height=4\baselineskip]{#1}%
\end{wrapfigure}
#2%
\end{tcolorbox}
}
ausprobiert. Dabei stellt man fest, dass die erste Box aus meinem vorherigen Beispiel nicht hoch genug wird, weil offenbar die Höhe des Bildes für die Höhe der Box nicht relevant ist. Das ist aber kein Beinbruch. Man schaut jetzt einfach einmal in der
tcolorbox-Anleitung nach, was dort zum Thema
height gesagt wird. Bereits im Inhaltsverzeichnis wird man fündig, dass sich der komplette Abschnitt »4.10 Height Control« damit beschäftigt. Ich musste das übrigens auch gerade erst nachlese, weil ich zwar wusste, dass man die Höhe ändern kann, aber nicht, wie man eine Mindesthöhe angibt. Man macht das, indem man eine Mindest-Höhe und eine Maximalhöhe angibt, wahlweise über die beiden Optionen
height und
height plus oder direkt über
height from, wobei letztere Option offenbar ein Problem mit Angaben wie
height from=6\baselineskip to \textheight hat, während
height from=2cm to \textheight funktioniert. Also habe ich mich zur Methode mit zwei Optionen entschlossen und:
\newcommand{\Alert}[2]{% #1 = filename of image, #2 = text
\begin{tcolorbox}[height=6\baselineskip,height plus=\textheight]
\setlength{\intextsep}{0pt}
\begin{wrapfigure}{l}{0pt}
\includegraphics[height=4\baselineskip]{#1}%
\end{wrapfigure}
#2%
\end{tcolorbox}
}
verwendet. Es ergibt sich somit:
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{tcolorbox}
\usepackage{wrapfig}
\usepackage{mwe}% Für kleine Beispiele nützlich.
\newcommand{\Alert}[2]{% #1 = filename of image, #2 = text
\begin{tcolorbox}[height=6\baselineskip,height plus=\textheight]
\setlength{\intextsep}{0pt}
\begin{wrapfigure}{l}{0pt}
\includegraphics[height=4\baselineskip]{#1}%
\end{wrapfigure}
#2%
\end{tcolorbox}
}
\begin{document}
\blindtext
\Alert{example-image}{Das ist ein ganz kurzer Beispieltext}
\blindtext
\Alert{example-image-a}{\blindtext}
\blindtext
\Alert{example-image}{Es geht auch, wenn man zwei Absätze hat, wie in diesem
Beispiel hier.\par\blindtext}
\blindtext
\end{document}
Wie man sieht, ist das weit weniger kompliziert als man denkt. Für den Einstieg braucht man von grundlegendem Basiswissen wie
\baselineskip (das man ggf. natürlich auch durch feste Werte ersetzen könnte) kaum mehr als zwei Seiten
tcolorbox-Anleitung (nämlich die Quick Reference) und eine Seite wichtige Hinweise aus dem Forum. Für die gute Lösung braucht man noch zwei Seiten
wrapfig Anleitung, 5 Minuten Suchen in der
tcolorbox-Anleitung und dort dann noch einmal keine zwei Seiten eines Abschnitts von 9 Seiten.
Wie man in dem Beispiel auch sieht, ist es von Vorteil, von Anfang an mit sauberem Markup zu arbeiten. Ich musste nämlich für die ganzen Experimente immer nur die Definition von
\Alert ändern, während ich den Körper des Beispieldokuments unangetastet lassen konnte.
Es sei nicht verschwiegen, dass man für Bild und Text nebeneinander auch Abschnitt »6 Side by Side« der
tcolorbox-Anleitung hätte lesen und damit eine ganz andere Lösung als in meinem ersten Beispiel hätte erreichen können. Ich wollte aber zeigen, dass man eben auch mit
konventioneller einsteigen kann.
Es sei auch erwähnt, dass mit Abschnitt »4.11 Box Content Additions« das Einfügen der
wrapfigure auch hätte per Option erfolgen können. Und natürlich hätte man statt eines
\Alert-Befehl auch eine Umgebung definieren können. In dem Fall sei ausdrücklich auch Abschnitt »24.2 Producing tcolorbox Environments and Commands« hingewiesen.
Am Rande bemerkt: Das Schreiben dieses Beitrags hat übrigens weit länger gedauert als das Finden eine Lösung. Bei einem Anfänger wäre das natürlich eher umgekehrt gewesen. Das Leben ist unfair. Eigentlich wollte ich aber nur zeigen, dass man nicht immer gleich die Flinte ins Korn werfen muss. Die entscheidenden Hinweise, nämlich die die wichtigen Hinweise und welche Pakete man sich anschauen solle und dass man die Höhe des Kastens bei
tcolorbox per Option verändern kann, gab es auch ganz früh in dieser Diskussion. Ich habe diese Informationen ganz bewusst für meinen gezeigten Lösungsweg auch genutzt. Den Weg über die Bestimmung der Höhe via
lrbox (das ist übrigens kein Paket, sondern eine Umgebung, die im
usrguide erklärt wird, also zum Basiswissen gehören sollte) habe ich mir erspart, weil er schlicht nicht benötigt wird. Genau genommen wird
lrbox ohnehin nicht zwingend benötigt, weil man auch einfach
\settoheight und
\settodepth nutzen kann, um Höhe und Tiefe von etwas zu ermitteln. Auch das sind Anweisungen aus dem LaTeX-Kern, gehören also eigentlich zum Basiswissen.