我目前正在使用caption
/subcaption
包来为我的论文提供标题和图表列表。
在我的标题中,我放了一个标题,还有一些图例信息,如下面的 MWE 所示。
\documentclass[10pt]{article}
\usepackage{tikz}
\usepackage{subcaption}
\usepackage{graphicx}
% For the sake of example
\DeclareRobustCommand{\Curve}[1]{(\tikz[baseline=-0.6ex,inner sep=0pt] \draw[line width=1pt,#1](0,0) -- (4mm,0);)}
\begin{document}
% Automatic title in list of figures
\begin{figure}
\centering
\includegraphics[width=2cm]{example-image-a}
\caption{My nice figure with legend. Legend~\Curve{red}}
\end{figure}
% Manual title in list of figures
\begin{figure}
\centering
\includegraphics[width=2cm]{example-image-a}
\caption[My nice figure without legend]{My nice figure without legend. Legend~\Curve{red}}
\end{figure}
\listoffigures
\end{document}
我知道可以使用可选参数手动定义图形列表中提供的标题,但是\caption[]{}
有没有办法(它是乳胶,所以这个问题看起来很愚蠢)重新定义,\caption
以便将特定字符之前的所有内容用作可选参数。
说得更清楚一点:
我想要输出
\caption[blabla]{blabla. blibli}
和
\caption{blabla. blibli}
在图形列表中看起来相同。
答案1
有点杂耍:
\documentclass[10pt]{article}
\usepackage{tikz}
\usepackage{subcaption}
\usepackage{graphicx}
\usepackage{xparse}
% For the sake of example
\DeclareRobustCommand{\Curve}[1]{%
(\tikz[baseline=-0.6ex,inner sep=0pt] \draw[line width=1pt,#1](0,0) -- (4mm,0);)%
}
\ExplSyntaxOn
\NewDocumentCommand{\bamboocaption}{som}
{
\IfBooleanTF{#1}
{
\captioncaption*{#3}
}
{
\IfValueTF{#2}
{
\captioncaption[#2]{#3}
}
{
\seq_set_split:Nnn \l_tmpa_seq { . } { #3 }
\int_compare:nTF { \seq_count:N \l_tmpa_seq < 2 }
{% no period
\captioncaption{#3}
}
{
\captioncaption[\seq_item:Nn \l_tmpa_seq { 1 }]{#3}
}
}
}
}
\ExplSyntaxOff
\AtBeginDocument{%
\let\captioncaption\caption
\let\caption\bamboocaption
}
\begin{document}
\listoffigures
\section{Body}
% Automatic title in list of figures
\begin{figure}[htp]
\centering
\begin{subfigure}{3cm}
\centering
abc
\caption{Something}
\end{subfigure}\qquad
\begin{subfigure}{3cm}
\centering
abc
\caption{Something}
\end{subfigure}
\bigskip
\includegraphics[width=2cm]{example-image-a}
\caption{My nice figure with legend. Legend~\Curve{red}}
\end{figure}
% Manual title in list of figures
\begin{figure}[htp]
\centering
\includegraphics[width=2cm]{example-image-a}
\caption{My nice figure without legend\label{ops}}
\end{figure}
\end{document}
请注意,可选参数 to\caption
仍可按通常含义使用。如果不存在,标题将在第一个句点处拆分;它之前的所有内容将作为图形列表的可选参数传递。如果未找到句点,则默认设置不会发生任何变化。
我还添加了子标题以确保它们不会被更改。如果您还想为它们添加图例,那就有点复杂了。