我一直在写一篇论文,并使用 tikz 制作一些图表。然后,当我们决定提交给某个会议并使用他们提供的样式文件时,图表就坏了(编译失败)。我剖析了他们的样式文件,发现行“\p@=1bp”是导致问题的原因,但我不知道那行是什么以及如何解决它。简单地删除该行并不是解决方案,因为我无法控制他们将用于最终可发布版本的样式文件。
此版本可以正常运行:
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\fill [blue!25] (1,1) rectangle (2,2);
\end{tikzpicture}
\end{document}
此版本会产生标题中提到的错误:
\documentclass{minimal}
\makeatletter
\p@=1bp
\makeatother
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\fill [blue!25] (1,1) rectangle (2,2);
\end{tikzpicture}
\end{document}
奇怪的是,当我删除“blue”后的“!25”时,它又起作用了:
\documentclass{minimal}
\makeatletter
\p@=1bp
\makeatother
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\fill [blue] (1,1) rectangle (2,2);
\end{tikzpicture}
\end{document}
我正在使用 pdflatex:pdfTeX 3.14159265-2.6-1.40.17(TeX Live 2016/MacPorts 2016_4)。
我正在寻找一种无需修改样式文件即可指定颜色“蓝色!25”的方法。也就是说,在序言中使用以下代码片段:
\makeatletter
\p@=1bp
\makeatother
谢谢。
答案1
\p@
最初定义为1.0pt
。在\p@=1bp
其具有值之后1.00374pt
。我建议添加以下行
\makeatletter
\p@=1pt
\makeatother
加载后返回前言dgruyter_NEW.sty
。
编辑:该问题在最新版本中仍然存在de Gruyter 的 LaTeX 软件包dgruyter.sty
。 (标识自己为2016/09/28 v1.82 De Gruyter layout
)中的第一行之一仍然是\p@=1bp\relax
,这导致了原始帖子中描述的错误。
答案2
实际上我在提供的测试文件上没有得到任何错误
\makeatletter
\p@=1bp
\makeatother
是完全错误的,并且会破坏几乎所有的乳胶算术,不仅如此color
,还有graphics
包,包中的算术calc
,,tabularx
.....
要了解原因,请注意 Latex 没有浮点寄存器,只有长度或整数,所以如果你正在混合颜色并需要将 .3 乘以 2,通常的方式是通过长度
\dimen@=.3\p@
现在\dimen@
是 .3pt
\dimen@=2\dimen@
现在是 .6pt
\edef\result{\strip@pt\dimen@}
\show\result
删除pt
> \result=macro:
->0.6.
但现在重新定义\p@
为1bp
相同的计算结果
> \result=macro:
->0.60223.
因此即使是最简单的算术运算也会得出错误的结果。