$\rangle$上的下标

$\rangle$上的下标

我正在尝试使下标$\rangle$正确:

对我来说,$\rangle_G$G 值太高,结果$\rangle_{_G}$甚至$\rangle_{\substack{\\G}}$不正确。有什么简单的方法可以解决这个问题吗?

答案1

这是使用提供的宏的一种方法\subrangle{}。可以调整 5pt 以适应。

\documentclass{article}
\usepackage{stackengine}
\def\subrangle#1{\stackengine{5pt}{}{$\!\scriptstyle #1$}{U}{l}{F}{F}{L}}
\begin{document}
$\langle x\rangle\subrangle{G} \langle x\rangle\subrangle{xyz}$
\end{document}

在此处输入图片描述

以下是将 5pt 改为 4pt 的步骤:

在此处输入图片描述

补充:如果希望使用_语法来调用\subrangle,可以使用以下序言定义:

\makeatletter
\let\save@rangle\rangle
\def\rangle{\save@rangle\@ifnextchar_{\expandafter\subrangle\@gobble}{}}
\makeatother

使用这样的语法,$\langle x\rangle_G \langle x\rangle_{xyz}$就会产生所需的结果。

答案2

通常的补救措施是添加一个降低下标的虚拟上标。我还会添加一个小的备份\!

这里有两个版本。第一个版本中,输出是固定的,两个向量之间用逗号分隔。第二个版本中,输入相同,但输出可根据个人喜好进行自定义;作为示例,我将其用于\mid分隔向量。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

% First version (simple)
\NewDocumentCommand{\inn}{mo}{%
  \langle #1\rangle
  \IfValueT{#2}{^{}_{\mspace{-3mu}#2}}%
}

% Second version, customizable
\NewDocumentCommand{\xinn}{>{\SplitArgument{1}{,}}mo}{%
  \doinnerproduct#1
  \IfValueT{#2}{^{}_{\mspace{-3mu}#2}}%
}
\NewDocumentCommand{\doinnerproduct}{mm}{%
  \langle #1\mid #2\rangle % decide here how to typeset the two vectors
}

\begin{document}

$\inn{x,y}$ or $\inn{x,y}[G]$

$\xinn{x,y}$ or $\xinn{x,y}[G]$

\end{document}

在此处输入图片描述

\mspace{-3mu}这是更改为时的输出\mspace{-1.5mu}

在此处输入图片描述

这是未经校正的输出:

在此处输入图片描述

答案3

好吧,无耻的推销。我昨天刚写了代码将下标和上标作为可选参数处理,所以我将在这里使用它。

该解决方案与 egreg 的完全相同,但是\inn{x,y}[G]您可以编写\inn{x,y}_{G}并获得完全相同的输出。

\documentclass{scrartcl}

\usepackage{xparse}

\ExplSyntaxOn
\cs_new_protected:Npn \__xparse_count_type_k:w #1
 {
  \__xparse_single_token_check:n { #1 }
  \quark_if_recursion_tail_stop_do:Nn #1 { \__xparse_bad_arg_spec:wn }
  \__xparse_count_mandatory:N
 }
\cs_new_protected:Npn \__xparse_count_type_K:w #1 #2
 {
  \__xparse_single_token_check:n { #1 }
  \quark_if_recursion_tail_stop_do:nn { #2 } { \__xparse_bad_arg_spec:wn }
  \__xparse_count_mandatory:N
 }
\cs_new_protected:Npn \__xparse_add_type_k:w #1
 { \exp_args:NNo \__xparse_add_type_K:w #1 { \c__xparse_no_value_tl } }
\cs_new_protected:Npn \__xparse_add_type_K:w #1 #2
 {
  \__xparse_flush_m_args:
  \__xparse_add_grabber_optional:N K
  \tl_put_right:Nn \l__xparse_signature_tl { #1 { #2 } }
  \__xparse_prepare_signature:N
 }
\cs_new_protected:Npn \__xparse_add_expandable_type_k:w #1
 {
  \exp_args:NNo \__xparse_add_expandable_type_K:w #1 { \c__xparse_no_value_tl }
 }
\cs_new_protected_nopar:Npn \__xparse_add_expandable_type_K:w #1 #2
 {
  \__msg_kernel_error:nnx { xparse } { invalid-expandable-argument-type } { K }
  \__xparse_add_expandable_type_m:w
 }
\cs_new_protected:Npn \__xparse_grab_K:w #1 #2 #3 \l__xparse_args_tl
 {
  \__xparse_grab_K_aux:NnnNn #1 { #2 } { #3 } \cs_set_protected_nopar:Npn
   { _ignore_spaces }
 }
\cs_new_protected:Npn \__xparse_grab_K_long:w #1 #2 #3 \l__xparse_args_tl
 {
  \__xparse_grab_K_aux:NnnNn #1 { #2 } { #3 } \cs_set_protected:Npn
   { _ignore_spaces }
 }
\cs_new_protected:Npn \__xparse_grab_K_trailing:w #1 #2 #3 \l__xparse_args_tl
 {
  \__xparse_grab_K_aux:NnnNn #1 { #2 } { #3 } \cs_set_protected_nopar:Npn
   { _ignore_spaces }
 }
\cs_new_protected:Npn \__xparse_grab_K_long_trailing:w #1 #2 #3 \l__xparse_args_tl
 {
  \__xparse_grab_K_aux:NnnNn #1 { #2 } { #3 } \cs_set_protected:Npn
   { _ignore_spaces }
 }
\cs_new_protected:Npn \__xparse_grab_K_aux:NnnNn #1 #2 #3 #4 #5
 {
  \exp_after:wN #4 \l__xparse_fn_tl ##1
   {
    \__xparse_add_arg:n { ##1 }
    #3 \l__xparse_args_tl
   }    
  \use:c { peek_meaning_remove #5 :NTF } #1
   { \l__xparse_fn_tl }
   {
    \__xparse_add_arg:n { #2 }
    #3 \l__xparse_args_tl
   }
 }
\prop_put:Nnn \c__xparse_shorthands_prop { a } { k \sb }
\prop_put:Nnn \c__xparse_shorthands_prop { b } { k \sp }
\prop_put:Nnn \c__xparse_shorthands_prop { A } { K \sb }
\prop_put:Nnn \c__xparse_shorthands_prop { B } { K \sp }
\ExplSyntaxOff

\NewDocumentCommand{\inn}{mma}{%
  \langle #1,#2\rangle
  \IfValueT{#3}{^{}_{\!#3}}%
}

\NewDocumentCommand{\xinn}{>{\SplitArgument{1}{,}}ma}{%
  \doinnerproduct#1%
  \IfValueT{#2}{^{}_{\!#2}}%
}
\NewDocumentCommand{\doinnerproduct}{mm}{%
  \langle #1\mid #2\rangle
}

\begin{document}

$\inn{x}{y}$ or $\inn{x}{y}_{G}$

$\xinn{x,y}$ or $\xinn{x,y}_{G}$

\end{document}

相关内容