使用 pgf-pie 在 beamer 中绘制无标签的饼图

使用 pgf-pie 在 beamer 中绘制无标签的饼图

编辑接受的答案完全解决了我当前的问题,但有关潜在问题的更详细分析,请参阅 cfr 的答案。基本上,pstricks 和 pdfTex 不能很好地混合。

我有一个带有大量饼图的 Beamer 演示文稿。我使用 pgf-pie 包,因为它很简单,而且(大部分)可以满足我的需要。我有一个特定的饼图,它不应该有任何标签。我尝试添加

/tikz/nodes={text opacity=0,overlay}

按照这里找到的建议编写代码。

没有任何数字或文字的小饼图

\documentclass{standalone}
\usepackage{pgf-pie}
\begin{document}

\begin{tikzpicture}
\pie [explode=0.1, color={blue!70, green!80, red, yellow} ,/tikz /nodes={text opacity=0,overlay}]{10/, 20/, 30/, 40/}
\end{tikzpicture}
\end{document}

现在,奇怪的是,代码在上面的示例(独立类)中运行良好。但是,它似乎在 beamer 演示文稿中没有执行任何操作,即标签仍然显示。似乎存在某种包冲突。我如何才能让它在 beamer 演示文稿中工作?我知道还有其他方法可以实现这一点,但 pgf-pie 在其他方面非常方便。

\documentclass[12pt,compress]{beamer}
\usetheme{Warsaw}

\setbeamertemplate{navigation symbols}{}%remove navigation symbols
\setbeamercolor{alerted text}{fg=magenta}

%\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{wasysym}
\usepackage{multicol}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{xcolor}
%\usepackage{iwona}
\usepackage{wrapfig}
\input{FactorTree}
\usepackage{pstricks}
\usetikzlibrary{matrix}
\usepackage{tkz-euclide}
\usetkzobj[all]
\usepackage{xlop}
\usepackage{tcolorbox}
\usepackage{pgfplots}
\usepackage{pgf-pie}
\usepackage[makeroom]{cancel}
\input{longdiv}

无标签饼图

答案1

\pgfpie@slice中定义的命令pgf-pie.sty 绘制圆形图

