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.

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

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.


\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



\caption[Optional text.]{Obligatory text.}

\caption{Obligatory text only.}

| improve this answer | |
  • What is the meaning of \x@ or\x@@, etc... The number of @ is for what? – Sigur Jan 11 '13 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 '13 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 '17 at 10:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.