Evite espaços antes e depois de `std::cout` nas listagens

Evite espaços antes e depois de `std::cout` nas listagens

Neste exemplo:

\documentclass{article}
\usepackage{listings}

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

\begin{document}

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

\end{document}

O que eu entendo é std :: mutex mtx;. Não quero esses espaços automáticos no modo de listagem.

Existe uma maneira de desativá-los?

Responder1

Isto é consequência da configuração padrão de colunas fixas, ou seja, todos os caracteres têm a mesma largura. Como o :caractere não é muito largo, parece que um espaço foi introduzido.

Uma solução alternativa é definir a largura alfabetizada ::para 1 caractere, ou seja, literate={::}{{::}}1. Caso contrário, você poderá usar colunas flexíveis ou totalmente flexíveis. Outra opção seria usar uma fonte teletipo, caso em que os ::caracteres são mais largos e espaçados uniformemente para que não pareça que espaços extras foram introduzidos.

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:

insira a descrição da imagem aqui

informação relacionada