gpt4 book ai didi

c# - Microsoft.Office.Interop.Word OMath

转载 作者:行者123 更新时间:2023-11-30 21:40:37 24 4
gpt4 key购买 nike

这是我在 StackOverflow 上的第一个问题,请耐心等待 :D

我实际上是在尝试通过 Visual Studio 环境中的 Microsoft.Office.Interop.Word 库从 .txt 文件生成 .docx 文件(我在 C# 中编码)。

这些 Word 文件旨在为 child 提供特定帮助(颜色、大小等)的练习。

一些 txt 文件包含方程式,我想使用特定工具“OMath”在 Word 上重新创建这些方程式(如果我理解,将用于创建这些“方程式”框)。

当时我一次生成1个以上的box都没有成功。例如,如果一个 txt 有 2 个或更多方程式,则所有这些方程式都在同一个方程式框中创建,而不是单独创建。

我试过这样的代码:

using Word = Microsoft.Office.Interop.Word;

...

Word.Application wapp = new Word.Application();
Word.Document wdoc = wapp.Documents.Add();

...

wpara = wdoc.Paragraphs.Add();
e.ElementAspect.setFormat(ref wpara); // set wpara format (color, font ...)
Word.Range test1 = wapp.Selection.Range;
test1.Text = e.Content;
test1 = wpara.Range.OMaths.Add(test1);
Word.OMath equation = test1.OMaths[1];
equation.BuildUp();

最佳答案

首先,您不需要使用wapp.Selection 对象。 Selection 用于文档中的当前光标/用户位置(简而言之)- Selection interface

其次,使用我测试过的wpara = wdoc.Paragraphs.Add(),为您提供当前选择的段落。

此代码(如您遇到的那样)将在每次迭代中覆盖 prevoius 方程。

for (int i = 1; i <= 10; i++)
{
var para = oDoc.Paragraphs.Add();
var paraRange = para.Range;
paraRange.Text = "x^2 + " + i + " = y";
}

最后,您可以将多个范围添加到 OMaths 对象,并使用 BuildUp 一次构建所有范围。

尝试这段代码并将其与您的解决方案相结合:

var oWord = new Word.Application();
oWord.Visible = true;
var oDoc = oWord.Documents.Add();
var math = oDoc.OMaths;

for (int i = 1; i <= 10; i++)
{
oDoc.Paragraphs.Add();
var para = oDoc.Paragraphs[i];
var paraRange = para.Range;
paraRange.Text = "x^2 + " + i + " = y";
math.Add(paraRange);
}
math.BuildUp();
oWord.Quit();

/编辑

正如@JLA 所发现的,更复杂的场景,如 \mapsto 不起作用。

第一次尝试:词宏

Word under the scenes 设法转换它,所以在开发人员功能区选项卡中我启用了录音,只是注意到当启用录音时它不再工作......

第二次尝试:将 LaTeX 转换为 MathML

来自问题Tools for converting LaTeX equations to Content MathML or OpenMath?我得到了 SnuggleTeXlive demo converting to MathML但它仅适用于非常简单的场景,例如:

<math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mn>1</mn><mn>2</mn></mfrac></math>

添加到Word的代码:

Clipboard.SetText("<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mrow><mn>1</mn><mn>x</mn></mrow></math>", TextDataFormat.Text);

第三次尝试:自己转换

将所有不适用于 OMath 的特殊名称更改为 UTF-16 字符。例如:

\mapsto = \u27FC

Word代码:

paraRange.Text = "x^2 + "+ i + '\u27FC' +" y";

关于c# - Microsoft.Office.Interop.Word OMath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44456263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com