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 \L
sollte zu erweitert werden L_i
und \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}
Vielleicht ist es möglich, es auch hierfür zum Laufen zu bringen?
\show\queueState
Ausgabe:
> \queueState=macro:
->\@protected@testopt \queueState \\queueState {}.
Antwort1
\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}