使用 \def 将选项传递给 pgfplots 中的轴环境

使用 \def 将选项传递给 pgfplots 中的轴环境

我试图通过\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}

相关内容