这amsmath
包重新定义了\dots
命令,以便它根据上下文“猜测”点的正确高度。例如
$x, \dots, y$
将产生三个降低的点,与逗号对齐。而
$x \to \dots \to y$
使用与箭头对齐的居中点。但是,如果我定义自己的宏,amsmath
就无法再猜测,它总是使用较低的点。例如
\newcommand{\myto}{\to}
$x \myto \dots \myto y$
使用了错误的点。我怎样才能知道amsmath
我想要的是居中点而不是降低点?
顺便说一句,我知道,\cdots
但我想要的是\dots
仍然能够自动猜出正确的。
答案1
看看amsmath.sty
,我看到很多这样的行:
\gdef\coprod{\DOTSB\coprod@\slimits@}
我猜想\DOTSB
控制着这个符号前面(或后面?)会出现什么样的点。
\show\mapsto
表明具有魔力\DOTSB
。因此,如果定义您自己的宏,我会尝试在它们之前或之后添加\DOTSB
、\DOTSI
(这些似乎是选项)。(请报告发生了什么!)。我猜“知道”某些命令,但必须被告知任何额外的命令。 似乎属于“已知”命令,但例如,必须告知它:\DOTSX
\dots
\to
\mapsto
> \mapsto=\long macro:
->\DOTSB \mapstochar \rightarrow .
l.3 \show\mapsto
答案2
这不符合你的要求,但以最好的语义方式,amsmath 还定义了
\dotsc
表示“带逗号的点”
\dotsb
对于“带二元运算符/关系的点”
\dotsm
“乘法点”
\dotsi
对于“带积分的点”
\dotso
对于“其他点”(以上都不是)
(引自LaTeX 数学简明指南,第 15 页.) 其中每个都指定高度。我没有找到您描述的 \dots 行为的文档。您能指出它在哪里吗?
答案3
好吧,既然我问了调试问题,我冒险出去并尝试调试!
使用\show
没有作用,在日志文件中产生以下内容:
> \dots=macro:
->\protect \dots .
l.7 \show\dots
所以我在 Google 上搜索了 show 命令,找到了这页面,所以我做了以下事情
\def\pshow#1{{\let\protect\show #1}}
\begin{equation*}
a \pshow{\dots} b=0;
\end{equation*}
结果是:
> \dots =\long macro:
->\ifmmode \@xp \mdots@ \else \@xp \textellipsis \fi .
\dots ->\protect \dots
进行更深入的检查\mdots@
是可能的(使用\makeatletter
和\makeatother
),但结果相当可怕:
> \mdots@=macro:
->\FN@ \mdots@@ .
l.11 \show\mdots@
在哪里
> \FN@=macro:
->\futurelet \@let@token .
和
> \mdots@@=macro:
->\gdef \thedots@ {\dotso@ }\ifx \@let@token \boldsymbol \gdef \thedots@ \boldsymbol {\boldsymboldots@ }\else \ifx ,\@let@token \gdef \thedots@ {\dotsc }\else \ifx \not \@let@token \gdef \thedots@ {\dotsb@ }\else \keybin@ \ifgtest@ \gdef \thedots@ {\dotsb@ }\else \xdef \meaning@ {\meaning \@let@token ..........}\xdef \meaning@@ {\meaning@ }\@xp \math@ \meaning@ \math@ \ifgtest@ \@xp \mathch@ \meaning@ \mathch@ \ifgtest@ \@xp \getmathch@ \meaning@ \getmathch@ \fi \else \@xp \macro@ \meaning@@ \macro@ \ifgtest@ \@xp \not@ \meaning@ \not@ \ifgtest@ \gdef \thedots@ {\dotsb@ }\else \@xp \DOTS@ \meaning@ \DOTS@ \ifgtest@ \ifcase number \DOTSCASE@ \gdef \thedots@ {\dotsb@ }\or \gdef \thedots@ {\dotsi }\else \fi \else \@xp \math@ \meaning@ \math@ \ifgtest@ \@xp \mathbin@ \meaning@ \mathbin@ \ifgtest@ \gdef \thedots@ {\dotsb@ }\else \@xp \mathrel@ \meaning@ \mathrel@ \ifgtest@ \gdef \thedots@ {\dotsb@ }\fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \thedots@ .
至此,我放弃了……有人愿意继续解剖吗?