
Ich muss ein Bild in eine Latex-Buchdatei einfügen, aber das Bild muss gerahmt sein und die Bildunterschrift auch. Dieser Rahmen ist nicht derselbe, Bild und Bildunterschrift müssen horizontale Linien dazwischen haben. Aber das Bild muss zentriert sein und die Bildunterschrift muss linksbündig in der Breite des Bildes ausgerichtet sein. Kann mir jemand helfen?
Antwort1
Eine mögliche (vielleicht nicht die einfachste…) Lösung besteht darin, mithilfe des caption
Pakets eine horizontale Linie über der Beschriftung einzufügen und mithilfe des mdframed
Pakets einen Rahmen um die Kombination aus Abbildung und Beschriftung zu setzen.
Die horizontale Linie kann eingefügt werden, \DeclareCaptionFormat
indem sie vor die drei Argumente (Abbildungsnummer, Trennzeichen, Beschriftungstext) gesetzt wird, gefolgt von einem Zeilenumbruch.
Um die Linie über den gesamten Rahmen auszudehnen, müssen die Ränder angepasst werden, was mit \mdfdefinestyle
von möglich ist mdframed
.
Die linksbündige Ausrichtung der Bildunterschrift ist mit der justification
Option in Kombination mit singlelinecheck=false
from in möglich \captionsetup
. Dies erfolgt jedoch in Bezug auf die Abbildungsumgebung und nicht auf die Breite des Bildes, wie in angegeben \includegraphics
. Dies ist etwas komplizierter, aber eine mögliche Lösung für dieses Problem besteht darin, eine neue Länge einzuführen (im MWE unten \figwidth
), den Wert dieser Länge auf die gewünschte Breite Ihres Bildes festzulegen und die Länge sowohl in \includegraphics
als auch mit einer kleinen Berechnung im Bildunterschriftenformat zu verwenden, um die Einrückung zu bestimmen.
MWE:
\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{caption}
\usepackage{mdframed}
\mdfdefinestyle{boxcaption}{innerleftmargin=0cm,innerrightmargin=0cm}
\newlength{\figwidth}
\DeclareCaptionFormat{myformat}{\hrulefill\newline\hspace*{\dimexpr(\textwidth-\figwidth)/2}#1#2#3}
\captionsetup[figure]{format=myformat,justification=justified,singlelinecheck=false}
\begin{document}
\begin{figure}[tb]
\begin{mdframed}[style=boxcaption]
\centering
\setlength{\figwidth}{0.7\textwidth}
\includegraphics[width=\figwidth]{./fig/test}
\caption{Left aligned}
\label{fig:test}
\end{mdframed}
\end{figure}
You can see an example of a black box in Figure \ref{fig:test}.
\end{document}
Die demo
Option dient graphicx
lediglich der Anzeige der Blackbox. Für die eigentliche Anwendung wird dies nicht benötigt.
Ergebnis:
Diese Lösung ist angepasst vonHorizontale Linie unter der Bildunterschrift.
Antwort2
Hier ist eine Lösung, die \fbox
anstelle von verwendet mdframed
. Alle Ränder wurden auf gesetzt \fboxsep
. (Ein Teil davon wurde aus Marijns Lösung geklaut.)
Ich sollte erwähnen, dass \fboxsep
sie \fboxrule
einstellbar sind.
\documentclass{article}
\usepackage{graphicx}
\usepackage{caption}
%\usepackage{mwe}
\usepackage{showframe}% check centering
\captionsetup[figure]{justification=justified,singlelinecheck=false}%
\newcommand{\pictureframe}[2]% #1=image, #2=caption
{\sbox0{#1}%
\centering
\fbox{\begin{minipage}{\wd0}
\baselineskip=0pt
\abovecaptionskip=\fboxsep
\belowcaptionskip=0pt
\usebox0\par
\vspace{\fboxsep}%
\hspace{-\fboxsep}% extend to frame
\rule{\dimexpr \textwidth+2\fboxsep}{\fboxrule}%
\hspace{-\fboxsep}
\caption{#2}
\end{minipage}}}
\begin{document}
\begin{figure}
\pictureframe{\includegraphics[height=2in]{example-image}}{Left aligned}
\end{figure}
\end{document}