我想将 §...§ 定义为数学模式中文本模式的标记。这在“cases”环境中很有用,例如,可以添加定义案例的文本;或者定义集合。
而不必写
\{ x \mid x \text{ is prime.}\}
我希望能够使用
\{ x \mid x § is prime.§\}
目前我以一种非常原始的方式实现了这一点:
\def§#1§{\text{#1}}%
但是与使用 \text 命令不同,这并不会嵌套(数学内的文本在数学内的文本中……)。
我尝试阅读有关 catcodes、mathcodes 等的内容,但不幸的是,这些内容没有得到充分的记录,我无法理解。此外,我认为我想使用 § 作为开始和结束符号,这让事情变得更加复杂。
你能帮助我吗?
答案1
确实不建议你这样做。 的切换行为$
是 TeX 语法中最不受欢迎的部分之一,这就是 LaTeX 引入的原因\(
,也许更重要的是,如果你通过 inputenc 在经典 TeX 中使用 utf8 编码,它将不起作用。
然而...
\documentclass{article}
\usepackage[latin1]{inputenc}
\def§{\relax\ifmmode\hbox\bgroup\else\egroup\fi}
\begin{document}
\[
\{ x \mid x § is a prime. ${}>2 §(sigh)§ $ § \ast\}
\]
\end{document}
添加了注释,该注释太长,无法进行评论。
\text{...}
或者\(...\)
具有不同的开始和结束标记,$
具有切换功能,但这并不是很好,所以我不建议模仿它。但从技术上讲,为非 ascii 字符提供定义在不同的 TeX 引擎之间是高度不可移植的。为了使 utf8 在 (pdf)tex 中工作,大多数非 ascii 字符需要给出解码 utf8 编码的活动定义,因此如果您像这里一样手动进入并定义该字符(这实际上是 utf8 中的两个标记,正如 pdftex 所见),您将禁用大部分 utf8 解码器。您可以使用@egreg 的评论中的形式
\newunicodechar{§}{\relax\ifmmode\hbox\bgroup\else\egroup\fi}
但话又说回来,这只适用于经典 tex 中的 utf8 输入。
LaTeX 费了好大劲才给底层特性给出了统一的语法,这里的统一语法是带有强制参数的前缀函数,所以\text{
......}
答案2
这不是您所要求的,但这是一种混合数学模式和文本模式的好方法,无需输入\text
(这正是您想要的):将其构建到宏中。
\newcommand\setst[2]{\left\{#1\mid\text{#2}\right\}
然后你就可以输入了 \setst{x}{$x$ is prime}
。