答案1
让 TeX 进行计算;对于这样的工作,较低级别的原语更加灵活。
\documentclass{article}
\newcommand{\fancyno}{%
\begingroup
\sbox0{N}%
N\vbox to\ht0{%
\offinterlineskip
\ialign{\hfil##\hfil\cr o\cr\noalign{\vfill}.\cr}%
}%
\endgroup
}
\begin{document}
\fancyno \quad {\LARGE\fancyno}
\end{document}
如果不想让句号位于基线上,则无需进行测量,假设\d{o}
总垂直尺寸小于N
。
\documentclass{article}
\newcommand{\fancyno}{%
\begingroup\tabskip 0pt % just for safety
\valign{##\vfill\cr\hbox{N}\cr\hbox{\d{o}}\cr}%
\endgroup
}
\begin{document}
\fancyno \quad {\LARGE\fancyno}
\end{document}
答案2
o
好的开始。需要从的高度中减去的高度作为N
提升量。的高度在内部o
可用,可以使用 e-TeX 的进行计算:\height
\raisebox
\dimexpr
\documentclass[12pt]{article}
\newlength{\nheigh}
\settoheight{\nheigh}{N}
\begin{document}
N\raisebox{\dimexpr\nheigh-\height\relax}{\d{o}}
\end{document}
可以定义一个宏,使用本地暂存寄存器来测量 的高度N
。然后,该宏会自动适应当前大小:
\documentclass[11pt]{article}
\newcommand*{\No}{%
\begingroup
\settoheight{\dimen0}{N}%
N\raisebox{\dimexpr\dimen0-\height\relax}{\d{o}}%
\endgroup
}
\begin{document}
{\Huge\No}{\huge\No}{\LARGE\No}{\Large\No}{\large\No}{\No}%
{\small\No}{\footnotesize\No}{\scriptsize\No}{\tiny\No}
\end{document}
答案3
除了使用\raisebox
,您还可以堆叠\vbox
es。为此,\lineskip
必须为零以避免不必要的空间,并且\lineskiplimit
必须足够大,以便\lineskip
首先使用 。然后,您可以\vtop
为每个字符创建一个,该字符与字符上方的空框对齐,以使顶部对齐:
\documentclass[12pt]{article}
\newcommand\topalign[1]{%
\leavevmode%
\hbox{%
\providecommand\tachar[1]{\vtop{\null\hbox{##1}}}%
\vbox{%
\lineskip0pt%
\lineskiplimit\maxdimen%
\hbox{%
#1%
}%
\null%
}%
}%
}
\begin{document}
\topalign{\tachar{N}\tachar{\d{o}}}
\end{document}
采用这种方法,您不必知道哪个字符最大。