我想定义一个简单的宏,用于数学模式公式。该宏表示一个数学关系。关系的显示方式(粗体等)并不重要。重要的是它周围的间距。
具体来说,如果我的宏是\likes
,我希望$a \likes b$
在 之前出现一个空格b
,但我也希望$\likes(a, b)$
在 括号之前不出现空格。有没有办法编写一个可以在这些不同上下文中按预期运行的宏?
问题不在于什么对 LaTeX 来说是自然的,而在于什么对宏的用户来说是易读的。我宁愿避免编写
\likes{}
或拥有两个版本的宏,一个带有空格,一个不带有空格。
\documentclass{article}
\begin{document}
I want to be able to write all of the following:
\verb+``$a \likes b$''+, yielding ``$a\ \textbf{likes}\ b$''
\verb+``$\likes(a,b)$''+, yielding ``$\textbf{likes}(a,b)$''
\verb+``$(a,b) \in \likes$''+, yielding ``$(a,b) \in \textbf{likes}$''
\vspace{1ex}
With the definition \verb+\newcommand{\likes}{\textbf{likes}}+ I get:
\newcommand{\likes}{\textbf{likes}}
\verb+``$a \likes b$''+ gives ``$a \likes b$'' (BAD, missing space
before and after)
\verb+``$\likes(a,b)$''+ gives ``$\likes(a,b)$'' (GOOD)
\verb+``$(a,b) \in \likes$''+ gives ``$(a,b) \in \likes$'' (GOOD)
\vspace{1ex}
With the definition \verb+\newcommand{\likes}{\textbf{ likes }}+ I
get:
\renewcommand{\likes}{\textbf{ likes }}
\verb+``$a \likes b$''+ gives ``$a \likes b$'' (GOOD)
\verb+``$\likes(a,b)$''+ gives ``$\likes(a,b)$'' (BAD, unwanted spaces)
\verb+``$(a,b) \in \likes$''+ gives ``$(a,b) \in \likes$'' (BAD, unwanted
spaces)
\end{document}
答案1
您可以定义\likes
为\mathbin
:
\def\likes{\mathbin{\rm likes}}
%% TEST:
$a \likes b$ % prints: a likes b
$\likes(a,b)$ % prints: likes(a,b)
$(a,b) \in \likes$ % prints: (a,b) ∈ likes
\bye