Избегайте пробелов до и после `std::cout` в листингах

Избегайте пробелов до и после `std::cout` в листингах

В этом примере:

\documentclass{article}
\usepackage{listings}

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

\begin{document}

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

\end{document}

Что я получаю, так это std :: mutex mtx;. Мне не нужны эти автоматические пробелы в режиме листинга.

Есть ли способ их отключить?

решение1

Это следствие настройки по умолчанию фиксированных столбцов, т. е. каждый символ имеет одинаковую ширину. Поскольку символ :не очень широкий, он выглядит так, как будто вводится пробел.

Обходной путь — установить ширину literate в ::1 символ, т. е. literate={::}{{::}}1. В противном случае вы можете использовать гибкие или полностью гибкие столбцы. Другим вариантом будет использование шрифта teletype, в этом случае символы ::будут шире и равномерно распределены, так что не будет казаться, что введены дополнительные пробелы.

МВЭ:

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

Результат:

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

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