20 根式嵌套及其改进代码

发布于 2022-03-06 20:24:13

今天曾经提过一个根式嵌套的问题,刚才删除了,现重新提问。代码如下

\documentclass{ctexart}
\usepackage{scalerel}
\def\depthgrowth{0.6pt}
\def\heightgrowth{1.8pt}
\newsavebox\zbox
\newcommand\zsqrt[1]{%
  \ignoremathstyle
  \savebox\zbox{$#1\rule{0pt}{.45\baselineskip}$}%
  \stretchrel*{\sqrt{\phantom{#1}\kern0.5pt}}%
              {\rule[-\dimexpr\dp\zbox+\depthgrowth]{0pt}{%
                \dimexpr\ht\zbox+\dp\zbox+\depthgrowth+\heightgrowth}}%
  \kern-\wd\zbox#1%
}
\begin{document}
比较漂亮的连根式$\zsqrt{2+\zsqrt{2+\zsqrt{2+\zsqrt{2}}}}$

能否改进代码,解决两个问题,一是根指数$\zsqrt[3]{x}$;二是上下标$\log_{\zsqrt{a}}x$
\end{document}

8c7300d9a1cb307f0c44b97d1888c9f.jpg

查看更多

关注者
0
被浏览
1.2k
雾月
雾月 2022-03-07
这家伙很懒,什么也没写!

更新:
缩放盒子到指定倍数,

% usepackage{amsmath,scalerel}
\makeatletter
\DeclareRobustCommand\zsqrt[2][]{%
 \setbox\zbox=\hbox{\ignoremathstyle
  \savebox\zbox{$#2\rule{0pt}{.45\baselineskip}$}%
  \@ifempty{#1}
    {\stretchrel*{\sqrt{\phantom{#2}\kern0.5pt}}%
      {\rule[-\dimexpr\dp\zbox+\depthgrowth]{0pt}{%
        \dimexpr\ht\zbox+\dp\zbox+\depthgrowth+\heightgrowth}}}
    {\stretchrel*{\sqrt[#1]{\phantom{#2}\kern0.5pt}}%
      {\rule[-\dimexpr\dp\zbox+\depthgrowth]{0pt}{%
        \dimexpr\ht\zbox+\dp\zbox+\depthgrowth+\heightgrowth}}}%
  \kern-\wd\zbox \box\zbox}%
 \mathchoice{\copy\zbox}{\copy\zbox}
   {\scalebox{.7}{\copy\zbox}}{\scalebox{.5}{\box\zbox}}
}
\makeatother

即使使用 pdflatex 编译也会很慢:

$
\zsqrt[\uproot{3}5]{2+\zsqrt[4]{2+\zsqrt[3]{2+\zsqrt[2]{2}}}}
\log_{\zsqrt{2}} x 
\log_{\zsqrt[\uproot{3}5]{2+\zsqrt[4]{2+\zsqrt[3]{2+\zsqrt[2]{2}}}}} x
\log_{\sqrt2}
\zsqrt[3]{2}
$ 

image.png


第一个,上下标的问题,代码中使用了 \ignoremathstyle 即表示忽略上下标的样式(TeX 通过 \displaystyle(D)、\textstyle(T)、\scriptstyle(S)、\scriptscriptstyle(SS) 来控制上下标的样式),在多次嵌套使用时,这一般是必须的,因为如果考虑这些 style,TeX 会生成在不同 style 下的盒子,如果嵌套使用,TeX 将生成 4 的指数个盒子,编译会非常慢,这是写在 TeX 源码中的,无法在宏层面更改,只能避免(避免方式就是忽略 style,统一使用 T)。
如果要在上下标中使用,可以使用 \scalebox 缩放固定比例,TeX 中默认的数学字体比例为 T:S:SS = 10:7:5。

根指数的情况也是如此,如果使用根指数,则指数也会生成额外的盒子,但是也不难实现。

% usepackage...
\makeatletter
\DeclareRobustCommand\zsqrt[2][]{%
  \ignoremathstyle
  \savebox\zbox{$#2\rule{0pt}{.45\baselineskip}$}%
  \@ifempty{#1}
    {\stretchrel*{\sqrt{\phantom{#2}\kern0.5pt}}%
      {\rule[-\dimexpr\dp\zbox+\depthgrowth]{0pt}{%
        \dimexpr\ht\zbox+\dp\zbox+\depthgrowth+\heightgrowth}}}
    {\stretchrel*{\sqrt[#1]{\phantom{#2}\kern0.5pt}}%
      {\rule[-\dimexpr\dp\zbox+\depthgrowth]{0pt}{%
        \dimexpr\ht\zbox+\dp\zbox+\depthgrowth+\heightgrowth}}}
  \kern-\wd\zbox#2%
}
\makeatother
$
\zsqrt{2+\zsqrt{2+\zsqrt{2+\zsqrt{2}}}} 
\log_{\scalebox{.7}{$\zsqrt{2}$}} x 
\log_{\sqrt2}
\zsqrt[3]{2}
$ 

image.png

2 个回答
亲爱的路人Brightie
非知名数学家,LaTeX使用者

根指数你是指的3次根号x吗?那就应该是sqrt[3]{x}

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览