我试图通过\def
在进入环境之前利用宏将标签描述传递到 pgfplot 中tikzpicture
。
以下代码按预期工作:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\def\labels{xlabel=x, ylabel=y}
\begin{tikzpicture}
\begin{axis}[\labels]
\end{axis}
\end{tikzpicture}
\end{document}
我想将 x 标签渲染为斜体。使用环境\textit{}
内的命令axis
也可以:
...
\begin{axis}[xlabel=\textit{x}, ylabel=y]
\end{axis}
...
\textit{}
但是,当我使用定义中的命令时遇到问题,导致无法编译:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\def\labels{xlabel=\textit{x}, ylabel=y}
\begin{tikzpicture}
\begin{axis}[\labels]
\end{axis}
\end{tikzpicture}
\end{document}
您知道我遇到了什么问题吗?我猜这与范围有关,但尚未找到解决方案。
当然,我并不是在寻找将 x 标签呈现斜体的解决方案,而是在寻找如何从 tikzpicture 环境之外将此类选项传递给轴的解决方案。
感谢您的帮助。
答案1
欢迎使用 TeX-SE!您可以使用 pgf 键轻松实现所有这些。(我添加了一个图,只是为了避免出现空轴。还请注意,对于更高级的任务,值得将兼容性设置为最新版本,目前为\pgfplotsset{compat=1.16}
。此外,将相应的字体设置为“更正确”,\itshape
但这一切都是为了表明您预期的结果有效使用 pgf 键。
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{my labels/.style={xlabel=\textit{x}, ylabel=y}}
\begin{tikzpicture}
\begin{axis}[my labels]
\addplot{x};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
解决此类问题的一般方法是编写宏,当宏展开时,它会生成与您手写的标记完全相同的标记。这样,后面的命令\begin{axis}
就不会抱怨,因为它除了可选参数之外看不到任何其他内容xlabel=\textit{x}, ylabel=\textit{y}
(没有要展开的用户宏)。LaTeX2e 版本:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\newcommand*{\mypicture}[2]{%
\begin{tikzpicture}
\begin{axis}[xlabel=\textit{#1}, ylabel=\textit{#2}]
\end{axis}
\end{tikzpicture}%
}
\begin{document}
\mypicture{x}{y}
\end{document}
相同的 LaTeX3 版本(对于更复杂的事情很有用,因为 LaTeX3 非常适合允许您控制何时以及如何扩展事物 - 以及定义具有星号变体的宏、在各个位置具有一个或多个可选参数的宏等):
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{xparse}
\ExplSyntaxOn
\cs_new_protected:Npn \alex_create_pic:nn #1#2
{
\begin{tikzpicture}
\begin{axis}[xlabel=\textit{#1}, ylabel=\textit{#2}]
\end{axis}
\end{tikzpicture}
}
\NewDocumentCommand \mypicture { m m }
{
\alex_create_pic:nn {#1} {#2}
}
\ExplSyntaxOff
\begin{document}
\mypicture{x}{y}
\end{document}