使用独立文档类时子标题格式发生变化

使用独立文档类时子标题格式发生变化

我遇到了与帖子中相同的问题使用预览或独立包水平裁剪包含子图的浮点图但我想在子图编号旁边放置一个子标题。然而,这会导致一些奇怪的行为(见示例)。当我将 documentclass 更改为 article 时,它​​按预期工作。

修改后的示例:

\documentclass[varwidth]{standalone}

\usepackage{mwe}
\usepackage[labelfont=footnotesize,labelformat=parens,
justification=centering]{caption,subfig}

\begin{document}

\def\FigSize{.23}
\begin{figure}[htbp!]
  \centering
  \subfloat[A]
  {
    \includegraphics[width=3cm]{example-image-a}
  }
  \subfloat[B]
  {
    \includegraphics[width=3cm]{example-image-b}
  }
\end{figure}
\end{document} 

在此处输入图片描述

答案1

我尝试创建自己的版本varwidth。困难的部分是让它在诸如\newline(实际上这里没有使用)之类的东西上工作。 \\似乎可以工作,但会生成错误消息。

据我所知,\FigSize什么也没做。当然不是由 subfig 包使用。

\documentclass{standalone}

\usepackage{mwe}
\usepackage[labelfont=footnotesize,labelformat=parens,
justification=centering]{caption,subfig}
\usepackage{environ}

\newlength{\maxwidth}

\makeatletter
\NewEnviron{fakefigure}[1][]{\def\@captype{figure}%
  \def\newline{\egroup% end of previous \sbox1
    \ifdim\wd1>\maxwidth \global\maxwidth=\wd1\fi
    \sbox1\bgroup}
  \let\par=\newline
  \sbox1\bgroup\BODY\egroup
  \ifdim\wd1>\maxwidth \global\maxwidth=\wd1\fi
  \setcounter{subfigure}{0}}
\makeatother

\newcommand{\fakecaption}[2][]{\relax}

\NewEnviron{varwidth}{\bgroup% compute max width
  \let\figure=\fakefigure
  \let\endfigure=\endfakefigure
  \let\caption=\fakecaption
  \global\maxwidth=0pt
  \sbox0{\BODY}%
  \ifdim\wd0>\maxwidth \global\maxwidth=\wd0\fi
\egroup% restore defaults
\begin{minipage}{\maxwidth}
\BODY
\end{minipage}}

\begin{document}
\begin{varwidth}
\def\FigSize{.23}% no known function
\begin{figure}[htbp!]
  \centering
  \subfloat[A]
  {
    \includegraphics[width=3cm]{example-image-a}
  }
  \subfloat[B]
  {
    \includegraphics[width=3cm]{example-image-b}
  }
\end{figure}
\end{varwidth}
\end{document} 

演示

答案2

varwidth包重新定义了 LaTeX 内核宏\@bsphack,并且\@esphack与原始定义不兼容。特别是现在\@bsphack打开 TeX 组并\@esphack关闭 TeX 组。不幸的是,这些宏在内部使用,因此无论您设置什么标题选项都无关紧要,它们现在始终设置在自己的组中,因此毫无价值,因为在使用该包(实际上,这更像是一种肮脏的黑客行为,而不是一个包)时,选项\captionsetup在最后消失了。\captionsetupvarwidth

示例文档:

\documentclass[varwidth]{standalone}
\usepackage{caption}
\begin{document}
\begin{figure}
  \captionsetup{textfont=bf,labelsep=space,labelformat=parens}% This is all without effect!
  \caption{Hello!}
\end{figure}
\end{document}

如果有人对修复感兴趣,请填写错误报告https://gitlab.com/axelsommerfeldt/caption/issues我将在接下来的几天内caption对包裹进行调整。varwidth

答案3

仅需注意,subcaption可以使用\pbox

拥抱里面的人物\pbox应该可以,但不能单独使用。还有一个额外:varwidth

\documentclass[a4paper]{article}

\usepackage{mwe}
\usepackage{varwidth,pbox}
\usepackage[labelformat=simple]{subcaption}
\renewcommand{\thesubfigure}{(\alph{subfigure})}

\begin{document}

\begin{figure} % Figure larger than the page
\centering
\makebox[\textwidth][c]{\mbox{%
\begin{subfigure}{8cm}
\includegraphics[width=\textwidth]{example-image-a}
\subcaption{A}
\end{subfigure}
\begin{subfigure}{8cm}
\includegraphics[width=\textwidth]{example-image-b}
\subcaption{B}
\end{subfigure}
}}
\caption{fig}
\end{figure}

\begin{figure} % Figure larger than the page
\centering
\makebox[\textwidth][c]{\pbox{1.3\textwidth}{%
\begin{subfigure}{8cm}
\includegraphics[width=\textwidth]{example-image-a}
\subcaption{A}
\end{subfigure}
\begin{subfigure}{8cm}
\includegraphics[width=\textwidth]{example-image-b}
\subcaption{B}
\end{subfigure}
}}
\caption{fig}
\end{figure}

\begin{figure} % Figure larger than the page
\centering
\makebox[\textwidth][c]{\begin{varwidth}{1.3\textwidth}
\begin{subfigure}{8cm}
\includegraphics[width=\textwidth]{example-image-a}
\subcaption{A}
\end{subfigure}
\begin{subfigure}{8cm}
\includegraphics[width=\textwidth]{example-image-b}
\subcaption{B}
\end{subfigure}
\end{varwidth}}
\caption{fig}
\end{figure}
\end{document}

在此处输入图片描述 在此处输入图片描述

相关内容