将子标题框的宽度设置为图像的高度

将子标题框的宽度设置为图像的高度

我创建了一个命令来简化我的图形创建过程。我正在使用包添加一个子标题(实际上只是一个parboxsubcaption,它将在我的图形右侧添加一些垂直文本(说明图像的来源)。

我几乎已经完成了所有工作,唯一的问题是当我旋转标题时,它的宽度会延伸到与我传递给它的文本一样长。这会导致图形异常高(见示例)。

我需要一种方法来将旋转后的宽度设置subcaptionbox为图像的高度。在我的例子中,我设置了每幅图像的宽度(基于文本宽度),并让图像的高度遵循纵横比。

带有长源文本的图表示例

我已尝试过:设置 的宽度subcaptionbox不起作用,我猜它以某种方式被 重置了rotatebox?我也试过了,但vphantom没有成功。我当前的代码硬设置了 的宽度parbox,但我需要它调整到图像的实际高度。

这是我的 MWE:

\documentclass{article}
\usepackage{subcaption}
\usepackage[demo]{graphicx}

\newcommand{\newfigure}[4][]{
    \begin{figure}[h]
        \includegraphics[width=.8\textwidth]{demo} %normally the image, here just the demo
        \subcaptionbox*{}[2cm]{
            \rotatebox[origin=t]{90}{
                \parbox{5cm}{ %Should be set variably to the height of the image
                        \scriptsize{#1}
                }
            }
        }
        \caption{#3}
        \label{#4}
    \end{figure}
}

\begin{document}
        \newfigure[Source: A potially long and protracted source for the image]{Demo image}{Example caption for the figure}{fig:demo}
\end{document}

答案1

请注意,\subcaptionbox为下面的子标题保留空间,即使是空白的。

\documentclass{article}
\usepackage{subcaption}
\usepackage[demo]{graphicx}
\usepackage{showframe}

\newsavebox{\nfbox}

\newcommand{\newfigure}[4][]{
    \begin{figure}[h]
        \savebox\nfbox{\includegraphics[width=.8\textwidth]{demo}}% measure width and height
        \usebox\nfbox
        \subcaptionbox*{}[\dimexpr \columnwidth-\wd\nfbox]{%
            \rotatebox[origin=tc]{90}{%
                \parbox{\ht\nfbox}{ %Should be set variably to the height of the image
                        \scriptsize{#1}%
                }%
            }%
        }%
        \caption{#3}
        \label{#4}
    \end{figure}
}

\begin{document}
        \newfigure[Source: A potially long and protracted source for the image]{Demo image}{Example caption for the figure}{fig:demo}
\end{document}

相关内容