다음과 같이 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}}
잘 행동할 것이다.