一个用于在下面添加重音的宏

一个用于在下面添加重音的宏

我从高级TEXbook,第 446 页。它应该将重音符号#1 放在字符#2 下方。

\def\subaccent#1#2{\leavevmode\vtop{\setbox0=\hbox{#2}
\copy0\nointerlineskip\hbox to\wd0{\hss\char#1\hss}}}

我将代码放入自己编写的 subaccent.sty 文件中,然后在序言中使用 \usepackage{subaccent}。

但是,在使用 \subaccent 调用宏时,出现以下错误:

! Missing number, treated as zero.
<to be read again>
\hss

我正在使用 Lualatex 进行编译。有人能告诉我这个宏有什么问题吗?

答案1

该宏要求#1为数字。我建议进行修改,因为我怀疑您需要将其设置为字母。

\documentclass[12pt, b5paper]{book}
\usepackage{fontspec}

\setmainfont{Calluna}

\newcommand{\ppacute}[1]{\accent"00B4 #1}
\newcommand{\ppbarunder}[1]{%
  \begingroup
  \sbox0{#1}%
  \setbox2=\vtop{
    \copy0
    \nointerlineskip
    \kern.1ex
    \hbox to\wd0{\hss\char"AF\hss}
  }%
  \dimen0=\dp0 \advance\dimen0 .25ex
  \dp2=\dimen0
  \leavevmode\box2
  \endgroup
}

\begin{document}
\fboxsep=0pt \fboxrule=0.1pt

aha\ppacute{m}tattva, rúpa, tanmátra

\ppacute{t} \ppbarunder{n} 
\fboxsep=0pt \fboxrule=0.1pt
\fbox{\ppbarunder{n}}
\fbox{\ppbarunder{g}}

\end{document}

需要进行修改以消除由于字符 U+00AF 具有高度而增加的深度。

这两个\fbox命令,加上奇怪的设置\fboxrule\fboxsep,是为了表明深度设置准确。

在此处输入图片描述

如果我添加代码

\newcommand{\pphatunder}[1]{%
  \begingroup
  \setbox0=\hbox{#1}%
  \setbox2=\vtop{
    \copy0
    \nointerlineskip
    \kern0.05ex
    \hbox to\wd0{\hss\char"2C6\hss}
  }%
  \dimen0=\dp0 \advance\dimen0 .45ex
  \dp2=\dimen0
  \leavevmode\box2
  \endgroup
}

然后输入

\pphatunder{n}
\fboxsep=0pt \fboxrule=0.1pt
\fbox{\pphatunder{n}}
\fbox{\pphatunder{g}}

生产

在此处输入图片描述

字符 U+02C6 是修饰字母卷音重音符。

相关内容