bash 어휘 분석기를 사용하여 민트 환경 내에서 escapeinside를 어떻게 사용할 수 있나요?

bash 어휘 분석기를 사용하여 민트 환경 내에서 escapeinside를 어떻게 사용할 수 있나요?

escapeinside 기능은 bash 어휘 분석기에서 제대로 작동하지 않습니다. 이 문제를 해결할 수 있는 방법이 있나요?

MWE:

\documentclass{article}
\usepackage{minted}

\begin{document}

\begin{minted}[escapeinside=||]{bash}
#!/bin/bash
echo "Hello world!"
|\textrm{Some commentary here}|
\end{minted}

\end{document}

예시 이미지 출력

답변1

\이는 Bash 어휘분석기가 쉘 이스케이프 시퀀스를 처리하기 위해 백슬래시에 대한 catcode를 재정의하기 때문에 발생합니다 . 이는 명령을 시작하기 위해 escapeinside 시퀀스에서 사용할 수 없음을 의미합니다.

다행히도 다음을 수행하여 해결 방법이 가능합니다.또 다른문자가 활성 상태이고 csname을 사용하여 문자를 정의하여 인수를 활성화합니다. 선택한 문자가 생성된 코드의 다른 곳에 나타나지 않는 것이 중요합니다. 이 예에서는 물음표를 사용합니다 ?. 명령(예: )을 호출할 때 \textrm{arg}대신 을 호출하여 ?{textrm}{arg}물음표를 선택한 문자로 바꿉니다.

catcode 재정의가 문서의 나머지 부분에 영향을 미치지 않도록 전체 내용을 \begingroup/ 로 묶는 것이 중요합니다 .\endgroup

\documentclass{article}
\usepackage{minted}

\begin{document}

\begingroup
% REPLACE THE ? WITH YOUR CHOSEN CHARACTER ON BOTH OF THE FOLLOWING LINES
\catcode`\?=\active
\def?#1{\csname #1\endcsname}

\begin{minted}[escapeinside=||]{bash}
#!/bin/bash
echo "Hello world!"
|?{textrm}{Some commentary here}|
\end{minted}
\endgroup

\end{document}

수정 후 결과

관련 정보