
괄호 안의 코드와 괄호 안의 코드를 다른 색상으로 표시하고 싶습니다. 다음 문서에서는 다음 단어를 사용합니다.다시 괄호의도한 대로 녹색으로 표시됩니다.다시 밖에서의도한 대로 검은색이지만 페이지 여백까지 늘어납니다.
줄의 주석 처리를 제거하면 ,breaklines=true
줄이 사이에 끊어집니다.괄호그리고다시그러나 이 단어와 그 다음은 빨간색입니다. 즉, (
- )
로 구분된 섹션이 감지되었지만 닫는 부분이 )
무시된 것처럼 보입니다.
여기서 무슨 일이 일어나고 있는 걸까요?
덧셈:줄바꿈이 없는 경우에도 문제가 발생합니다. 예를 들어 텍스트의 모든 단어를 첫 글자로 줄이는 경우입니다. ()
예를 들어 . 대신 다른 종류의 구분 기호를 선택하면 문제가 사라집니다 {}
.
\documentclass{article}
\usepackage{color}
\usepackage{listings}
\lstdefinelanguage{new}{
moredelim=*[s][\color{red}]{(}{)},
moredelim=*[s][\color{green}]{[}{]},
}
\lstset{
language=new
%,breaklines=true
}
\begin{document}
\begin{figure}
\begin{lstlisting}
outside(in paren) [in brackets (paren+brackets) brackets again] outside again
\end{lstlisting}
\end{figure}
\end{document}
답변1
줄 바꿈 알고리즘에 의한 오른쪽 괄호의 특수 처리로 인해 발생하는 버그를 발견했을 수도 있습니다.listings
패키지. 실제로 패키지 SelectCharTable
에서 사용하는 Hook이 listings
실행되고 줄 바꿈이 활성화되면 )
매크로로 정의됩니다.
\lst@Def{`)}{\lst@breakProcessOther)}
어디
\lst@Def=macro:
#1->\lccode `\~=#1\lowercase {\def ~}.
불행하게도 이는 )
더 이상 구분 기호로 인식되지 않으며 결국 관찰하게 됩니다.
이 버그에 대한 수정 사항을 찾으려고 노력했지만 지금까지 성공하지 못했습니다. (제 TeX 프로그래밍 기술은 여전히 제한적입니다.) 따라서 제가 지금 제공할 수 있는 유일한 방법은 )
줄 바꿈 알고리즘 의 특수 처리를 취소하는 패치 형태의 해결 방법뿐입니다 .
\documentclass{article}
\usepackage{color}
\usepackage{listings}
\lstdefinelanguage{new}{
moredelim=*[s][\color{red}]{(}{)},
moredelim=*[s][\color{green}]{[}{]},
}
\lstset{
language=new,
breaklines=true
}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\lsthk@SelectCharTable}{%
\lst@ifbreaklines\lst@Def{`)}{\lst@breakProcessOther)}\fi
}{%
}{
}{
}
\makeatother
\begin{document}
\begin{lstlisting}
outside (in paren) [in brackets (paren+brackets) brackets again] outside again
\end{lstlisting}
\end{document}
결과 출력은 다음과 같습니다.
답변2
간단한 해결 방법은 닫는 괄호 ')'를 사용하는 대신 ']'와 같은 다른 문자를 사용하고 이를 닫는 괄호 ')'로 바꾸는 것입니다.
\begin{lstlisting[literate={(}{{\textbf{(}}}1
{]}{{\textbf{)}}}1]
(In text I'm closing using]
\end{lstlisting}