이공계열에서 학술적인 문서를 작성할 때 LaTeX를 이용하는 경우가 많습니다.
LaTeX는 TeX 포맷을 좀 더 이용하기 쉽게 이런저런 매크로가 추가된 형식인데요, TeX 자체를 컴퓨터 프로그래밍의 대가인 도널드 크누스가 만들었다 보니 이 형식으로 글을 쓰고 결과물을 얻어내려면, 번거롭지만 직접 빌드(컴파일)과정을 거쳐야 합니다.
하지만 프로그래머에게 익숙한 흐름인 코드 작성->빌드 과정이 있다는건 곧 빌드 자동화도 가능하다는거죠! 그래서 저는 최근에 Github가 제공하기 시작한 Github Action을 이용해 제가 TeX 문서를 편집하고 커밋한 후 Github 저장소에 갱신될 때마다 그 결과가 PDF 문서 형태로 얻어질 수 있도록 자동 빌드 시스템을 구축해봤습니다.
구축 방법은 다음과 같습니다.
1. Github에 빈 레포지토리 만들기
기존 레포여도 상관은 없습니다.
2. Github Action에서 Workflow 생성
리포 탭 중에 Actions가 있습니다. 저기로 들어간 다음 Workflow를 생성해주면 됩니다.
처음 생성하면 아래와 같은 내용의 yaml 파일이 될겁니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
name: CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run a one-line script run: echo Hello, world! |
3. Marketplace에서 LaTex Compilation 확장 추가
해당 확장을 클릭하면 Installation 단락에 복붙할 수 있는 코드가 제공되어 있습니다.
복붙 후 탭(개행) 수준을 맞춰주세요. 맞추지 않으면 빨간줄이 생길거에요. 대략 아래와 같이 내용이 추가됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
name: Build on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run a one-line script run: echo Hello, world! - name: LaTeX compilation uses: dante-ev/latex-action@latest with: # The root LaTeX file to be compiled root_file: main.tex # The working directory for the latex compiler to be invoked working_directory: ./src # optional # LaTeX engine to be used compiler: latexmk # optional, default is latexmk # Extra arguments to be passed to the latex compiler args: -pdf -latexoption=-file-line-error -latexoption=-interaction=nonstopmode # Install extra packages by apt-get # extra_system_packages: # optional |
여기서 root_file, working_directory, compiler, args는 본인의 설정에 맞게 정해주면 됩니다.
해당 확장이 기본적으로 TeX 빌드에 필요한 패키지들은 알아서 설치해두는 것 같아서 extra_system_packages에 추가적인 패키지를 적어두지 않았는데요, 혹시 빌드 시 특정 패키지가 설치되어 있지 않다는 로그가 나오면 저거 주석을 해제하고 패키지명을 적어주면 됩니다.
(로컬에서 sudo apt-get install tex-package-asdf 이런 식으로 설치한 패키지라면, extra_system_packages: tex-package-asdf 이렇게)
4. TeX 파일 경로 등 설정하기
위에 있던 root_file, working_directory가 파일 경로를 잡아줍니다.
root_file은 가장 먼저 참조할 TeX 파일입니다. 여기선 main.tex 파일인걸로 예를 듭니다.
만약 리포지토리 최상위 경로에 root_file이 있다면 working_directory는 주석 처리해도 되지만, 최상위/src 폴더 안에 있다면 working_directory는 ./src 로 해주는게 좋습니다. 그러면 root_file의 경로는 ./src/main.tex가 아니라 main.tex가 되구요.
5. Marketplace에서 Upload Artifact 확장 추가
해당 확장을 TeX 빌드 단계 다음에 추가해주면 됩니다. 대략 아래처럼요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
name: Build on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run a one-line script run: echo Hello, world! - name: LaTeX compilation uses: dante-ev/latex-action@latest with: # The root LaTeX file to be compiled root_file: main.tex # The working directory for the latex compiler to be invoked working_directory: ./src # optional # LaTeX engine to be used compiler: latexmk # optional, default is latexmk # Extra arguments to be passed to the latex compiler args: -pdf -latexoption=-file-line-error -latexoption=-interaction=nonstopmode # Install extra packages by apt-get # extra_system_packages: # optional - uses: actions/upload-artifact@v3 with: name: Paper path: ./src/main.pdf |
이 때 path를 잘 적어줘야하는데요, 예시에선 working_directory를 ./src로 잡았기 때문에 결과물도 src 폴더 안에 생성됩니다. 따라서 path를 main.pdf가 아닌 ./src/main.pdf로 잡아줘야 합니다.
만약 여러 파일을 얻고 싶다면 해당 path에 파일명 말고 경로명을 적어주면 그 안에 있는 것들을 zip으로 압축되어 제공해줍니다.
이렇게 환경을 구축하면 TeX에도 버전관리 뿐만 아니라 자동 빌드도 적용할 수 있습니다. 구축한 저장소의 링크를 아래에 공유합니다. 참고하셔도 좋고 fork 하셔도 좋습니다.