如题,预期实现的效果:
要求同时满足三个要求:
format=hang
实现caption
的悬挂缩进caption
,要求整体居中\\
手动指定较长\bicaption
的换行点对于下面的MWE:
\\
换行,使用format=hang,justification=centering
:\documentclass{ctexart}
\usepackage{showframe}
\usepackage{graphicx}
\usepackage{caption}
\captionsetup{format=hang,justification=centering}
\usepackage{bicaption}
\captionsetup[figure][bi-first]{name=图}
\captionsetup[figure][bi-second]{name=Fig.}
\usepackage{lipsum,zhlipsum}
\begin{document}
\lipsum[2]
\begin{figure}[h]
\centering
\includegraphics[width=.5\textwidth]{example-image}
\bicaption{中文中文中文中文中文中文中文中文中文}{English text English text English text English text English text English text text text}
\end{figure}
\zhlipsum[2]
\end{document}
\\
, 此时centering
和hang
似乎无法同时生效:\documentclass{ctexart}
\usepackage{showframe}
\usepackage{graphicx}
\usepackage{caption}
\captionsetup{format=hang,justification=centering}
\usepackage{bicaption}
\captionsetup[figure][bi-first]{name=图}
\captionsetup[figure][bi-second]{name=Fig.}
\usepackage{lipsum,zhlipsum}
\begin{document}
\lipsum[2]
\begin{figure}[h]
\centering
\includegraphics[width=.5\textwidth]{example-image}
\bicaption{中文中文中文中文中文中文中文中文中文}{English text English text English text\\ English text English text English text text text}
%注意上一行手动换行,且上短下长,`hang`失效了....
\end{figure}
\zhlipsum[2]
\end{document}
是否有仅使用\captionsetup
的方式,同时实现上述效果呢?
caption
宏包中有一个\DeclareCaptionTextFormat
命令,可以用来定制标题内容部分的样式,定制好的样式由\captionsetup
命令中的textformat
键调用。
是否有更好的利用caption
包的办法而不是抖机灵呢?
这里退而求其次吧,将varwidth
环境封装在\DeclareCaptionTextFormat
中。
MWE:
\documentclass{ctexart}
\usepackage{showframe}
\usepackage{graphicx}
\usepackage{varwidth}
\usepackage{caption}
% ------------------------------------------------- %
\DeclareCaptionTextFormat{foo}{\begin{varwidth}[t]{.8\linewidth}#1\end{varwidth}\par}
\captionsetup{textformat=foo,justification=centering}
% ================================================= %
\usepackage{bicaption}
% ------------------------------------------------- %
\bicaptionsetup[figure]{name=图}{name=Fig.}
% ================================================= %
\usepackage{lipsum,zhlipsum}
\begin{document}
\begin{figure}[h]
\centering
\includegraphics[width=.3\textwidth]{example-image}
\bicaption{中文中文中文}{English text English text English text English text English text English text English text English text English text English text English text}
\end{figure}
\begin{figure}[h]
\centering
\includegraphics[width=.3\textwidth]{example-image}
\bicaption{中文中文中文中文中文中文中文}{English text English text English text[]\\
English text English text English text English text English text English text English text English text}
\end{figure}
\lipsum[2]
\end{document}
\caption
所生成标题的水平对齐效果只能由justification
键修改,因此实现悬挂缩进的最佳实践应该就是给标题内容套用盒子。
但这里有个疑问:段落盒子由varwidth
环境换成\parbox
,即
\parbox[t]{0.8\linewidth}{#1}
其无法实现标题的居中对齐(结果偏左),原因不清楚。
给一种基于varwidth
(或者说盒子)的「不得体之术」:
\documentclass{ctexart}
\usepackage{showframe}
\usepackage{graphicx}
\usepackage{caption}
\captionsetup{justification=centering}
\usepackage{bicaption}
\captionsetup[figure][bi-first]{name=图}
\captionsetup[figure][bi-second]{name=Fig.}
\usepackage{lipsum,zhlipsum}
\usepackage{varwidth}
\begin{document}
\lipsum[2]
\begin{figure}[h]
\centering
\includegraphics[width=.5\textwidth]{example-image}
\bicaption{中文中文中文中文中文中文中文中文中文}{\begin{varwidth}[t]{.8\linewidth}English text English text English text English text\\ English text English text text text \end{varwidth}}
\end{figure}
\zhlipsum[2]
\end{document}
是否有更好的利用caption
包的办法而不是抖机灵呢?
谢谢您提供的
\DeclareCaptionTextFormat
的封装方式~是因为
varwidth
会自动根据内容调整实际宽度,最长不超过.8\linewidth
,对于上面的例子,.8\linewidth
是偏大的。可见下面的对比:
@u70550 懂了,也算是认识了一种新的垂直盒子。谢谢E老师。
@u64726 我不是老师(捂脸)

关于
varwidth
, 本质就是一个minipage
:关于应用1:
在
tabularray
中有名为varwidth
的子库关于应用2:
雾月老师在下面这个例子里也用了
varwidth
:https://ask.latexstudio.net/ask/question/17410.html
我猜的:
standalone
文档类实现的「自动根据内容判断页面大小」与varwidth
也挺像的...但原理似乎不太一样