免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

次数偏上的n次根号设计再次尝试

话说前两天群里再次提起次数偏上的n次根号,想起旧版论坛的这贴 http://kkkkuingggg.haotui.com/thread-1375-1-1.html,贴中1楼的图:

130415004423a5dd5f10f57d33.png
2015-7-20 00:28


然而却忘了当年是怎么做的,也没找到当时的相关文件,算了,重新研究下吧。

注意到 amsmath 重写了 n 次根号的相关代码,所以先试试从 amsmath 的代码入手。
amsmath 为了方便控制 n 次根号次数的位置,加入了 \leftroot 和 \uproot ,这应该跟我们的目的没太大关联,先不看那大段。
而关于放置次数的代码是

\def\r@@t#1#2{\setboxz@h{\$\m@th#1\sqrtsign{#2}\$}%
\dimen@\ht\z@\advance\dimen@-\dp\z@
\setbox\@ne\hbox{\$\m@th#1\mskip\uproot@ mu\$}%
\advance\dimen@ by1.667\wd\@ne
\mkern-\leftroot@ mu\mkern5mu\raise.6\dimen@\copy\rootbox
\mkern-10mu\mkern\leftroot@ mu\boxz@}

大概解读这段代码,如果没有设置 \leftroot 和 \uproot ,那么 \dimen@\ht\z@\advance\dimen@-\dp\z@ 后 \dimen@ 就是根号的高度与深度之差,因此后面放置次数的高度是它的0.6倍,这样,如果只是简单改一下这个高度,是不难办到的。
比如将 \advance\dimen@-\dp\z@ 改为 \advance\dimen@-\ht\rootbox ,这时变成了根号的高度与次数盒子高度之差,然后再改 .6 去掉,也就是

\def\r@@t#1#2{\setboxz@h{\$\m@th#1\sqrtsign{#2}\$}%
\dimen@\ht\z@\advance\dimen@-\ht\rootbox
\setbox\@ne\hbox{\$\m@th#1\mskip\uproot@ mu\$}%
\advance\dimen@ by1.667\wd\@ne
\mkern-\leftroot@ mu\mkern5mu\raise\dimen@\copy\rootbox
\mkern-10mu\mkern\leftroot@ mu\boxz@}

测试效果:
QQ截图20150720001527.gif
2015-7-20 00:21


结果确实就是比原来的升高了,而且总能升到与根号一样高,但是还不够前面的图的效果好,中间的几个应该再靠近根号一些。
然而这并不好办,注意到当根号最小和最大的时候位置都是刚刚好的,只是中间的需要移,那应该该怎么办好呢?用条件判断?那分界线是多少?待续……
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
$\href{https://kuingggg.github.io/}{\text{About Me}}$

话说,我也是读了那段代码之后才意识到 \sqrt{2} 和 \sqrt[]{2} 有很大差别,放一个空的可选参数不等于没放。
测试代码:\$1+\sqrt{2}+\sqrt[]{2}\$
注:在 MathJax 里没区别,得在真 LaTeX 里测试。

TOP

用条件判断是可以,初步写了下

\newdimen\sqrtminh
\newdimen\sqrtmaxh
\sqrtminh=10.4pt
\sqrtmaxh=36.4pt
\newcount\rootpianyi

\def\r@@t#1#2{\setboxz@h{\$\m@th#1\sqrtsign{#2}\$}%
%
\dimen@\ht\z@\advance\dimen@\dp\z@
\ifdim\dimen@>\sqrtminh
\ifdim\dimen@<\sqrtmaxh
\rootpianyi=3
\fi\fi
%
\dimen@\ht\z@\advance\dimen@-\ht\rootbox
\setbox\@ne\hbox{\$\m@th#1\mskip\uproot@ mu\$}%
\advance\dimen@ by1.667\wd\@ne
\mkern-\leftroot@ mu\mkern5mu
\mkern\rootpianyi mu
\raise\dimen@\copy\rootbox
\mkern-\rootpianyi mu
\mkern-10mu\mkern\leftroot@ mu
\boxz@}

测试效果:
QQ截图20150721144824.gif
2015-7-21 14:47


测试文件: nsqrttest.tex (998 Bytes)

但是这样有个硬伤,就是一旦换了另一套数学字体,或许就会乱了。
$\href{https://kuingggg.github.io/}{\text{About Me}}$

TOP

回复 3# kuing

修改了一下,不用 ifthen 宏包的 \ifthenelse,直接用 \ifdim 去比较,可能会好些

TOP

回复 3# kuing

再改了一下,直接设置分界的数字算了,不在后面临时测量了,反正一般不会遇到字体大小变化的情况,如果不用默认字体大小,在正文开始前再用原先的命令设定它也行。

TOP

返回列表 回复 发帖