PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wert von (set)capindent speichern



ClaudiL
17-09-2013, 15:18
Hi,

vermutlich ist die Lösung simpel, aber ich scheine einfach nicht auf den richtigen Weg zu kommen. Ich möchte ab einer bestimmten Stelle im Dokument
\setcapindent{0pt} setzen – kein Problem. Ab einer späteren Stelle möchte ich den vorherigen Wert wiederherstellen. Ich nehme an, dass es im Prinzip möglich ist, den vorherigen Wert zu speichern
\let\oldcapindent\[?] aber wie kann ich auf diesen zugreifen?
Ich verwende die Klasse scrbook, falls das in diesem Fall relevant sein sollte.

Vielen Dank für alle Tipps. Gruß
Claudi

klops
17-09-2013, 16:40
Das einfachste ist, \setcapindent innerhalb der entsprechenden figure- oder table-Umgebung aufzurufen. Die Wirkung bleibt dann auf die jeweilige Umgebung beschränkt.

ClaudiL
18-09-2013, 08:08
Hallo,

danke für diesen Rat. Leider kann ich es so direkt nicht machen, es scheint mich aber in die Nähe einer anderen Lösung zu bringen. Dafür muss ich aber etwas mehr ins Detail gehen.
Ich kann den Befehl nicht innerhalb der figure-Umgebungen setzten, da diese automatisch von knitr (http://yihui.name/knitr/) in mein Dokument eingefügt werden. Allerdings kann ich um die figures herum Minipages setzen, was ich an einigen Stellen tun möchte. \setcapindent soll nur innerhalb von (allen) Minipages wirken. Dein Rat hat mich nun darauf gebracht, dass ich \setcapindent{0pt} innerhalb der Minipages setzen kann und sich die Wirkung dann auch nur auf diese beschränkt.
Seinen Zweck erfüllt erstmal

\newenvironment{myminipage}[2][t]{\begin{minipage}[#1]{#2}\setcapindent{0pt}}{\end{minipage}}
, lieber wäre mir allerdings, minipage umzudefinieren. Leider bekomme ich beim besten Willen keine Lösung mit renewenvironmt hin, beispielsweise fliegt mir folgendes um die Ohren:

\let\oldminipage\minipage
\renewenvironment{minipage}[2][t]{\begin{oldminipage}[#1]{#2}\setcapindent{0pt}}{\end{oldminipage}}

Kannst du mir hier vielleicht nochmal auf die Sprünge helfen?
Hier noch ein M(not)WE

\documentclass{scrbook}

\usepackage{blindtext}
\usepackage{float} % ohne "H" kann figure nicht in der minipage stehen

\newenvironment{myminipage}[2][t]{\begin{minipage}[#1]{#2}\setcapindent{0pt}}{\end{minipage}}

% Funktioniert nicht:
%\let\oldminipage\minipage
%\renewenvironment{minipage}[2][t]{\begin{oldminipage}[#1]{#2}\setcapindent{0pt}}{\end{oldminipage}}

\begin{document}
\blindtext
\begin{minipage}[t]{0.8\textwidth}
\begin{figure}[H]
\caption{\blindtext}
\end{figure}
\end{minipage}

\begin{figure}
\caption{\blindtext}
\end{figure}

\end{document}

Danke und Gruß
Claudi

sommerfee
18-09-2013, 08:13
\documentclass{scrbook}

\usepackage{blindtext}
\usepackage{float} % ohne "H" kann figure nicht in der minipage stehen

\let\oldminipage\minipage
\let\oldendminipage\endminipage
\renewenvironment{minipage}{\setcapindent{0pt}\old minipage}{\oldendminipage}

\begin{document}
\blindtext
\begin{minipage}[t]{0.8\textwidth}
\begin{figure}[H]
\caption{\blindtext}
\end{figure}
\end{minipage}

\begin{figure}
\caption{\blindtext}
\end{figure}

\end{document}


oder alternativ



\documentclass{scrbook}

\usepackage{blindtext}
\usepackage{float} % ohne "H" kann figure nicht in der minipage stehen

\usepackage{etoolbox}
\AtBeginEnvironment{minipage}{\setcapindent{0pt}}

\begin{document}
\blindtext
\begin{minipage}[t]{0.8\textwidth}
\begin{figure}[H]
\caption{\blindtext}
\end{figure}
\end{minipage}

\begin{figure}
\caption{\blindtext}
\end{figure}

\end{document}


Allerdings finde ich die Lösung mit der figure in der minipage etwas unhübsch. Wie wäre es mit


\documentclass{scrbook}

\usepackage{blindtext}

\usepackage{etoolbox}
\AtBeginEnvironment{minipage}{\setcapindent{0pt}}

\begin{document}
\blindtext
\begin{minipage}[t]{0.8\textwidth}
\captionof{figure}{\blindtext}
\end{minipage}

\begin{figure}
\caption{\blindtext}
\end{figure}

\end{document}

ClaudiL
18-09-2013, 09:01
Hallo sommerfee,

danke, das hilft mir wirklich sehr!




\let\oldminipage\minipage
\let\oldendminipage\endminipage
\renewenvironment{minipage}{\setcapindent{0pt}\old minipage}{\oldendminipage}


Ah – mit dem Speichern von Anfangs- und End-Befehl hatte ich herumprobiert, aber dass ich dann in \renewenvironment nur \oldminipage und nicht \begin{\oldminipage} (o.ä.) brauche war mir nicht klar …
Allerdings gefällt mir deine Alternative noch wesentlich besser, weil sie schlanker ist.


oder alternativ



[…]
\AtBeginEnvironment{minipage}{\setcapindent{0pt}}



Allerdings finde ich die Lösung mit der figure in der minipage etwas unhübsch.

Ja, ich auch. Allerdings ist mein Code durch die teilweise dynamische Generierung ohnehin schon etwas unübersichtlich, weshalb mir dieser unhübsche aber halbwegs klare Weg im Endeffekt besser gefällt. Ansonsten müsste ich im Code, der die Grafiken und figure-Umgebungen generiert, zwischen Situationen innerhalb von Minipages und solchen außerhalb unterscheiden.

Gruß
Claudi