TeX 스타일 그룹({\blah ...})의 내용을 매크로 인수로 처리

TeX 스타일 그룹({\blah ...})의 내용을 매크로 인수로 처리

다음과 같이 TeX 스타일 매크로를 사용하는 대규모 문서를 조정하려고 합니다.

{\defun SomeFunctionName arg1 arg2}

매크로 \defun는 다음과 같이 정의됩니다 \newcommand{\defun}{\tt}.

더 복잡한 정의를 허용하기 위해 이 정의를 조정하여 해당 SomeFunctionName arg1 arg2부분을 인수로 검색할 수 있습니까? Fox 예를 들어, defun적절한 LaTeX 매크로라면 텍스트 주위에 상자를 넣거나 앞뒤에 무언가를 넣을 수 있습니다.

최소한의 예:

\documentclass{article}
\newcommand{\defun}{\tt}

\begin{document}
\section{\defun SomeFunctionName arg1 arg2}
Call {\defun SomeFunctionName} to foo the bar.
\end{document}

예를 들어 를 호출할 때마다 전후에 텍스트를 추가하려면 어떻게 해야 합니까 defun? {\defun ...}모든 항목을 편집하지 않고 인수로 내용을 처리하는 일반적인 접근 방식은 무엇입니까 ?

명확히 하자면, 이것은 20년 전의 대규모 문서입니다. 나는 그것을 쓰지 않았다.

답변1

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

\documentclass{article}

\protected\def\defun{\expandafter\zdefun\expandafter{\iffalse}\fi}

\def\zdefun#1{A \fbox{#1} B\egroup}

\begin{document}
\section{\defun SomeFunctionName arg1 arg2}
Call {\defun SomeFunctionName} to foo the bar.
\end{document}

여기

\iffalse}\fi

아무것도 확장하지 않으므로

\expandafter{\iffalse}\fi

일치하지 않는 단일 항목으로 확장되지만 {일치 항목이므로 {}정의에 포함될 수 있습니다.

그래서 주어진

 {\defun SomeFunctionName}

{그룹을 시작 하고

\defun SomeFunctionName}

한 단계로 확장됩니다.

\expandafter\zdefun\expandafter{\iffalse}\fi SomeFunctionName}

그리고 다음 단계에서는

\zdefun{SomeFunctionName}

\zdefun방금 삽입한 과 원래 파일에 있던 #1으로 구분되는 일반 인수가 있습니다 . (이것은 원래 그룹 닫기 구분 기호였지만 이제는 인수 구분 기호로 사용되므로 그룹을 닫지 않습니다.){}}

따라서 이는 한 단계로 확장됩니다.

A \fbox{SomeFunctionName} B\egroup

그리고

A \fbox{SomeFunctionName} B

조판되고 마침내

\egroup

{원본 파일에서 에 의해 시작된 그룹을 닫습니다 .

답변2

내가 선호하는 접근 방식은 선택한 편집기의 찾기 및 바꾸기 기능을 사용 {\defun하고 \textdefun{.

편집: @Clément가 지적했듯이 \section{\defun abc def}. 닫는 중괄호를 추가해야 하기 때문에 이러한 경우에는 더 정교한 정규식 기반 접근 방식이 적용되지 않을까 걱정됩니다.

답변3

당신은 그것을 할 수 있습니다 \aftergroup:

\documentclass{article}

\protected\def\defun{\aftergroup\newdefun\aftergroup{}}
\newcommand\newdefun[1]{\fbox{#1}}

\begin{document}

\tableofcontents

\section{Here {\defun SomeFunctionName arg1 arg2}}
Call {\defun SomeFunctionName} to foo the bar.

\end{document}

David Carlisle의 답변과 동일한 제한 사항이 있습니다. \defun한 쌍의 중괄호 안에 표시되지 않는 호출은 중단됩니다. 의 경우

\section{\defun Whatever}

처리하는 동안 오류가 발생합니다 \tableofcontents. 하지만 \section{{\defun Whatever}}잘 행동할 것이다.

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

관련 정보