我想定义一个新命令,该命令应确定(在 tikz 图内)其参数是否处于数学模式。如果是,它应该用 $ $ 包装参数。我发现 \ifmode 可以做到这一点,但它不起作用。这是我的最小示例:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[american,ngerman]{babel}
\usepackage{tikz}
\newcommand*{\yellowemph}[1]{%
\tikz[baseline=(text.base)]\node(text)[rectangle, fill=yellow, rounded
corners, inner sep=0.3mm]{\ifmmode $#1$\else #1\fi};%
}
\begin{document}
\yellowemph{word}% works
\yellowemph{$\frac{1}{2}$}% works
$\yellowemph{\frac{1}{2}}$% does not work
\end{document}
我知道\ensuremath
但总是切换到数学模式。如果不处于数学模式,我希望保持文本原样(\yellowemph{word}
例如,参见)。
解决方案
如下所示,这是一个解决方案:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[american,ngerman]{babel}
\usepackage{tikz}
\newif\ifstartedinmathmode
\newcommand*{\yellowemph}[1]{%
\relax\ifmmode\startedinmathmodetrue\else\startedinmathmodefalse\fi
\tikz[baseline=(text.base)]\node(text)[rectangle, fill=yellow, rounded
corners, inner sep=0.3mm]
{\ifstartedinmathmode$#1$\else#1\fi};%
}
\begin{document}
\yellowemph{word}
$\int_0^\infty f(\yellowemph{x})\,dx$
\yellowemph{$\displaystyle\frac{1}{2}$}
\end{document}
答案1
对一个\node
是总是以文本模式处理,无论是否tikzpicture
已在文本或数学模式下启动。因此,最好的解决方法是将$
符号放在参数中。
\newcommand*{\yellowemph}[1]{%
\tikz[baseline=(text.base)]\node(text)[rectangle, fill=yellow, rounded
corners, inner sep=0.3mm]{#1};%
}
\begin{document}
\yellowemph{word}
\yellowemph{$\frac{1}{2}$}
您可以尝试一种更复杂的条件方法:
\newif\ifstartedinmathmode
\newcommand*{\yellowemph}[1]{%
\relax\ifmmode\startedinmathmodetrue\else\startedinmathmodefalse\fi
\tikz[baseline=(text.base)]\node(text)[rectangle, fill=yellow, rounded
corners, inner sep=0.3mm]
{\ifstartedinmathmode$#1$\else#1\fi};%
}
答案2
您需要使用\ensuremath
或修复条件中的错误:
\relax\ifmmode#1\else $#1$\fi
答案3
尝试这个:
\newcommand*{\textyellowemph}[1]{\tikz[baseline=(text.base)]\node(text)[rectangle, fill=yellow, rounded, inner sep=0.3mm]{#1};}
\newcommand*{\mathyellowemph}[1]{\tikz[baseline=(text.base)]\node(text)[rectangle, fill=yellow, rounded, inner sep=0.3mm]{\ensuremath{#1}};}
\newcommand*{\yellowemph}[1]{\ifmmode\mathyellowemph{#1}\else\textyellowemph{#1}\fi}