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

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}

결과:

여기에 이미지 설명을 입력하세요

관련 정보