我正在尝试创建一个图形,其中左侧有一个实际图形,而右侧有一些使用 minted 包的代码。目前我有以下 MWE:
\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage{minted} % for making code snippets
\usepackage{amsmath}
\usepackage{subcaption} % for subfigures
\usepackage{graphicx} % standard LaTeX graphics tool
\usepackage{mwe}
\begin{document}
\definecolor{bg}{rgb}{0.975,0.95,1.0}
\begin{figure}[b]
\begin{subfigure}[t!]{0.5\textwidth}
\centering
\includegraphics[width=\textwidth]{example-image-a}
\end{subfigure}
\begin{subfigure}[t!]{0.5\textwidth}
\centering
\begin{minted}[fontsize=\footnotesize, bgcolor =bg, frame=lines,framesep=2mm]{julia}
he = Systems.henon()
N, α = 100000, 2
tr = trajectory(he, N)
ε = estimate_boxsizes(tr)
ε = 10 .^ (-6:0.25:0)
H = genentropy.(α, ε, Ref(tr))
plot(-log10.(ε), log10.(H))
\end{minted}
\end{subfigure}%
\caption{Caption place holder}
\end{figure}
\end{document}
生成结果:
无论t, t!, b, b!
我尝试哪种组合,我似乎都无法使铸造环境和图形正确对齐,以便它们具有完全相同的顶部(或底部)。
解决方案是什么?
答案1
你想要的垂直对齐很棘手,因为 TeX 看到的事物和你看到的不一样。TeX 将每个环境subfigure
(实际上只是花哨的minipage
s)视为一个框,就像它看到字符 的框一样z
,但是更大。
您的图片minipage
就像一个(非常大的)字符:它的框有一个宽度(您将它设置为0.5\textwidth
),一个高度,即图像的高度,一个深度,即零,并且图片位于基线上。
带有minipage
代码的 非常类似于其他minipage
带有文本的 :它有许多行,一行接一行,每行都有自己的基线。
垂直对齐选项t
、c
和b
表示 将minipage
使用\vtop
、\vcenter
或\vbox
作为其内容。它们的作用如下:
A
\vbox
将整个框的基线设置为与框的最后一行(底部)的基线匹配。例如,以下行:Hello \vbox{\hsize=1.2cm\parindent=0pt how are\par you?} world
A
\vcenter
将框的中心与 TeX 所知的数学轴的中心对齐(它仅在数学模式下有效),粗略地说将框置于中心,因此:Hello $\vcenter{\hsize=1.2cm\parindent=0pt how are\par you?}$ world
A
\vtop
将整个框的基线设置为与框第一行(顶部)的基线相匹配,因此该行:Hello \vtop{\hsize=1.2cm\parindent=0pt how are\par you?} world
现在,回到您的情况:如果您使用b
( \vbox
),TeX 将对齐每个框的最后一行(底部)的基线。图片的最后一行位于图片的底部,代码的基线位于代码的末尾(由于添加了许多包装器minted
及其机制,这与最后一行代码不匹配,但请发挥您的想象力并假设它匹配 ;-)。因此,TeX 将使图片的基线与代码的基线对齐。足够公平。
但是 呢t
?TeX 会对齐每个框中的第一行。代码中的第一行是代码的第一行(再次强调,它不是,但请耐心听我说),图片中的第一行是……与之前相同。图片的框只有一行,因此t
或b
不会产生任何影响。但是,如果您t
也在代码中使用 ,您会看到第一行代码与图片底部对齐。这就是为什么t
在这里使用 only 会使其看起来更糟的原因。
现在你做什么?你欺骗 TeX 认为图片上方有一行。如果你添加\vspace{0pt}
TeX,它将进入垂直模式,创建一行,然后将图片放在下一行。现在图片中的框有两行,顶行在图片上方。现在t
可以工作了:
附言:我作弊了。
我删除了该bgcolor
选项,minted
因为它增加了一堆不必要的垂直间距,这会让图片看起来很糟糕 :-)
\documentclass{book}
\usepackage{textgreek}
\usepackage[LGR,T1]{fontenc}
\usepackage{minted}
\usepackage{subcaption}
\usepackage{graphicx}
\usepackage{xcolor}
\begin{document}
\begin{figure}[b]
\begin{subfigure}[t]{0.49\textwidth}
\vspace{0pt}
\includegraphics[width=\textwidth]{example-image-a}
\end{subfigure}\hfill
\begin{subfigure}[t]{0.49\textwidth}
\begin{minted}[fontsize=\footnotesize, frame=lines,framesep=2mm, autogobble]{julia}
he = Systems.henon()
N, α = 100000, 2
tr = trajectory(he, N)
ε = estimate_boxsizes(tr)
ε = 10 .^ (-6:0.25:0)
H = genentropy.(α, ε, Ref(tr))
plot(-log10.(ε), log10.(H))
\end{minted}
\end{subfigure}%
\caption{Caption place holder}
\end{figure}
\end{document}