
Мне нужно вставить картинку в файл книги Latex, но картинка должна быть в рамке, и подпись после картинки тоже. Эта рамка не та же самая, картинка и подпись должны быть между горизонтальной линией. Но картинка должна быть отцентрирована, а подпись должна быть выровнена по левому краю по ширине картинки. Кто-нибудь может мне помочь?
решение1
Одним из возможных решений (возможно, не самым простым...) является использование caption
пакета для добавления горизонтальной линии над подписью и использование mdframed
пакета для помещения рамки вокруг комбинации рисунка и подписи.
Горизонтальную линию можно вставить, \DeclareCaptionFormat
поместив ее перед тремя аргументами (номер рисунка, разделитель, текст подписи), за которыми следует новая строка.
Чтобы линия охватывала весь кадр, необходимо отрегулировать поля, что возможно с \mdfdefinestyle
помощью mdframed
.
Выравнивание подписи по левому краю возможно с помощью justification
опции в сочетании с singlelinecheck=false
from в \captionsetup
. Однако это приведет к выравниванию по окружению рисунка, а не по ширине изображения, как указано в \includegraphics
. Это немного сложнее, но возможным решением этой проблемы является введение новой длины (в MWE ниже \figwidth
), установка значения этой длины на предпочтительную ширину вашего изображения и использование длины как в , \includegraphics
так и с небольшим расчетом в формате подписи для определения отступа.
МВЭ:
\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}
Опция demo
предназначена graphicx
только для отображения черного ящика, для фактического применения она не нужна.
Результат:
Это решение адаптировано изГоризонтальная линия под подписью рисунка.
решение2
Вот решение, использующее \fbox
вместо mdframed
. Все поля были установлены на \fboxsep
. (Часть этого была украдена из решения Марийна.)
Я должен упомянуть, что \fboxsep
они \fboxrule
регулируемые.
\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}