希腊文`\chi`的下标表达式:如何使其更小或偏移更低?

希腊文`\chi`的下标表达式:如何使其更小或偏移更低?

我对这种方式不满意下标显示为希腊字母 \chi。这个特定的字母向下偏移了一点。我有时必须在下标前加上前缀,\sciptscriptstyle这样,实际上,表达式可能看起来像

\sup{\chi_{\scriptscriptstyle A_n}(x)}[n]

在哪里

\RenewDocumentCommand{\sup}{m O{}}{
    \operatorname{sup}\ifstrempty{#2}{}{\limits_{\mathclap{\substack{\expandafter{\scriptscriptstyle{#2}}}}}}
        \expandafter{#1} 
}

我承认这个代码片段有点混乱,特别是由于可选参数的非规范声明以及通过而不是参数类型O{}进行测试以及——使用\ifstremptyoIfNoValueTF解析包。我还不完全清楚哪种语法更直接。

有没有办法重新定义 \chi 保持语法与所有语义等同的概念一致,即字母,但有仅有的 \chi的下标表达式较小或略低?澄清一下,我正在考虑重新定义下标运算_\chi。但我天真地认为 TeX 的语法不允许我这样做。

一个明显的解决方法是使用不同的语法定义一个新的宏,例如

\newcommand{\Chi}[1]{\chi_{\scriptscriptstyle{#1}}}

所以实际上我想要的就是

\chi_{expr}

哪里expr呈现较小或偏移较低比默认的要好。

答案1

使用\scriptscriptstyle不是一个好的印刷设备,因为它会产生不平衡的符号。

这是确保下标向下移动的方法,就像有上标一样。

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

\let\latexchi\chi
\makeatletter
\renewcommand\chi{\@ifnextchar_\sub@chi\latexchi}
\newcommand{\sub@chi}[2]{% #1 is _, #2 is the subscript
  \@ifnextchar^{\subsup@chi{#2}}{\latexchi^{}_{#2}}%
}
\newcommand{\subsup@chi}[3]{% #1 is the subscript, #2 is ^, #3 is the superscript
  \latexchi_{#1}^{#3}%
}
\makeatother

\begin{document}
\noindent
$\latexchi_{A}\chi_{A}$\\[2ex]
$\latexchi_{A_{n}}\chi_{A_{n}}$\\[2ex]
$\chi_{A}\quad\chi_{A}^{2}\quad\chi^{2}_{A}\quad\chi^{2}\quad\chi$
\end{document}

在此处输入图片描述

答案2

还有一个可能需要考虑的可能性:重新定义\chi,以便“数学支柱”的下半部分自动插入到字符之后。(附言:数学支柱是一个宽度为零的 TeX 对象——因此它是不可见的——并且高度和深度为圆括号,即 。 )这样,任何下标的位置都将由组合而不是符号)决定。由于数学支柱的深度超过了 的深度,因此下标最终将被放置在更低的位置——正如所希望的那样。{\chi\mathstrut}\chi\chi

以下解决方案使用amsart文档类,它会amsmath自动加载包。对于非 AMS 文档类,请务必加载amsmath包,以便\smash[t]{...}宏可用。

\documentclass[a4paper]{amsart}

\makeatletter
\@ifdefinable\@latex@chi{\let\@latex@chi\chi}
\renewcommand*\chi{{\@latex@chi\smash[t]{\mathstrut}}} % want only bottom half of \mathstrut
\makeatletter

\begin{document}
Text before $\chi_{A}$, text after.

Text before $\chi_{S_{i}}$, text after

Another couple of lines of text for testing consistency of the gap between the 
baselines.  Some more text.  Some more text.
\end{document}

输出:

代码输出

答案3

\documentclass{article}
\usepackage{mathtools}

\newcommand{\mychi}{\raisebox{0pt}[1ex][1ex]{$\chi$}}
\newlength{\temp}

\begin{document}
\[ \textrm{before}\quad \chi_A^2 \quad\textrm{after}\quad \mychi_A^2 \]

\settoheight{\temp}{$\chi$}
\noindent\the\temp\newline
\settoheight{\temp}{\mychi}
\the\temp
\end{document}

卡方

您可以根据需要微调 \rasisebox 参数。

答案4

您可以使用的功能xparse来定义新的下标和上标参数并将它们作为可选参数传递。这里是完整的代码和解释。

基本上,您在搜索和时分别使用a和参数,然后使用这些参数执行任何您想做的事情。我在这里使用 egreg 的解决方案来向您展示它是多么简单。bxparse_{#1}^{#2}

\let\originalchi\chi
\RenewDocumentCommand\chi{ab}
  {\originalchi
   \IfValueT{#1}{_{#1}}%
   \IfValueTF{#2}{^{#2}}{^{}}}
...
$\originalchi_{A}\chi_{A}$\\[2ex]
$\originalchi_{A_{n}}\chi_{A_{n}}$\\[2ex]
$\chi_{A}\quad\chi_{A}^{2}\quad\chi^{2}_{A}\quad\chi^{2}\quad\chi$

aand b(andA{<default>}B{<default>})的行为与其他xparse参数完全相同。

这是完整的可编译代码:

\documentclass{scrartcl}
\usepackage{mathtools,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 % May be create this?
 }
\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

\let\originalchi\chi
\RenewDocumentCommand\chi{ab}
  {\originalchi
   \IfValueT{#1}{_{#1}}%
   \IfValueTF{#2}{^{#2}}{^{}}}

\begin{document}
\noindent
$\originalchi_{A}\chi_{A}$\\[2ex]
$\originalchi_{A_{n}}\chi_{A_{n}}$\\[2ex]
$\chi_{A}\quad\chi_{A}^{2}\quad\chi^{2}_{A}\quad\chi^{2}\quad\chi$
\end{document}

相关内容