\stackengine 堆栈的垂直对齐

\stackengine 堆栈的垂直对齐

我需要在普通文本中的某些音节上方写几个字母。我发现了这个很棒的\stackengine软件包,它似乎可以完成这项工作。

\documentclass{article}
\usepackage{stackengine}
\begin{document}
\stackon{a}{w}\stackon{b}{x} \stackon{c}{y}\stackon{d}{z}
\end{document}

在此处输入图片描述

然而,由于字母的高度不同,堆叠的文本的垂直位置并不均匀。如何才能平衡这种差异,并在主线上方创建一种堆叠的次线?

答案1

中的默认堆栈类型stackengine是“ Short”堆栈,它们保存堆栈中字母之间的垂直空隙量。但也有“ Long”堆栈,它们保存基线跳过量。因此,只需调用\renewcommand\stacktype{L}

默认的 baselineskip 是\normalbaselineskip,但你可以用 重置它\setstackgap{L}{<length>}。或者你可以将可选参数传递给特定堆栈:\stackon[<length>]{...}

\documentclass{article}
\usepackage{stackengine}
\begin{document}
\renewcommand\stacktype{L}
\stackon{a}{w}\stackon{b}{x} \stackon{c}{y}\stackon{d}{z}
\end{document}

在此处输入图片描述

软件包文档,https://ctan.org/pkg/stackengine,把这一切都阐述得很清楚。

在此处输入图片描述

答案2

解决方法是使用\vphantom\smash

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

\begin{document}

\stackon{a\vphantom{b}}{w}\stackon{b}{x} \stackon{c\vphantom{d}}{\smash[b]{y}}\stackon{d}{z}

\end{document} 

在此处输入图片描述

答案3

以下是我的做法:

\documentclass{article}

\newcommand{\aw}[2]{%
  \leavevmode\vbox{%
    \offinterlineskip
    \halign{%
      \hfil##\hfil\cr
      \vphantom{y}#2\cr
      \noalign{\vskip0.4pt}
      \vphantom{b}#1\cr
    }%
  }%
}

\begin{document}

\aw{a}{w}\aw{b}{x} \aw{c}{y}\aw{d}{z} \aw{d}{q}

\end{document}

在此处输入图片描述

顶部字母较小的版本:

\documentclass{article}

\makeatletter
\newcommand{\aw}[2]{%
  \leavevmode\vbox{%
    \check@mathfonts
    \offinterlineskip
    \halign{%
      \hfil##\hfil\cr
      \fontsize{\ssf@size}{0}\selectfont
      \vphantom{y}#2\cr
      \noalign{\vskip0.4pt}
      \vphantom{b}#1\cr
    }%
  }%
}
\makeatother

\begin{document}

\aw{a}{w}\aw{b}{x} \aw{c}{y}\aw{d}{z} \aw{d}{q}

\end{document}

在此处输入图片描述

相关内容