
이 질문은 이미 여기에 존재합니다.중위 매크로/새 명령을 작성하는 방법은 무엇입니까?
그러나 나는 중위 명령을 사용하여 나누는 방법을 찾고 있지 않습니다. 이미 해당 명령이 존재한다는 것을 알고 있습니다. 다음에 대한 새로운 바이너리 중위 명령을 정의하는 방법을 찾고 있습니다.어느목적. 다음과 같은 것
\infixnewcommand{\T}{{bunchofstuff} {#1} {bunchofstuff} {#2} {bunchofstuff}}
그런 다음 나중에 코드에서 {2 z \T 3 y}
가 {{bunchofstuff} {2 z} {bunchofstuff} {3 y} {bunchofstuff}}
.
또한 wobsite에서는 담당자가 없다고 말하면서 다른 질문에 대해 논평하는 것을 허용하지 않았기 때문에 적어도 논평할 담당자가 충분할 때까지 새로운 질문을 시작해야 했습니다. 죄송해요 :D
내가 직면한 특별한 예는 tfrac을 정의하는 것이지만 infix이므로 tover가 될 것 같습니다. 그러나 분명히 말하자면, 나는 tover가 정의된 기존 패키지와 관련된 "솔루션"에는 관심이 없습니다. tover는 현재의 예일 뿐입니다. 나는 방법을 알고 싶습니다.나이 기능이 필요한 미래의 자신을 쉽게 볼 수 있기 때문에 내 코드에서 그러한 명령을 정의할 수 있습니다.
답변1
TeX는 토큰이 스캐너에 들어가는 순서대로 엄격하게 작동합니다. 토큰일 때티to be 검사가 확장 가능하면 TeX는 인수를 찾아 확장합니다(확장 없이). 토큰의 경우티매크로인 경우 해당 인수와 해당 인수는 대체 텍스트로 대체됩니다. 그렇지 않으면 해당 작업을 수행한 후 단순히 사라집니다(이것은 \expandafter
, 및 및 를 \noexpand
포함한 모든 조건 의 경우입니다 ).\else
\fi
만약에티확장이 불가능하므로 식도를 통해 처형됩니다. 일부 특정 경우에는 기본 토큰 목록의 토큰이 부활할 수 있습니다( \lowercase
및 의 경우 \uppercase
).
따라서 앞에 오는 내용을 검사할 수 있는 "중위 매크로"를 정의할 방법이 없습니다. 왜냐하면 그 앞에 오는 내용은 이미 확장되었거나 실행되었기 때문입니다. 두 경우 모두 토큰이 사라져 더 이상 사용할 수 없습니다.
\over
및 관련 프리미티브( \overwithdelims
, \atop
및 ) 의 경우는 \atopwithdelims
매우 다릅니다. 이는 매크로가 아니며 확장할 수 없습니다. 따라서 앞서 말했듯이처형된. 및 나머지 의 실행은 \over
현재 작성 중인 수학 목록을 옆으로 치워두고 새 목록을 시작하고 완료되면 다른 특별한 위치에 두는 것으로 구성됩니다. 저장된 두 목록은 분자와 분모로 "분수 원자"를 형성하는 데 사용됩니다. 케이스 에 구분 기호가 추가되고 케이스 withdelims
에 분수선이 설정됩니다 over
.
보시다시피 여기에는 매크로 확장이 포함되지 않습니다(물론 두 개의 수학 목록을 구성할 때 발생하지만 이는 관련이 없습니다). 이 프로세스는 수학 모드에 있을 때 TeX가 어떤 수학 목록을 작업하고 있는지 알고 있다는 사실을 활용합니다. 그러나 이는 사용자가 사용할 수 없습니다(LuaTeX에서는 가능할 수도 있지만 다른 문제입니다).
{
and 대신 특수 구분 기호를 사용하여 중위 표기법을 위조할 수 있지만 }
이 시점에서는 두 인수 매크로가 \frac
작동 방식과 비슷한 방식으로 더 실용적으로 보입니다.
답변2
중요한: 보다https://tex.stackexchange.com/a/638830/250119(및 아래 egreg의 설명) 코드가 수행하는 작업에 대한 설명(기본적으로 다음을 수행함)정규식 검색 및 바꾸기TeX 코드) 사용 여부를 결정하는 데 제한 사항이 무엇입니까?
소스 코드:
%! TEX program = lualatex
\documentclass{article}
\usepackage{rewriterest}
\begin{document}
\newcommand\Tprefix[2]{{bunchofstuff} #1 {bunchofstuff} #2 {bunchofstuff}}
\ExplSyntaxOn
\rewriterest:n {
\regex_replace_all:nnN {
\{
( [^\{\}]* ) % group 1: content does not contain any { or }
\\T\b
( [^\{\}]* ) % group 1: content does not contain any { or }
\}
} {
\\Tprefix % we're doing textual substitution here, so no \c{Tprefix}
\{ \1 \}
\{ \2 \}
} \RWRbody
}
\ExplSyntaxOff
test: {2 x \T 3 y}
\end{document}
출력: 예상대로입니다.
패키지가 필요합니다. 현재 소스 코드는 다음과 같습니다.https://github.com/user202729/TeXlib