使用 MiKTeX 渲染以下代码时出现问题(使用 MacTeX 渲染效果很好)。我的经度弧显示不正确(被推到球的边缘而不是中间)。我认为问题可能是我使用的 PGF 版本(MiKTeX 上为 3.0,MacTeX 上为 2.10)。阅读这篇文章http://latex-community.org/forum/viewtopic.php?f=45&t=25293这让我怀疑这个问题是否是本文提到的 PGF/TikZ 版本中的错误,但距离本文发布已经过去了两年。我尝试用 .style 替换 .estyle,但没有成功。
我必须让代码与 MiKTeX 兼容,有什么办法吗?非常感谢您的建议!
\documentclass{article}
\usepackage{tikz}
\newcommand\pgfmathsinandcos[3]{%
\pgfmathsetmacro#1{sin(#3)}%
\pgfmathsetmacro#2{cos(#3)}%
}
\newcommand\LongitudePlane[3][current plane]{%
\pgfmathsinandcos\sinEl\cosEl{#2} % elevation
\pgfmathsinandcos\sint\cost{#3} % azimuth
\tikzset{#1/.estyle={cm={\cost,\sint*\sinEl,0,\cosEl,(0,0)}}}
}
\newcommand\DrawLongitudeCircle[2][1]{
\LongitudePlane{\angEl}{#2}
\tikzset{current plane/.prefix style={scale=#1}}
% angle of "visibility"
\pgfmathsetmacro\angVis{atan(sin(#2)*cos(\angEl)/sin(\angEl))} %
\draw[color=blue,current plane] (\angVis:1) arc (\angVis:\angVis+180:1);
\draw[color=blue,current plane,dashed] (\angVis-180:1) arc (\angVis-180:\angVis:1);
}
\begin{document}
\begin{tikzpicture}
\def\R{2} % sphere radius
\def\angEl{5} % elevation angle
\def\meridian{-100}
\fill[ball color=white!20] (0,0) circle (\R);
\DrawLongitudeCircle[\R]{\meridian}
\end{tikzpicture}
\end{document}
答案1
按照您引用的帖子中的描述,将其替换.estyle
为,得到以下行.style
\tikzset{#1/.style={cm={\cost,\sint*\sinEl,0,\cosEl,(0,0)}}}
下面的图像是使用 TeXLive 2016 发行版排版的tikz/pgf 2015/08/07 v3.0.1a
。如果下面的代码导致图像不同,您可能需要升级到最新版本。
\documentclass{article}
\usepackage{tikz}
\newcommand\pgfmathsinandcos[3]{%
\pgfmathsetmacro#1{sin(#3)}%
\pgfmathsetmacro#2{cos(#3)}%
}
\newcommand\LongitudePlane[3][current plane]{%
\pgfmathsinandcos\sinEl\cosEl{#2} % elevation
\pgfmathsinandcos\sint\cost{#3} % azimuth
\tikzset{#1/.style={cm={\cost,\sint*\sinEl,0,\cosEl,(0,0)}}}
}
\newcommand\DrawLongitudeCircle[2][1]{
\LongitudePlane{\angEl}{#2}
\tikzset{current plane/.prefix style={scale=#1}}
% angle of "visibility"
\pgfmathsetmacro\angVis{atan(sin(#2)*cos(\angEl)/sin(\angEl))} %
\draw[color=blue,current plane] (\angVis:1) arc (\angVis:\angVis+180:1);
\draw[color=blue,current plane,dashed] (\angVis-180:1) arc (\angVis-180:\angVis:1);
}
\begin{document}
\begin{tikzpicture}
\def\R{2} % sphere radius
\def\angEl{5} % elevation angle
\def\meridian{-100}
\fill[ball color=white!20] (0,0) circle (\R);
\DrawLongitudeCircle[\R]{\meridian}
\end{tikzpicture}
\end{document}