├── .gitignore ├── .devcontainer ├── Dockerfile.remote ├── devcontainer.json ├── Dockerfile.textlint ├── docker.release.sh └── Dockerfile ├── examples ├── images │ └── model.drawio.png └── latexmkrc_variants │ ├── .lua.latexmkrc │ ├── .p.latexmkrc │ └── .up.latexmkrc ├── .textlintrc.json ├── .latexmkrc ├── main.tex ├── README.md └── .vscode └── settings.json /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | -------------------------------------------------------------------------------- /.devcontainer/Dockerfile.remote: -------------------------------------------------------------------------------- 1 | FROM ghcr.io/tbistr/texlive-full:v3.0 2 | -------------------------------------------------------------------------------- /examples/images/model.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbistr/texlive-full-devcontainer/HEAD/examples/images/model.drawio.png -------------------------------------------------------------------------------- /.textlintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "filters": {}, 3 | "rules": { 4 | "preset-ja-spacing": true, 5 | "preset-ja-technical-writing": true 6 | }, 7 | "plugins": [ 8 | "latex2e" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /.latexmkrc: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env perl 2 | 3 | $latex = 'lualatex -synctex=1 -interaction=nonstopmode -file-line-error %O %S'; 4 | 5 | $biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B'; 6 | $bibtex = 'pbibtex %O %B'; 7 | $makeindex = 'mendex %O -o %D %S'; 8 | $max_repeat = 5; 9 | 10 | $pdf_mode = 4; 11 | 12 | $aux_dir = 'build/'; 13 | $out_dir = 'build/'; 14 | -------------------------------------------------------------------------------- /examples/latexmkrc_variants/.lua.latexmkrc: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env perl 2 | 3 | $latex = 'lualatex %O -synctex=1 -interaction=nonstopmode %S'; 4 | 5 | $biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B'; 6 | $bibtex = 'bibtex %O %B'; 7 | $makeindex = "mendex %O -o %D %S"; 8 | $max_repeat = 5; 9 | 10 | $pdf_mode = 4; 11 | 12 | $aux_dir = "build/"; 13 | $out_dir = "build/"; 14 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "texlive-full-devcontainer", 3 | "dockerFile": "Dockerfile.textlint", 4 | "customizations": { 5 | "vscode": { 6 | "extensions": [ 7 | "james-yu.latex-workshop", 8 | "hediet.vscode-drawio", 9 | "taichi.vscode-textlint" 10 | ] 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /.devcontainer/Dockerfile.textlint: -------------------------------------------------------------------------------- 1 | FROM ghcr.io/tbistr/texlive-full:v3.0 2 | 3 | RUN apt-get update && \ 4 | DEBIAN_FRONTEND=noninteractive \ 5 | apt-get install -y \ 6 | nodejs npm && \ 7 | rm -rf /var/lib/apt/lists/* 8 | 9 | RUN npm install -g \ 10 | textlint \ 11 | textlint-rule-preset-ja-spacing textlint-rule-preset-ja-technical-writing \ 12 | textlint-plugin-latex2e 13 | -------------------------------------------------------------------------------- /.devcontainer/docker.release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux 3 | 4 | # usage: $ cd .devcontainer && ./docker.release.sh v0.0 5 | 6 | if [ $# = 0 ]; then 7 | echo "please set version arg" 8 | exit 1 9 | fi 10 | 11 | docker buildx create --name mybuilder 12 | docker buildx use mybuilder 13 | docker buildx inspect --bootstrap 14 | 15 | docker buildx build --platform linux/amd64,linux/arm64 -t ghcr.io/tbistr/texlive-full:"$1" --push . 16 | 17 | docker buildx rm mybuilder 18 | -------------------------------------------------------------------------------- /examples/latexmkrc_variants/.p.latexmkrc: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env perl 2 | 3 | $latex = 'platex %O -synctex=1 -interaction=nonstopmode %S'; 4 | 5 | $bibtex = 'bibtex %O %B'; 6 | $biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B'; 7 | $dvipdf = 'dvipdfmx %O -o %D %S'; 8 | $dvips = 'dvips %O -z -f %S | convbkmk -u > %D'; 9 | $ps2pdf = 'ps2pdf %O %S %D'; 10 | $makeindex = 'upmendex %O -o %D %S'; 11 | 12 | $pdf_mode = 3; 13 | 14 | $aux_dir = "build/"; 15 | $out_dir = "build/"; 16 | -------------------------------------------------------------------------------- /examples/latexmkrc_variants/.up.latexmkrc: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env perl 2 | 3 | $latex = 'uplatex %O -synctex=1 -interaction=nonstopmode %S'; 4 | 5 | $bibtex = 'bibtex %O %B'; 6 | $biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B'; 7 | $dvipdf = 'dvipdfmx %O -o %D %S'; 8 | $dvips = 'dvips %O -z -f %S | convbkmk -u > %D'; 9 | $ps2pdf = 'ps2pdf %O %S %D'; 10 | $makeindex = 'upmendex %O -o %D %S'; 11 | 12 | $pdf_mode = 3; 13 | 14 | $aux_dir = "build/"; 15 | $out_dir = "build/"; 16 | -------------------------------------------------------------------------------- /main.tex: -------------------------------------------------------------------------------- 1 | \documentclass[11pt,a4paper]{ltjsarticle} 2 | \usepackage[haranoaji]{luatexja-preset} 3 | 4 | \usepackage{here} 5 | \usepackage{listings} 6 | \usepackage{color} 7 | \usepackage{graphicx} 8 | 9 | \lstset{ 10 | basicstyle={\ttfamily}, 11 | backgroundcolor={\color[gray]{.95}}, 12 | frame={tbrl}, 13 | breaklines=true, 14 | columns=[l]{fullflexible}, 15 | numbers=left, 16 | numberstyle={\scriptsize}, 17 | lineskip=-1ex, 18 | } 19 | 20 | \title{Title} 21 | \author{TSUBOI Shotaro} 22 | \date{\today} 23 | 24 | \usepackage{hyperref} 25 | \hypersetup{unicode,bookmarksnumbered=true,hidelinks,final} 26 | \begin{document} 27 | \maketitle 28 | 29 | \section{Section} 30 | 31 | \subsection{Subsection} 32 | 33 | Some contents. 34 | 35 | \end{document} 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # texlive-full-devcontainer 2 | 3 | ## 使い方 4 | 5 | 1. テンプレートリポジトリとして、または単にクローン 6 | 2. コマンドパレットから、`Reopen in Container` 7 | 3. 任意の`.tex`ファイルを編集、保存することでビルド可能 8 | 9 | ## 背景となる課題 10 | 11 | - devcontainerテンプレートが(観測範囲に)ない 12 | - コンテナイメージはあるが、devcontainerに適した構成ではない 13 | - texliveがフルで入っているイメージはない 14 | - (と、作ったときには思ってたけど、[公式であったり](https://hub.docker.com/r/texlive/texlive)した) 15 | - でもイメージサイズ5GBだし、ベースもdevcontainer向けじゃない 16 | - `.latexmkrc`とかが何なのか意味わからん(ので1回しか書きたくない) 17 | - pLaTeXとかバージョンが色々あって意味わからん 18 | 19 | 以上の課題をもとに、テンプレートを作りました。 20 | 21 | ## 特徴 22 | 23 | vscodeのdevcontainerで以下のサポートを受けられます。 24 | 25 | - ベースイメージはmicrosoftのdevcontainer向けdebian-11 26 | - マルチアーキテクチャ対応なので、Apple siliconでもネイティブ実行 27 | - save時に自動でビルド 28 | - 拡張機能の自動導入 29 | - ghcrにビルド済みイメージを配置しているため、手元でのビルドが不要 30 | - イメージサイズは約3.7GB 31 | - 実はベースのMS公式イメージが半分くらいを占めるので、そこまで大きくない 32 | 33 | ## Contribution 34 | 35 | 正直TeXの環境、ビルド周りについては何も理解していないので、特に以下の内容で改善があればPRをください。 36 | 37 | - `.latexmkrc`の改良 38 | - lualatex以外のサポート追加 39 | - 良い感じのサンプル`.tex`ファイルの追加 40 | - ベストプラクティスがWEBに散乱してるので、ここ見ればOK状態にしたい 41 | - オレオレサンプルでも、いい感じであればファイル区切って入れられると思うので、とりあえず送ってほしい 42 | -------------------------------------------------------------------------------- /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/vscode/devcontainers/base:debian-11 2 | 3 | LABEL org.opencontainers.image.source=https://github.com/tbistr/texlive-full-devcontainer 4 | 5 | ENV LANG=C.UTF-8 \ 6 | LC_ALL=C.UTF-8 \ 7 | TEXLIVE_INSTALL_NO_CONTEXT_CACHE=1 8 | 9 | WORKDIR /tmp 10 | 11 | RUN apt-get update && \ 12 | DEBIAN_FRONTEND=noninteractive \ 13 | apt-get install -y \ 14 | wget \ 15 | && rm -rf /var/lib/apt/lists/* 16 | 17 | # install texlive-full. 18 | RUN wget https://texlive.texjp.org/2024/tlnet/install-tl-unx.tar.gz && \ 19 | tar xvf install-tl-unx.tar.gz && \ 20 | cd install-tl-* && \ 21 | echo "selected_scheme scheme-full" > ./texlive.profile && \ 22 | echo "option_doc 0" >> ./texlive.profile && \ 23 | echo "option_src 0" >> ./texlive.profile && \ 24 | ./install-tl -profile ./texlive.profile && \ 25 | cd .. && \ 26 | rm -rf install-tl-* 27 | 28 | # resolve dependencies of latexindent. 29 | RUN apt-get update \ 30 | && apt-get install -y --no-install-recommends \ 31 | libyaml-tiny-perl \ 32 | libfile-homedir-perl \ 33 | libunicode-linebreak-perl \ 34 | && rm -rf /var/lib/apt/lists/* 35 | 36 | USER vscode 37 | RUN echo 'export PATH=/usr/local/texlive/2024/bin/x86_64-linux:$PATH' >> ~/.bashrc 38 | RUN echo 'export PATH=/usr/local/texlive/2024/bin/aarch64-linux:$PATH' >> ~/.bashrc 39 | USER root 40 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click", 3 | "latex-workshop.latex.autoBuild.run": "onSave", 4 | "latex-workshop.latex.autoClean.run": "onFailed", 5 | "editor.formatOnSave": true, 6 | "latex-workshop.latex.recipes": [ 7 | { 8 | "name": "latexmk", 9 | "tools": [ 10 | "latexmk" 11 | ] 12 | }, 13 | ], 14 | "latex-workshop.latex.tools": [ 15 | { 16 | "name": "latexmk", 17 | "command": "texfot", 18 | "args": [ 19 | "latexmk" 20 | ] 21 | } 22 | ], 23 | "latex-workshop.latexindent.args": [ 24 | "-c", 25 | "%DIR%/", 26 | "%TMPFILE%", 27 | "-y=defaultIndent: '%INDENT%'" 28 | ], 29 | "latex-workshop.latex.recipe.default": "first", 30 | "latex-workshop.latex.outDir": "%DIR%/build", 31 | "latex-workshop.view.pdf.viewer": "tab", 32 | "latex-workshop.view.pdf.zoom": "page-width", 33 | "latex-workshop.intellisense.package.enabled": true, 34 | "latex-workshop.latex.clean.fileTypes": [ 35 | "*.aux", 36 | "*.bbl", 37 | "*.blg", 38 | "*.idx", 39 | "*.ind", 40 | "*.lof", 41 | "*.lot", 42 | "*.out", 43 | "*.toc", 44 | "*.acn", 45 | "*.acr", 46 | "*.alg", 47 | "*.glg", 48 | "*.glo", 49 | "*.gls", 50 | "*.ist", 51 | "*.fls", 52 | "*.log", 53 | "*.fdb_latexmk", 54 | "*.snm", 55 | "*.nav", 56 | "*.dvi", 57 | "*.synctex.gz" 58 | ], 59 | } 60 | --------------------------------------------------------------------------------