通过解析 \@caption 的内容来定制字幕的文本格式

通过解析 \@caption 的内容来定制字幕的文本格式

我需要标题的第一句以 \large 粗体字体显示在自己的行上。我还需要相同的文档来轻松生成标准标题(所有字体相同,无换行符)。我已经实现了一个类文件,它使用一个选项直接修改 \@caption 并添加必要的格式;但是,我的代码不太好用。此示例正确地将标题的第一句以正确的字体放在自己的行上,但文本未左对齐。

\documentclass{article}
\usepackage{xstring}
\usepackage{etoolbox}
\usepackage{caption}

\captionsetup{labelfont=bf,labelsep=newline,tableposition=top}

\makeatletter
\newcommand\formatlabel[1]{%
    \noexpandarg
    \StrBefore{#1}{.}[\firstcaption] %
    \StrBehind{#1}{.}[\secondcaption] %
    \textbf{\large\firstcaption}
    \\
    \secondcaption}

\patchcmd{\@caption}{#3}{\formatlabel{#3}}
\makeatother

\begin{document}

\begin{table}
\centering
\caption{A Simple table. It has a caption with multiple sentences. It has a caption with multiple sentences. It has a caption with multiple sentences.}
\begin{tabular}{ l c r }
  1 & 2 & 3 \\
  4 & 5 & 6 \\
  7 & 8 & 9 \\
\end{tabular}
\end{table}

\end{document}

答案1

缩进由注释前的两个空格给出

\StrBefore{#1}{.}[\firstcaption] % 

\StrBehind{#1}{.}[\secondcaption] % 

删除它们可以解决问题。您还可以添加条件以确保.标题中有句号。

\makeatletter
\newcommand\formatlabel[1]{%
    \noexpandarg
    \IfSubStr{#1}{.}{%
      \StrBefore{#1}{.}[\firstcaption]%
      \StrBehind{#1}{.}[\secondcaption]%
      \textbf{\large\firstcaption.}\\\secondcaption}{%
      \textbf{\large #1}}%
      }

\patchcmd{\@caption}{#3}{\formatlabel{#3}}
\makeatother

相关内容