如何从 Word 运行 LaTeX?

如何从 Word 运行 LaTeX?

我正在用 LaTeX 写一篇期刊文章。目前,审阅过程非常困难,因为我的教授必须对 pdf 进行评论。

之前,我曾使用 Word 撰写过一篇期刊论文。虽然使用 Word 的整个过程非常糟糕,但 Word 确实有非常方便的工具来审阅/编辑期刊文章。当有三位以上合著者时尤其如此。

因此,我试图想出一种方法,让我可以用 Word 但使用 LaTeX 语法编写整篇文章。我的教授可以理解大部分 LaTeX 语法,但他不想在个人电脑上使用和维护 LaTeX。如果有人能提出一些想法,那就太好了。

答案1

在对这个问题的评论中详细阐述我的答案,这就是我目前得到的答案。

您需要安装 Python(我安装了 python2.7)以及 lxml 和 PIL。我发现在 Windows 中安装后者的最简单方法是http://www.lfd.uci.edu/~gohlke/pythonlibs/,并下载lxml-2.3.4.win32-py2.7.‌exePIL-1.1.7.win32-py2.7.‌exe请注意,您必须为您的 Python 版本选择适当的文件)。运行这些exe,将安装适当的库和绑定。

然后你就可以下载https://github.com/mikemaccana/python-docx。我没有尝试正确安装这个。我只是将它解压到一个文件夹中,打开一个cmdshell,导航到该文件夹​​并运行提供的示例(example-extracttext.pyexample-makedocument.py),这些示例都有效。我的设置很好。

然后我根据我们的需求调整了代码example-extracttext,并编写了以下脚本,我将其命名为run.py

#!/usr/bin/env python2.7
'''
This file opens a docx (Office 2007) file and dumps the text. Then it uses pdflatex to compile it.
'''
from docx import *
import os
import sys
if __name__ == '__main__':        
    try:
        wordfile = sys.argv[1]
        latexfile = sys.argv[1].replace('docx', 'tex')
        logfile = sys.argv[1].replace('docx', 'log')
        document = opendocx(wordfile)
        newfile = open(latexfile,'w')        
    except:
        print('Please supply an input file. For example:')    
        print('''  run.py 'MyDocument.docx' ''')    
        exit()
    # Fetch all the text out of the document we just created        
    paratextlist = getdocumenttext(document)    

    # Make explicit unicode version    
    newparatextlist = []
    for paratext in paratextlist:
        newparatextlist.append(paratext.encode("utf-8"))                  

    ## Print our documnts test with two newlines under each paragraph
    newfile.write('\n\n'.join(newparatextlist))
    newfile.close()

    ## Now use pdflatex to compile the result
    os.system("pdflatex %s" % latexfile)
    while "Rerun" in open(logfile).read():
        os.system("pdflatex %s" % latexfile)

为了测试它,我编写了以下 Word 文档(请注意,我使用 Word 样式来标记章节标题,并使用表格插入 tikz 图片的代码,甚至插入了显示该图结果的图像,显​​然不是在第一遍,而是在后面)。还请注意,我使用 Word 项目符号列表来帮助标记分项列表。转换为纯文本时,所有这些 Word 样式都将被删除,但允许我们使显示更清晰。

在此处输入图片描述

Prueba.docx我将此文档以与脚本相同的名称保存在同一个文件夹中run.py,然后在 Word 文件上运行该脚本:

C:\Users\jldiaz\Downloads\mikemaccana-python-docx-647ee97>python run.py Prueba.docx

经过两次编译后(如果引用未解决,脚本将负责再次编译),结果pdf如下:

在此处输入图片描述

(此时我使用 IrfanView 截取 tikz 图片并将其粘贴到 word 文档中)

注意:如果您使用 SumatraPDF 作为 pdf 阅读器,则无需在再次编译之前关闭 pdf 文档。当 pdf 发生变化时,SumatraPDF 会更新视图。

更新:

还用数学、注释和修订标记进行了测试。所有工作都按预期进行(注释被忽略,修订标记被忽略,最新版本的文本进入最终的 .tex 文件)。

但是,请注意 Word 文件中的回车符。Word 中的“Enter”键会插入一个段落结束标记,python 会将其转换为一个空行(从 到\partex,因此一切正常)。但是在某些环境中,我们不想要这些空行(例如,在公式环境中,或者 TeX 不需要 的其他地方\par)。我们可以通过在 Word 中使用 Shift+Enter 来避免这种情况,它会插入一个行尾而不是段落结束符。python 会将这些行尾转换为空格。

我对评论、修订和数学的实验:

在此处输入图片描述

脚本执行后的结果:

在此处输入图片描述

答案2

鉴于您的评论:

我想要相同的主文档。我的教授在审阅时做的所有便签和高亮在我编写新文档后都消失了,这让我很恼火。因此,我想要一个所有作者都做高亮和评论的地方(最好是 .doc 文件),我从中提取文本然后进行编写。

你的教授/同事可以选择使用 SVN 吗?

我最近一直在使用 LaTeX + SVN 进行协作,我认为这是一个很棒的组合(比使用 Word 的协作功能要好得多,尽管我也是 Word 的重度用户)

您的合作者没有严格要求安装 L​​aTex,他们只需更新他们的 svn 工作副本(使用 Tortoise 等 GUI),在记事本等文本编辑器中打开 .tex 文件,并将他们的备注写为注释(使用 %)或使用自定义命令(如\profremark{}),然后提交更改的文件。

这会将所有内容和备注保存在同一个主文档中(或者如果需要,可以分成多个文档),并且如果您使用自定义命令,您可以轻松切换备注的外观。

你可以通过以下方式帮助你的合作者

  • 使你的 latex 源文件在简单的文本编辑器中尽可能的易读(例如通过换行符)
  • 编写一些自定义注释命令,将其插入到序言 ( \collaborator1_comment{}, \collaborator2_comment{}) 中,并且它们可以/必须使用。您可以在编译后的 PDF 中为它们赋予一些美观而独特的外观(例如出现在侧边距中,或以特定颜色显示等)。
  • 使用 latexdiff 生成清晰的 PDF,突出显示更改(请参阅我对我自己问题的回答latexdiff + svn 无法处理多个文件(扁平化)) 并将 PDF 也提交到存储库。如果您使用自定义命令,协作者评论可以显示在 PDF 中。

对于您的最终版本,您只需隐藏自定义备注命令的外观。

答案3

与 JLDiaz 的优秀答案类似,可以在以下位置找到 Word-Macro-Template 的原型,它允许您直接在 MS Word 中使用 LaTeX 代码,也就是说,您可以将 MS Word 用作非常基本的 LaTeX 编辑器

https://github.com/Doktorierer/WordAsLatexEditor

主要目的不是将 MS Word 用作 LaTeX 编辑器,而是与不使用 LaTeX 的合作作者/主管一起进行修订工作。

特点(截至 2022 年 9 月):

  • 在 MS Word 中预览 LaTeX 环境
  • 隐藏或灰显 LaTeX 标记
  • 对整个文档运行 LaTeX

下面是一个包含两张图片的示例:MS Word 中的 LaTeX 文件和美化后的代码,后者仍然是有效的 LaTeX 代码,只是在 Word 中隐藏了一些文本。

Word 中的纯 LaTeX 代码

具有预览、部分导航和隐藏标记的 LaTeX 代码

显然,如果有足够的兴趣,模板代码可以得到改进。

相关内容