PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigene Umgebung mit Caption?



Georgina
06-08-2006, 21:38
Hallo!

Sagt mal, ist es möglich eine Caption auch in anderen Umgebungen als in "figure" und "table" zu definieren? Insbesondere in selbstdefinierten Umgebungen?
Alle Hinweise, die ich finden konnte sagen NEIN - bitte sagt mir etwas anderes. Das wäre nämlich sehr vorteilhaft.

bischi
06-08-2006, 21:45
Mal das Paket caption und ev. den Befehl captionof genauer anschauen.

MfG Bischi

Georgina
06-08-2006, 22:57
Danke Bischi.
Ich habe jetzt eine Umgebung definiert, die auf "float" basiert - inklusive einer caption.

Soweit so gut - allerdings habe ich nun ein weiteres Problem. Ich arbeite mit einer Vorlage, welche die caption in den "margin"-Bereich neben dem Textbereich setzt. Sieht etwa so aus:
.___________________
|.......|......................|
|.......|..hier...............|
|.......|..steht.............|
|.......|..der...............|
|.......|..Text..............|
|.......|...________......|
| cap-|..|.............|.....|
| tion |..|...Bild.....|.....|
|.......|..|.............|.....|
|.......|..|________|.....|
|.......|......................|
|.......|......................|
|____|______________|

Damit das funktioniert, ist folgendes in einem Konfigurationsfile definiert:

