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, 18:51

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 08 Dez '15, 19: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, 19: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, 19: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, 19:55

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 09 Dez '15, 11: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:

×13
×9

gestellte Frage: 08 Dez '15, 18:51

Frage wurde gesehen: 9,030 Mal

zuletzt geändert: 09 Dez '15, 11:28