подпись для списков на полях

подпись для списков на полях

Пакет floatrowпозволяет размещать подписи на полях рисунков и таблиц, но, похоже, lstlistingв listingsпакете отсутствует возможность сделать то же самое для окружения.

Обходной путь — поместить lstlistingв рисунок (см. пример). Но это не позволяет нам сохранять разрыв страницы для длинных списков кода. Есть ли способ поместить lstlistingподписи на поля? Я посмотрел внутри floatrowпакета, чтобы посмотреть, могу ли я расширить его, но я не знаю как.

\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}

В captionпакете есть способ поместить Fig X:внутрь поля (см. ниже), но размещение третьего аргумента внутри, llapпохоже, не работает.

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

решение1

memoirи floatrowне сотрудничают хорошо. Если вам нужны боковые подписи для таблицы и рисунка, вы можете использовать команду memoir's (см. раздел\sidecap10.10 ПОДПИСИ ПО БОКОВЫМ ЧАСТЯМруководства). В случае листингов, созданных с помощью lstlisting, необходимо выполнить некоторую дополнительную работу.

Следующий код (который допускает улучшения) демонстрирует один из подходов: заголовок сохраняется в поле шириной \sidecapwidth, а затем размещается на поле с помощью \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}

введите описание изображения здесь

Связанный контент