나는 다소 독특한 상황에 처해 있습니다. 명령 출력의 일부를 접두사 또는 접미사로 "표시"하고 싶습니다. 예를 들어:
\newcommand{\L}[1]{L\postfix{_i}}
그런 다음 다음과 같은 작업을 수행할 수 있습니다.
\newcommand{\est}[1]{\prefixof{#1}\hat{\mainbodyof{#1}}\postfixof{#1}}
이상적으로는 일반 텍스트에서 작동해야 합니다 . 예 \est{\lambda}
를 들어 . \hat{\lambda}
또한 은(는) \L
로 확장되어야 L_i
하며 \est{\L}
로 확장되어야 합니다 \hat{L}_i
.
나는 이것이 TeX(튜링 완전체 등)로 가능하다는 것을 알고 있지만 어디서부터 시작해야 할지, 질문에 macros
.
이 경우 @DavidCarlisle의 답변이 작동하지 않는 것 같습니다.
\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}
어쩌면 이것도 작동하게 만드는 것이 가능할까요?
\show\queueState
산출:
> \queueState=macro:
->\@protected@testopt \queueState \\queueState {}.
답변1
\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}