단일 매개변수가 `lstinputlisting`의 "캡션" 및 "경로" 매개변수 모두에 적용할 수 있는 새 명령을 생성하는 방법

단일 매개변수가 `lstinputlisting`의 "캡션" 및 "경로" 매개변수 모두에 적용할 수 있는 새 명령을 생성하는 방법

lstinputlisting단일 매개변수를 파일 경로로 허용하고 이를 lstinputlisting의 캡션 및 경로 매개변수 모두에 전달할 수 있는 패키지 목록의 명령 사용을 단순화하는 명령을 만들고 싶습니다 . 한마디로 파일 경로를 캡션으로 사용하세요.

다음 LaTeX 소스를 고려하십시오.

\documentclass[UTF8]{ctexart}
\usepackage{listings}

\newcommand{\myincludecode}[1]{\lstinputlisting[caption=#1, language=matlab]{#1}}
\newcommand{\mysecondincludecode}[2]{\lstinputlisting[caption={#2}, language=matlab]{#1}}


\begin{document}

\myincludecode{main.m}                        % line 10
\myincludecode{gen_data.m}                    % line 11

\mysecondincludecode{main.m}{main.m}          % line 13
\mysecondincludecode{gen_data.m}{gen\_data.m} % line 14

\end{document}

분명히 13 & 14행의 명령은 잘 작동하며 둘 다 해당 파일을 올바르게 포함하고 해당 캡션을 인쇄합니다.

10호선도 잘 작동합니다. 그러나 11번째 줄에는 해당 파일이 포함되어 있지만 캡션이 출력되지 않습니다. 로그 파일은 다음과 같이 말합니다.

Try.tex|11 error| Missing $ inserted.
Try.tex|11 error| Extra }, or forgotten $.
Try.tex|11 error| Missing $ inserted.
Try.tex|11 error| Missing } inserted.

밑줄이 내 명령을 무너뜨리는 것이 분명합니다. 그래서 myincludecode여기서 밑줄과 같은 특수 문자를 만났을 때에도 작동하도록 수정하는 방법이 궁금합니다 .

답변1

인수를 탈토큰화합니다.

\documentclass[UTF8]{ctexart}
\usepackage[T1]{fontenc}
\usepackage{listings}

\newcommand{\myincludecode}[1]{\lstinputlisting[caption=\detokenize{#1}, language=matlab]{#1}}

\begin{document}

\myincludecode{main.m}
\myincludecode{gen_data.m} 

\end{document}

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

답변2

밑줄 에는 mathmode기능이 있습니다. 다음 문자를 아래 첨자로 변경합니다. 그러므로 그것은 $신호를 기대합니다. 이것은 문제에 대한 간단한 해결책입니다.

\documentclass[UTF8]{ctexart}
\usepackage{listings}

\begin{document}
\begingroup
\newcommand{\myincludecode}[1]{\catcode`_=11\lstinputlisting[caption=#1, language=matlab]{#1}}
\myincludecode{main.m}
\myincludecode{gen_data.m}
\endgroup
$1_2$
\end{document}

Catcode는 카테고리 코드를 의미합니다. 카테고리는 _8이며 일부 기능이 할당되어 있습니다. 이를 11로 변경하면 밑줄이 문자 카테고리로 변경됩니다. 이는 아마도 여러분이 원하는 것일 것입니다. \begingroup& 사이에 이 명령을 추가하면 \endgroup아래 첨자 함수가 해당 범위 밖에서 그대로 유지됩니다.

답변3

파일 이름과 cite 또는 ref 태그에 "_"를 피해야 합니다. 또는 활성 문자 컨트롤과 함께 babel 패키지를 사용해야 합니다. 또는 여러 명령을 재정의하려고 시도하는 [strings] 옵션을 제공해야 합니다. 완벽하게 작동하지 않습니다). [strings] 옵션이나 바벨이 없더라도 "\include{file\string_name}"과 같이 가끔씩 밑줄을 사용할 수 있습니다.

기본 작업은 매우 간단하며 사용자 정의가 필요하지 않습니다. 그러나 LaTeX가 인수를 일부 제어 기능의 문자열이나 이름으로 사용하는 곳에서는 "_"를 사용하지 않아야 합니다. 여기에는 \cite 및 \ref에 대한 태그, \input, \include 및 \includegraphics에 대한 파일 이름, 환경 이름, 카운터 이름 및 배치 매개변수(예: [t])가 포함됩니다. 이러한 컨텍스트의 문제점은 '인수 이동'이지만 LaTeX가 이에 대한 "\보호 메커니즘"을 '켜지' 않는다는 것입니다.

이러한 위치에서 밑줄 문자를 사용해야 하는 경우 보호가 적용되도록 해당 문자열 인수를 사용하는 명령을 재정의하기 위해 패키지 옵션 [strings]가 제공됩니다(\protect는 \string으로 만들어짐). 이 조항이 영향을 미치는 명령 목록은 \UnderscoreCommands에 있으며 각 명령 앞에는 \do가 붙습니다. 그리고 \input, \includegraphics, \cite, \ref 및 그 변형을 다루는 다른 여러 가지도 있습니다.

참조하세요--http://ctan.imsc.res.in/macros/latex/contrib/underscore/underscore.pdf 그리고--이름/경로에 밑줄이 있는 파일 목록

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

관련 정보