{ "name": "LaTeX Dev Container", "image": "ghcr.io/khannurien/latex-devcontainer:2026.08", // "build": { // "dockerfile": "Dockerfile", // "context": ".." // }, "remoteUser": "vscode", "updateRemoteUserUID": true, // Local extensions, packaged and installed by the script below: // .devcontainer/overleaf-keymap -- Overleaf's keyboard shortcuts // .devcontainer/paste-figure -- Ctrl+V an image -> figure environment "postCreateCommand": "bash .devcontainer/install-extensions.sh", "customizations": { "vscode": { "settings": { // VSCode text editor settings "editor.fontSize": 16, "editor.tabSize": 2, "editor.lineHeight": 1.8, "editor.cursorBlinking": "phase", "editor.unicodeHighlight.nonBasicASCII": false, "editor.wordWrap": "on", "editor.wrappingStrategy": "advanced", "editor.wordBasedSuggestions": "off", // "editor.quickSuggestions": { // "other": "on", // "comments": "off", // "strings": "off" // }, // "editor.acceptSuggestionOnEnter": "off", // LaTeX Workshop settings "latex-workshop.intellisense.package.enabled": true, "latex-workshop.intellisense.unimathsymbols.enabled": true, "latex-workshop.intellisense.citation.backend": "biblatex", // Linting and formatting (chktex and latexindent ship with TeX Live) "latex-workshop.chktex.enabled": true, "latex-workshop.chktex.run": "onSave", "latex-workshop.formatting.latex": "latexindent", "[latex]": { "editor.formatOnSave": true }, "latex-workshop.latex.outDir": "build", "latex-workshop.latex.clean.subfolder.enabled": true, "search.exclude": { "**/build": true }, "latex-workshop.latex.autoBuild.run": "onFileChange", "latex-workshop.latex.autoBuild.interval": 3000, "latex-workshop.synctex.afterBuild.enabled": true, "latex-workshop.view.autoFocus.enabled": false, "latex-workshop.view.pdf.reload.transition": "fade", "latex-workshop.view.pdf.viewer": "tab", "latex-workshop.view.pdf.zoom": "auto", "latex-workshop.latex.tools": [ { "args": [ "-shell-escape", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-pdf", "-outdir=%OUTDIR%", "-out2dir=.", "-pdflatex", "-e", "$bibtex='biber %O %S';", "%DOC%" ], "command": "latexmk", "name": "latexmk + pdflatex + biber" }, { "args": [ "-shell-escape", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-pdf", "-outdir=%OUTDIR%", "-out2dir=.", "-xelatex", "-e", "$bibtex='biber %O %S';", "%DOC%" ], "command": "latexmk", "name": "latexmk + xelatex + biber" }, { "args": [ "-shell-escape", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-pdf", "-outdir=%OUTDIR%", "-out2dir=.", "-lualatex", "-e", "$bibtex='biber %O %S';", "%DOC%" ], "command": "latexmk", "name": "latexmk + lualatex + biber" } ], "latex-workshop.latex.recipes": [ { "name": "latexmk + lualatex + biber", "tools": [ "latexmk + lualatex + biber" ] }, { "name": "latexmk + xelatex + biber", "tools": [ "latexmk + xelatex + biber" ] }, { "name": "latexmk + pdflatex + biber", "tools": [ "latexmk + pdflatex + biber" ] } ], "latex-workshop.latex.recipe.default": "lastUsed", // Overleaf-style image paste, from .devcontainer/paste-figure. Ctrl+V (or a // drag & drop) of an image into a .tex file writes it here and inserts a // figure environment around it; edit "pasteFigure.template" to change the // block that gets inserted. "pasteFigure.directory": "img" }, "extensions": [ "james-yu.latex-workshop", "jgclark.vscode-todo-highlight" ] } } }