título para listados en el margen

título para listados en el margen

El floatrowpaquete permite poner títulos en los márgenes de figuras y tablas, pero parece que falta la posibilidad de hacer lo mismo para el lstlistingentorno desde listingsel paquete.

Una solución alternativa es poner el lstlistingen 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 lstlistingtítulos en el margen? He mirado dentro del floatrowpaquete 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 captionpaquete tiene una forma de colocarlo Fig X:dentro del margen (ver más abajo), pero colocar el tercer argumento dentro llapno parece funcionar.

\DeclareCaptionFormat{llap}{\llap{#1#2}#3\par}
\captionsetup{lstlisting}{format=llap,labelsep=quad,singlelinecheck=no}

Respuesta1

memoiry floatrowno 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 \sidecapwidthy 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}

ingrese la descripción de la imagen aquí

información relacionada