在子图设置中对齐铸造块和图形

在子图设置中对齐铸造块和图形

我正在尝试创建一个图形,其中左侧有一个实际图形,而右侧有一些使用 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(实际上只是花哨的minipages)视为一个框,就像它看到字符 的框一样z,但是更大。

您的图片minipage就像一个(非常大的)字符:它的框有一个宽度(您将它设置为0.5\textwidth),一个高度,即图像的高度,一个深度,即零,并且图片位于基线上。

带有minipage代码的 非常类似于其他minipage带有文本的 :它有许多行,一行接一行,每行都有自己的基线。

垂直对齐选项tcb表示 将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 会对齐每个框中的第一行。代码中的第一行是代码的第一行(再次强调,它不是,但请耐心听我说),图片中的第一行是……与之前相同。图片的框只有一行,因此tb不会产生任何影响。但是,如果您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}

相关内容