使用 mathop 减少行距和堆叠下标

使用 mathop 减少行距和堆叠下标

我正在使用以下代码在用于吟唱的文本音节下排版减号(或加号):

\def\mi#1{$\displaystyle{\mathop{\mbox{\smash {#1}}}_{\scriptscriptstyle -}}$}

这提供了相当令人满意的结果,但我希望文本更紧密地结合在一起。其他示例\baselineskip\fontsize被证明是无效的(或者我使用它们的方式不对)。

Bl\textbf{e}ssed ind\textbf{e}ed \pl{is} the m\textbf{a}n\\*
who f\textbf{o}llows not the c\textbf{o}unsel \mi{of} \pl{the} w\textbf{i}c\mi{ked,}\

在此处输入图片描述

附带说明一下/问题,按照我在这里的做法,将强调的元音加粗,将其与文本的其余部分分开,并产生字距调整问题 - 参见第二行中“follows”中的“o”。

答案1

我会使用 ooalign 而不是 mathop。如果您希望 - 与 + 上的横线对齐,那么这大概是最接近的了。如果您希望 - 升高更多,您可以这样做\smash。我还引入了一个可选参数,允许您在元音前给出字母,以便它可以测量是否有字距调整,如果有,它会将字距调整一半(考虑到粗体无论如何都更宽)。

在此处输入图片描述

\documentclass{article}
\parindent0pt

\def\pl#1{\oalign{\smash{#1}\cr\hfil$\scriptscriptstyle+$\hfil\cr}}
\def\mi#1{\oalign{\smash{#1}\cr\hfil$\scriptscriptstyle-$\hfil\cr}}

\newcommand\bv[2][]{%
  \ifx\relax#1\relax\textbf{#2}%
  \else
  \setbox0\hbox{#1#2}%
  \setbox2\hbox{#1\textbf{#2}}%
  #1\kern\dimexpr(\wd0-\wd2)/2\relax\textbf{#2}%
  \fi}

\begin{document}

Bl\textbf{e}ssed in\bv[d]{e}ed \pl{is} the m\bv{a}n\\*
who \bv[f]{o}llows not the c\textbf{o}unsel \mi{of} \pl{the} \bv[w]{i}c\mi{ked,}
\end{document}

根据要求提供带有额外空格参数的版本

\documentclass{article}
\parindent0pt
\parskip\baselineskip

\makeatletter
\def\pl#1{\oalign{\smash{#1}\cr\hfil$\scriptscriptstyle+$\hfil\cr}}
\def\mi#1{\oalign{\smash{#1}\cr\hfil$\scriptscriptstyle-$\hfil\cr}}
\newcommand\bv[1][]{\def\tmp{#1}\@bv}
\newcommand\@bv[2][\z@]{%
  \ifx\tmp\@empty
   \textbf{#2}%
  \else
  \setbox0\hbox{\tmp#2}%
  \setbox2\hbox{\tmp\textbf{#2}}%
  \tmp\kern\dimexpr(\wd0-\wd2)/2-#1\relax\textbf{#2}%
  \fi}
\makeatother

\begin{document}

Bl\textbf{e}ssed in\bv[d]{e}ed \pl{is} the m\bv{a}n\\*
who \bv[f]{o}llows not the c\textbf{o}unsel \mi{of} \pl{the} \bv[w]{i}c\mi{ked,}



Bl\textbf{e}ssed in\bv[d]{e}ed \pl{is} the m\bv{a}n\\*
who \bv[f][-2pt]{o}llows not the c\textbf{o}unsel \mi{of} \pl{the} \bv[w]{i}c\mi{ked,}

Bl\textbf{e}ssed in\bv[d]{e}ed \pl{is} the m\bv{a}n\\*
who \bv[f][2pt]{o}llows not the c\textbf{o}unsel \mi{of} \pl{the} \bv[w]{i}c\mi{ked,}
\end{document}

在此处输入图片描述


对于字母,可能比字母更宽,从而强制留出空格,因此可以通过添加任一侧来-隐藏大部分宽度。此外,在字母之间通常存在字距的情况下,通常会丢失字距,而不是为每个可能的组合添加另一个可选参数,这会定义一个命令,以便插入 a 和 w 之间的字距,这会导致!aw\kernfix\kernfix a w

在此处输入图片描述

\documentclass{article}
\parindent0pt
\parskip\baselineskip

\makeatletter
\def\pl#1{\oalign{\smash{#1}\cr\hfil$\scriptscriptstyle\!+\!$\hfil\cr}}
\def\mi#1{\oalign{\smash{#1}\cr\hfil$\scriptscriptstyle\!-\!$\hfil\cr}}
\newcommand\bv[1][]{\def\tmp{#1}\@bv}
\newcommand\@bv[2][\z@]{%
\typeout{[[\tmp]][[#1]][[#2]]}%
  \ifx\tmp\@empty
   \textbf{#2}%
  \else
  \setbox0\hbox{\tmp#2}%
  \setbox2\hbox{\tmp\textbf{#2}}%
  \tmp\kern\dimexpr(\wd0-\wd2)/2-#1\relax\textbf{#2}%
  \fi}


\def\kernfix#1#2{%
  \setbox0\hbox{#1\kern\z@#2}%
  \setbox2\hbox{#1#2}%
  \kern\dimexpr\wd2-\wd0\relax}

\makeatother

\begin{document}

Bl\textbf{e}ssed in\bv[d]{e}ed \pl{is} the m\bv{a}n\\*
who \bv[f]{o}llows not the c\textbf{o}unsel \mi{of} \pl{the} \bv[w]{i}c\mi{ked,}


aaa  aw a\kern0pt w \mi{a}\pl{\bv[w]{a}y}! bbb


aaa  aw a\kern0pt w \mi{a}\kernfix{a}{w}\pl{\bv[w]{a}y}! bbb

Bl\textbf{e}ssed in\bv[d]{e}ed \pl{is} the m\bv{a}n\\*
who \bv[f][-2pt]{o}llows not the c\textbf{o}unsel \mi{of} \pl{the} \bv[w]{i}c\mi{ked,}

Bl\textbf{e}ssed in\bv[d]{e}ed \pl{is} the m\bv{a}n\\*
who \bv[f][2pt]{o}llows not the c\textbf{o}unsel \mi{of} \pl{the} \bv[w]{i}c\mi{ked,}
\end{document}

要获得更小的字体,请使用

\def\pl#1{\oalign{\smash{#1}\cr\hfil\fontsize{2pt}{2pt}\fontencoding{T1}\selectfont+\hfil\cr}}
\def\mi#1{\oalign{\smash{#1}\cr\hfil\fontsize{2pt}{2pt}\fontencoding{OMS}\selectfont\char0\hfil\cr}}

在此处输入图片描述

如果你使用默认的 cm 字体,则需要添加

\RequirePackage{fix-cm}

\documentclass以使字体缩小到那么小。

相关内容