使用 \bgroup \egroup 与 \frac

使用 \bgroup \egroup 与 \frac

我理解相当于并相当于(\bgroup{\egroup}编辑:事实证明我的理解是错误的,详情请参阅@david-carlisle 评论)。我有一个场景,我必须用和{}替换\bgroup\egroup编辑:请参阅我在文章末尾不能使用括号的原因)。这对于\texttt数学下标是可以的,但我不能将它用于数学分数。使用时\frac,latex 文件可以编译而无错误,但不会生成我期望的分数。这是一个 MWE:

\documentclass[12pt]{article}

\usepackage{amsmath}


\begin{document}

% texttt example
texttt example using curly braces as usual:\\ 
\texttt{hello}

% texttt works with \bgroup and \egroup
The same texttt example using \textbackslash bgroup and \textbackslash egroup:\\ 
\texttt\bgroup hello\egroup


% math subscript example
A subscript example using curly braces as usual:\\
$ x_{10} = 10 $

% math subscript works with \bgroup and \egroup
The same subscript example using \textbackslash bgroup and \textbackslash egroup:\\
$ x_\bgroup 10\egroup = 10 $


% Reason for the post: A fraction example
A fraction example using curly braces as usual:\\
$ \frac{x}{x-1} $

% Using \bgroup and \egroup, the fraction looks different
The following is supposed to be the same fraction example, only this time 
using \textbackslash bgroup and \textbackslash egroup. 
However, the result looks different:\\
$ \frac\bgroup x \egroup\bgroup x-1 \egroup $

\end{document}

输出是

在此处输入图片描述

顺便说一句,我已经在 Google 上搜索过这个问题了,但找不到任何结果来说明如何使用和\bgroup。因此,我可能是第一个问这个问题的人(对此表示歉意 :)。\egroup\frac

我的问题是:如何使用\bgroupand \egroupwith\frac代替标准用法的花括号 {}?

编辑:这就是为什么我不能将括号与 \frac 一起使用。我使用的是 RndTexExams,它是 R 中的一个包,它基于 examdesign 包生成多个随机测试版本。一个多项选择题可能有不同的版本,这些版本由两边的 @ 包围,用竖线分隔,并用括号分隔。示例 @{Version 1}|{Version 2}@。如果您尝试将 Version 1 替换为带有括号的内容,例如 \texttt{Version 1},R 包将无法解析此问题并生成错误的输出 Latex 文件。

答案1

有两种方法:

  1. 将分子和分母放在各自的宏中,然后\frac在不使用括号的情况下调用。

  2. 重新定义\frac使用方括号而不是大括号。

妇女权利委员会:

\documentclass{article}
\let\svfrac\frac
\begin{document}
\def\num{x} 
\def\denom{x-1} 
$ \frac\num\denom $

\def\frac[#1][#2]{\svfrac{#1}{#2}}
$ \frac[x][x-1] $
\end{document}

答案2

您不能自由地交换{by\bgroup}by \egroup{在许多情况下, 具有明确的语法含义。 例如,{...}仅用作参数分隔符或定义主体分隔符。在这种情况下\bgroup,您不能用 , 替换它们\egroup。 请参阅我的回答这里了解更多信息。

我们的第二个示例\texttt\bgroup hello\egroup之所以能工作,完全是因为意外。\textttis 宏和参数分隔符是预期的。如果没有,则只有第一个标记(\bgroup此处)被读取为参数,hello\egroup宏扩展后紧接着是后面的标记。为简单起见,假设定义\texttt如下:

\def\texttt#1{{\tt#1}}

然后\texttt\bgroup hello\egroup扩展为

{\tt\bgroup}hello\egroup

请注意,先打开组,然后\tt设置字体,然后打开组,然后关闭组,然后hello打印,然后关闭组。但幸运的是,它起作用了。不要使用\texttt,更自然的做法是(满足您的需求):

\bgroup \tt hello\egroup

您的第四个示例之所以$x_\bgroup 10\egroup$有效,是因为这是 TeX 的著名功能。它不是宏参数,而是数学模式中的一个组。

您的第五个示例不起作用,因为\frac它是宏,需要显式括号{}。但您可以使用 TeX 原始分数替代,如下所示:

$ a = \bgroup x \over x-1\egroup $

最后,我将解释为什么你的\frac\bgroup x \egroup\bgroup x-1 \egroup代码不起作用。假设(为了简单起见)\frac定义如下:

\def\frac#1#2{{#1\over#2}}

然后,您的示例采用第一个参数\bgroup和第二个参数x并扩展为:

{\bgroup\over x} \egroup\bgroup x-1 \egroup

请注意,组由打开{,然后下一个组(开始分数)由打开,然后创建\bgroup分数“无” “x”,然后关闭分数,然后关闭外部组,然后打开组,打印并关闭组。\over}\egroupx-1

相关内容