¿Cómo puedo enumerar código con alineación y resaltado de sintaxis?

¿Cómo puedo enumerar código con alineación y resaltado de sintaxis?

Me gustaría componer código de manera efectiva en una fuente proporcional con resaltado de sintaxis y alineación horizontal. ¿Cómo puedo hacer eso?

El paquetelistadosofrece resaltado de sintaxis pero no alineación. Si uso una fuente proporcional, hasta donde yo sé, no hay forma de alinear el texto horizontalmente.

El entornotabulaciónpermite la alineación pero no el resaltado automático de sintaxis. Si quiero tener colores, necesito ponerlos allí manualmente. Además, el interior detabulaciónes texto normal, por lo que se cambian las comillas y los apóstrofes, y los espacios en blanco se contraen a un solo espacio.

No logré combinar estos dos ambientes. Cada vez, no se compiló o se veía mal.


A continuación se muestra un ejemplo de cómo se supone que debe verse. Lo hice con pestañas usando algunas soluciones y resaltado manual.

ejemplo de listado de código en una fuente proporcional con alineación y resaltado de sintaxis

Si elimino el resaltado y las soluciones alternativas, el código es este:

\begin{tabbing}
    (defclass request () \\
    \hspace{1.5em} \= ( \= (url \= :reader request-url \\
        \>  \>  \> :initarg :url \\
        \>  \>  \> :type string} \\
        \>  \>  \> :documentation "Request URL.") \\
        \>  \> (method \= :reader request-method \\
        \>  \>  \> :initarg :method \\
        \>  \>  \> :initform :get \\
        \>  \>  \> :type keyword\\
        \>  \>  \> :documentation "Request method, e.g :get, :post.") \\
        \>  \> (parameters \= :reader request-parameters \\
        \>  \>  \> :initarg :parameters \\
        \>  \>  \> :initform nil \\
        \>  \>  \> :type association-list \\
        \>  \>  \> :documentation "The request parameters, as an association list.")) \\
        \> (:documentation "A general HTTP request."))
\end{tabbing}

información relacionada