Latex:水平绘制时mbox()上方的文本?

时间:2020-02-11 22:16:25

标签: image latex

fun fibo(x: Int): BigInteger {
    tailrec fun fibo(
        acc: List<BigInteger>, x: Int
    ): Pair<List<BigInteger>, BigInteger> =
        when {
            x < acc.size -> Pair(acc, acc[x])
            x == acc.size -> {
                val y = acc[x - 1] + acc[x - 2]
                Pair(acc + y, y)
            }
            else ->
                fibo(fibo(fibo(acc, x - 2).first, x - 1).first, x)
        }

    return fibo(listOf(BigInteger.ONE, BigInteger.ONE), x).second
}

我使用上面的方法横向并排显示3张图像。

一切正常,一切都很好。但我想在每个子图像上方(或下方)添加一个小文本。不是标准标题,而是诸如“ A”,“ B”,“ C”之类的单词。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

使用mbox进行子图配置不正确。有用于子图环境的特殊软件包。对于您的特殊情况,我建议使用subcaption

\documentclass[a4paper]{article}
\usepackage{graphicx, subcaption}

\begin{document}

\begin{figure}
    % The next line is necessary to omit automatic labeling a), b) c)
    \captionsetup[subfigure]{labelformat=empty}    
    \begin{subfigure}{.3\textwidth}
        \centering
        \includegraphics[height=3cm]{monalisa.jpg}
        \caption{A}
    \end{subfigure}%
    \begin{subfigure}{.3\textwidth}
        \centering
        \includegraphics[height=3cm]{monalisa.jpg}
        \caption{B}
    \end{subfigure}%
    \begin{subfigure}{.3\textwidth}
        \centering
        \includegraphics[height=3cm]{monalisa.jpg}
        \caption{C}
    \end{subfigure}%
    \caption{You can still use a global caption for the figure}
\end{figure}

\end{document}

准确地给出了您所描述的内容:水平的三个图像,带有标题ABC。行\captionsetup[subfigure]{labelformat=empty}故意省略了每个图像的自动标签,分别为a)b)c)

enter image description here

但是,您的问题听起来像您可能想使用ABC作为标签来在标题中引用它。在这种情况下,请删除\captionsetup...行,图将像这样

enter image description here

答案 1 :(得分:0)

除了使用已经提出的子图外,还有很多方法可以做到这一点:

1 /使用迷你页

\documentclass{article}
\usepackage{graphicx}
\usepackage{multicol}
\begin{document}

\begin{figure}
\centering
\begin{minipage}{0.2\linewidth}
\centering A\\  \includegraphics[width=\textwidth]{example-image-a}
\end{minipage}%
\hspace{1px}%
\begin{minipage}{0.2\linewidth}
  \centering B\\  \includegraphics[width=\textwidth]{example-image-a}
\end{minipage}%
\hspace{1px}%
\begin{minipage}{0.2\linewidth}
  \centering C\\  \includegraphics[width=\textwidth]{example-image-a}
\end{minipage}%
\caption{Blah}
\label{materialflowChart}
\end{figure}

enter image description here 注意,我删除了无用的\ mbox {},因为\ includegraphics已经返回了一个TeX框。

类似地,如果您想精细地控制图像间距并真正获得1px的图像间空间,则必须在行尾添加'%'以吞噬该空间并避免使用TeX进行格式化。在您的原始代码中也是如此。

2 /使用表格格式


\begin{figure}
  \centering
  \begin{tabular}{*{3}{@{\hspace{1px}}c}}
    A&B&C\\
    \includegraphics[width=0.2\linewidth]{example-image-a}&
    \includegraphics[width=0.2\linewidth]{example-image-a}&
    \includegraphics[width=0.2\linewidth]{example-image-a}
  \end{tabular}
  \caption{Blah}
  \label{materialflowChart}
\end{figure}

enter image description here

使用@ {\ hspace {1px}}控制列间距。在列之前插入@命令,并删除常规的列间距。

3 /将multicolumns与multicol软件包一起使用

您可以在一个微型页面中定义一个包含多列的框

\begin{figure}
  \centering
  \begin{minipage}{0.7\linewidth}
    \setlength\columnsep{1px}
    \begin{multicols}{3}
      \centering A\\    \includegraphics[width=\linewidth]{example-image-a}\\
      \columnbreak
      \centering B\\    \includegraphics[width=\linewidth]{example-image-a}\\
      \columnbreak
      \centering C\\    \includegraphics[width=\linewidth]{example-image-a}
    \end{multicols}
  \end{minipage}
  \caption{Blah}
  \label{materialflowChart}
\end{figure}

\ columnbreak开始一个新列。 \ columnsep是控制列间距的长度。列宽是使用此参数,列数和最小页面宽度来计算的。

enter image description here