Evite espacios antes y después de `std::cout` en los listados

Evite espacios antes y después de `std::cout` en los listados

En este ejemplo:

\documentclass{article}
\usepackage{listings}

\lstset{
    language=c++,
    extendedchars=true,
    inputencoding=utf8,
    literate={::}{{::}}2
}

\begin{document}

\begin{lstlisting}
std::mutex mtx;
\end{lstlisting}

\end{document}

Lo que obtengo es std :: mutex mtx;. No quiero estos espacios automáticos en modo listado.

¿Hay alguna manera de desactivarlos?

Respuesta1

Esto es consecuencia de la configuración predeterminada de columnas fijas, es decir, cada carácter tiene el mismo ancho. Debido a que el :carácter no es muy ancho, parece que se introduce un espacio.

Una solución alternativa es establecer el ancho de alfabetización ::en 1 carácter, es decir, literate={::}{{::}}1. De lo contrario, puede utilizar columnas flexibles o totalmente flexibles. Otra opción sería utilizar una fuente de teletipo, en cuyo caso los ::caracteres son más anchos y están espaciados uniformemente para que no parezca que se introducen espacios adicionales.

MWE:

\documentclass{article}
\usepackage{listings}

\lstset{frame=single}
\begin{document}
\noindent \textit{Flexible columns:}
\begin{lstlisting}[columns=flexible]
std;;mutex mtx;
wwwwwwwwwwwwww;

std::mutex mtx;
\end{lstlisting}
\noindent \textit{Full-flexible columns:}
\begin{lstlisting}[columns=fullflexible]
std;;mutex mtx;
wwwwwwwwwwwwww;

std::mutex mtx;
\end{lstlisting}

\lstset{
    columns=fixed,
    language=c++,
    extendedchars=true,
    inputencoding=utf8,
    literate={::}{{::}}1
}
\noindent\textit{Fixed columns, :: seen as 1 character:}
\begin{lstlisting}
std;;mutex mtx;
wwwwwwwwwwwwww;

std::mutex mtx;
\end{lstlisting}

\lstset{
    columns=fixed,
    language=c++,
    extendedchars=true,
    inputencoding=utf8,
    basicstyle=\ttfamily,
    literate={::}{{::}}2
}
\noindent\textit{Fixed columns, :: seen as 2 characters, teletype font:}
\begin{lstlisting}
std;;mutex mtx;
wwwwwwwwwwwwww;

std::mutex mtx;
\end{lstlisting}


\end{document}

Resultado:

ingrese la descripción de la imagen aquí

información relacionada