Zur Feinabstimmung von Abbildungen mit vielen Panels etc. oder auch Beamer-Slides wäre es manchmal praktisch, schnell die Umrisse von Minipages, Grafiken etc. zu sehen. Dies kann erreicht werden, indem man die entsprechenden Objekte manuell in \fbox{}
oder – in Beamer – \frame{}
Befehle einbindet. Das ist allerdings mühsam.
Ich denke, die einfachste Lösung wäre,Minipage, Includegraphics, Subfigure usw. in der Kopfzeile so neu definieren, dass sie in einem platziert werden \fbox{}
und somit im gesamten Dokument gerahmt sind. Diese Neudefinitionen könnten dann einfach auskommentiert werden, wenn Frames gewünscht werden. Natürlich sollten alle Optionen usw. weiterhin unterstützt werden. Wie kann dies erreicht werden?
Nachfolgend ein Beispiel mit zwei Abbildungen, zunächst die Originale, dann die manuellen Fboxen. Ziel ist, dass mit neu definierten Befehlen die erste Abbildung so aussieht wie die zweite.
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{graphicx}
\usepackage{subcaption}
% Remove padding from fbox
\setlength{\fboxsep}{0pt}
\newlength{\h}
\begin{document}
\setlength{\h}{0.5\linewidth}
\begin{figure}\centering
%
\begin{subfigure}[t]{0.02\linewidth}
\rotatebox{90}{\begin{minipage}{\h}\centering\textbf{first row}\end{minipage}}\\
\rotatebox{90}{\begin{minipage}{\h}\centering\textbf{first row}\end{minipage}}
\end{subfigure}
%
\begin{subfigure}[t]{0.45\linewidth}\centering
\includegraphics[width=2in]{example-image}\\
\includegraphics[width=2in]{example-image}
\caption*{\textbf{first column}}
\end{subfigure}
\hfill
%
\begin{subfigure}[t]{0.45\linewidth}\centering
\includegraphics[width=2in]{example-image}\\
\includegraphics[width=2in]{example-image}
\caption*{\textbf{second column}}
\end{subfigure}
%
\caption{\ldots}
\end{figure}
\begin{figure}\centering
%
\fbox{
\begin{subfigure}[t]{0.02\linewidth}
\rotatebox{90}{\fbox{\begin{minipage}{\h}\centering\textbf{first row}\end{minipage}}}\\
\rotatebox{90}{\fbox{\begin{minipage}{\h}\centering\textbf{second row}\end{minipage}}}
\end{subfigure}
}
%
\fbox{
\begin{subfigure}[t]{0.45\linewidth}\centering
\fbox{\includegraphics[height=\h]{example-image}}\\
\fbox{\includegraphics[height=\h]{example-image}}
\caption*{\textbf{first column}}
\end{subfigure}
}
\hfill
%
\fbox{
\begin{subfigure}[t]{0.45\linewidth}\centering
\fbox{\includegraphics[height=\h]{example-image}}\\
\fbox{\includegraphics[height=\h]{example-image}}
\caption*{\textbf{second column}}
\end{subfigure}
}
%
\caption{\ldots}
\end{figure}
\end{document}
Bearbeiten:
Die Lösung dafür \includegraphics
ist wie folgt (danke @Skillmon für den Hinweisdazu):
\let\includegraphicsbak\includegraphics
\renewcommand*{\includegraphics}[2][]{\fbox{\includegraphicsbak[#1]{#2}}}
Wie kann dasselbe für Befehlsblöcke (Miniseite, Unterfigur) erreicht werden?
Antwort1
Eine Lösung, die für funktionieren sollte minipage
. Das \begin{minipage}...\end{minipage}
ist (ungefähr) gleichwertig mit
\begingroup
\minipage
...
\endminipage
\endgroup
Sie müssen also sowohl \minipage
als \endminipage
auch mit \let
auf die gleiche Weise speichern wie für \includegraphics
. Um eine Umgebung zu erstellen, die minipage
in einem Rahmen festlegt, müssen Sie es in eine Box setzen. Dazu lrbox
setzt die Umgebung den Inhalt in eine Box und entfernt eine Gruppierungsebene. Im Folgenden verwende ich zuerst den Standard minipage
und definiere ihn dann neu (normalerweise sollten die Definitionen vor stehen \begin{document}
). Es sollte auch mit dem optionalen Argument funktionieren.
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\begin{minipage}[]{0.8\linewidth}
\lipsum[1]
\end{minipage}
\let\minipagebak\minipage
\let\endminipagebak\endminipage
\newsavebox\TestBox
\renewenvironment{minipage}[2][]
{\begin{lrbox}{\TestBox}\begin{minipagebak}[#1]{#2}}
{\end{minipagebak}\end{lrbox}\fbox{\usebox{\TestBox}}}
\begin{minipage}[t]{0.8\linewidth}
\lipsum[1]
\end{minipage}
\end{document}