将 _{\mu 替换为 ^{\mu

将 _{\mu 替换为 ^{\mu

下列的这个答案,我写了一个命令,允许我写入\cont*{(D_\mu\phi)}以获得的效果(D_\mu\phi)^\dagger(D^\mu\phi)

\def\replace#1#2#3{%
  \def\tmp##1#2{##1#3\tmp}%
    \tmp#1\stopreplace#2\stopreplace}
\def\stopreplace#1\stopreplace{}

\makeatletter
\newcommand{\cont}{\@ifstar\@@cont\@cont}
\newcommand{\contsubst}[1]{\replace{#1}{_\mu}{^\mu}}
\def\@cont#1{{#1}\contsubst{#1}}
\def\@@cont#1{{#1}^\dagger\contsubst{#1}}
\makeatother

问题是,如果在花括号内,这显然不起作用\mu,例如F_{\mu\nu}

我尝试过\contsubst这样定义

\edef\LB{\string{}
\newcommand{\contsubst}[1]{\replace{\replace{#1}{_\mu}{^\mu}}{_\LB\mu}{^\LB\mu}}

但那不起作用。

编辑:

以下是该命令应执行的操作的一些示例:

\cont{A_\mu}  ->  A_\mu A^\mu
\cont{F_{\mu\nu}}  ->  F_{\mu\nu} F^{\mu\nu}
\cont*{\phi}  ->  \phi^\dagger \phi
\cont*{(D_\mu\phi_1)}  ->  (D_\mu\phi_1)^\dagger (D^\mu\phi_1)  % subscript 1 stays a subscript
\cont*{\Phi_{\mu\nu}}  ->  \Phi_{\mu\nu}^\dagger \Phi^{\mu\nu}

答案1

我认为你不应该强调\mu:总和指标可以是任何东西。

只需排版两次参数,但将第一个更改_^

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\cont}{sm}
 {
  \tl_set:Nn \l_suthree_cont_tl { #2 }
  \regex_replace_once:nnN { \_ } { \cU\^ } \l_suthree_cont_tl
  #2 \IfBooleanT{#1}{\sp{\dagger}} \tl_use:N \l_suthree_cont_tl
 }

\tl_new:N \l_suthree_cont_tl

\ExplSyntaxOff

\begin{document}

$\cont{A_\mu}$  $A_\mu A^\mu$

$\cont{F_{\mu\nu}}$  $F_{\mu\nu} F^{\mu\nu}$

$\cont*{\phi}$  $\phi^\dagger \phi$

$\cont*{(D_\mu\phi_1)}$ $(D_\mu\phi_1)^\dagger (D^\mu\phi_1)$

$\cont*{\Phi_{\mu\nu}}$ $\Phi_{\mu\nu}^\dagger \Phi^{\mu\nu}$

\end{document}

在此处输入图片描述

不过,我不会继续这个想法。由于您使用的东西既不是下标也不是上标,而是两者兼而有之,所以我会使用不同的字符来表示它。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\cont}{sm}
 {
  \tl_set:Nn \l_suthree_cont_sub_tl { #2 }
  \tl_set_eq:NN \l_suthree_cont_sup_tl \l_suthree_cont_sub_tl
  \regex_replace_once:nnN { \? } { \cD\_ } \l_suthree_cont_sub_tl
  \regex_replace_once:nnN { \? } { \cU\^ } \l_suthree_cont_sup_tl
  \tl_use:N \l_suthree_cont_sub_tl
  \IfBooleanT{#1}{\sp{\dagger}}
  \tl_use:N \l_suthree_cont_sup_tl
 }

\tl_new:N \l_suthree_cont_sub_tl
\tl_new:N \l_suthree_cont_sup_tl

\ExplSyntaxOff

\begin{document}

$\cont{A?\mu}$  $A_\mu A^\mu$

$\cont{F?{\mu\nu}}$  $F_{\mu\nu} F^{\mu\nu}$

$\cont*{\phi}$  $\phi^\dagger \phi$

$\cont*{\phi_1}$  $\phi_1^\dagger \phi_1$

$\cont*{(D?\mu\phi_1)}$ $(D_\mu\phi_1)^\dagger (D^\mu\phi_1)$

$\cont*{\Phi?{\mu\nu}}$ $\Phi_{\mu\nu}^\dagger \Phi^{\mu\nu}$

\end{document}

在此处输入图片描述

答案2

一种选择是使用etoolbox并修补强制参数,替换_^

在此处输入图片描述

\documentclass{article}

\usepackage{xparse,etoolbox}

\NewDocumentCommand{\cont}{s m}{%
  \def\mArg{#2}
  \patchcmd{\mArg}{_}{^}{}{}% \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
  #2
  \IfBooleanT{#1}{^\dagger}
  \mArg
}

\begin{document}

$\cont{A_\mu}$ % A_\mu A^\mu

$\cont{F_{\mu\nu}}$ % F_{\mu\nu} F^{\mu\nu}

$\cont*{\phi}$ % \phi^\dagger \phi

$\cont*{(D_\mu\phi_1)}$ % (D_\mu\phi_1)^\dagger (D^\mu\phi_1)  % subscript 1 stays a subscript

$\cont*{\Phi_{\mu\nu}}$ % \Phi_{\mu\nu}^\dagger \Phi^{\mu\nu}

\end{document}

答案3

xparse这是使用+ 的解决方案l3regex

\ExplSyntaxOn                                                      
\NewDocumentCommand{\cont}{sm}                                     
{                                                                  
  \tl_set:Nn \l_tmpa_tl {#2}                                       
  \regex_replace_all:nnN {\cD_(\cB.?\c{[mn]u})} {\cU^\1} \l_tmpa_tl
  {#2} \IfBooleanT{#1}{^\dagger} \tl_use:N \l_tmpa_tl              
}                                                                  
\ExplSyntaxOff                                                     

相关内容