我正在尝试使用提供的调整在标题中显示短标题和长标题(两者)吗?与子标题包一起。
不幸的是它坏了:
\documentclass{scrartcl}
\usepackage{subcaption}
\makeatletter
\let\x@caption\caption % original \caption
\def\x@@caption[#1]#2{\x@caption[{#1}]{#1 --- #2}} % with optional arg
\def\x@@@caption#1{\x@caption[{#1}]{#1}} % without optional arg
\def\caption{\@ifnextchar[\x@@caption\x@@@caption} % new \caption
\makeatother
\begin{document}
\listoffigures
\begin{figure}
\centering
\rule{5cm}{5cm}
\caption[Optional text.]{Obligatory text.}
\end{figure}
\begin{figure}
\centering
\rule{5cm}{5cm}
\caption{Obligatory text only.}
\end{figure}
\end{document}
我在我的文档中使用了许多子图,因此放弃子标题包是唯一的选择。
编辑:
使用带有选项的 caption 包\usepackage[compatibility=false]{caption}
确实会生成预期格式的图形标题(可选文本。-- 必填文本。)以及相应的图形条目列表(可选文本。)。感谢 TeXnician 的评论。
答案1
有多种方法可以让标题在不同的浮点数中表现不同。通常的方法是设置并测试\@captype
,但也可以简单地\caption
在浮点数内重新定义。这似乎是 KOMA 使用的方法。所以你只需要重新设置它。
注意:不要将和的论点##1
相混淆。#1
\captionreset
\documentclass{scrartcl}
\usepackage[compatibility=false]{caption}
\usepackage{subcaption}
\makeatletter
\newcommand{\captionreset}{%
\let\x@caption\caption % original (caption package) \caption
\renewcommand{\caption}[2][\empty]{\ifx\empty##1\relax\x@caption{##2}%
\else\x@caption[##1]{##1 -- ##2}%
\fi}% new \caption
}
\let\x@figure=\figure % original figure
\renewcommand{\figure}{\x@figure\captionreset}
\makeatother
\begin{document}
\listoffigures
\begin{figure}
\centering
\rule{5cm}{5cm}
\caption[Optional text.]{Obligatory text.}
\end{figure}
\begin{figure}
\centering
\rule{5cm}{5cm}
\caption{Obligatory text only.}
\end{figure}
\end{document}
我从 KOMA 源中发现被或\caption
替换。因此,更简单的解决方案是替换序言中的那些。\captionabove
\captionbelow
\makeatletter
\let\x@caption\caption% original (caption package) \caption
\newcommand{\x@@caption}[2][\empty]{%
\ifx\empty#1\relax\x@caption{#2}%
\else\x@caption[#1]{#1 -- #2}%
\fi}% modified caption
\let\caption\x@@caption% new global \caption for other float types
\renewcommand{\captionabove}[2][\empty]{\captionsetup{position=above}%
\x@@caption[#1]{#2}%
}% new \captionabove
\renewcommand{\captionbelow}[2][\empty]{\captionsetup{position=below}%
\x@@caption[#1]{#2}%
}% new \captionbelow
\makeatother
答案2
你只需禁用兼容模式即可。这有效:
\documentclass{scrartcl}
\usepackage[compatibility=false]{caption}
\usepackage{subcaption}
\makeatletter
\let\x@caption\caption % original \caption
\def\x@@caption[#1]#2{\x@caption[{#1}]{#1 --- #2}} % with optional arg
\def\x@@@caption#1{\x@caption[{#1}]{#1}} % without optional arg
\def\caption{\@ifnextchar[\x@@caption\x@@@caption} % new \caption
\makeatother
\begin{document}
\listoffigures
\begin{figure}
\centering
\rule{5cm}{5cm}
\caption[Optional text.]{Obligatory text.}
\end{figure}
\begin{figure}
\centering
\rule{5cm}{5cm}
\caption{Obligatory text only.}
\end{figure}
\end{document}