避免在清单中的 `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

这是默认的固定列设置的结果,即每个字符的宽度相同。由于字符:不太宽,所以看起来像是引入了空格。

一种解决方法是将文字宽度设置为::1 个字符,即literate={::}{{::}}1。否则,您可以使用灵活或完全灵活的列。另一种选择是使用电传打字机字体,在这种情况下,字符::更宽且间距均匀,因此看起来不会引入额外的空格。

梅威瑟:

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

结果:

在此处输入图片描述

相关内容