If I use the following command \usepackage[skip=20pt,hang]{caption}
when a caption is very long it hangs in figures and tables, however, if the caption is of a lstlisting environment it doesn't. Besides, I haven't seen any "hang" option in the listings package. How could it be solved?
Figure hanging:
Lstlisting not hanging:
Minimun working example that looks very similar to the images:
\documentclass[12pt,a4paper,twoside]{article}
\usepackage[utf8]{inputenc}
\usepackage{times}
\renewcommand{\rmdefault}{phv} % Arial
\renewcommand{\sfdefault}{phv} % Arial
\usepackage[T1]{fontenc}
\usepackage[spanish,es-noshorthands]{babel}
\usepackage[top=2.5cm, bottom=2.5cm, inner=2.5cm, outer=3.5cm]{geometry}
\usepackage[pdftex,demo]{graphicx}
\usepackage[skip=20pt,hang]{caption}
\usepackage{subcaption}
\usepackage[usenames,dvipsnames]{xcolor}
\definecolor{ColorPrincipal}{cmyk}{0,0.89,0.94,0.28} %este es el color BrickRed
\definecolor{ColorSecundario}{cmyk}{0,0.51,1,0} %este es el color BurntOrange
\definecolor{ColorTerciario}{cmyk}{0.40,0.80,0.20,0} %este es el color DarkOrchid
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\usepackage{listings}
\definecolor{ColorPrincipal}{RGB}{0,0,0}
\lstset{ %
language=bash, % the language of the code
%basicstyle=\footnotesize, % the size of the fonts that are used for the code
basicstyle=\normalsize\ttfamily,
numbers=left, % where to put the line-numbers
numberstyle=\footnotesize, % the size of the fonts that are used for the line-numbers
stepnumber=1, % the step between two line-numbers. If it's 1, each line will be numbered
numbersep=1em, % how far the line-numbers are from the code
aboveskip=1em, % espacio por encima del listing (1 línea)
belowskip=0.2em, % espacio por debajo del listing (1 línea según mis mediciones con la regla tengo que poner -1.8) ACTUALIZACIÓN con el marco del listing: sin espacio= -0.8em con una línea de espacio -0.8+1=0.2em
%belowcaptionskip=0.5em, % Esto hay que ponerlo individualmente a los captions que ocupen dos líneas
backgroundcolor=\color{white}, % choose the background color. You must add \usepackage{color}
showspaces=false, % show spaces adding particular underscores
showstringspaces=false, % underline spaces within strings
showtabs=false, % show tabs within strings adding particular underscores
frame=single, % adds a frame around the code
frameround=fttf, % t hace la esquina redondeada y f que sea en punta
tabsize=2, % sets default tabsize to 2 spaces
captionpos=t, % sets the caption-position to top
breaklines=true, % sets automatic line breaking
breakatwhitespace=true, % sets if automatic breaks should only happen at whitespace
title=\lstname, % show the filename of files included with \lstinputlisting; also try caption instead of title
numberstyle=\scriptsize\color{gray}, % line number style
keywordstyle=\color{blue}, % keyword style
commentstyle=\color{dkgreen}, % comment style
stringstyle=\color{mauve}, % string literal style
escapeinside={\%*}{*)}, % if you want to add a comment within your code
%morekeywords={*,...}, % if you want to add more keywords to the set
%keywordstyle=\color{blue},
columns=flexible, %utilizar la opción flexible ya que el resto meten espacios entre letras para que ocupen todo el espacio de la caja (pero al copiar y pegar código nos lo ha estropeado)
alsoletter={-,/,.}, % gracias a esto podremos enfatizar o hacer keyword palabras como "apt-get"
%emph={sudo, apt-get}, %palabras especiales que se marcarán
classoffset=0,
emph={sudo,},
emphstyle=\color{red},
classoffset=1,
%emph={adb, add-apt-repository, am, android, apt-get, brctl, cat, chmod, dpkg, echo, egrep, /etc/init.d/networking, export, grep, ifconfig, ifdown, ifup, ip, iwconfig, iwlist, java, killall, ln, less, ls, mkdir, modprobe, mv, netcfg, ping, route, sensors, sensors-detect, service, sort, tail, tee, touch, uname, vim, virsh, virt-clone, virt-install, virt-viewer, vncviewer, wget, wpa\_passphrase, wpa\_supplicant, xm}, %algunos de estos comandos están definidos en keywords pero así me los pone a todos del mismo color
emphstyle=\color{BurntOrange},
classoffset=0,
escapechar=!,
xleftmargin=1.41mm,
xrightmargin=-0.71mm,
rulecolor=\color{black}, %corrige el error de bordes que cambian de color cuando se tiene que hacer un salto de una línea con un color distinto del negro http://tex.stackexchange.com/questions/80556/lstlisting-border-bug-when-breaking-lines
literate={ö}{{\"o}}1
{ä}{{\"a}}1
{ü}{{\"u}}1
{á}{{\'{a}}}1
{é}{{\'{e}}}1
{í}{{\'{i}}}1
{ó}{{\'{o}}}1
{ú}{{\'{u}}}1
{ñ}{{\~{n}}}1
{Á}{{\'{A}}}1
{É}{{\'{E}}}1
{Í}{{\'{I}}}1
{Ó}{{\'{O}}}1
{Ú}{{\'{U}}}1
{Ñ}{{\~{N}}}1
{¿}{{?`}}1
}
\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox[cmyk]{0.43, 0.35, 0.35,0.01}{\parbox{\textwidth}{\hspace{15pt}\begin{minipage}{0.95\linewidth}#1#2#3\end{minipage}}}} %el minipage me asegura que si el texto de un caption ocupa más de una línea las siguientes líneas quedarán alineadas con respecto a la primera el hspace de 15pt
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}}
\addto\captionsspanish{\renewcommand*\lstlistingname{C\'odigo}}
\addto\captionsspanish{\renewcommand*\lstlistlistingname{\'Indice de c\'odigo}}
\usepackage{chngcntr} % Sirve para numerar figuras, tablas, etc según numSección.númElemento http://www.physicsforums.com/showthread.php?t=290236
\counterwithin{figure}{section}
\AtBeginDocument{\counterwithin{lstlisting}{section}}
\renewcommand{\captionfont}{\color{ColorSecundario}}
\renewcommand{\captionlabelfont}{\bf}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}}
\begin{document}
\section{Sección 1}
\section{Sección 2}
\section{Sección 3}
\section{Sección 4}
Here it hangs :-)
\begin{figure}[h!]
\centering
\includegraphics[width=0.25\textwidth]{clipart/hombreNegociosMovil.jpeg}
\includegraphics[width=0.5\textwidth]{clipart/paradaAutobusAlReves.jpg}
\caption{Bytewalla en el poblado: tranferencia de información del móvil a estafeta}
\end{figure}
But not here :-(
\begin{lstlisting}[belowcaptionskip=0.5em,language=java,caption=Fragmento concerniente a los métodos constructores de la clase Fichero.java]
/* Constructor de un objeto Fichero a partir de un fichero en disco
* Es por ello que se han de generar todos los datos pertenecientes a este fichero
*/
private Fichero(File fichero) throws IOException {
//Se ha omitido el código
}
/*
* Por el contrario podemos querer generar un fichero "virtual", representación de un fichero que posee otro nodo
* Para ello se nos deberá proporcionar la información de este fichero
* La variable nuevo indica si este es un fichero del que no se tenía constancia o si este es un fichero que se va a recrear a partir de trozos, que no está completo
* En el caso de ser un fichero nuevo la información de si se posee este fichero o no se rellenará a NO_EN_MEMORIA ya que sólo se nos enviará el nombre, hashes y tamaños
* */
public Fichero(String nombre, Object bloques[][], Map<String, Long> poseedoresDelFichero, boolean nuevo)
{
//Se ha omitido el código
}
\end{lstlisting}
\end{document}
\documentclass{article} \usepackage[hang]{caption} \usepackage{listings} \begin{document} \begin{lstlisting}[caption={A really long test caption, it is so long that it actually spans two lines for this example}] test \end{lstlisting} \end{document}
produces the expected result.