latex / src /streamlit_app.py
naohiro701's picture
Update src/streamlit_app.py
040f78f verified
import io
import os
import tempfile
from pathlib import Path
from pylatex import Document
import streamlit as st
def compile_latex(source: str) -> bytes:
"""
Compile LaTeX source into a PDF and return its raw bytes.
Parameters:
----------
source : str
A complete LaTeX document body (e.g. including \\begin{document}…).
Returns:
-------
bytes
The compiled PDF file contents.
"""
with tempfile.TemporaryDirectory() as tmpdir:
# ドキュメントを初期化
doc = Document("document", documentclass="article", font_size="10pt")
doc.append(source)
base_path = os.path.join(tmpdir, "document")
# compiler 引数で pdflatex を指定。latexmk があれば省略可。
_ = doc.generate_pdf(
filepath=base_path,
compiler="pdflatex",
clean=True,
clean_tex=True,
silent=True,
)
return Path(base_path + ".pdf").read_bytes()
def main():
st.title("LaTeX Compiler")
prompt = st.text_area(
"Enter full LaTeX source",
value=(
r"\documentclass{article}"
"\n" r"\begin{document}"
"\n" r"Hello, world!"
"\n" r"\end{document}"
),
height=200,
)
if st.button("Compile to PDF"):
with st.spinner("Compiling…"):
pdf_bytes = compile_latex(prompt)
st.success("Compilation succeeded")
st.download_button(
"Download PDF",
data=pdf_bytes,
file_name="output.pdf",
mime="application/pdf",
)
if __name__ == "__main__":
main()