根据布尔标志,我想设置轴选项,如下例所示:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage{xparse}
\usepackage{ifthen}
\newboolean{mydebug}
\NewDocumentCommand{\IfDebugTF}{mm}{\ifthenelse{\boolean{mydebug}}{#1}{#2}}
\begin{document}
\setboolean{mydebug}{true}
\begin{tikzpicture}
\begin{axis}[\IfDebugTF{xmin=5}{xmin=0}]
\addplot {x};
\end{axis}
\end{tikzpicture}
\end{document}
这不起作用,我认为问题出在扩展上。我能以某种方式强制宏扩展吗?
答案1
pgfkeys
尝试扩展宏,但\IfDebugTF
无法完全扩展,因此失败。(事实上,它根本无法扩展,因为\NewDocumentCommand
创建了\protected
宏。)下面的方法可以工作。
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\NewExpandableDocumentCommand\foo{}{xmin=0}
\begin{document}
\begin{tikzpicture}
\begin{axis}[\foo]
\addplot {x};
\end{axis}
\end{tikzpicture}
\end{document}
因此,为了实现你的目标,你必须
- 定义一个包含所需选项的完全可扩展的宏
- 或者,更简洁地,直接设置选项(使用
\pgfplotsset
)
之前\begin{axis}
。您可以通过以下方式实现此目的
mydebug
检查之前\begin{axis}
或之后的值- 而不是设置
mydebug
,而是直接设置选项(使用一些辅助宏)。