pgfplots 中的 tikzscale 和直方图

pgfplots 中的 tikzscale 和直方图

Tikzscale给出了在 中绘制的直方图的错误结果pgfplots

未缩放的直方图tikzscale 在此处输入图片描述

缩放后的直方图: 在此处输入图片描述

pgfplots我在 MWE 1.7 版手册第 67 页中附上了一张直方图。pgfplots.randn.dat文件附带标准 texlive-2012 发行版或可以从给定的链接下载。

平均能量损失

\documentclass{report}
\usepackage{filecontents,tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}

% Comment to get figure without scaling
\usepackage{tikzscale}

\begin{filecontents}{figrandn.tikz}
  \begin{tikzpicture}
    \begin{axis}[
      ybar interval,
      xtick=,% reset from ybar interval
      xticklabel={$[\pgfmathprintnumber\tick, \pgfmathprintnumber\nexttick)$}
    ]]
    % a data file containing 8000 normally distributed
    % random numbers of mean 0 and variance 1
    \addplot+[hist={data=x}] file {pgfplots.randn.dat};
    \end{axis}
  \end{tikzpicture}
\end{filecontents}

\begin{document}
  \begin{figure}
    \centering
    % Comment the line below for figure without scaling.
    \includegraphics[width=\textwidth,height=0.5\textwidth]{figrandn.tikz}
    %Uncomment to include figure without scaling 
    %\input{figrandn.tikz}
    \caption{Test figure}
  \end{figure}
\end{document}

答案1

我可以确认,这是 tikzscale 中的一个错误。非常感谢您发现它。解决方法是,打开tikzscale.sty,找到包含\endlinechar=-1并注释/删除该行的行。

出现该错误是因为对 endlinechar 的修改,导致读取 时换行符发生变化pgfplots.randn.dat,从而导致数字发生变化(例如12\n34变成1234)。

我还不知道该如何处理这个错误。修改是endlinechar为了避免由于图形前后的前导或尾随空格而导致缩放略微不精确。有三个不需要的空格来源:

  1. Tikzscale由于编程错误,有时会出现虚假的空格。
  2. 一段时间以来,图书馆里external一直存在虚假的空白。
  3. \end{tikzpicture}如果用户忘记在文件末尾添加百分号或意外添加换行符tikz,这也是虚假空格。

说了这么多问题,现在我们来看看解决方案:

  1. 总是可以通过新版本来修复tikzscale,所以这应该不是什么大问题。
  2. 可以通过使用的最新开发版本来修复TikZ,这对用户来说很不幸,但由于其他错误修复,无论如何可能还是建议这样做。
  3. 是最难的部分,因为用户在创建TikZ文件时必须始终记住这个问题,这是一种糟糕的用户体验。我想我必须进行修改\begin{tikzpicture}\end{tikzpicture}以便endlinechar在环境中恢复原始内容。

更新 通过(刚刚上传)tikzscale version 0.2.1,问题已解决。

相关内容