
O floatrow
pacote permite colocar legendas nas margens para figuras e tabelas, mas parece que falta a possibilidade de fazer o mesmo para o lstlisting
ambiente do listings
pacote.
Uma solução alternativa é colocar lstlisting
uma figura (veja o exemplo). Mas isso não nos permite manter a quebra de página para listagens de código longas. Existe uma maneira de colocar lstlisting
legendas na margem? Olhei dentro do floatrow
pacote para ver se posso estendê-lo, mas não sei como.
\documentclass{memoir}
\usepackage{listings}
\usepackage{floatrow}
\floatsetup[figure]{margins=hangright,capposition=beside,capbesideposition={top,left},floatwidth=\textwidth}
\begin{document}
\begin{figure}
\begin{lstlisting}
This is a test
\end{lstlisting}
\caption{This is a test.}
\end{figure}
\end{document}
O caption
pacote tem uma maneira de colocar Fig X:
dentro da margem (veja abaixo), mas colocar o terceiro argumento dentro llap
não parece funcionar.
\DeclareCaptionFormat{llap}{\llap{#1#2}#3\par}
\captionsetup{lstlisting}{format=llap,labelsep=quad,singlelinecheck=no}
Responder1
memoir
e floatrow
não cooperam bem. Se você quiser legendas laterais para tabelas e figuras, você pode usar memoir
o comando ' \sidecap
(Veja a seção10.10 LEGENDAS LATERAISdo manual). No caso de listagens produzidas com lstlisting
, é necessário fazer algum trabalho adicional.
O código a seguir (que admite melhorias) mostra uma abordagem; a legenda é armazenada em uma caixa de largura \sidecapwidth
e depois colocada na margem usando \sidepar
:
\documentclass{memoir}
\usepackage{listings}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{marginnote}
\usepackage{lipsum}
\newsavebox\mycap
\newlength\mycapHt
\setlength\sidecapwidth{77pt}
\DeclareCaptionFormat{llap}{%
\begin{lrbox}{\mycap}
\begin{minipage}{\sidecapwidth}
\raggedright#1:#2#3
\end{minipage}%
\end{lrbox}%
\settoheight\mycapHt{\usebox\mycap}%
\addtolength\mycapHt{.85\baselineskip}%
\setlength\sideparvshift{\mycapHt}%
\sidepar{\usebox\mycap}}
\captionsetup[lstlisting]{format=llap,labelsep=space,singlelinecheck=no}
\begin{document}
\begin{figure}
\begin{sidecaption}{An illustration}[fig:ill]
\centering
\includegraphics[height=4cm]{example-image-a}
\end{sidecaption}
\end{figure}
\lipsum[4]
\begin{lstlisting}[caption={test caption for a listing}]
This is a test
This is a test
This is a test
This is a test
This is a test
\end{lstlisting}
\lipsum[4]
\begin{lstlisting}[caption={test caption for a listing that will span several lines}]
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
\end{lstlisting}
\lipsum[4]
\end{document}