% Put caption in the margin, next to the figure/table (place caption first in
% figure/table environment)
\newlength{\mp@capht}
\newcommand{\mp@makefigcap}[2]{%
\settoheight{\mp@capht}%
{\parbox[b]{.9\mp@margwd}{\raggedleft\sffamily\slshape\small# 1: #2}}%
\hspace{-\mp@margwd}%
\vspace{-\mp@capht}%
\parbox[t]{.9\mp@margwd}{\raggedleft\sffamily\slshape\small# 1: #2}
}

\renewcommand{\figure}{%
\let\@makecaption\mp@makefigcap\@float{figure}%
}
\renewcommand{\table}{%
\let\@makecaption\mp@makefigcap\@float{table}%
}

Das funktioniert aber nur für Tabellen und Abbildungen, nicht für die infobox-Umgebung. Wenn ich das richtig sehe, muss ich nun für die eigene Umgebung auch so ein renewcommand einbauen. Leider weiß ich nicht, wie ich es nennen soll.

Die Umgebung ist folgendermaßen definiert:

% Infobox-Umgebung
\floatstyle{plain}
\newfloat{infoboxfloat}{H}{loi}[chapter]
\floatname{infoboxfloat}{Box}
\newenvironment{infobox}{
\begin{infoboxfloat}
\small
\centering
\begin{tabular}{p{\textwidth}}
\rowcolor{lightblue}\vfill
\begin{minipage}{\textwidth}}{
\end{minipage}
\end{tabular}
\end{infoboxfloat}}

Ich habe schon alles möglich probiert:

\renewcommand{\infobox}{%
\let\@makecaption\mp@makefigcap\@float{infobox}%

\renewcommand{\infoboxfloat}{%
\let\@makecaption\mp@makefigcap\@float{infoboxfloa t}%

\renewcommand{\float}{%
\let\@makecaption\mp@makefigcap\@float{float}%

...und so weiter, aber es funktioniert immer nicht. Es kommt immer die Fehlermeldung: "\infobox undefined" bzw. "\[eingegebener Name] undefined"

:confused:

RedCloud
07-08-2006, 09:03
Danke Bischi.
Ich habe jetzt eine Umgebung definiert, die auf "float" basiert - inklusive einer caption.

ich würde das ganze einfacher gestalten, ganz ohne offizielle float-Umgebung:


\documentclass{article}
\usepackage{graphicx,ragged2e,blindtext}
\newcounter{infobox}
\setlength\marginparsep{20pt}
\newlength\msep
\setlength\msep{\marginparwidth}
\addtolength\msep{\marginparsep}

\renewcommand\includegraphics[2][]{\rule{3cm}{3cm}}% NUR FÜR DEMO HIER

\newcommand\BoxCaption[1]{%
\refstepcounter{infobox}\textbf{Box \arabic{infobox}}: \RaggedRight#1}
\newcommand\InfoBox[3]{% label, grafik, caption
\par\medskip\hspace*{-\msep}%
\minipage{\marginparwidth}%
\BoxCaption{#3}\label{#1}\endminipage%
\hspace{\marginparsep}%
\parbox{\linewidth}{\centering #2}\par\medskip}

\begin{document}
\blindtext
\InfoBox{info01}{\includegraphics[width=.2\textwidth]{tiger}}{Hier kommt jetzt die Unterschrifte,
die im Rand erscheinen wird.}
\blindtext
\InfoBox{info02}{\includegraphics[width=.2\textwidth]{tiger}}{Hier kommt jetzt die Unterschrifte,
die im Rand erscheinen wird.}
\blindtext

Wie man in Box~\ref{info01} unf Box~\ref{info02} sieht ...

\end{document}



rc

Georgina
07-08-2006, 10:41
Puh - du verlangst Sachen von mir. ;)

Also dein Minimalbeispiel funktioniert, aber ich kann deshalb nicht das ganze Konfigurationsfile daraufhin umbauen. Meine Fähigkeiten reichen gerade um ein wenig daran herumzudoktern.
Jedenfalls habe ich es nicht geschaft, deinen Vorschlag einzubauen.

Kann es sein, dass ich die Umgebung im Konfigurationsfile definieren muss? Habe ich schon mal kurz probiert, gab aber eine Fehlermeldung. Na vielleicht ist heute abend wieder Zeit zum tüfteln.

RedCloud
07-08-2006, 11:29
Puh - du verlangst Sachen von mir. ;)

Also dein Minimalbeispiel funktioniert, aber ich kann deshalb nicht das ganze Konfigurationsfile daraufhin umbauen. Meine Fähigkeiten reichen gerade um ein wenig daran herumzudoktern.
Jedenfalls habe ich es nicht geschaft, deinen Vorschlag einzubauen.

Kann es sein, dass ich die Umgebung im Konfigurationsfile definieren muss? Habe ich schon mal kurz probiert, gab aber eine Fehlermeldung. Na vielleicht ist heute abend wieder Zeit zum tüfteln.

? du musst doch nur



\usepackage{ragged2e}
\newcounter{infobox}
\setlength\marginparsep{20pt}
\newlength\msep
\setlength\msep{\marginparwidth}
\addtolength\msep{\marginparsep}

\newcommand\BoxCaption[1]{%
\refstepcounter{infobox}\textbf{Box \arabic{infobox}}: \RaggedRight#1}
\newcommand\InfoBox[3]{% label, grafik, caption
\par\medskip\hspace*{-\msep}%
\minipage{\marginparwidth}%
\BoxCaption{#3}\label{#1}\endminipage%
\hspace{\marginparsep}%
\parbox{\linewidth}{\centering #2}\par\medskip}

in deine Präambel setzen, dann kannst du danach im Text


\InfoBox{label}{irgendwas, z.B. eine Grafik}{captiontext}

alles mögliche einbinden.

rc

Georgina
07-08-2006, 14:32
:confused: Jetzt bin ich verwirrt - warum hat das heute morgen nicht funktioniert.
Na egal - jetzt geht es. Vielen Dank.

Eine klitzekleine Sache ist da allerdings noch. Ich habe die caption soweit an mein Layout angepasst aber ich bekomme sie nicht bündig zur Oberseite der Infobox.

So sieht es aus:
.............._______________________
.............|.................................... .|
.............|......das hier ist die...........|
...caption|......Infobox.....................|
.............|.................................... .|
.............|_______________________|

So soll es aussehen:
.............._______________________
...caption|.....................................|
.............|......das hier ist die...........|
.............|......Infobox.....................|
.............|.................................... .|
.............|_______________________|

Hast du da auch noch einen Vorschlag für mich?

RedCloud
07-08-2006, 16:47
Hast du da auch noch einen Vorschlag für mich?



\newcommand\InfoBox[3]{% label, grafik, caption
\par\medskip\hspace*{-\msep}%
\minipage[t]{\marginparwidth}\vspace{0pt}%
\BoxCaption{#3}\label{#1}\endminipage%
\hspace{\marginparsep}%
\parbox[t]{\linewidth}{\vspace{0pt}\centering #2}\par\medskip}


rc

Georgina
07-08-2006, 17:46
:) Perfekt! Herzlichen Dank.

...ich sehe, meine Probleme sind zu einfach für euch hier. Das nächste Mal denke ich mir etwas schwierigeres aus. :cool: