我需要在 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
。(其中一些是从 Marijn 的解决方案中窃取的。)
我应该提到,\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}