PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : minipage und Caption



Gautcho
06-03-2011, 16:54
Hallo an alle,

mein Anliegen ist folgendes: Ich schreibe eine Arbeit in Latex, wobei ich ein Template/Style von der Universität benutze. Das Paket sieht vor, dass man das veraltete Paket "subfigure" nutzt um Bilder nebeneinander darzustellen. Dies klappt auch ganz gut. Allerdings möchte ich unbedingt Bilder mit getrennten Bezeichnungen, also Fig.1 für das linke Bild und Fig.2 für das rechte Bild. Dies funktioniert auch sonst immer mit "minipage". Mit dem verwendeten Paket wird die Beschriftung allerdings nicht verkleinert sondern ich erhalte für beide Bilder eine Beschriftung, die jeweils die Breite \textwidth hat. Dank diesem Forumbeitrag hier (http://mrunix.de/forums/showthread.php?t=54918) weiß ich nun, dass es an meinem Paket liegt, da mein Fall sehr ähnlich ist. In einen ersten Versuch habe ich caption geladen. Abgesehen, dass die Schriftgröße usw. anders waren hat es damit geklappt... zumindest bei den Bildern. Die Beschriftung der Tabellen war dafür totaler Mist. Ich habe auch etwas herumprobiert, um einen extra Befehl wie xtcaption (siehe angehängten code) aber mit \textwidth/2 zu kreieren. Leider war ich nicht erfolgreich was ich darauf zurückführe, dass meine Kenntnisse unzureichend sind. Deshalb bitte ich euch, mir bei einen Workaround zu helfen.

Abschnitte aus der vgtuthesis.cls, die ich relevant sein könnten


%%%----------------------------------------------------------------%%%
%-o-PACKAGES. o-%
%%%----------------------------------------------------------------%%%
%% <general>
%% babel [english,lithuanian] - supports several languages
%% inputenc [cpRIM] - supports LT keyboard
%% fontenc [\LTfontencoding] - enables LT font encoding
%% times - must be obsolete BUT IS NOT!
%% indentfirst - indents even first paragraph
%% ifthen - enables conditioning
\RequirePackage{calc} %- enables calculus
%% <color>
%% color - enables to use COLORS
%% colordvi - enables colors for YAP
%% colortbl - lets color tables
%% <page>
\RequirePackage{setspace} %- supports 1, 1.5, 2 spacing
\RequirePackage{fancyhdr} %- fancyheadings is obsolete
\RequirePackage{lastpage2} %- refers to pre-last page (DN)
%% crop - cropping marks
%% <text>
\RequirePackage{soul} %- lets to customize text spacing
\RequirePackage{ulem} %- selects emphasize type
\RequirePackage{xspace} %- gentle spacing between words
\xspaceremoveexception{-} %... space before "-", "--"
\RequirePackage{needspace} %- prevents line-breaks
%% <math>
%\RequirePackage[T1]{eulervm}
\RequirePackage{amsmath} %- AMSTEX is obsolete
\RequirePackage{amsthm} %- fancier then THEOREM
\RequirePackage{amssymb} %- additional math symbols
\RequirePackage{latexsym} %- additional symbols
%% <floats>
\RequirePackage[tight,hang,small,FIGBOTCAP]%
{subfigure} %- enables multiple figures
\setlength{\subfigtopskip}{0pt} %... (original) default = 5pt
\setlength{\subfigcapskip}{0pt} %... default = 0pt
\setlength{\subfigbottomskip}{0pt} %... (original) default = 5pt
\renewcommand{\thesubfigure}%
{\alph{subfigure}} %... label in TEXT
\renewcommand{\@thesubfigure}% % .. label in FIGURE
{{\bf(\thesubfigure)}\hskip\subfiglabelskip}
\RequirePackage{supertabular} %- lets work with long tables
\RequirePackage{multirow} %- vertical alignment in tables
\RequirePackage{multicol} %- used for indexes
%% <graphics>
\RequirePackage{graphicx} %- variuos enhancements
\RequirePackage{psfrag} %- labels in graphics
%% <references>
\RequirePackage[round,semicolon,authoryear,sort]%
{natbib} %- natbib handling style
\setcitestyle{authoryear,round,semicolon,aysep={}, yysep={,},%
notesep={:~}} %... some customization
\RequirePackage{url} %- deals with WEB addresses
\RequirePackage{gloss2} %- glossaries environment (DN)


%%%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %%%
%-o-CAPTIONS. o-%
%%%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %%%
\newlength{\captionwidth}
\setlength{\captionwidth}{\textwidth}
\addtolength{\captionwidth}{-2\parindent}
\setlength\abovecaptionskip{6\p@} % see \subfigbottomskip
\setlength\belowcaptionskip{-6\p@} % -"-
%
\ifthenelse{\boolean{ltway}}{%
%-LT-WAY
%-o-FIGURE caption (LT). o-%
\long\def\@makecaption#1#2{%
\refstepcounter{TFigures}%
\vskip\abovecaptionskip%
\vspace*{5pt}%
\rule{4ex}{0pt}% == \parindent
\parbox{\captionwidth}%
{\centering\small{\textbf{#1~\pav}\hspace*{0.5ex}# 2}}%
}
%
%-o-TABLE caption (LT). o-%
\long\def\@maketabcaption#1#2{%
\refstepcounter{TTables}%
\sbox\@tempboxa{\small{\textbf{#1~\lent.}\hspace*{ 0.5ex}#2}}
\ifdim \wd\@tempboxa > \captionwidth
{%
\rule{4ex}{0pt}% == \parindent
\parbox{\captionwidth}%
{\centering\small{\textbf{#1~\lent.}\hspace*{0.5ex }#2}}%
}%
\else
{%
\vspace*{5pt}%
\rule{4ex}{0pt}% == \parindent
\parbox{\captionwidth}%
{\centering\small{\textbf{#1~\lent.}\hspace*{0.5ex }#2}}%
}%
\fi
\vskip 4pt%
}
}{%-EN-WAY
%-o-FIGURE caption (EN). o-%
\long\def\@makecaption#1#2{%
\refstepcounter{TFigures}%
\vskip\abovecaptionskip%
\sbox\@tempboxa{\small{\textbf{Fig.#1.}\hspace*{0. 5ex}#2}}%
\ifdim \wd\@tempboxa > \captionwidth%
\vspace*{5pt}%
\rule{4ex}{0pt}% == \parindent
\parbox{\captionwidth}%
{\centering\small{\textbf{Fig.#1.}\hspace*{0.5ex}# 2}}%
\else%
\rule{4ex}{0pt}% == \parindent
\parbox{\captionwidth}%
{\centering\small{\textbf{Fig.#1.}\hspace*{0.5ex}# 2}}%
\fi%
\vskip\belowcaptionskip%
}
%
%-o-TABLE caption (EN). o-%
\long\def\@maketabcaption#1#2{%
\refstepcounter{TTables}%
\vskip\belowcaptionskip
\sbox\@tempboxa{\textbf{Table#1.}%
\hspace*{0.5ex}#2}
\ifdim \wd\@tempboxa > \captionwidth
\begin{center}
\parbox{\captionwidth}%
{\small{\textbf{Table#1.}\hspace*{0.5ex}#2}}
\end{center}
\else
\global \@minipagefalse
\hbox to \hsize{\hfil\box\@tempboxa\hfil}
\fi
\vskip\abovecaptionskip
}
}
%
\renewcommand{\table}{\let\@makecaption\@maketabca ption\@float{table}}

%%%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %%%
%-o-EXTRA FIGURE CAPTION. o-%
%%%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %%%
\newcommand{\xfcaption}[1]{%
\ifthenelse{\boolean{ltway}}{%
\parbox{\captionwidth}%
{\centering\small{\textbf{Fig.~\thefigure.}\hspace *{0.5ex}#1}}%
\vskip-\belowcaptionskip}{}%
}

%%%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %%%
%-o-EXTRA TABLE CAPTION. o-%
%%%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %%%
\newcommand{\xtcaption}[1]{%
\ifthenelse{\boolean{ltway}}{%
\parbox{\captionwidth}%
{\centering\small{\textbf{Table~\thetable.}\hspace *{0.5ex}#1}}%
\vskip\abovecaptionskip}{}%
}

%%%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %%%
%-o-SPECIAL TABLE ELEMENTS. o-%
%%%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %%%
\newlength\savedwidth
%
\ifthenelse{\boolean{cview}}%
{\newcolumntype{M}{!{\color{steelblue}\vrule width 1pt}}
\newcolumntype{W}{!{\color{steelblue}\vrule width 2pt}}}%
{\newcolumntype{M}{!{\vrule width 1pt}}
\newcolumntype{W}{!{\vrule width 2pt}}}
%
\newcommand\mhline{%
\noalign{\global \savedwidth \arrayrulewidth%
\global \arrayrulewidth 1pt}%
\hline
\noalign{\global \arrayrulewidth \savedwidth}}
\newcommand\whline{%
\noalign{\global \savedwidth \arrayrulewidth%
\global \arrayrulewidth 2pt}%
\hline
\noalign{\global \arrayrulewidth \savedwidth}}
%
\newcommand\mcline[1]{%
\noalign{\global \savedwidth \arrayrulewidth%
\global \arrayrulewidth 1pt}%
\cline{#1}
\noalign{\global \arrayrulewidth \savedwidth}}
\newcommand\wcline[1]{%
\noalign{\global \savedwidth \arrayrulewidth%
\global \arrayrulewidth 2pt}%
\cline{#1}
\noalign{\global \arrayrulewidth \savedwidth}}


In meinen Fall ist ltway=false

Ausschnitt aus meinen Dokument


\documentclass[cview,cmark,a4paper,11pt]{vgtuthesis}
\usepackage{distinct}
\DeclareGraphicsRule{.jpeg}{eps}{.eps.bb}{'jpeg2ps #1'}
\usepackage[squaren,thinspace]{SIunits}
\usepackage{caption}
\usepackage{MnSymbol}

%
\begin{figure}
\begin{minipage}[t]{0.49\linewidth}
\begin{centering}
\includegraphics[width=1.00 \textwidth]{Figure1.eps}
\caption{seeeeeeeeeeeeeeeeeeeehhhhhhhrrrr llaaaaaaaaaaaannnngggggeeee caption1.}
\label{fig:1}
\end{centering}
\end{minipage}
\hfill
\begin{minipage}[t]{0.49\linewidth}
\begin{centering}
\includegraphics[width=0.50\textwidth]{Figure2.eps}
\caption{seeeeeeeeeeeeeeeeeeeehhhhhhhrrrr llaaaaaaaaaaaannnngggggeeee caption2.}
\label{fig:2}
\end{centering}
\end{minipage}
\end{figure}%
%

sommerfee
06-03-2011, 17:27
Mit dem verwendeten Paket wird die Beschriftung allerdings nicht verkleinert sondern ich erhalte für beide Bilder eine Beschriftung, die jeweils die Breite \textwidth hat.

Das Paket definiert \captionwidth für die Breite der \caption und setzt es auf \textwidth-2\parindent.

Abhilfe wäre also, vor den \captions in der minipage


\setlength\captionwidth{\textwidth}

zu schreiben, dann werden sie genauso breit wie die minipage gesetzt.

P.S.: Das caption-Paket würde ich in deinem Falle nicht laden. Um es sinnvoll verwenden zu können, müsste man den ganzen caption-Kram aus vgtuthesis rauswerfen und dann mittels des caption-Paketes nachstricken, ähnlich, wie ich es in dem von dir verlinkten Thread getan habe.

Gautcho
07-03-2011, 11:25
Vielen Dank für die schnelle Hilfe.

Allerdings hat es das Problem noch nicht ganz gelöst. Der \rule-Befehl hat noch eine unsichtbares Rechteck hinzugefügt. Somit hatten die Beschriftungen zwar die richtige Länge, sie ragten aber trotzdem in den rechten Rand hinein. Ich habe es jetzt so gelöst, dass ich \rule weglasse, wenn die textbreite kleiner als sonst ist.

Hier vollständigkeitshalber der angepasste code:


}{%-EN-WAY
%-o-FIGURE caption (EN). o-%
\long\def\@makecaption#1#2{%
\refstepcounter{TFigures}%
\vskip\abovecaptionskip%
\sbox\@tempboxa{\small{\textbf{Fig.#1.}\hspace*{0. 5ex}#2}}%
\ifdim \wd\@tempboxa > \captionwidth%
\ifdim\textwidth=120mm%
\vspace*{5pt}%
\rule{4ex}{0pt}% == \parindent
\parbox{\captionwidth}%
{\centering\small{\textbf{Fig.#1.}\hspace*{0.5ex}# 2}}%
\else%
\vspace*{5pt}%
\parbox{\captionwidth}%
{\centering\small{\textbf{Fig.#1.}\hspace*{0.5ex}# 2}}%
\fi%
\else%
\ifdim\textwidth=120mm%
\rule{4ex}{0pt}% == \parindent
\parbox{\captionwidth}%
{\centering\small{\textbf{Fig.#1.}\hspace*{0.5ex}# 2}}%
\else%
\parbox{\captionwidth}%
{\centering\small{\textbf{Fig.#1.}\hspace*{0.5ex}# 2}}%
\fi%
\fi%
\vskip\belowcaptionskip%
}
%

sommerfee
08-03-2011, 08:13
Der \rule-Befehl hat noch eine unsichtbares Rechteck hinzugefügt. Somit hatten die Beschriftungen zwar die richtige Länge, sie ragten aber trotzdem in den rechten Rand hinein.

Stimmt, mea culpa, richtiger wäre gewesen, es genauso wie die Style-Datei zu machen, also:


\setlength{\captionwidth}{\textwidth}
\addtolength{\captionwidth}{-2\parindent}


Das ganze auf ein neues Makro gelegt, damit man in den Minipages nur \correctcaptionwidth verwenden muß:



\newcommand\correctcaptionwidth{%
\setlength{\captionwidth}{\textwidth}%
\addtolength{\captionwidth}{-2\parindent}}


Davon ab ist es etwas "unüblich", an dieser Stelle \parindent zu verwenden, aber letztendlich im Caption-Code 4ex hart codiert. Damit es wirklich immer passt, sollte man sich auf eines von beiden festlegen und dies dann an beiden Stellen verwenden.


Ich habe es jetzt so gelöst, dass ich \rule weglasse, wenn die textbreite kleiner als sonst ist.

Mir war nicht bewußt, daß du den Code verändern darfst; ich hatte es stattdessen so verstanden, daß du diese Vorlage genau wie sie ist verwenden musst. Wenn nicht, würde ich sowieso den ganzen caption-relevanten Kram in der Vorlage einfach wegwerfen und die Anpassungen mit dem caption-Paket machen, dann greifen die Anpassungen auch gleich bei longtable, wrapfigure, ..., brauchen keine Sonderlocke in den minipages, und funktionieren auch korrekt mit hyperref zusammen.

Gautcho
08-03-2011, 21:52
Mir war nicht bewußt, daß du den Code verändern darfst; ich hatte es stattdessen so verstanden, daß du diese Vorlage genau wie sie ist verwenden musst. Wenn nicht, würde ich sowieso den ganzen caption-relevanten Kram in der Vorlage einfach wegwerfen und die Anpassungen mit dem caption-Paket machen, dann greifen die Anpassungen auch gleich bei longtable, wrapfigure, ..., brauchen keine Sonderlocke in den minipages, und funktionieren auch korrekt mit hyperref zusammen.

Also am Ende kommt es ja nur auf das Ergebnis an. Und da ist die Vorgabe, dass das Dokument einem Word template entspricht :mad:. Was ich mit der Version auf meinen Computer mache merkt ja eh niemand, es sei denn er liest diesen Beitrag ;-)

Nun ja, jetzt funktioniert es erstmal. Vielleicht komme ich auf die caption-Lösung nochmal zurück, falls es doch noch ein Problem geben sollte. Aber wie ursprünglich beschrieben, durch laden des Pakets caption hat die Tablebeschriftung verückt gespielt. Wahrscheinlich wirst du mir jetzt antworten, dass sich das in wohlgefallen auflösen wird, falls man die Vorlage für die Table-beschriftung gleich mit wegwirft ?!

sommerfee
09-03-2011, 21:29
Was ich mit der Version auf meinen Computer mache merkt ja eh niemand, es sei denn er liest diesen Beitrag ;-)

Ich habe es nicht auf deinen Rechner abgesehen, sondern gehofft, du kannst deine Verbesserungen an die Nachwelt vererben, sprich an diejenigen, die nach dir diese Dokumentenklasse verwenden müssen. Ansonsten müssen die ja mit den gleichen Problemen wie du kämpfen.


Aber wie ursprünglich beschrieben, durch laden des Pakets caption hat die Tablebeschriftung verückt gespielt.

Der Code der Dokumentenklasse verbiegt Tabellenbeschriftungen auf ein separates Makro (\@maketabcaption). Das (und anderes) kollidiert mit dem caption-Paket, was auch logisch ist. Die Dokumentenklasse patcht alles mögliche bzgl. \caption, das caption-Pakete ebenfalls, wie soll das zusammenspielen?

Aber ich gebe dir recht, solange es nur für dein Dokument relevant ist, lohnt sich ein Umstellen erst bei weiteren Problemen in diesem Dunstkreis, alles andere wäre Aufwand ohne Nutzen.


Wahrscheinlich wirst du mir jetzt antworten, dass sich das in wohlgefallen auflösen wird, falls man die Vorlage für die Table-beschriftung gleich mit wegwirft ?!

Das Problem an der Vorlage ist, daß sie unübliche Zähler verwendet - TFigure statt figure und TTable statt table - und dann dafür keine passenden Umgebungen bereitstellt, sondern die Zähler in figure und table verwendet. Dieses Vorgehen ist ebenfalls unüblich, normalerweise stimmen Umgebungsname und Zählername immer überein.

Wenn man das mit dem caption-Paket nachbasteln will, wird es ggf. ein wenig ekelig. Am einfachsten ist es vermutlich, per \DeclareCaptionType die Umgebungen TFigure und TTable zu definieren, und anschließend figure und table auf diese umzubiegen. Die dazu passenden Definitionen fehlen aber in dem von dir geposteten Teil der Vorlage, daher ist mir nicht klar, was das soll, und daher auch nicht, ob das so überhaupt gehen würde.