根据 \caption 内的分隔符自动格式化图形列表

根据 \caption 内的分隔符自动格式化图形列表

我目前正在使用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仍可按通常含义使用。如果不存在,标题将在第一个句点处拆分;它之前的所有内容将作为图形列表的可选参数传递。如果未找到句点,则默认设置不会发生任何变化。

我还添加了子标题以确保它们不会被更改。如果您还想为它们添加图例,那就有点复杂了。

在此处输入图片描述

相关内容