使用 MiKTeX 时经度弧显示不正确(与 MacTeX 相反)

使用 MiKTeX 时经度弧显示不正确(与 MacTeX 相反)

使用 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}

正确渲染 tikzpicture (使用 MacTeX)

错误渲染的 tikzpicture(使用 MiKTeX)

答案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}

相关内容