Cómo incluir subtítulos anidados para listados

Cómo incluir subtítulos anidados para listados

Quiero recrear los títulos de listado anidados como en la imagen a continuación. Intenté hacer esto:

\documentclass{article}
\usepackage{listings}
\usepackage{subcaption}

\begin{document}

\lstlistoflistings

\section{Example Python programs}

Here are two example Python programs that print "Hello, World!":

\begin{figure}[htbp]
  \centering
  \begin{subfigure}[b]{0.45\textwidth}
    \begin{lstlisting}[language=Python,caption={[First program] Python program to print "Hello, World!"},label={lst:hello1}]
      print("Hello, World!")
    \end{lstlisting}
  \end{subfigure}
  \hfill
  \begin{subfigure}[b]{0.45\textwidth}
    \begin{lstlisting}[language=Python,caption={[Second program] Python program to print "Hello, World!"},label={lst:hello2}]
      print("Hello, World!")
    \end{lstlisting}
  \end{subfigure}
  \caption{Example Python programs.}
  \label{fig:example}
\end{figure}

We can reference the first program using Listing \ref{lst:hello1}, and the second program using Listing \ref{lst:hello2}.

\end{document}

Sin embargo, esto crea dos listados uno al lado del otro. Se agradece cualquier ayuda.

ingrese la descripción de la imagen aquí

Respuesta1

Esto utiliza el título personalizado de lstlisting.

\documentclass{article}
\usepackage{listings}
\usepackage{newfloat}

%\renewcommand{\lstlistingname}{Sublisting}
\DeclareFloatingEnvironment[fileext=lol,listname=Listings,name=Listing,placement=htp]{listing}

\usepackage{caption}
\captionsetup[listing]{position=above}
\AtBeginDocument{\counterwithin{lstlisting}{listing}}% not defined earlier

\begin{document}

\listoflistings

\section{Example Python programs}

Here are two example Python programs that print "Hello, World!":

\begin{listing}
  \caption{Example Python programs.}% must be above
  \label{fig:example}
  
    \begin{lstlisting}[language=Python,caption={[First program] Python program to print "Hello, World!"},label={lst:hello1}]
      print("Hello, World!")
    \end{lstlisting}
    
    \begin{lstlisting}[language=Python,caption={[Second program] Python program to print "Hello, World!"},label={lst:hello2}]
      print("Hello, World!")
    \end{lstlisting}
\end{listing}

We can reference the first program using Listing \ref{lst:hello1}, and the second program using Listing \ref{lst:hello2}.

\end{document}

Esto usa \subcaption. Tenga en cuenta que el lstlistingcontador no se incrementa.

\documentclass{article}
\usepackage{listings}
\usepackage{newfloat}

\renewcommand{\lstlistingname}{Sublisting}

\DeclareFloatingEnvironment[fileext=lol,listname=Listings,name=Listing,placement=htp]{listing}

\usepackage{subcaption}
\captionsetup[listing]{position=above}
\DeclareCaptionSubType{listing}
\renewcommand{\thesublisting}{\thelisting.\arabic{sublisting}}
\captionsetup[sublisting]{singlelinecheck=off,labelformat=simple,labelsep=colon,skip=0pt,list=true}
\def\sublistingname{Listing}

\begin{document}

\listoflistings

\section{Example Python programs}

Here are two example Python programs that print ``Hello, World!'':

\begin{listing}
  \caption{Example Python programs.}% must to above
  \label{fig:example}
    \subcaption[First program]{Python program to print ``Hello, World!''}\label{lst:hello1}
    \begin{lstlisting}[language=Python]
      print("Hello, World!")
    \end{lstlisting}
    
    \subcaption[Second program]{Python program to print "Hello, World!"}\label{lst:hello2}
      
    \begin{lstlisting}[language=Python]
      print("Hello, World!")
    \end{lstlisting}
\end{listing}

We can reference the first program using Listing \ref{lst:hello1}, and the second program using Listing \ref{lst:hello2}.

\end{document}

información relacionada