这是对旧话题的跟进
我要开始一个新的,因为很难在评论中写下所有这些。在原始线程中,@egreg 提出了以下命令
\makeatletter
\newcommand{\pushright}[1]{\ifmeasuring@#1\else\omit\hfill$\displaystyle#1$\fi\ignorespaces}
\newcommand{\pushleft}[1]{\ifmeasuring@#1\else\omit$\displaystyle#1$\hfill\fi\ignorespaces}
\makeatother
\hfill
作为一种在环境中获得效果的方法align
。第一个将文本推到行的右侧,第二个将文本推到行的左侧。
我一直在尝试修改这些命令,但得到的结果不一致。为了避免这种情况,&\pushright{\text{foo}}
我想将文本和 atsign 放在宏中,然后只说,例如。\rightPush{foo}
我成功构造了\rightPush
,但由于某种令人费解的原因,模拟\leftPush
不起作用。这是我的两个宏。
\def\rightPush#1{& \ifmeasuring@#1\else\omit\hfill$\displaystyle\text{#1}$\fi\ignorespaces}
\def\leftPush#1{\ifmeasuring@#1\else\omit$\displaystyle\text{#1}$\hfill & \fi\ignorespaces}
我很乐意将 排除&
在宏之外,但这没有帮助:\text
中的\leftPush
会产生错误(尽管 中没有\rightPush
)。作为后续问题,如果有人可以解释\ifmeasuring@
和 omit 在这个宏中的作用,我将不胜感激。
非常感谢你的建议
答案1
没有提供测试文件,但至少
\def\leftPush#1{\ifmeasuring@#1\else\omit$\displaystyle\text{#1}$\hfill & \fi\ignorespaces}
应该
\def\leftPush#1{\ifmeasuring@#1\else\omit$\displaystyle\text{#1}$\hfill \fi&\ignorespaces}
这样\rightPush
你就能知道&
它\ifmeasuring@
是真还是假。
AMS 对齐总是执行两次,第一次“测量”过程不会排版任何内容,而只是测量单元格条目的大小,这决定了第二次排版过程之前设置的一些参数。\ifmeasuring@
仅在第一次执行时才为真。