MiKTeXDockerized (rev. 1.7)

EDRSPIHCRSSRSS

MiKTeXDockerized

장점과 단점

장점

  1. MiKTeX 특유의 MPM 시스템 덕분에 작은 크기의 이미지만 설치하고도 이후의 작업에 지장이 없다. 패키지나 유틸리티가 필요해지면 스스로 다운로드받는다.
  2. 현재 MiKTeX (21.X)은 갱신이 빠르고 상당히 안정적이다. TeX Live와 큰 차이가 없다.
  3. texmf를 추가하여 운영할 수 있기 때문에 사용자 패키지를 활용하는 것이 가능하다. (KTUG 사설저장소 패키지들을 미리 설치해둔 후에 등록하여 쓸 수 있다.)
  4. Linux MiKTeX은 실행 속도에서도 만족스럽다.
  5. 호스트 운영체제가 무엇이든 상관없이 동일하게 동작한다.
  6. docker에서 돌아간다는 것이 장점이다.

단점

  1. tlmgr이 없는 것은 단점이다. 그 결과 KTUG 사설저장소를 통합적으로 운용하지 못한다.
  2. MPM 다운로드가 서버 사정으로 동작하지 않을 가능성을 배제할 수 없다.
  3. docker에서 돌아간다는 것이 단점이다.
    • Microsoft Windows는 docker를 돌리기 위해서 WSL2를 동작시킬 것이고, WSL2는 Hyper-V를 동작시킬 것이다. 이 경우 VMware, VirualPC등이 실행되지 않거나, 실행되더라도 자체 VM를 사용하지 못하고 Hyper-V에서 실행되므로 실행 속도등에서 손실이 많다고 알려져 있다.

설치

  • miktex docker image
    docker pull miktex/miktex
    
    • miktex/miktex이 ARM 아키텍처를 제공하지 않는 듯한데, M1 Mac에서 Rosetta2로 어찌어찌 되는지 어떤지 해보지 않아서 모릅니다. 시도해보신 분은 추가바람.
  • build container
    docker run -ti \
      --name <unique_name> \
      -v miktex:/miktex/.miktex \
      -v <working_dir>:/miktex/work \
      miktex/miktex
    
    • <unique_name>은 기억하기 쉬운 container 이름으로. (이하 mymiktex으로 예를 들 것임.)
    • <working_dir>는 host측 작업 디렉토리. Windows라면 C:/MyTeXWork과 같은 방법으로 지정한다.
  • starting/stopping container
    docker start mymiktex
    docker stop mymiktex
    
  • executing container
    docker exec -ti mymiktex /bin/bash
    
    • /bin/bash를 실행하면 docker container 시스템 내부의 bash가 열린다. 이 시스템은 Debian Linux이다.
    • /bin/bash 대신 컴파일 명령을 줄 수 있다. ex) docker exec -ti mymiktex xelatex --shell-escape --synctex=1 mytex.tex

MiKTeX 관리

  • container를 /bin/bash entry point로 열어서 작업한다.
  • update
    mpm --admin --update
    mpm --update
    
    • 둘 다 하는 것이 좋음
  • local repository (texmf) 등록
    initexmf --register-root=<path_to>
    initexmf --admin -u
    initexmf -u
    
    • path_to는 container 내부에서 인식하는 경로를 적어야 한다.
  • 폰트 관련
    ln -s /miktex/.miktex/texmfs/install/fonts/truetype \
       /usr/local/share/fonts/truetype
    ln -s /miktex/.miktex/texmfs/install/fonts/opentype \
       /usr/local/share/fonts/opentype
    
    • 위의 두 명령을 (docker 내부에서) 실행해두는 것이 좋다.
    • Noto Sans/Serif CJK나 나눔글꼴 같은 것은 apt 명령으로 실행한다. apt install fonts-noto-cjk
      • apt로 설치하거나 /usr/share/fonts 등에 설치한 폰트를 적용하게 하려면 폰트 이름으로 (파일 이름이 아니고) 불러야 한다.
    • MiKTeX이 제공하는 (CTAN 등재) 폰트들을 자동 다운로드/설치되게 하려면 폰트의 파일 이름으로 fontspec 명령들을 사용해야 한다. 예) \setmainfont{texgyretermes-regular.otf}
    • 그렇지 않으면 mpm 명령으로 직접 인스톨해야 할 수 있다.
      mpm --install tex-gyre
      
  • 유틸리티 관련
    • arara를 사용하려면 default-jre 설치. apt install default-jre.
    • spix 사용하려면, 다음 명령을 실행할 것.
      ln -s `which python3` /usr/local/bin/python
      
    • pygmentize를 사용하려면, 다음 명령을 실행할 것.
      apt install python3-pip
      pip3 install pygments
      

Docker 운영 팁

  • Windows는 Pro면 Hyper-V, Home이면 wsl2로 사용하는 것을 추천함.

Docker daemon 실행 방법

  • Windows, Mac OS에서는 Docker Desktop을 이용하는 것이 제일 쉽다.
  • OpenSUSE의 경우, 다음과 같이.
    sudo systemctl start docker
    
  • Ubuntu에서는
    sudo service docker start
    

사용자에게 docker 그룹 권한 주기 (Linux)

sudo usermod -G docker -a <username>