\underset 的垂直间距和其他调整

\underset 的垂直间距和其他调整

请考虑以下代码:

\documentclass[a4paper]{article}

\usepackage{ngerman}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}

\newcommand{\uunderline}[1]{\underline{\underline{#1}}}

\begin{document}
\[  
    s=\left(
    a_1,
    \underset{\big\uparrow}{a_2},
    a_3,
    \uunderline{a_4},
    a_5,
    a_6
    \underset{\underset{\big{a_0}}{\big\uparrow}}{,}
    a_7,
    d^{\left(k\right)},
    a_8,
    a_9
    \right)
\]
\end{document}

enter image description here

  1. 如您所见,\underset逗号周围产生了难看的间距。 是否有可能避免这种情况,以便逗号及其间距都相同?
  2. 是否可以让左/右括号不考虑“ \underset/ \uparrow”?
  3. 使用我的 Miktex 发行版时,pdflatex 会抛出错误:Missing delimiter (. inserted). ...set{\underset{\big{a_0}}{\big\uparrow}}{,}。我猜这与有关,\big但如果忽略它,则会a_0变得太小(期望的大小与其他的大小相同a_i)。我该如何解决这个问题?

答案1

stackengine包有一个明确的定义\useanchorwidth,如果设置了True),则忽略堆叠材料的宽度,只采用“锚”材料的宽度。当然,您必须使用语法stackengine

可以使用可选参数来改变下划线的间隙,如术语的情况所示a_0

\documentclass[a4paper]{article}
\usepackage{ngerman}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{stackengine}
\def\useanchorwidth{T}
\stackMath
\newcommand{\uunderline}[1]{\underline{\underline{#1}}}
\begin{document}
\[
    s=\bigl(
    a_1,
    \stackunder{a_2}{\scriptstyle\big\uparrow},
    a_3,
    \uunderline{a_4},
    a_5,
    a_6
    \stackunder[8pt]{,{}}{\stackunder{\scriptstyle\big\uparrow}{a_0}}
    a_7,
    d^{\left(k\right)},
    a_8,
    a_9
    \bigr)
\]
\end{document}

enter image description here

答案2

这种方法需要mathtools而不是amsmath

\underset可以使用来忽略这两个元素\smash;请注意,如果要在此方程式下方打印某些内容,则必须稍后补偿这个被消除的深度。由于任一粉碎元素的高度都不大于未粉碎元素的高度,因此不需要补偿。

通过将a_0第二个箭头设置在 中,可以将它恢复到正常大小\mbox,它不会缩放,并且可以通过在 内设置所有内容来忽略它的宽度\mathclap

由于箭头也比逗号宽,所以也需要用 括起来\mathclap,但这会使该元素的宽度有点窄,所以逗号看起来太紧。因此,整个元素的类被重置为以\mathpunct恢复正确的逗号行为。

最后,\mboxeda_0比不加框时更靠近箭头,因此\mathstrut插入 a 来恢复高度。

有点复杂,但它为分割数学结构并以适当的间距将它们重新组合提供了很好的练习。

\documentclass[a4paper]{article}

\usepackage{ngerman}
\usepackage[utf8]{inputenc}
%\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{amssymb}

\newcommand{\uunderline}[1]{\underline{\underline{#1}}}

\begin{document}
\thispagestyle{empty}
\[  
    s=\left(
    a_1,
   \smash{\underset{\big\uparrow}{a_2}},
    a_3,
    \uunderline{a_4},
    a_5,
    a_6
    \mathpunct{
     \smash{\underset{\mathclap{\underset{\mbox{$a_0\mathstrut$}}{\big\uparrow}}}{,}}}
    a_7,
    d^{\left(k\right)},
    a_8,
    a_9
    \right)
    \vphantom{\underset{\mathclap{\underset{\mbox{$a_0\mathstrut$}}{\big\uparrow}}}{,}}
\]
\end{document}

output of example code

编辑:

受评论提示,\vphantom已添加,以便显示后的文本将正确间隔。(同样,未经测试。)

答案3

只是不要使用\left\right,同时以不同的方式修复底集。

\documentclass[a4paper]{article}

\usepackage{ngerman}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}

\newcommand{\uunderline}[1]{\underline{\underline{#1}}}

\begin{document}
\[
    s=\bigl(
    a_1,
    \underset{\big\uparrow}{a_2},
    a_3,
    \uunderline{a_4},
    a_5,
    a_6
    \mathpunct{\underset{\underset{\makebox[0pt]{$a_0$}}{\makebox[0pt]{$\big\uparrow$}}}{,}}
    a_7,
    d^{\left(k\right)},
    a_8,
    a_9
    \bigr)
\]
\end{document}

enter image description here

更多人力投入:

\documentclass[a4paper]{article}

\usepackage{ngerman}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}

\newcommand{\uunderline}[1]{\underline{\underline{#1}}}

\makeatletter
\newcommand{\zerounderset}[3][\mathord]{%
  #1{\vtop{
    \let\\\cr
    \baselineskip\z@skip\lineskip.25ex
    \ialign{\hidewidth$##$\hidewidth\crcr
      \omit$#3$\cr
      #2\crcr
    }%
  }}%
}
\makeatother

\begin{document}
\[  
    s=\bigl(
    a_1,
    \zerounderset{\big\uparrow}{a_2},
    a_3,
    \uunderline{a_4},
    a_5,
    a_6
    \zerounderset[\mathpunct]{\big\uparrow\\a_0}{,}
    a_7,
    d^{\left(k\right)},
    a_8,
    a_9
    \bigr)
\]
\end{document}

答案4

三条建议和一条评论:

  • 加载ulem包并使用其\uuline宏,而不是定义名为的宏\uunderline

  • 使用\substack\mathclap宏将箭头和a_0术语放在逗号下方。如果需要,使用\mathpunct指令确保相关逗号周围的正常间距。

  • 不要自动调整括号的大小;而是使用\bigl(\bigr)

  • 顺便说一句,该ngerman软件包已被弃用;请使用该选项加载 babel ngerman

enter image description here

\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{mathtools}
\usepackage[normalem]{ulem}  % <- new 

\begin{document}
\[  
    s=\bigl(
    a_1,
    \underset{\big\uparrow}{a_2},
    a_3,
    \uuline{a_4},
    a_5,
    a_6
    \mathpunct{\underset{\mathclap{\substack{\big\uparrow \\ \textstyle a_0}}}{,}}
    a_7,
    d^{(k)},
    a_8,
    a_9
    \bigr)
\]
\end{document}

相关内容