我正在尝试创建一个自定义绘图命令,该命令可以选择创建一个标签。为此,我使用了包——尽管可能有更好的方法,但它对我来说很有效。当我想创建一个带有附加符号(例如或但不带有星号 )ifthenelse
的标签时,就会出现问题。\prime
\star
\ast
*
这是一个 MVE:
\documentclass{scrbook}
\usepackage[english]{babel}
\usepackage{pgfplots}
\usepackage{ifthen}
% define new plotting command
\newcommand{\plotMyGraph}[1]{
% make input variable
\ifthenelse{#1>0}{
\def\xTickLbl{ xlabel={test$^\ast$} }
}{
\def\xTickLbl{ xlabel={test$^*$} }
}
% create picture
\begin{tikzpicture}
\begin{axis}[
xmin=0, xmax=1,
ymin=-1, ymax=1,
\xTickLbl,
ylabel={Test}
]
\end{axis}
\end{tikzpicture}
}
% main document
\begin{document}
This is a test document.
\plotMyGraph{0} % works smoothly
\plotMyGraph{1} % this causes an error
\end{document}
它引发错误,Missing \endcsname inserted. \plotMyGraph{1}
这似乎是一个 TeX 错误,但我的知识太有限,无法猜测,为什么命令\ast
不起作用但快捷方式*
起作用。
答案1
这些是扩展问题。这里有一个简单方法可以解决它。
\documentclass{scrbook}
\usepackage[english]{babel}
\usepackage{pgfplots}
% define new plotting command
\newcommand{\plotMyGraph}[1]{
% make input variable
% create picture
\begin{tikzpicture}
\begin{axis}[
xmin=0, xmax=1,
ymin=-1, ymax=1,
xlabel={\ifnum#1>0 test$^{\ast}$ \else test$^*$ \fi},
ylabel={Test}
]
\end{axis}
\end{tikzpicture}
}
% main document
\begin{document}
This is a test document.
\plotMyGraph{0} % works smoothly
\plotMyGraph{1} % works smoothly
\end{document}
这是另一种方法。
\documentclass{scrbook}
\usepackage[english]{babel}
\usepackage{pgfplots}
% define new plotting command
\newcommand{\plotMyGraph}[1]{
% make input variable
% create picture
\begin{tikzpicture}
\ifnum#1>0%added second \ast just to make the results distiguishable
\pgfplotsset{my x label/.style={xlabel=test$^{\ast\ast}$}}
\else
\pgfplotsset{my x label/.style={xlabel=test$^*$}}
\fi
\begin{axis}[
xmin=0, xmax=1,
ymin=-1, ymax=1,
my x label,
ylabel={Test}
]
\end{axis}
\end{tikzpicture}
}
% main document
\begin{document}
This is a test document.
\plotMyGraph{0} % works smoothly
\plotMyGraph{1} % works smoothly
\end{document}
什么是“最佳”取决于你真正要用它做什么。