当与tikzpicture 环境之外every x tick label/.append style={font=\scriptsize}
结合使用时,前言中的命令将被 tikzpicture 的轴环境中忽略(分别覆盖)(注意:轴环境中的命令与前言中的 pgfplotset 命令一样与字体大小无关,因此不应覆盖有关字体大小的信息)。\pgfplotsset
pgfplotsset
every 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=yourcolor
matlab2tikz.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
偷偷放入选项中。此命令将在其他选项设置完成后执行:\pgfplotsset
axis
\pgfplotsset
axis
\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}