定义一个包含数学和文本的短语,可在数学和文本模式下使用

定义一个包含数学和文本的短语,可在数学和文本模式下使用

我想定义一个短语一次包含数学和文本,并能够使用两个都数学和文本模式。例如:

\newcommand{\Constraint}{\ensuremath{x \neq 0} \text{ and } \ensuremath{x \neq -1}}

这在数学模式下运行良好,但在文本模式下会留下太多空间。当然:

\newcommand{\Constraint}{\ensuremath{x \neq 0} \text{and} \ensuremath{x \neq -1}}

在文本模式下工作正常,但在数学模式下则不行。

这让我想到:

\newcommand{\Space}{\ifmmode{ }\else{}\fi}%
\newcommand{\Constraint}{\ensuremath{x \neq 0} \text{\Space and\Space} \ensuremath{x \neq -1}}

这当然是一个绝妙的解决方案,除了它只能在文本模式下产生正确的结果!!我尝试用{ }各种数学间距(\;,和\hspace{1ex})替换它们,但它们在数学模式下不起作用。

在两种情况下都能产生正确间距的一种情况是使用\mbox如下形式:

\newcommand{\Constraint}{\mbox{\ensuremath{x \neq 0}  and \ensuremath{x \neq -1}}}

但是文本不能跨行边界分割,所以不够好。

以下是我注释掉的各种失败尝试。代码如下:

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\usepackage{xspace}
\usepackage{showframe}

%%%% Math Mode: Works fine
%%%% Text Mode: Too much space before and after "and"
%\newcommand{\Constraint}{\ensuremath{x \neq 0} \text{ and } \ensuremath{x \neq -1}}

%%%% Math Mode: No space before and after "and"
%%%% Text Mode: Works fine 
%\newcommand{\Constraint}{\ensuremath{x \neq 0} \text{and} \ensuremath{x \neq -1}}


%%%% Math Mode: Works fine
%%%% Text Mode: Too much space before and after "and"
%\newcommand{\Constraint}{\ensuremath{x \neq 0} \text{~and~} \ensuremath{x \neq -1}}


%%%% Math Mode: missing space after "and"
%%%% Text Mode: Too much space before and after "and"
%\newcommand{\Constraint}{\ensuremath{x \neq 0} \text{~and\xspace} \ensuremath{x \neq -1}}

%%%% Math Mode: missing spaces before and after
%%%% Text Mode: Works fine.
\newcommand{\Space}{\ifmmode{ }\else{}\fi}%
\newcommand{\Constraint}{\ensuremath{x \neq 0} \text{\Space and\Space} \ensuremath{x \neq -1}}

\begin{document}
\begin{align*}
    \frac{2x}{x+1} &= \frac {2x-1}{x}\\
    \implies 2x  (x)   &= (x+1) (2x-1) \qquad\Constraint
\end{align*}
%
In a short sentence note the constraint: \Constraint.

In a long sentence note the above the constraint must be satisfied: $\Constraint$.
\end{document}

答案1

编辑:下一步尝试:将空间转移到室外\text

\newcommand\Space{\penalty\z@\hspace{1ex}}
\newcommand{\Constraint}{\ensuremath{x \neq 0\Space\text{and}\Space x \neq -1}}

示例输出

我本来期望数学模式已经有一个可破坏的空间,所以也许我仍然弄错了什么......

答案2

唯一能做的就是说

\newcommand{\Constraint}{%
  \relax\ifmmode
    x\neq 0 \text{ and } x\neq 1
  \else
    $x\neq 0$ and $x\neq 1$
  \fi}

如果已经加载babel,那么\textormath可以用来代替条件,但概念是相同的。

为什么不\ensuremath{x\neq 0 \text{ and } x\neq1}

首先因为它使用了\ensuremath. :) 说真的,因为唯一的断点是在关系符号之后\neq,也就是断点所在的地方较少的更可取。事实上,问题是,这\text会创建一个框。

在合适的地方添加连接线\nobreak。在定义这些缩写时要小心(几个月后,当你再次阅读该文件时,这将是神秘的)。

如何避免重复文字?我的解决办法是拼写文本,而不是使用神秘的缩写。或者,如果你坚持,

\newcommand{\ensuretext}[1]{\ifmmode\text{#1}\else#1\fi}
\newcommand{\Constraint}{%
  \ensuremath{x\neq 0}\ensuretext{ and }\ensuremath{x \neq 1}}

这比指定两次文本更糟糕。

答案3

替换ensuremath\( \)

\documentclass{article}
\usepackage{amsmath}
\usepackage{xspace}
\newcommand{\Constraint}{\mbox{\(x \neq 0\)  and \(x \neq -1\)}} %<---- replace \ensure math{} by \( \).
%------------------------------------
\begin{document}
\begin{align*}
    \frac{2x}{x+1} &= \frac {2x-1}{x}\\
    \implies 2x  (x)   &= (x+1) (2x-1) \qquad\Constraint
\end{align*}
%
Note in the above the constraint: \Constraint.
\end{document}

在此处输入图片描述

相关内容