Latex 我可以在原始文本中定义powerpoints或演示文稿吗?

Latex 我可以在原始文本中定义powerpoints或演示文稿吗?,latex,powerpoint,Latex,Powerpoint,大家好:我想用一个原始文本文件创建一个power point演示文稿,这样我就可以快速编辑该文件并查看结果,并且格式统一。基本上,我说的是将数据内容与表示分离 我该怎么做?我想也许乳胶是一种选择。我还看到了Powerpoint和open office演示文稿的API 如果你只需要带标题和项目符号文本的幻灯片,那就很简单了。创建一个如下所示的txt文件(使用TAB键代替下面的键): 幻灯片1标题 项目符号一级文本 项目符号二级文本 再次回到Bullet Leven One 幻灯片2标题 幻灯片3标

大家好:我想用一个原始文本文件创建一个power point演示文稿,这样我就可以快速编辑该文件并查看结果,并且格式统一。基本上,我说的是将数据内容与表示分离


我该怎么做?我想也许乳胶是一种选择。我还看到了Powerpoint和open office演示文稿的API

如果你只需要带标题和项目符号文本的幻灯片,那就很简单了。创建一个如下所示的txt文件(使用TAB键代替下面的键):

幻灯片1标题
项目符号一级文本
项目符号二级文本
再次回到Bullet Leven One
幻灯片2标题
幻灯片3标题
更多项目符号文本
塔夫特现在恨我们了
但我们不在乎,是吗?
幻灯片4标题

等等。保存文件,启动PowerPoint,选择“文件打开”命令,在“文件打开”对话框中选择大纲或所有类型的文件,然后选择TXT文件。完成。

Powerpoint通过COM公开其API—这使得您可以(几乎)用支持COM的任何编程语言在GUI中执行任何操作。困难在于API在不同版本之间发生变化。确定API范围的一种方法是使用宏录制功能手动制作一张幻灯片,然后将其转换为目标语言

我有一些旧的(最近没有测试过的)Powerpoint 2003 python代码,根据您的布局需要,您可以从中了解代码的外观

from win32com.client import Dispatch

ppLayoutTitle = 1
ppLayoutText  = 2

def writePresentation( fname, data ):
    pptApp = Dispatch('Powerpoint.Application')
    pres   = pptApp.ActivePresentation
    aw     = pptApp.ActiveWindow
    slides = pres.Slides

    for item in data:
        t1 = item[0]
        t2 = item[1]
        stype = item[2]
        assert(stype in [ppLayoutTitle,ppLayoutText])
        s = slides.Add( slides.Count, stype )
        aw.View.GotoSlide(s.SlideIndex)

        s.Shapes.Item(1).Select()
        aw.Selection.ShapeRange.TextFrame.TextRange.Select()
        aw.Selection.ShapeRange.TextFrame.TextRange.Characters(Start=1, Length=0).Select
        tr = aw.Selection.TextRange
        tr.Text = t1

        s.Shapes.Item(2).Select()
        aw.Selection.ShapeRange.TextFrame.TextRange.Select()
        if stype == ppLayoutText:
            aw.Selection.ShapeRange.TextFrame.TextRange.ParagraphFormat.Bullet.Visible = 0
        aw.Selection.ShapeRange.TextFrame.TextRange.Characters(Start=1, Length=0).Select
        tr = aw.Selection.TextRange
        tr.Text = t2
    slides.Range(slides.Count).Delete()
    pres.SaveAs(fname)
编辑:


Openoffice(可以导出到powerpoint)也附带了它,它可以用来解决类似的问题。

你想要“powerpoint”还是任何形式的演示文稿格式?据我所知,没有一种TeX实现可以输出PPT格式(它到底为什么要输出PPT格式,相比之下,PDF格式要好得多)。你的问题并不是这里的主题(不是关于软件开发),也不是你所要求的建设性方式。如果你想用LaTeX创建一个演示文稿(不是PowerPoint文档),请看
beamer
类(如果遇到问题,请继续提问)。@Paŭlo我不同意-这是一个主题,因为OP询问的是一种转换数据的编程方法(文本)转换为另一种格式(LaTeX/.ppt),这无疑是您感兴趣的任务programmers@arnaud任何类型的演示都可以。(pdf听起来不错)那么,如何让COM和python在*NIX上进行互操作呢?似乎有一些特定于windows的库。我不知道该代码段是否可以在windows下运行。我没有尝试过,但可能是在Wine下。我已经编辑了答案,以提供一个可供选择的*NIX兼容解决方案。因为示例代码自动化了PowerPoint,所以您至少应该需要安装一份PowerPoint副本并使其正常工作。除了Windows…或合适的模拟器…它不会工作。至于PPT版本的差异,我在代码中没有看到任何会受到影响的内容;从'97年起,相同的代码应该在PPT的任何版本上工作相同。不过,一般来说,没有理由对任何内容使用Select这样做将大大降低代码的速度,并防止您在不可见的情况下运行PPT.FWIW。
from win32com.client import Dispatch

ppLayoutTitle = 1
ppLayoutText  = 2

def writePresentation( fname, data ):
    pptApp = Dispatch('Powerpoint.Application')
    pres   = pptApp.ActivePresentation
    aw     = pptApp.ActiveWindow
    slides = pres.Slides

    for item in data:
        t1 = item[0]
        t2 = item[1]
        stype = item[2]
        assert(stype in [ppLayoutTitle,ppLayoutText])
        s = slides.Add( slides.Count, stype )
        aw.View.GotoSlide(s.SlideIndex)

        s.Shapes.Item(1).Select()
        aw.Selection.ShapeRange.TextFrame.TextRange.Select()
        aw.Selection.ShapeRange.TextFrame.TextRange.Characters(Start=1, Length=0).Select
        tr = aw.Selection.TextRange
        tr.Text = t1

        s.Shapes.Item(2).Select()
        aw.Selection.ShapeRange.TextFrame.TextRange.Select()
        if stype == ppLayoutText:
            aw.Selection.ShapeRange.TextFrame.TextRange.ParagraphFormat.Bullet.Visible = 0
        aw.Selection.ShapeRange.TextFrame.TextRange.Characters(Start=1, Length=0).Select
        tr = aw.Selection.TextRange
        tr.Text = t2
    slides.Range(slides.Count).Delete()
    pres.SaveAs(fname)