이 예에서는 다음과 같습니다.
\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
. 그렇지 않으면 유연하거나 완전 유연한 열을 사용할 수 있습니다. 또 다른 옵션은 텔레타이프 글꼴을 사용하는 것입니다. 이 경우 ::
문자가 더 넓고 균등한 간격으로 배치되어 추가 공백이 도입되는 것처럼 보이지 않습니다.
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}
결과: