\newcommand의 밑줄 문제

\newcommand의 밑줄 문제

저는 현재 논문을 작성 중이며 각 장이 별도의 프로젝트로 되어 있습니다. 함께 참여해야 한다는 말을 들었지만 지금은 너무 부담스러울 것 같아서 참여하고 싶지 않습니다. 나는 다른 장, 즉 다른 프로젝트에 있는 그림, 표, 방정식 등의 레이블을 참조할 수 있기를 원합니다. 그러면 결국 장을 단일 프로젝트로 연결할 때 상호 참조가 모두 잘 작동합니다. 이 단계에서 참조를 추가하면 참조가 존재하지 않기 때문에 분명히 경고가 표시됩니다. 내가 하고 싶은 것은 이러한 외부 참조를 켜고 끄는 스위치를 켜고 끌 수 있는 명령을 갖는 것입니다. 나는 이 명령을 \refext'외부 참조'라고 부릅니다. 처음에는 다음과 같은 코드가 있었습니다.

옵션 1: 아무것도 하지 않음, 아직 준비되지 않음, 참조를 단어로 출력

\newcommand{\refext}[1]{Ref. #1}

옵션 2: 네, 참고하세요. 이제 모든 항목을 하나의 문서로 정리할 준비가 되었습니다.

\newcommand{\refext}[1]{\ref{#1}}

나는 사용하지 않는 명령을 주석 처리하고 이런 방식으로 '전환 가능'했습니다. 레이블 이름을 인쇄하거나 일반 참조로 처리합니다.

레이블이 단일 단어인 경우에 작동합니다. 그러나 레이블의 제목에 밑줄이 포함되어 있으면 작동하지 않습니다. 모든 레이블이 그렇습니다.

얼마간 읽은 후, 제가 하고 싶은 것과 유사한 답변을 발견했습니다. \newcommand에 밑줄을 올바르게 전달하려면 어떻게 해야 합니까?

그러나 나는 이것을 시도했지만 나에게 효과가 없습니다.

\newcommand{\refext}{\begingroup\catcode`\_=11 \dorefext}

\newcommand{\dorefext}[1]{\ref{#1}}

'시작 문서 누락' 오류가 발생하지만 문서를 시작하기 전에 규칙을 정의하고 싶습니다. 다른 모든 \newcommand항목이 같은 위치에 있으면 문서가 잘 컴파일됩니다 .

Catcode 12도 작동하지 않습니다. 밑줄을 텍스트로 처리하면 더 좋을 것이라고 생각했기 때문에 11로 전환했습니다.

내가 여기서 뭘 하고 있는지 정말 모르겠어요! 저는 라텍스에 능숙하지 않아서 이 새로운 명령 영역에 약간 맹목적으로 들어갔습니다! 도움을 주시면 정말 감사하겠습니다. 감사합니다!

답변1

밑줄은 레이블의 일부일 수 있지만 인쇄는 일반적으로 허용되지 않습니다. 밑줄은 수학 공식에서 아래 첨자를 표시하기 위해 텍스트를 실행하는 데 사용되기 때문입니다.

옵션 2는 문제가 되지 않습니다. \ref단지 \refext. 옵션 1의 경우 참조가 아닌 키를 보려면 다음을 수행하십시오.

\newcommand{\refext}[1]{Ref.~\texttt{\detokenize{#1}}}

\detokenize명령은 다른 것 외에도 _인쇄 가능하게 만듭니다. \texttt본문에서 핵심을 더 분명하게 만들기 위해 추가했습니다 .

작은 예(옵션 2를 사용하겠습니다):

\documentclass{article}

\newcommand{\refext}[1]{Ref.~\texttt{\detokenize{#1}}}

\begin{document}

Here's some text where we cite \refext{some_thing} and go on

\end{document}

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

관련 정보