Einen Teil eines Befehls als Präfix oder Postfix „markieren“, damit er nicht von einem anderen Befehl beeinflusst wird

Einen Teil eines Befehls als Präfix oder Postfix „markieren“, damit er nicht von einem anderen Befehl beeinflusst wird

Ich befinde mich in einer ziemlich einzigartigen Situation. Ich möchte Teile einer Befehlsausgabe als Präfix oder Postfix „markieren“. Zum Beispiel:

\newcommand{\L}[1]{L\postfix{_i}}

Und dann können Sie so etwas tun:

\newcommand{\est}[1]{\prefixof{#1}\hat{\mainbodyof{#1}}\postfixof{#1}}

Dies sollte im Idealfall mit normalem Text funktionieren, z. B. \est{\lambda}sollte zu erweitert werden \hat{\lambda}. Außerdem \Lsollte zu erweitert werden L_iund \est{\L}sollte zu erweitert werden \hat{L}_i.

Ich weiß, dass dies mit TeX möglich ist (da es Turing-vollständig ist usw.), aber ich habe keine Ahnung, wo ich überhaupt anfangen soll oder welche Tags ich außer genau in die Frage einfügen soll macros.

Es scheint, dass die Antwort von @DavidCarlisle in diesem Fall nicht funktioniert:

\documentclass{article}

\usepackage{etoolbox}

\newcommand\zzfix[3]{#1#2#3}%pre-main-post

\def\prefixof#1{\expandafter\zzpre#1\relax{#1}}
\def\postfixof#1{\expandafter\zzpost#1\relax{#1}}
\def\mainbodyof#1{\expandafter\zzmain#1\relax{#1}}


\def\zzpre#1{\ifx\zzfix#1\expandafter\oneoffive\else\expandafter\gobblepastrelax\fi}
\def\zzpost#1{\ifx\zzfix#1\expandafter\threeoffive\else\expandafter\gobblepastrelax\fi}
\def\zzmain#1{\ifx\zzfix#1\expandafter\twooffive\else\expandafter\afterrelax\fi}

\def\oneoffive#1#2#3\relax#4{#1}
\def\twooffive#1#2#3\relax#4{#2}
\def\threeoffive#1#2#3\relax#4{#3}
\def\afterrelax#1\relax#2{#2}
\def\gobblepastrelax#1\relax#2{}

\newcommand{\queueState}[1][]{\zzfix{}{\ell}{\ifstrempty{#1}{}{_{#1}}}}

\newcommand{\baseQuantity}[1]{\prefixof{#1}\bar{\mainbodyof{#1}}\postfixof{#1}}


\begin{document}
    But this does not work: $\baseQuantity{\queueState[1:N]}$
\end{document}

Nicht funktionierendes Beispiel

Vielleicht ist es möglich, es auch hierfür zum Laufen zu bringen?

\show\queueStateAusgabe:

> \queueState=macro:
->\@protected@testopt \queueState \\queueState {}.

Antwort1

Bildbeschreibung hier eingeben

\documentclass{article}

\newcommand\zzfix[3]{#1#2#3}%pre-main-post  



\renewcommand{\L}{\zzfix{}{L}{_i}}

\newcommand{\est}[1]{\prefixof{#1}\hat{\mainbodyof{#1}}\postfixof{#1}}

\def\prefixof#1{\expandafter\zzpre#1\relax{#1}}
\def\postfixof#1{\expandafter\zzpost#1\relax{#1}}
\def\mainbodyof#1{\expandafter\zzmain#1\relax{#1}}


\def\zzpre#1{\ifx\zzfix#1\expandafter\oneoffive\else\expandafter\gobblepastrelax\fi}
\def\zzpost#1{\ifx\zzfix#1\expandafter\threeoffive\else\expandafter\gobblepastrelax\fi}
\def\zzmain#1{\ifx\zzfix#1\expandafter\twooffive\else\expandafter\afterrelax\fi}

\def\oneoffive#1#2#3\relax#4{#1}
\def\twooffive#1#2#3\relax#4{#2}
\def\threeoffive#1#2#3\relax#4{#3}
\def\afterrelax#1\relax#2{#2}
\def\gobblepastrelax#1\relax#2{}



\begin{document}


Ideally, this should work on normal text, e.g. $\est{\lambda}$ should
expand to $\hat{\lambda}$. Also, $\L$ should expand to $L_i$, and $\est{\L}$
should expand to $\hat{L}_i$.
\end{document}

verwandte Informationen