在此示例中:
\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}
结果: