我从高级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 是修饰字母卷音重音符。