[Python] Interface graphique pour insérer le format TeX dans PowerPoint en 2 clics [PowerPoint]

introduction

Pouvez-vous simplement taper dans le menu des boutons pour créer des matériaux de diapositives qui utilisent beaucoup les formules? c'est ce que je pense. Cependant, essayer d'utiliser TeX avec Powerpo demande beaucoup d'efforts inutiles et est gênant.

Résolvons un tel problème ** en créant un outil très simple **. (Uniquement compatible avec Windows)

Ce qui a été fait

ldfsi-r7a10.gif

code

from urllib.parse import quote
from urllib.request import urlopen
import os
import tkinter
from tkinter import ttk
import pyperclip as ppc
import win32com.client
app = None
ppt = None
T = False


def setup():
    global app, ppt, T
    app = win32com.client.GetObject(Class="PowerPoint.Application")
    try:
        ppt = app.ActivePresentation
        if nop.get():
            app.CommandBars.ExecuteMso("InsertBuildingBlocksEquationsGallery")
            app.ActiveWindow.Selection.SlideRange.Shapes(
                app.ActiveWindow.Selection.SlideRange.Shapes.Count
            ).TextFrame.TextRange.Text = "Ⓣ"
            T = True
        else:
            T = False
        return True
    except:
        ppt = None
        return False


def isOpen():
    try:
        win32com.client.GetObject(Class="PowerPoint.Application")
        return True
    except:
        return False


def insertTeX():
    global index, texs
    math = tex.get("1.0", "end -1c")
    if not math or not isOpen():
        return
    if not T or not ppt or app != win32com.client.GetObject(
            Class="PowerPoint.Application"):
        if not setup(): return
    if nop.get():
        app.CommandBars.ExecuteMso("InsertBuildingBlocksEquationsGallery")
        app.ActiveWindow.Selection.SlideRange.Shapes(
            app.ActiveWindow.Selection.SlideRange.Shapes.Count
        ).TextFrame.TextRange.Text = " ".join(math.splitlines())
        app.CommandBars.ExecuteMso("EquationProfessional")
    else:
        with urlopen(
                f'https://texclip.marutank.net/render.php/texclip20201001121356.svg?s={quote(math)}&f=c&r=300&m=s&b=f&k=f'
        ) as svg:
            with open(
                    os.path.dirname(os.path.abspath(__file__)) + r"\tmp.svg",
                    "wb") as f:
                f.write(svg.read())
        app.ActiveWindow.Selection.SlideRange.Shapes.AddPicture(
            os.path.dirname(os.path.abspath(__file__)) + r"\tmp.svg", False,
            True, 0, 0)
        os.remove(os.path.dirname(os.path.abspath(__file__)) + r"\tmp.svg")
    if not texs or texs[-1] != math:
        texs.append(math)
        index += 1


def setTeX():
    tex.delete("1.0", "end -1c")
    tex.insert("1.0", ppc.paste())


def prev():
    global index
    if texs:
        index = max(index - 1, 0)
        tex.delete("1.0", "end -1c")
        tex.insert("1.0", texs[index])
    return


def next_():
    global index
    if texs:
        index = min(index + 1, len(texs) - 1)
        tex.delete("1.0", "end -1c")
        tex.insert("1.0", texs[index])
    return


main_win = tkinter.Tk()
main_win.title("TeX2PPT")
main_win.geometry("500x95")
main_win.minsize(main_win.winfo_width(), 95)

main_frm = ttk.Frame(main_win)
main_frm.grid(column=0, row=0, sticky=tkinter.NSEW, padx=5, pady=10)