\newcommand{\pgfpie@slice}[8]{
  \pgfmathparse{0.5*(#1)+0.5*(#2)}
  \let\midangle\pgfmathresult

  \path (#8) -- ++(\midangle:#5) coordinate(O);

  \pgfmathparse{#7+#5}
  \let\radius\pgfmathresult

  % slice
  \draw[line join=round, fill=#6, \style] (O) -- ++(#1:#7) arc (#1:#2:#7) -- cycle;

  \pgfmathparse{min(((#2)-(#1)-10)/110*(-0.3),0)}
  \let\temp\pgfmathresult
  \pgfmathparse{(max(\temp,-0.5) + 0.8)*#7}
  \let\innerpos\pgfmathresult

  \ifthenelse{\equal{\pgfpie@text}{inside}}
  {
    % label and number together
    \path (O) -- ++(\midangle:\innerpos) node
    {\scalefont{#3}\shortstack{#4\\\beforenumber#3\afternumber}};
  }
  {
    % label
    \iflegend
    \else
    \path (O) -- ++ (\midangle:\radius)
    node[inner sep=0, \pgfpie@text=\midangle:#4]{};
    \fi

    % number
    \path (O) -- ++(\midangle:\innerpos) node
    {\scalefont{#3}\beforenumber#3\afternumber};
  }
}

圆圈内的数字是用#3命令的参数定义的,例如,您可以修改和\pgfpie@slice的定义以获得像幻影一样的命令来隐藏数字\beforenumber\afternumber

为此,您只需添加before number=\phantomafter number=

代码

\documentclass{beamer}
\usepackage{pgf-pie}
\usepackage{pstricks}

\begin{document}

\begin{frame}
\begin{tikzpicture}
\pie [explode=0.1,color={blue!70, green!80, red, yellow},before number=\phantom,after number=]
{10/, 20/, 30/, 40/}
\end{tikzpicture}
\end{frame}

\end{document}

在此处输入图片描述

答案2

您只需删除textin即可/tikz/nodes={text opacity=0,overlay}% <-。我希望这会有所帮助:

\documentclass[12pt,compress]{beamer}
\usepackage{pgf-pie}
\usetheme{Warsaw}

\setbeamertemplate{navigation symbols}{}%remove navigation symbols
\setbeamercolor{alerted text}{fg=magenta}

%\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{wasysym}
\usepackage{multicol}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{xcolor}
%\usepackage{iwona}
\usepackage{wrapfig}
%\input{FactorTree}
\usepackage{pstricks}
\usetikzlibrary{matrix}
\usepackage{tkz-euclide}
\usetkzobj[all]
\usepackage{xlop}
\usepackage{tcolorbox}
\usepackage{pgfplots}
\usepackage[makeroom]{cancel}
%\input{longdiv}
\begin{document}

\begin{frame}
\begin{tikzpicture}
\pie [color={blue!70, green!80, red, yellow}, /tikz/nodes={opacity=0,overlay}% <-
]{10, 20, 30, 40}
\end{tikzpicture}

\end{frame}

\end{document}

在此处输入图片描述

答案3

首先,这里有一个演示该问题的最小例子。

\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage{pstricks}
\usepackage{pgf-pie}
\begin{document}
\begin{tikzpicture}
  \pie [explode=0.1, color={blue!70, green!80, red, yellow}, /tikz/nodes={text opacity=0, overlay}]{10/, 20/, 30/, 40/}
\end{tikzpicture}
\end{document}

MNWE 输出

这里的问题是pstricks需要将 postscript 合并到输出中的处理,但 pdfTeX 不包含 postscript 解释器,无法理解这些命令。控制台输出相当清楚地说明了这个问题。

Non-PDF special ignored!
Non-PDF special ignored!
Non-PDF special ignored!
Non-PDF special ignored!
Non-PDF special ignored!
Non-PDF special ignored!
Non-PDF special ignored!

颜色和透明度等都是在驱动程序中而不是在 TeX 代码中处理的。PGF/TiZ 试图通过提供一个抽象出这些差异的接口来隐藏不同驱动程序之间的差异。这意味着当你使用 pdfTeX 进行编译时,比如 PGF/TiZ 以一种方式解释您的命令,当您使用另一个引擎进行编译时,它可能会以另一种方式解释它们。

pstricks通过输出 postscript 来安排事情,以便其命令能够工作\special。但是您正在使用 pdfTeX 进行编译,因此graphicxxcolorPGF/TiZ 安排事物以便它们的命令可以通过输出 PDF 来起作用\special

即使您的示例不包含任何pstricks在文档主体中不包含任何依赖内容,加载包也会发生变化,这显然会导致 PGF/Ti您的 中的命令生成的 Z 代码tikzpicture。特别是,\special输出的是非 PDF 格式。由于 pdfTeX 无法处理这些格式,因此它们会被忽略。例如,这会tikzpicture完全破坏 格式中的透明度。

这是一个更简单的例子来说明这个问题。

\documentclass[border=10pt,multi,tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \node [fill=red, text=yellow, text opacity=0] {X};
\end{tikzpicture}
\end{document}

生产

预期的

正如预期的那样,

\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage{pstricks}
\begin{document}
\begin{tikzpicture}
  \node [fill=red, text=yellow, text opacity=0] {X};
\end{tikzpicture}
\end{document}

生产

不完全符合预期

这些都不是令人惊讶的。正如所写的那样,代码不能指望能工作,因为无论你需要什么pstricks,它都会失败。所以,首先要问的是你是否需要pstricks。我猜你没有使用它,因为否则你会在输出中看到其他问题,而不仅仅是tikzpictures 中的透明度问题:你的pspictures 也不会工作。

如果你确实需要pstricks,那么最简单的选择是使用可以正确支持它的引擎。这不一定是 XeTeX。常规 TeX 当然是一个选择,例如,通过标准路线之一从 DVI 转换。

否则,您需要考虑如何支持需要后记的代码,以避免比 PGF/Ti 缺乏透明度更大的问题Z。

对于问题中非常具体的问题,您当然可以解决这个问题。但是不推荐任何这样的解决方案,因为它只会掩盖问题的表面症状,而不是解决根本原因。您需要解决的是根本原因,以便事情总体上按预期进行,而不是在某些特定情况下看似有效。

答案4

我无法使用最新版本的 MikTeX 重现您的问题,以下 MWE 在 pdfLaTeX 中运行无错误(只有两个关于字体大小替换的警告)。也许您安装的 LaTeX 已经过时了?

为了测试我做了真正的 MWE(从你的包中我删除了所有与绘制饼图无关的包):

\documentclass[12pt,compress]{beamer}
\usetheme{Warsaw}
\setbeamertemplate{navigation symbols}{}%remove navigation symbols
\setbeamercolor{alerted text}{fg=magenta}

\usepackage[utf8]{inputenc}% <-- added
\usepackage[T1]{fontenc}

\usepackage{pgf-pie}

\begin{document}
\begin{frame}
    \begin{tikzpicture}
\pie[color={blue!70, green!80, red, yellow}, 
     /tikz/nodes={text opacity=0}% <-
]{10, 20, 30, 40}
    \end{tikzpicture}
\end{frame}
\end{document}

在此处输入图片描述

相关内容