如何让浮动标题的第一句自动加粗,第二句正常?
\begin{figure}[t]
\centering
\caption{First sentence. Second sentence.}
\end{figure}
输出应该是:
图 1.第一句话。第二句。
答案1
您可以使用通过解析 \@caption 的内容来定制字幕的文本格式,即
\documentclass{article}
\usepackage{xstring}
\usepackage{etoolbox}
\usepackage{caption}
\captionsetup{labelfont=bf,tableposition=top}
\makeatletter
\newcommand\formatlabel[1]{%
\noexpandarg
\IfSubStr{#1}{.}{%
\StrBefore{#1}{.}[\firstcaption]%
\StrBehind{#1}{.}[\secondcaption]%
\textbf{\firstcaption.} \secondcaption}{%
#1}%
}
\patchcmd{\@caption}{#3}{\formatlabel{#3}}
\makeatother
\begin{document}
\begin{figure}[t]
\centering
test test
\caption{First sentence. Second sentence.}
\end{figure}
\end{document}
答案2
一种非自动的方法是定义:
\newcommand{\bcaption}[2]{\caption{\textbf{#1} #2}}
并使用“bf”选项作为包标题。
这是一个有效的例子:
\documentclass{article}
\usepackage[bf]{caption}
\newcommand{\bcaption}[2]{\caption{\textbf{#1} #2}}
\begin{document}
\begin{figure}[t]
\centering
\bcaption{First sentence.}{Second sentence.}
\end{figure}
\end{document}
答案3
受到@guido 的启发解决方案,我最终得到以下结果:
\usepackage{xstring}
\usepackage{etoolbox}
\usepackage{caption}
\newcommand\firstsentencebold[1]{%
\noexpandarg
\exploregroups
\IfSubStr{#1}{. }{%
\StrBefore{#1}{. }[\firstcaptionsentence]%
\StrBehind{#1}{. }[\othercaptionsentences]%
\textbf{\firstcaptionsentence. }\othercaptionsentences%
}{%
\textbf{#1.}%
}%
}
\DeclareCaptionFormat{FirstSentenceBold}{\textbf{#1#2}\firstsentencebold{#3}}
\captionsetup{format=FirstSentenceBold}
这主要是为了我未来的自己。