index = -1
texs = []
tex = tkinter.Text(main_frm)
paste_btn = ttk.Button(main_frm, text="pâte", command=setTeX)
insert_btn = ttk.Button(main_frm, text="Insérer", command=insertTeX)
prev_btn = ttk.Button(main_frm, text="∧", command=prev, width=2)
next_btn = ttk.Button(main_frm, text="∨", command=next_, width=2)
nop = tkinter.IntVar()
nop.set(1)
rb1 = ttk.Radiobutton(main_frm, text='Formule', value=1, variable=nop)
rb2 = ttk.Radiobutton(main_frm, text='image', value=0, variable=nop)

tex.grid(column=0, row=0, sticky='nsew', rowspan=10, columnspan=10, padx=5)
paste_btn.grid(column=11, row=8, columnspan=2)
insert_btn.grid(column=11, row=9, columnspan=2)
prev_btn.grid(column=10, row=7)
next_btn.grid(column=10, row=9)
rb1.grid(column=11, row=7, sticky=tkinter.SE)
rb2.grid(column=12, row=7, sticky=tkinter.SE)

main_win.columnconfigure(0, weight=1)
main_win.rowconfigure(0, weight=1)
main_frm.columnconfigure(1, weight=1)
main_frm.rowconfigure(1, weight=1)
main_win.attributes("-topmost", True)
main_win.mainloop()

Comment utiliser

-Entrez la formule au format TeX dans la zone de texte -Sélectionnez si vous souhaitez insérer en tant que formule powerpo ou insérer en tant qu'image ・ Cliquez sur le bouton d'insertion

finalement

Desmos Lorsque vous copiez une formule, elle est au format TeX, il est donc pratique de la saisir en Desmos et de copier → insérer (plutôt) Fait pour Faite pour sert pour sert à).

Recommended Posts

[Python] Interface graphique pour insérer le format TeX dans PowerPoint en 2 clics [PowerPoint]
INSÉRER dans MySQL avec Python [Pour les débutants]
Formater automatiquement le code Python en code compatible PEP8 avec Emacs
Remarque pour le formatage des nombres avec la fonction de format python
Collez automatiquement des images dans des matériaux Powerpo avec python + α
Récapitulatif des outils d'exploitation de l'interface graphique Windows avec Python
[GUI en Python] PyQt5-Layout management-
Technique élégante pour coller des données CSV dans Excel avec Python
Formater json avec Vim (avec python)
[GUI avec Python] PyQt5-Préparation-
Format de chaîne avec l'opérateur Python%
[GUI avec Python] PyQt5 -Paint-
[GUI avec Python] PyQt5 -Widget II-
Faisons une interface graphique avec python.
Premiers pas avec Python pour les classes PHPer
[GUI avec Python] PyQt5-La première étape-
[GUI en Python] PyQt5-Glisser-déposer-
[GUI avec Python] PyQt5-Widget personnalisé-
Premiers pas avec Python pour les fonctions PHPer
[Python] Formater quand to_csv avec des pandas
Modifier la diapositive (Powerpo pour Google) avec Python (cas RPA à faible coût avec API Google et Python)
Extraction de mots-clés facile avec TermExtract pour Python
Créer un fichier power simple avec Python
Grattage WEB avec Python (pour mémo personnel)
Enregistrement SSH manuel pour coreserver avec python
Utiliser DeepL avec python (pour la traduction d'articles)
Mémo pour demander des KPI avec python
Amplifiez les images pour l'apprentissage automatique avec Python
Conseils pour gérer les binaires en Python
Mettez des tampons de protocole dans sqlite avec python
Conseils pour utiliser python + caffe avec TSUBAME
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
Traiter plusieurs listes avec for en Python
Premiers pas avec Python pour PHPer-Super Basics
déboguer la connexion mysql avec python mysql.connector
[Python] Lire des images avec OpenCV (pour les débutants)
Création WebApi avec Python (création CRUD) Pour les débutants
Construction d'interface graphique heureuse avec électron et python
Préparation au grattage au python [Saveur chocolat]
[Pour les débutants] Essayez le web scraping avec Python
Divisez chaque diapositive PowerPoint en un fichier JPG et exportez-le avec python