You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LaTeX使用pgf-pie读取CSV绘制饼图数据缺失编译报错问题

问题原因分析

1. csvreader缺失记录的原因

csvsimple包默认解析CSV时不会自动识别引号包裹的字段内的分隔符,你CSV里"Lemons,Limes"这条记录的Name字段包含逗号,默认按全局逗号切割字段时,该行会被识别为3个字段,和表头的2个字段数量不匹配,csvsimple就会直接跳过该行,所以输出时丢失了这条记录。
要修复这个问题,调用\csvreader时需要加上respect quotes参数,让解析器识别引号包裹的字段,忽略字段内部的逗号。

2. \pie命令内嵌csvreader编译报错/挂起的原因

pgf-pie的\pie命令在解析参数时,要求传入的数值/标签列表是已经完全展开的纯文本格式,不支持在参数内部嵌套\csvreader这类带内部执行逻辑、需要逐行处理的宏命令。当你把\csvreader直接放在\pie的参数中时,\pie的参数解析逻辑和\csvreader的宏执行逻辑冲突,就会出现宏定义匹配错误,甚至陷入解析死循环导致编译挂起。

修复方案

正确的处理逻辑是提前用\csvreader把CSV数据读取并拼接成符合\pie要求的宏变量,再把这个预先生成的宏变量传给\pie即可,修复后代码如下:

\documentclass{article}
\usepackage{csvsimple}
\usepackage{pgf-pie}
\usepackage{etoolbox} % 用于宏拼接

\begin{document}
\begin{filecontents*}{fruit.csv}
Name,Quantity
"Apples",30
"Pears",25
"Lemons,Limes",40.5
"Peaches",34.5
"Cherries",20
\end{filecontents*}

% 预定义空宏存储饼图数据
\def\piedata{}
% 带引号识别读取CSV,拼接数据到宏
\csvreader[respect quotes]{fruit.csv}{Name = \Name, Quantity = \Quantity}{
    \xappto\piedata{\expandonce\Quantity/\expandonce\Name,}
}

% 输出验证数据
\piedata

\begin{tikzpicture}
    % 直接传入预生成的宏数据
    \expandafter\pie\expandafter[polar, explode=0.1]{\piedata}
\end{tikzpicture}

\end{document}

内容的提问来源于stack exchange,提问作者B. A. Sylla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:15:00