【问题标题】:pandoc-generated docx misses italic variables in equationspandoc 生成的 docx 遗漏了方程中的斜体变量
【发布时间】:2013-12-03 17:35:16
【问题描述】:

我有以下带有嵌入式 LaTeX 方程的 Markdown 片段:

# Fisher's linear discriminant

\newcommand{\cov}{\mathrm{cov}}
\newcommand{\A}{\mathrm{A}}
\renewcommand{\B}{\mathrm{B}}
\renewcommand{\T}{^\top}

The first method to find an optimal linear discriminant was proposed by Fisher
(1936), using the ratio of the between-class variance to the within-class variance
of the projected data, $d(\vec x)$, as a criterion. Expressed in terms of the
sample properties, the $p$-dimensional centroids $\bar {\vec x}_\A$ and
$\bar {\vec x}_\B$ and the $p \times p$ covariance matrices
$S_A = \cov_i ( \vec x_{\A i} )$ and $S_B = \cov_i ( \vec x_{\B i} )$, the
optimal direction is given by 
$$
\vec w = \left ( \frac{ S_A + S_B }{2} \right ) ^{-1}
~ ( \bar {\vec x}_\B - \bar {\vec x}_\A ).
$$

当我用 pandoc 将它转换为 LaTeX 并用 xelatex 编译它时,我得到了预期的文本,并带有很好的数学渲染。当我使用 pandoc 将其转换为 MS Word 时使用

pandoc test.text -o test.docx

并在 MS Office Word 2007 中打开它,我得到以下信息:

只有那些是符号或直立文本的方程部分才能正确呈现,而斜体的变量名会被方框中的问号替换。

我怎样才能做到这一点?

【问题讨论】:

  • 您的输入适用于我在 Mac OS X 上使用 pandoc 1.12.2。您可以发布您获得的 word 文件的链接吗?这是我的:fileswap.com/dl/wajeArZq4c
  • @mb21 感谢您的回复!如果我在 Word 中打开,您的 docx 看起来与我的相同。所以这可能是我复制/安装 Word 的问题,而不是文件的问题。顺便提一句。我找到了一个解决方法:我可以将 Word 中的公式显示切换为“线性”,然后再切换回“专业”,所有符号都会出现。 – 这是我的:dl.dropboxusercontent.com/u/14431931/test.docx
  • 哦,这就是你的文档在我的 Mac 上的 Word 副本上的样子:share.pho.to/4J6al 我想这可能有助于使用最新版本的 pandoc...
  • @mb21 啊,不,那只是刚刚犯了一个错误;我省略了最后一个“$$”。我已更新文件,请重试。
  • 啊,现在看起来和我的一样。当所选字体没有该字符时,通常会出现这些问号。你有没有安装字体Cambria Math

标签: ms-word latex pandoc


【解决方案1】:

在 Word 2007 中,我看到的结果与您的类似,只是在这里,我看不到“方框中的问号”字符,只有空格。

如果我然后采用其中一个表达式,并使用您的线性显示和返回技巧,则字符会重新出现在该表达式中。

如果我保存并重新打开,其他表达式仍然无法正确显示,但如果我保存并查看 XML,我注意到

  1. Math 字体已更改为 Cambria Math
  2. 附加运行参数 (w:rPr) XML 指定 Cambria Math oMath 内的许多运行 (w:r) 中都插入了字体 元素,即使在不显示的 oMath 表达式中 正确。但是,在现在显示的 oMath 表达式中 正确地,这个额外的 XML 已应用于每次运行。在里面 其他的,它只应用于一些运行(我想我可以看到 模式,但我现在没时间了……)
  3. 如果我手动将 XML 添加到其他运行并重新打开 文档中,表达式正确显示。或者至少,他们在 我试过的一个案例。

由于 Word 2010 正确显示结果,我只能假设它不依赖这些显式字体设置,而 Word 2007 则依赖。这还不能真正帮助你,因为改变所有这些 w:r 元素会比你已经在做的更难。但是可能需要设置默认样式/字体,或者在 XML 层次结构中较高的位置,或者在 .zip 中的其他位置(可能在 fontTable.xml 或 styles.xml 中)。我对 Word 的 XML 结构不够熟悉,无法猜测是否有任何遗漏,但明天也许可以看看。

我想另一种可能性是您只需要拥有所有这些额外的 rPr 元素才能在 Word 2007 中工作,这表明 pandoc 可能是为 Word 2010 而不是 2007 编写的。(我什么都不知道关于工具)。

举个例子,你有

<m:r>
  <m:t>(</m:t>
</m:r>

你需要的是

<m:r>
  <w:rPr>
    <w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math" />
  </w:rPr>
  <m:t>(</m:t>
</m:r>

【讨论】:

  • 我仍然没有看清楚所有内容,尤其是 Word 生成的 XML 很难阅读,但您肯定走在正确的轨道上。我将尝试查看 pandoc 使用的对 reference.docx 的更改是否会使它在没有技巧的情况下消失。也许我会提交一个错误报告。如果您碰巧了解更多信息,请更新答案。无论如何:非常感谢!
  • 我环顾四周,但目前我看不到任何其他方法可以避免所有这些单独的 w:rPr 设置。我希望在 settings.xml 中更改 mathPr 下的元素 dispDef 可能会产生效果,但事实并非如此。我尝试过的其他任何事情(以防万一!)例如将 Cambria Math 添加到 fontTable.xml 都没有任何效果。
【解决方案2】:

我做了以下操作来解决字体问题:

  1. 新建一个空word文档。
  2. 将所有内容复制到新文档中。
  3. 选择匹配源格式。

【讨论】:

    【解决方案3】:

    如上所述,Windows 没有Lucida Grande 字体,因此用Cambria Math 代替数学字体应该可以。

    1. test.docx 重命名为test.zip
    2. vim test.zip 并选择 test/word/settings.xml
    3. 查找并将Lucida Grande 更改为Cambria Math
    4. 保存并重命名 zip 为 docx。这会导致类似this docx

    然后,您还可以将该文件作为一种 docx 模板提供给 pandoc 并使用 --reference-docx option

    【讨论】:

    • 这不起作用。我和OP有同样的问题,但是pandoc生成的文件中定义的数学字体是Cambria Math。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多