答案1
我能想到的最好的办法是使用一个矩阵来表示分数,在分子下面加一个下划线来模拟除法线。困难在于如何让“=”与下划线对齐。
此外,方程式必须采用“显示”格式。下面的方法在这里有效,但 vphantom(x/x) 是任意的间距 - 也许你有更好的主意。
顺便说一下,我使用 \ldiv 按照您显示的方式布置 a_0/(1-b_l),否则 Word 会使用水平分割条进行布置。
\matrix(\vphantom(x/x)@y_t =) \matrix( \underbar ( a_0\ldiv\begin 1-b_1 \end + \sum_(i=0)^\infty \naryand \begin b_1^i \epsilon_(t-i) \end ) @ 1-b_2 L )
我有一段代码可以帮助从上述类型的线性格式开始插入此类内容。这并不是特别好,因为公式编辑器 UI 的编写方式似乎阻止了粘贴文本然后构建文本的尝试,而且 OMath 对象模型和 MML 都不太好用。
即使使用此功能,也需要您在 Word 中启用“开发人员”选项卡,并知道如何安装 VBA 宏。此外,由于宏使用 SendKeys,因此您不能像平常一样从 VBA 编辑器运行宏。您需要做的是
- 在 Word 文档中插入新公式
- 选择其中的文本
- 单击 Word 中的“开发人员”选项卡
- 点击宏按钮
- 选择类型方程并点击跑步
代码:
Sub typeEquation()
Dim c As String
Dim i As Long
Dim m As OMath
Dim s As String
Dim t As String
Dim u As String
s = "\matrix(\vphantom(x/x)@y_t =) \matrix( \underbar ( a_0\ldiv\begin 1-b_1 \end + \sum_(i=0)^\infty \naryand \begin b_1^i \epsilon_(t-i) \end ) @ 1-b_2 L ) "
Set m = Selection.OMaths(1)
u = ""
For i = 1 To Len(s)
c = Mid(s, i, 1)
Select Case c
Case "+", "^", "%", "~", "(", ")", "[", "]" ' what about "{" and "}" ?
t = "{" & c & "}"
Case Else
t = c
End Select
u = u & t
VBA.SendKeys t
DoEvents
Next
Debug.Print u
End Sub
最初,我构建了想要发送的字符串,并在一个 SendKeys 语句中发送了整个字符串,但事实证明这并不可靠 - 我认为可能存在时间问题,BuildUp 仍在工作并且无法正常运行。不确定。