definiendo un nuevo comando infijo

definiendo un nuevo comando infijo

Esta pregunta ya existe aquí:¿Cómo escribir macro infija/nuevo comando?

Pero no estoy buscando una manera de dividir usando un comando infijo, para el cual sé que ya existe un comando. Estoy buscando una manera de definir un nuevo comando binario infijo paracualquierobjetivo. Algo como

\infixnewcommand{\T}{{bunchofstuff} {#1} {bunchofstuff} {#2} {bunchofstuff}}

Luego, más adelante en el código, {2 z \T 3 y}sería reemplazado por {{bunchofstuff} {2 z} {bunchofstuff} {3 y} {bunchofstuff}}.

Además, el sitio web no me permitió comentar sobre la otra pregunta, diciendo que no tenía representante, por lo que me vi obligado a comenzar una nueva pregunta, al menos hasta que tuviera suficiente representante para comentar. Lo siento por eso :D

El ejemplo particular al que me enfrento es definir tfrac, pero como infijo, así que supongo que sería tover. Pero para que quede claro, no estoy interesado en una "solución" que involucre un paquete preexistente donde se define tover. tover es sólo el ejemplo actual que nos ocupa. me interesa saber comoIPodría definir dicho comando en mi propio código, ya que puedo ver fácilmente que mi yo futuro requerirá esta capacidad.

Respuesta1

TeX trabaja con tokens estrictamente en el orden en que ingresan a su escáner. cuando una fichata examinar es ampliable, TeX lo expande buscando sus argumentos (sin expansión). si la fichates una macro, ella y sus argumentos se reemplazan con el texto de reemplazo; de lo contrario simplemente desaparece después de haber realizado su acción (este es el caso de \expandafter, \noexpandy todos los condicionales, incluidos \elsey \fi).

Sitno es expandible, se envía por la garganta para ser ejecutado. En algunos casos específicos, esto puede resucitar tokens en la lista principal de tokens (es el caso de \lowercasey \uppercase).

Por lo tanto, no hay manera de definir una “macro infija” que pueda examinar lo que viene antes, porque lo que viene antes ya ha sido expandido o ejecutado; en cualquier caso, el token ha desaparecido y ya no está disponible.

El caso de \overy primitivas relacionadas ( \overwithdelims, \atopy \atopwithdelims) es muy diferente. No son macros y no son ampliables, por lo que, como se dijo antes, sonejecutado. La ejecución de \overy los demás consiste en dejar a un lado la lista matemática actual que se está construyendo, iniciar una nueva y, al finalizar, colocarla en otro lugar especial; Las dos listas guardadas se utilizan luego para formar un “átomo de fracción” como numerador y denominador. Se agregan delimitadores para los withdelimscasos y se establece una línea de fracción para los overcasos.

Como puede ver, aquí no hay ninguna expansión macro (por supuesto, sí lo es al formar las dos listas matemáticas, pero esto es irrelevante). El proceso aprovecha el hecho de que TeX sabe en qué lista matemática está trabajando cuando está en modo matemático; sin embargo, esto no está disponible para el usuario (puede que esté con LuaTeX, pero es un asunto diferente).

Podrías falsificar la notación infija usando delimitadores especiales en lugar de {y }, pero en este punto una macro de dos argumentos parece más práctica de manera similar a como \fracfunciona.

Respuesta2

Importante: verhttps://tex.stackexchange.com/a/638830/250119(y el comentario de egreg a continuación) para obtener una explicación de lo que hace el código (básicamente hacer unbúsqueda y reemplazo de expresiones regularesen el código TeX), cuáles son sus limitaciones para decidir si quieres usarlo.


Código fuente:

%! 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}

Salida: como es de esperar.

Necesitas un paquete, actualmente su código fuente está enhttps://github.com/user202729/TeXlib

información relacionada