新しいインフィックスコマンドを定義する

新しいインフィックスコマンドを定義する

この質問は、すでにここに存在しています:インフィックスマクロ/新規コマンドの書き方は?

しかし、私はすでにコマンドが存在することを知っているインフィックスコマンドを使用して除算する方法を探しているわけではありません。私は、新しいバイナリインフィックスコマンドを定義する方法を探しています。どれでも目的。

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

その後、コード内では{2 z \T 3 y}が に置き換えられます{{bunchofstuff} {2 z} {bunchofstuff} {3 y} {bunchofstuff}}

また、wobsite では、評判が足りないという理由で他の質問にコメントすることができませんでした。そのため、少なくともコメントできるだけの評判が集まるまでは、新しい質問を始めざるを得ませんでした。申し訳ありません :D

私が直面している特定の例は、tfracの定義ですが、インフィックスなので、toverになると思います。ただし、明確にしておくと、toverが定義されている既存のパッケージを含む「ソリューション」には興味がありません。toverは単に手元にある例です。どのように将来自分がこの機能を必要とすることは容易に想像できるので、自分のコードでそのようなコマンドを定義することができます。

答え1

TeXはトークンをスキャナに入った順番に厳密に処理します。トークンがT検査するトークンが展開可能な場合、TeXはそれを展開して引数を探します(展開なし)。トークンがT\expandafterがマクロである場合、マクロとその引数は置換テキストに置き換えられます。それ以外の場合は、アクションを実行した後に単に消えます (これは、およびとを\noexpand含むすべての条件文の場合です)。\else\fi

もしTが展開不可能な場合、実行されるために食道に送られます。特定のケースでは、これによってメイン トークン リスト上のトークンが復活することがあります ( および の場合\lowercase) \uppercase

したがって、その前にあるものを調べることができる「インフィックス マクロ」を定義する方法はありません。その前にあるものはすでに展開または実行されているためです。どちらの場合もトークンは消えてしまい、使用できなくなります。

\overおよび関連するプリミティブ(\overwithdelims\atopおよび)の場合は\atopwithdelims大きく異なります。これらはマクロではなく展開不可能なので、前述のように、処刑されたおよびその他の実行は、\over現在作成中の数式リストを脇に置いて新しいリストを開始し、完了したら別の特別な場所に置くことで構成されます。保存された 2 つのリストは、分子と分母として「分数アトム」を形成するために使用されます。ケースごとに区切り文字が追加されwithdelims、ケースごとに分数線が設定されますover

ご覧のとおり、ここではマクロ展開は行われていません (もちろん、2 つの数式リストを作成するときには行われますが、これは無関係です)。このプロセスでは、数式モードのときに TeX がどの数式リストで作業しているかを認識しているという事実を利用しています。ただし、これはユーザーには提供されていません (LuaTeX では可能かもしれませんが、それは別の問題です)。

{およびの代わりに特殊な区切り文字を使用して中置表記を偽装することもできます}が、現時点では、 と同様に 2 つの引数を持つマクロの方が実用的であると思われます\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

関連情報