如何自动为图形列表创建简短的标题?

如何自动为图形列表创建简短的标题?

我正在使用绘制的图形撰写论文tikzDevice,其中包括以下功能:

\newcommand{\includetikz}[4]{

\begin{figure}[!h]

\centering  
\begin{adjustbox}{width=\textwidth}
\input{#1#2.tikz}%
\end{adjustbox} 
\caption{#3}
\label{#4}
\end{figure}


}

我现在想要获取图表列表的简短版本,也就是整个标题的第一句话。我可以使用上面函数中的附加参数重写该函数:

\newcommand\slcaption[2]{\caption[#1]{#1. #2}}

但是考虑到数字的数量,这需要进行大量调整。有没有简单的选项可以将参数 3 拆分到函数中的第一个点处?

我想象类似的东西(用伪代码):

\caption[ str_split(#3, '.')[1] ]{#3}

答案1

在这里我用来listofitems解析第一次出现点的标题.并将其作为可选参数提供\caption

\documentclass{article}
\usepackage{listofitems}
\newcommand\slcaption[1]{\setsepchar{.}\readlist*\pdots{#1}\caption[{\pdots[1].}]{#1}}
\begin{document}
\listoffigures
\begin{figure}[ht]
\slcaption{This is a test.}
\end{figure}
\begin{figure}[ht]
\slcaption{Sentence one. This is a test.}
\end{figure}
\begin{figure}[ht]
\slcaption{Let's try again. Sentence two. This is a test.}
\end{figure}
\end{document}

在此处输入图片描述

没有任何软件包:

\documentclass{article}
\newcommand\slcaption[1]{\caption[\getfirst#1\relax.]{#1}}
\def\getfirst#1.#2\relax{#1}
\begin{document}
\listoffigures
\begin{figure}[ht]
\slcaption{This is a test.}
\end{figure}
\begin{figure}[ht]
\slcaption{Sentence one. This is a test.}
\end{figure}
\begin{figure}[ht]
\slcaption{Let's try again. Sentence two. This is a test.}
\end{figure}
\end{document}

答案2

我尝试了xparse部分成功(如果有人能纠正我的尝试)。@naphanael 链接的解决方案更好更简单……而且有效 :)

\documentclass{article}
\usepackage{xparse}

\newcommand{\ajout}[1]{%
    \ifx\court\@empty\xdef\court{#1}\fi
    \xdef\long{\long #1.}
}
\NewDocumentCommand{\SplitFirstDot}{>{\SplitList{.}}m}{%
    \let\long\@empty
    \let\court\@empty
    \ProcessList{#1}{\ajout}
    \caption[\court]{\long}
}
%\def\getfirst#1.#2\relax{{#1}}
%\def\getsecond#1.#2\relax{{#2}}

\newcommand{\includetikz}[4]{
    \begin{figure}[!h]
        \centering 
        #1 #2%
        %\caption[\getfirst#3\relax]{\getsecond#3\relax}
        \SplitFirstDot{#3}
        \label{#4}
    \end{figure}
}

\begin{document}

    Essai

    \includetikz{folder}{file}{Caption.1.long}{label}

    \listoffigures

\end{document}

相关内容