The GitHub Actions has been a great asset for any and every possible project that requires on-the-fly integration checks, deployment, or even rick-rolling when there is a new issue submitted to the repo.
One exciting application, though, is the ability to integrate the actions to generate PDF (or PS) for a LaTeX source seamlessly. It is especially useful when collaborating with multiple authors responsible for different sections of the paper. The workflow in such a collaborative environment bodes well for productivity for all authors. For instance, one can check against typos, logical errors, or even style issues when submitting pull requests towards the main branch.
The first (or pre-first) step is to have a required LaTeX template and a Git repository hosted on GitHub (to leverage the Actions). Each template has a specific structure that needs to be adapted towards the script; in this post we consider the following configuration:
. |-sections | introduction.tex | related_works.tex | problem.text | solution.tex | experiment.tex | results.tex | conclusion.tex |- main.tex |- references.bib
The most important part of any LaTeX structure is to have the
main.tex file in the root directory of the repository.
There are a lot of different GitHub actions that can be used for compiling LaTeX to PDF available on the GitHub marketplace . The simplest among them is the latex-action, which is trivial to integrate and use.
The actions generates PDF file from the provided LaTeX file using a workflow as shown below:
name: Build LaTeX document on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build_latex: runs-on: ubuntu-latest steps: - name: Set up Git repository uses: actions/checkout@v2 - name: Compile LaTeX document uses: xu-cheng/latex-action@v2 with: root_file: main.tex
This would only compile the LaTeX file but won’t be sufficient to have a complete automated workflow. We create two more jobs, one being to create a release and the second to upload the release. The former creates a release on the GitHub repository, and the second one uploads the PDF file to the release page. To do this, we can extend our actions script as follows:
name: Build LaTeX document on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build_latex: runs-on: ubuntu-latest steps: - name: Set up Git repository uses: actions/checkout@v2 - name: Compile LaTeX document uses: xu-cheng/latex-action@v2 with: root_file: main.tex - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: $ with: tag_name: $ release_name: Release $ draft: false prerelease: true - name: Upload Release Asset id: upload-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: $ with: upload_url: $ asset_path: ./main.pdf asset_name: main.pdf asset_content_type: pdf
Upon successful run, it would build a PDF file from the LaTeX file, create a release and upload the file for release. And that’s it; you can now successfully serve a compiled PDF of your LaTeX without the need to compile it locally.