为什么我得到一个除以零的错误?

为什么我得到一个除以零的错误?

我正在尝试回答我之前提出的一个问题:美国高中教科书的弧线表示法更佳

我写了一条新命令

\documentclass{article}
\usepackage{graphicx}

\newcommand\arc[1]{%%
  \setbox9=\hbox{#1}%%
  \ooalign{%%
    \raisebox{\ht9}{%%
      \resizebox{\wd9}{\dimexpr1.75\height}{%%
        \rotatebox{90}{)}}}\cr#1}}

\begin{document}

\arc{ABC}

\arc{A}

\arc{AB}

\end{document}

运行正常。但是,当我尝试按如下方式定义时,问题出现了:

\newcommand\arc[1]{%%
  \setbox9=\hbox{#1}%%
  \ooalign{%%
    \raisebox{\ht9}{%%
      \resizebox{\wd9}{\dimexpr1.75\height}{%%
        \rotatebox{-90}{(}}}\cr#1}}

我尝试过各种方法来避免这种情况(例如将旋转的材料包裹在自己的盒子里),但都无济于事。

为什么第二种方法不起作用?

答案1

如果我做

\sbox0{\rotatebox{-90}{(}}\the\ht0

我明白了0.0pt,这应该可以解释这个问题。为什么?让我们看看当我输入

(\rotatebox{-90}{(}\vrule height0.1pt depth 0.1pt width 4pt

\vrule只显示基线的位置):

在此处输入图片描述

这是括号边界框的图片:

在此处输入图片描述

(再次强调,规则显示了基线)。

如果我做

\newcommand\arc[1]{{%%
  \sbox\arcbox{#1}%%
  \ooalign{%%
    \raisebox{\ht\arcbox}{%%
      \resizebox{\wd\arcbox}{\dimexpr1.75\height}{%%
        \rotatebox[origin=c]{-90}{(}}}\cr#1}}}

(请注意多出的一对括号)我从中得到\arc{ABC}

在此处输入图片描述

还请注意,我声明\newsavebox\arcbox;最好避免随机使用临时寄存器。

总是确保它\ooalign在一个组内。


解释:当你旋转而不指定中心时,将使用左下角。因此,旋转 -90 度的框将总是导致高度为零。

相关内容