我正在使用 pgf 统计库制作一些箱线图。我发现了以下内容。
这:
\documentclass{standalone}
\usepackage[T1]{fontenc}
\usepackage{fontspec}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usepgfplotslibrary{statistics}
\usepgfplotslibrary{fillbetween}
%Loading the libraries the other way around gives the same result
%\usepgfplotslibrary{fillbetween}
%\usepgfplotslibrary{statistics}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
boxplot/draw direction = y,
]
\addplot [boxplot] table [col sep=comma,y index=0] {datatest.txt};
\end{axis}
\end{tikzpicture}
\end{document}
但是这个(我现在在同一个命令fillbetween
中包含了):statistics
\usepgfplotslibrary
\documentclass{standalone}
\usepackage[T1]{fontenc}
\usepackage{fontspec}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usepgfplotslibrary{fillbetween,statistics}
%Loading the libraries the other way around gives the same result
%\usepgfplotslibrary{statistics,fillbetween}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
boxplot/draw direction = y,
]
\addplot [boxplot] table [col sep=comma,y index=0] {datatest.txt};
\end{axis}
\end{tikzpicture}
\end{document}
产生这个:
为什么在同一个语句中加载两个库会破坏一个库?谢谢帮助 ;-)
编辑,抱歉,我忘记了测试文件:
数据测试.txt:
1
1
2
1
1
3
5
\usepgfplotslibrary{statistics,fillbetween}
我也用和都测试了这一点,\usepgfplotslibrary{fillbetween,statistics}
结果都错了。同时,
\usepgfplotslibrary{statistics}
\usepgfplotslibrary{fillbetween}
和
\usepgfplotslibrary{fillbetween}
\usepgfplotslibrary{statistics}
产生正确的结果。
答案1
定义\use@@pgfplotslibrary
末尾有这段代码
\expandafter\ifx\csname pgfp@library@#1@loadoptions\endcsname\relax
\else
\expandafter\let\expandafter\pgfplots@glob@TMPa\csname pgfp@library@\pgf@temp @loadoptions\endcsname
\expandafter\pgfplotsset\expandafter{\pgfplots@glob@TMPa}%
\fi
其目的是加载“库钩子代码”。对于统计库,它应该执行,\csname pgfp@library@statistics@loadoptions\endcsname
基本上就是
/pgfplots/compat/library hook={statistics}{/pgfplots/boxplot/estimator=Excel,/pgfplots/boxplot/ensure mark=true},
在那里ensure mark=true
给出你的标记。
问题是,#1
或者statistics,fillbetween
如果fillbetween,statistics
你将两者结合在一个命令中,那么测试总是错误的。
所以这是一个错误,但只需#1
替换\pgf@temp
不起作用,因为这些库调用可以嵌套,因此该值并非在所有情况下都正确。
答案2
我没有资格发表评论。所以我在写一个“答案”。不同之处在于加载了不同的文件。当你说
\usepgfplotslibrary{fillbetween,statistics}
你加载
/usr/local/texlive/2020/texmf-dist/tex/generic/pgfplots/pgfcontrib/tikzlibraryfillbetween.code.tex
而
\usepgfplotslibrary{statistics}
\usepgfplotslibrary{fillbetween}
你加载
/usr/local/texlive/2020/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.fillbetween.code.tex
所有路径均指向我的 TeXLive 安装,但路径的具体名称并不重要。
据我所知,这与有关\pgfplots@iffileexists
,它被调用\use@@pgfplotslibrary
。执行此检查时,您似乎处于“错误”的子目录中。
所以恕我直言,最重要的是你发现了一个问题,你可能想要报告它本网站。