pandoc生成的docx在方程中错过了斜体变量

时间:2013-12-03 17:35:17

标签: ms-word latex pandoc

我有以下Markdown嵌入式LaTeX方程式:

# 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中打开它,我得到以下内容:

word screenshot

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

如何使这项工作?

3 个答案:

答案 0 :(得分:1)

在Word 2007中,我看到一个类似于你的结果,除了在这里,我没有看到“盒子里的问号”字符,只是空格。

如果我然后使用其中一个表达式,然后使用你的线性显示和返回的技巧,字符会再次出现在该表达式中。

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

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

答案 1 :(得分:1)

我做了以下操作来摆脱字体问题:

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

答案 2 :(得分:0)

如上所述,Windows没有字体Lucida Grande,因此用Cambria Math替换Math Font应该有效。

  1. test.docx重命名为test.zip
  2. vim test.zip并选择test/word/settings.xml
  3. 查找并将Lucida Grande更改为Cambria Math
  4. 将zip保存并重命名为docx。这导致类似this docx
  5. 然后,您还可以使用--reference-docx option将该文件作为一种docx模板提供给pandoc。