提问于:
浏览数:
3393
## 编译环境
操作系统
* [x] Windows 7/8/10
* [ ] macOS
* [ ] Linux
`若需勾选,请把[ ]改成[x]`
Tex发行版
* [x] TexLive `年份`
* [ ] MikTeX `版本号`
* [ ] CTeX
`若需勾选,请把[ ]改成[x]`
## 我的问题
````
\documentclass[10pt]{ctexart}
\usepackage[a4paper]{geometry}
\usepackage[version=4]{mhchem} %化学公式
\usepackage{tikz} %绘图
\def\HS{\hspace*{0.1em}\linebreak[1]}
\makeatletter
\newcommand*{\getlength}[1]{\strip@pt#1}%单位转数字
\makeatother
\newlength{\keylength}
\newcommand{\key}[1]{%
\settowidth{\keylength}{~~#1~~}%
\dimen0=0.10\keylength
\pgfmathparse{int(ceil(\getlength{\dimen0}))}%
\ifnum\pgfmathresult<3 \def\pgfmathresult{3} \fi
\foreach \y in {1,...,\pgfmathresult} {%
\CJKunderline[hidden]{\HS}%
}%
}
\begin{document}
天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦\key{天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦},天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦天咯哦
\end{document}
````
我把mhchem包给注释掉就好了,这个是什么原因呢,有办法可以兼容吗
2 回答
101
TeX 里的 dimension 有最大允许的值,可以理解为定长整数。换算成 pt,最大值是 `\maxdimen = 16383.99999pt`。
参考 https://tex.stackexchange.com/a/545416/79060
在你的例子里,是这里出的错。`\key` 的参数太长了。
```tex
\newcommand{\key}[1]{%
\settowidth{\keylength}{~~#1~~}%
...
}
```
------
**更新**
(以下描述包含错误)
`mhchem` 加载了 `calc` 宏包,后者修改了 `\settowidth` 的行为。
修改之前,
```tex
\DeclareRobustCommand\settowidth {\@settodim\wd}
\def\@settodim#1#2#3{\setbox\@tempboxa\hbox{{#3}}#2#1\@tempboxa
\setbox\@tempboxa\box\voidb@x}
```
只涉及赋值,此时 `\keylength` 能够被赋予大于 `\maxdimen = 16383.99999pt` 的长度。
修改之后,
```tex
\def\@settodim#1#2#3{%
\setbox\@tempboxa\hbox{{#3}}%
\dimen@ii=\z@
\@tf@r\reserved@a #1\do{%
\advance\dimen@ii\reserved@a\@tempboxa}%
#2=\dimen@ii
\setbox\@tempboxa\box\voidb@x}
```
在
```tex
\advance\dimen@ii\reserved@a\@tempboxa}%
```
这里涉及了运算,所以会报 dimension too large 的错
```tex
! Dimension too large.
<argument> ...ce \dimen@ii \reserved@a \@tempboxa
```
-
非常感谢!!! – wlianghe00 2020-06-08 16:12 回复
-
回复 wlianghe00 :更新了回答 – Carcino 2020-06-08 16:05 回复
-
但是注释掉mhchem包,这里就没报错了啊,所以这里不是很理解 – wlianghe00 2020-06-08 15:34 回复
你的回答
请登录后回答
你的回答将会帮助更多人,请务必认真回答问题。