MiKTeXDockerized (rev. 1.4)
장점 ¶
- MiKTeX 특유의 MPM 시스템 덕분에 작은 크기의 이미지만 설치하고도 이후의 작업에 지장이 없다. 패키지나 유틸리티가 필요해지면 스스로 다운로드받는다.
- 현재 MiKTeX (21.X)은 갱신이 빠르고 상당히 안정적이다. TeX Live와 큰 차이가 없다.
- texmf를 추가하여 운영할 수 있기 때문에 사용자 패키지를 활용하는 것이 가능하다. (KTUG 사설저장소 패키지들을 미리 설치해둔 후에 등록하여 쓸 수 있다.)
- Linux MiKTeX은 실행 속도에서도 만족스럽다.
- 호스트 운영체제가 무엇이든 상관없이 동일하게 동작한다.
- docker에서 돌아간다는 것이 장점이다.
단점 ¶
- tlmgr이 없는 것은 단점이다. 그 결과 KTUG 사설저장소를 통합적으로 운용하지 못한다.
- MPM 다운로드가 서버 사정으로 동작하지 않을 가능성을 배제할 수 없다.
- docker에서 돌아간다는 것이 단점이다.
설치 ¶
- 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
- 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
- 유틸리티 관련
Docker 운영 팁 ¶
- Windows는 Pro면 Hyper-V, Home이면 wsl2로 사용하는 것을 추천함.
사용자에게 docker 그룹 권한 주기 (Linux) ¶
sudo usermod -G docker -a <username>