我正在使用绘制的图形撰写论文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}