The caption format will be used internally after applying the justification & font setting, and therefore the \colorbox
will be centered but not the text inside the \colorbox
.
One can fix that by applying the justification setting inside the colorbox (again) using the internal command \caption@hj
:
\documentclass{report}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{caption}
\makeatletter
\DeclareCaptionFormat{listing}{%
\colorbox{gray}{%
\parbox{\dimexpr \captionwidth-2\fboxsep}{\caption@hj #1#2#3}}}
\makeatother
\captionsetup[lstlisting]{format=listing,font={color=white}}
% This concludes the preamble
\begin{document}
\begin{lstlisting}[label=some-code,caption=Some Code]
function <lhs_arguments>=<function_name><rhs_arguments>
<statements>
endfunction
\end{lstlisting}
\end{document}
(Please note that I replaced \textwidth
with \captionwidth
so the margin & width settings will be used here, too.)
But a more naturally way of fixing this is changing the internal code which actually draws the box around the caption, i.e. redefining \caption@parbox
:
\documentclass{report}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{caption}[2007/12/23] % needs v3.1f or newer
\makeatletter
\DeclareCaptionOption{boxcolor}{%
\renewcommand\caption@parbox[2]{%
\colorbox{#1}{\parbox[b]{\dimexpr ##1-2\fboxsep}{##2}}}}
\makeatother
\captionsetup[lstlisting]{boxcolor=gray,font={color=white}}
% This concludes the preamble
\begin{document}
\begin{lstlisting}[label=some-code,caption=Some Code]
function <lhs_arguments>=<function_name><rhs_arguments>
<statements>
endfunction
\end{lstlisting}
\end{document}
(Although both \caption@hj
and \caption@parbox
are not documented this will work with future versions of the caption
package, too.)
When using version 3.3 of the caption
package this can be realized without using internal commands at all:
\documentclass{report}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{caption}[2013/01/01] % needs v3.3 or newer
\captionsetup[lstlisting]{box=colorbox,boxcolor=gray,font={color=white}}
% This concludes the preamble
\begin{document}
\begin{lstlisting}[label=some-code,caption=Some Code]
function <lhs_arguments>=<function_name><rhs_arguments>
<statements>
endfunction
\end{lstlisting}
\end{document}
Addendum 2013-01-09:
Since the version 3.3 of the caption
package is available now the last solution is preferable.