pgfplotsset 附加样式未附加到 tikzpicture 轴环境

pgfplotsset 附加样式未附加到 tikzpicture 轴环境

当与tikzpicture 环境之外every x tick label/.append style={font=\scriptsize}结合使用时,前言中的命令将被 tikzpicture 的轴环境中忽略(分别覆盖)(注意:轴环境中的命令与前言中的 pgfplotset 命令一样与字体大小无关,因此不应覆盖有关字体大小的信息)。\pgfplotssetpgfplotssetevery x tick label/.append style={font=\color{black}}

示例代码:

 \documentclass[12pt,a4paper,tikz]{standalone}
 \usepackage[T1]{fontenc}
 \usepackage[utf8]{inputenc}
 \usepackage{lmodern}
 \usepackage{tikz,pgfplots,grffile,amsmath}
 \pgfplotsset{compat=newest}
 \pgfplotsset{mytikzstyle/.style={
     every axis/.append style={
         legend style={
             font=\tiny, % within the legend, fontsize changes work as there is no legend command in the axis environment that overwrites it...
             },
         },
     every x tick label/.append style={font=\scriptsize}, % won't work as it seems to be deleted/overwritten by .append style in the axis environment
     every y tick label/.append style={font=\scriptsize}, % will work, because there is no .append style command in the axis environment
     %every tick label/.append style={font=\scriptsize}, % works neither ...
     },}
 \pgfplotsset{mytikzstyle}
 \pgfplotsset{/pgfplots/width=8cm}
 \pgfplotsset{/pgfplots/height=6cm}

 \begin{document}
 \begin{tikzpicture}
 \begin{axis}[%
 separate axis lines,
 every x tick label/.append style={font=\color{black}},
 %every x tick label/.append style={font=\scriptsize}, % if I'd uncomment this line, the x tick labels would be properly displayed in \scriptsize
 %every y tick label/.append style={font=\color{black}}, % if I'd uncomment this line, the font change of the y-axis wouldn't work either
 legend style={at={(0.99,0.01)}, anchor=south east, legend cell align=left, align=left, draw=gray},
 ]
 \addplot [line width=0.8pt, color=black]
   table[row sep=crcr]{%
 1  1\\
 100    100\\
 };
 \addlegendentry{Hello $U_{1}\frac{xyz}{xyz}$}
 \end{axis}
 \end{tikzpicture}%
 \end{document}

例子

正如您所看到的:y tick label fontsize change 有效,因为 axis 环境中没有命令可以覆盖 pgfplots 命令(尽管我只是在各处使用 append)x tick label fontsize change 不起作用,因为它似乎被 axis 环境中的 x tick label 命令覆盖了。

我真的不明白为什么会这样。这是故意的吗?我的问题实际上是,在我的情况下,轴代码是由 matlab2tikz 生成的,我希望能够使用 LaTeX 中预定义的 pgplotsets/styles 从 tikzspicture 环境之外轻松方便地更改样式。但是,如果样式被轴环境中附加的命令覆盖,它就变得毫无用处了……

在此先感谢您的进一步解释以及如何避免将来出现类似问题!

最终编辑:该问题是该命令的副作用font=\color{black},它会覆盖其他字体属性,例如,\tiny因此pgfplotsset应该影响字体大小的命令不会被附加(分别被重置为\normalsize)。用 替换该命令text=black将解决此问题,因为text=black不会覆盖所有其他字体设置。据报告,github(matlab2tikz) 并且已在 matlab2tikz 的开发分支中修复,因为代码是从它生成的。也可以通过在文件中查找并替换为或font=\color{black}来应用解决方案,如下所示font=\color{yourcolor}text=yourcolormatlab2tikz.m这里通过在 matlab2tikz.m 中查找['{font=\color{',col,'}}']);并替换['{text=',col,'}']);,以防止 matlab2tikz 再次创建受影响的代码。

很遗憾,我刚刚意识到有更多这样的命令(由 matlab2tikz 导出),例如title style={font=\bfseries},它将覆盖之前定义的标题的所有颜色或大小设置pgfplotsset...另一个例子是ylabel style={font=\color{white!15!black}},它将重置所有 y 标签设置恢复为默认值,然后仅应用颜色更改。

最终,这个特定问题可以认为已经解决,因为了解了为什么pgfplotsset命令被覆盖而不是按预期附加以及如何修复这个问题,但对于 matlab2tikz 还有很多工作要做。

答案1

您可以使用该键将另一个命令execute at begin axis偷偷放入选项中。此命令将在其他选项设置完成后执行:\pgfplotssetaxis\pgfplotssetaxis

\documentclass[12pt,a4paper,tikz]{standalone}
 \usepackage[T1]{fontenc}
 \usepackage[utf8]{inputenc}
 \usepackage{lmodern}
 \usepackage{tikz,pgfplots,grffile,amsmath}
 \pgfplotsset{compat=newest}
 \pgfplotsset{
    mytikzstyle/.style={
        every axis/.append style={
            execute at begin axis={
                \pgfplotsset{
                    legend style={
                        font=\tiny
                    },
                    every x tick label/.append style={font=\scriptsize},
                    every y tick label/.append style={font=\scriptsize}
                }
            }
        }
    }
 }
 \pgfplotsset{mytikzstyle}
 \pgfplotsset{/pgfplots/width=8cm}
 \pgfplotsset{/pgfplots/height=6cm}

 \begin{document}
 \begin{tikzpicture}
 \begin{axis}[%
 separate axis lines,
 every x tick label/.append style={font=\color{black}},
 legend style={at={(0.99,0.01)}, anchor=south east, legend cell align=left, align=left, draw=gray},
 ]
 \addplot [line width=0.8pt, color=black]
   table[row sep=crcr]{%
 1  1\\
 100    100\\
 };
 \addlegendentry{Hello $U_{1}\frac{xyz}{xyz}$}
 \end{axis}
 \end{tikzpicture}%
 \end{document}

相关内容