Sử dụng Jupyter Notebook để viết báo cáo khoa học thay cho LaTeX

Sử dụng Jupyter Notebook để viết báo cáo khoa học thay cho LaTeX

Jupyter Notebook là một công cụ rất mạnh để viết tài liệu cho các dự án, đặc biệt là data researching. Những người quen viết Markdown như mình rất muốn tận dụng sức mạnh của các thư viện Python, và kết hợp chúng cùng LaTeX để tạo tài liệu.

Đây là thành phẩm sau khi "thao túng" Jupyter Notebook.

Ở đây, chúng ta sẽ sử dụng trình soạn thảo VSCode, cùng trình quản lý gói Mamba.
Theo hướng dẫn chính thức của VSCode thì sẽ yêu cầu cài Anaconda, nhưng Anaconda có nhược điểm trí mạng là chậm khủng khiếp, và không tường minh.

Hướng dẫn này mình viết cho Arch Linux, các hệ điều hành nhân Linux khác tiến hành tương tự. Riêng với Windows, mình không sử dụng nên nếu bạn cần hướng dẫn, hãy nhắn tin cho mình tại đây.

Cài đặt texlive

Đây là điều bắt buộc để xuất ra được văn bản giống y sì văn bản LaTeX, vì Jupyter sẽ chuyển đổi file .ipynb thành file .tex rồi mới xuất thành pdf.

Tiến hành cài đặt các gói cần thiết cho LaTeX:

sudo pacman -S texlive-most texlive-langextra texlive-bibtexextra

Cài đặt mamba, jupyteripykernel

Với Arch Linux, máy mặc định có sẵn python nên bạn không cần cài thêm python.

Tiến hành cài đặt Mamba bằng cách chạy các lệnh sau trong Terminal:

curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh"
bash Mambaforge-$(uname)-$(uname -m).sh
mamba init bash

Sau đó, tắt Terminal đi và bật lại, chạy tiếp các lệnh sau để cài đặt jupyteripykernel. Tiện thể chúng ta cũng sẽ cài luôn numpy, scipy, sympy, mathplotlibnumba:

mamba install jupyter ipykernel numpy scipy sympy mathplotlib numba

Cài đặt VSCode

Có thể bạn cài đặt CodeOSS nhưng hên xui sẽ cài được các Plugin chính thức của Microshit. Mình ghét một mớ Telemetry của VSCode, nhưng tiện thì xài vậy.

Với Arch Linux, bạn hãy cài VSCode từ Arch User Repository. Để tiện lợi cho bạn, mình khuyến khích sử dụng yay - Yet Another Yogurt làm trình quản lý gói.

Bạn tiến hành cài đặt VSCode như sau:

yay -S visual-studio-code-bin

Sau đó, mở mục Extension lên và cài đủ bộ Plugin sau:

Có 4 thứ phải cài: Python, Pylance, Jupyter và LaTeX Workshop. Cài 4 thứ đó thì những thứ còn lại tự cài đặt vào cùng.

Tiến hành thao túng Jupyter Notebook

Sau 3 ngày mất ăn mất ngủ lần mò, mình đã tìm ra cách để chỉnh sửa file PDF LaTeX xuất ra.

Nếu bạn không biết, khi Jupyter xuất PDF thì file PDF mặc định có phần đầu đề là tên file và ngày tháng. Ví dụ file của bạn là test.ipynb thì tiêu đề sẽ là test cùng ngày tháng năm tạo file, nhìn rất thiếu chuyên nghiệp.

Để thay đổi cục diện này, bạn hãy chỉnh sửa file $HOME$/mambaforge/share/jupyter/nbconvert/templates/latex/base.tex.j2. Xóa trắng và dán toàn bộ nội dung trong link này vào file.

Tiếp theo, chỉnh sửa metadata của Jupyter Notebook. Trong file Notebook của bạn, chọn lần lượt như sau:

Bấm theo thứ tự trong ảnh nhé!

Sau đó, một file JSON sẽ xuất hiện để bạn chỉnh sửa cho lẹ. Bây giờ bạn có thể cuộn xuống tầm gần cuối và sửa thông tin từa tựa như trong ảnh nhé:

Chú ý sửa phần authors và title là được, mấy cái còn lại không có cũng được. Để giúp bạn tùy biến thêm các thông tin như email với viện trường, mình sẽ viết một bài riêng sau.

Cuối cùng là cấu hình VSCode sao cho tạo file thuận lợi nhất. Trên thanh công cụ ở trên dầu, chọn "Terminal > Configure Default Build Task ... > Create tasks.json from template > Others". Sau đó sẽ xuất hiện 1 file tasks.json cho bạn chỉnh sửa, và bạn xóa trắng nội dung file, sau đó dán đoạn code này vào:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "PDF Build [xelatex]",
            "type": "shell",
            "command": "echo | jupyter nbconvert --to pdf ${fileBasename} --template latex",
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "silent",
                "revealProblems": "onProblem",
                "close": true
            }
        }
    ]
}

Nhớ lưu lại file này. Sau đó, chọn file Notebook bạn đang làm, ấn tổ hợp Ctrl Shift B hoặc chọn "Terminal  > Run Build Task > PDF Build [xelatex]". Kết quả trả về 1 file PDF sạch sẽ gọn gàng.

Kết

Trên đây là hướng dẫn cơ bản cách để tạo tài liệu "nhái" LaTeX từ Jupyter Notebook. Để tùy biến sâu (tạo mục lục, thêm mục, đổi chủ đề, vân vân), bạn hãy đón chờ bài viết tiếp theo của mình nhé!

Stay tuned!