我的一些图片不再能用 4.00b 版的软件包进行编译tkz-euclide
。
这公告新版本 (2022-Jan-5)tkz-euclide
表示:
出现了一些新宏,其他(次要的)宏消失了。将代码从版本 3 转移到版本 4 的唯一重要限制是删除单位“cm”。
我的文件中可能有数百个“cm”。建议如何处理这个问题?应该将“cm”转换为哪个单位?我可以用“mm”代替吗?第一次我按字面意思理解了“删除”,只是把它删掉了,但这会改变图片。
另请查看以下 MWE:
\documentclass{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){M1}
\tkzDefPoint(120:5){X}
\tkzDefPoint(120:3){M2}
\tkzDefPoint(45:4){P}
\tkzInterLC(P,M1)(M1,X)\tkzGetPoints{N1}{F1}
\tkzInterLC(P,M2)(M2,X)\tkzGetPoints{N2}{F2}
\tkzMarkAngle[arc=ll,size=.9cm](F2,X,F1)
\tkzMarkAngle[arc=ll,size=.9cm](N2,X,N1)
\end{tikzpicture}
\end{document}
删除两个出现的cm
会产生不同的图像。我希望您可以重现此情况——遗憾的是这里不支持包含 .pdf。
答案1
以下是一些示例cm
。代码可以编译,但在 .log 文件中你会看到:
Missing character: There is no c ("63) in font nullfont!
Missing character: There is no m ("6D) in font nullfont!
Missing character: There is no c ("63) in font nullfont!
Missing character: There is no m ("6D) in font nullfont!
\documentclass{standalone}
\usepackage{tkz-euclide}
\tkzSetUpColors[background=white,text=teal]
\tkzSetUpPoint[size=2,color=teal]
\tkzSetUpLine[thin,color=teal]
\tkzSetUpCompass[color=brown,ultra thin,/tkzcompass/delta=10]
\tikzset{label style/.append style={color=teal}}
\begin{document}
\begin{tikzpicture}
\begin{scope}[rotate=28]
\tkzDefPoint(4,0){A} \tkzDefPoint(0,0){B} \tkzDefPoint(1.5,4){C}
\tkzDrawLines(B,A B,C)
\tkzFillAngle[fill=teal!30,size=1](A,B,C)
\tkzDefPointWith[linear normed,K=2](B,A) \tkzGetPoint{I}
\tkzDefPointWith[linear normed,K=2](B,C) \tkzGetPoint{J}
\tkzDrawArc(B,I)(J)
\tkzCompass(I,J)
\tkzDrawPoints(A,B,C,I,J)
\tkzLabelPoints(A,B,C,I,J)
\end{scope}
\begin{scope}
\tkzDefPoint(5,0){B'}
\tkzDefPoint(9,0){A'}
\tkzDrawLine(B',A')
\tkzDuplicateSegment(B,I)(B',A') \tkzGetPoint{I'}
\tkzDrawArc[angles](B',I')(0,80)
\tkzCalcLength[cm](I,J) \tkzGetLength{dIJ}
\tkzCalcLength[cm](B,I) \tkzGetLength{dBI}
\tkzDrawArc[arc,R](I',\dIJ)(100,120)
\tkzInterCC[R](B',\dBI cm)(I',\dIJ cm)\tkzGetPoints{J'}{K}
\tkzDrawLine[add = 0 and 1](B',J')
\tkzFillAngle[fill=teal!30,size=1cm](A',B',J')
\tkzDrawPoints(A',B',I',J')
\tkzLabelPoints(A',B',I',J')
\end{scope}
\end{tikzpicture}
\end{document}
现在代码应该这样写:
\documentclass{standalone}
\usepackage{tkz-euclide}
\tkzSetUpColors[background=white,text=teal]
\tkzSetUpPoint[size=2,color=teal]
\tkzSetUpLine[thin,color=teal]
\tkzSetUpCompass[color=brown,ultra thin,/tkzcompass/delta=10]
\tikzset{label style/.append style={color=teal}}
\begin{document}
\begin{tikzpicture}
\begin{scope}[rotate=28]
\tkzDefPoint(4,0){A} \tkzDefPoint(0,0){B} \tkzDefPoint(1.5,4){C}
\tkzDrawLines(B,A B,C)
\tkzFillAngle[fill=teal!30,size=1](A,B,C)
\tkzDefPointWith[linear normed,K=2](B,A) \tkzGetPoint{I}
\tkzDefPointWith[linear normed,K=2](B,C) \tkzGetPoint{J}
\tkzDrawArc(B,I)(J)
\tkzCompass(I,J)
\tkzDrawPoints(A,B,C,I,J)
\tkzLabelPoints(A,B,C,I,J)
\end{scope}
\begin{scope}
\tkzDefPoint(5,0){B'}
\tkzDefPoint(9,0){A'}
\tkzDrawLine(B',A')
\tkzDuplicateSegment(B,I)(B',A') \tkzGetPoint{I'}
\tkzDrawArc[angles](B',I')(0,80)
\tkzCalcLength(I,J) \tkzGetLength{dIJ}
\tkzCalcLength(B,I) \tkzGetLength{dBI}
\tkzDrawArc[arc,R](I',\dIJ)(100,120)
\tkzInterCC[R](B',\dBI)(I',\dIJ)\tkzGetPoints{J'}{K}
\tkzDrawLine[add = 0 and 1](B',J')
\tkzFillAngle[fill=teal!30,size=1](A',B',J')
\tkzDrawPoints(A',B',I',J')
\tkzLabelPoints(A',B',I',J')
\end{scope}
\end{tikzpicture}
\end{document}
使用你的 MWE 如果你保留“cm”,那么你就会遇到错误:
! 程序包 PGF 数学错误:未知运算符
c' or
cm'(在 '.9cmcm-2.5\pgflinewidth ' 中)。
没有“厘米”
\documentclass{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){M1}
\tkzDefPoint(120:5){X}
\tkzDefPoint(120:3){M2}
\tkzDefPoint(45:4){P}
\tkzInterLC(P,M1)(M1,X)\tkzGetPoints{N1}{F1}
\tkzInterLC(P,M2)(M2,X)\tkzGetPoints{N2}{F2}
\tkzDrawPoints(M1,M2,X,P,N1,N2,F1,F2)
\tkzLabelPoints(M1,M2,X,P,N1,N2,F1,F2)
\tkzDrawSegments(P,M1 P,F2 X,F1 X,F2 N1,F1 X,N1 X,N2)
\tkzDrawCircles(M1,X M2,X)
\tkzMarkAngle[arc=ll,size=.9](F2,X,F1)
\tkzMarkAngle[arc=ll,size=.9](N2,X,N1)
\end{tikzpicture}
\end{document}