Der folgende Code liefert eine Framecolorbox mit optionaler Colorbox, in der ein Titel steht.

Wie kann ich die Breite der Boxen optimal berechnen lassen, so dass die Boxen jeweils Zeilenbreite einnehmen? Die innere optionale Colorbox kann bei längerem Titel zu breit werden.

alt text

Open in Online-Editor
\documentclass[a5paper]{scrreprt}
\usepackage{xcolor}

%\newenvironment{UMGEBUNGSNAME}[ANZAHL][OPTIONAL]{BEGIN}{END}
\newsavebox{\ToDoBox}
\newenvironment{MyToDo}[1] %Name %Anzahl
[]  %OPTIONALEs Argument standardmäßig leer
{%BEGIN
\begin{lrbox}{\ToDoBox}%
\begin{minipage}{0.9\textwidth}
% Fallunterscheidung % -----------------------
\newcommand{\TITEL}{\colorbox{blue!50}{\textbf{#1} \hspace{0.5\textwidth}} \par}
    \ifx&#1&%
      % #1 is empty
    \else
       \TITEL % #1 is nonempty
    \fi 
% -----------------------
\itshape 
}%
{%END
\end{minipage}
\end{lrbox}%
\fcolorbox{black}{orange}{\usebox{\ToDoBox}}
}%

\begin{document}

\begin{MyToDo}
Some text here.
\end{MyToDo} \\

Some text here. \\

\begin{MyToDo}[So lautet der Titel]
Some text here.
\end{MyToDo}

\end{document}

gefragt 08 Dez '15, 12:51

cis's gravatar image

cis
5.4k860168
Akzeptiert: 68%

bearbeitet 08 Dez '15, 13:19

Ja so auf Zeilenbreite. Ne, die Umsetzung mit einem Paket wie mdframed oder tcolorbox ist mir bekannt. Ich wollte hier eine NurLateX-Methode untersuchen.

(08 Dez '15, 13:20) cis
1

@cis: tcolorbox ist ein LaTeX-Paket. Damit ist seine Verwendung ebenso eine Nur-LaTeX-Methode, wie die Verwendung von xcolor. Du willst also eher, das Rad neu erfinden bzw. dass das jemand für Dich macht.

(08 Dez '15, 13:58) saputello

\fcolorbox entspricht in seinem vertikalen und horizontalen Platzverbrauch \framebox. Beide haben einen Rand in Breite \fboxrule und einen Abstand zu diesem Rand von \fboxsep. Wenn man also die gesamte Zeilenlänge ausnutzen will, muss man genau diese Längen zweimal abziehen (einmal für den linken und einmal für den rechten Rand der Box). \colorbox unterscheidet sich von \fcolorbox nur darin, dass kein Rand existiert, also \fboxrule keine Rolle spielt. Den Abstand \fboxsep gibt es trotzdem.

Es sei außerdem darauf hingewiesen, dass \\ im Blocksatz nicht verwendet werden sollte. Wenn der Kasten nicht innerhalb eines Absatzes vorkommen soll, sollte man in der Definition der Umgebung vor der Ausgabe der Box einen Absatz beginnen und danach auch beenden. Damit die Box ganz links steht, wird dann natürlich ein \noindent benötigt. Damit ergibt sich beispielsweise:

Open in Online-Editor
\documentclass[a5paper]{scrreprt}
\usepackage{xcolor}
\usepackage{showframe}
%\newenvironment{UMGEBUNGSNAME}[ANZAHL][OPTIONAL]{BEGIN}{END}
\newsavebox{\ToDoBox}
\newenvironment{MyToDo}[1] %Name %Anzahl
[]  %OPTIONALEs Argument standardmäßig leer
{%BEGIN
\begin{lrbox}{\ToDoBox}%
\begin{minipage}{\dimexpr\linewidth-2\fboxrule-2\fboxsep}
% Fallunterscheidung % -----------------------
\newcommand{\TITEL}{%
  \colorbox{blue!50}{\makebox[\dimexpr\linewidth-2\fboxsep][l]{\textbf{#1}}}\par
}%
    \if \detokenize{#1}\relax\relax
      % #1 is realy empty, even not & or something like this
    \else
       \TITEL % #1 is nonempty
    \fi 
% -----------------------
\itshape 
}%
{%END
\end{minipage}
\end{lrbox}%
\par
% Wenn ein vertikaler Abstand vor der Box sein soll, hier beispielsweise
% \vspace{\baselineskip}
% einfügen.
\noindent\fcolorbox{black}{orange}{\usebox{\ToDoBox}}\par
% Wenn ein vertikaler Abstand nach der Box sein soll, hier beispielsweise
% \vspace{\baselineskip}
% einfügen.
}%
\usepackage{mwe}
\begin{document}

\begin{MyToDo}
Some text here.
\end{MyToDo}

\blindtext

\begin{MyToDo}[So lautet der Titel]
Some text here.
\end{MyToDo}

\end{document}

Das Paket showframe habe ich lediglich eingefügt, um den Satzspiegel kenntlich zu machen.

Permanenter link

beantwortet 08 Dez '15, 13:55

saputello's gravatar image

saputello
18.4k22352

bearbeitet 09 Dez '15, 05:28

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

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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:

×6
×3

Frage gestellt: 08 Dez '15, 12:51

Frage wurde angeschaut: 1,117 Mal

Zuletzt aktualisiert: 09 Dez '15, 05:28