3

The syntax for a caption is

\caption[listoffigures/tables text]{Text actually displayed under picture/table}

But what I would like to have is something like this: If I use the above command, the text under the floating object should be

Label #.: listof text -- long text

With # being just the number and with -- being an arbitrary separator (either the -- dash itself or maybe even a \newline). Is this possible?

I'm using KOMAScript.

2
  • ... and if no [] is given?
    – yo'
    Jan 11, 2013 at 16:04
  • Just the long text, of course.
    – Foo Bar
    Jan 11, 2013 at 16:09

1 Answer 1

3

See the commented code. If you load any float-related packages (float, floatrow, caption, algorithmic, ...) or do things like \newfloat, \restylefloat etc., this my tweak must come after all that.

\documentclass{scrartcl}

\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}
3
  • What is the meaning of \x@ or\x@@, etc... The number of @ is for what?
    – Sigur
    Jan 11, 2013 at 16:39
  • 1
    @Sigur the character @ behaves like a letter between \makeatletter ... \makeatother, therefore all three strings \x@caption, ... are just macro names. Further reading: tex.stackexchange.com/q/8351/11002
    – yo'
    Jan 11, 2013 at 16:44
  • @yo' - I think you should explain a little better what you are doing. From what I was able to tell the \makeatletter environment is only necessary so you can use \@ifnextchar. You didn't have to define those other variable with @s. The rest I think I understand.
    – A. Vieira
    Aug 31, 2017 at 10:49

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .