我正在使用以下代码在用于吟唱的文本音节下排版减号(或加号):
\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
以使字体缩小到那么小。