
El floatrow
paquete permite poner títulos en los márgenes de figuras y tablas, pero parece que falta la posibilidad de hacer lo mismo para el lstlisting
entorno desde listings
el paquete.
Una solución alternativa es poner el lstlisting
en una figura (ver ejemplo). Pero esto no nos permite mantener la página dividida para listados de códigos largos. ¿Hay alguna manera de poner lstlisting
títulos en el margen? He mirado dentro del floatrow
paquete para ver si puedo ampliarlo, pero no sé cómo.
\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}
El caption
paquete tiene una forma de colocarlo Fig X:
dentro del margen (ver más abajo), pero colocar el tercer argumento dentro llap
no parece funcionar.
\DeclareCaptionFormat{llap}{\llap{#1#2}#3\par}
\captionsetup{lstlisting}{format=llap,labelsep=quad,singlelinecheck=no}
Respuesta1
memoir
y floatrow
no cooperan bien. Si desea títulos laterales para la tabla y la figura, puede usar memoir
's\sidecap
comando (consulte la sección10.10 TÍTULOS LATERALESdel manual). En el caso de listados producidos con lstlisting
, hay que hacer un trabajo adicional.
El siguiente código (que admite mejoras) muestra un enfoque; el título se almacena en un cuadro de ancho \sidecapwidth
y luego se coloca en el margen 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}