diff --git a/.gitignore b/.gitignore index c8701b3..eb9cc26 100644 --- a/.gitignore +++ b/.gitignore @@ -52,5 +52,3 @@ venv/ Build/ Output/ - -.vscode/ diff --git a/.vscode/README.md b/.vscode/README.md new file mode 100644 index 0000000..5c36d27 --- /dev/null +++ b/.vscode/README.md @@ -0,0 +1,103 @@ +# VSCode Configuration for LaTeX Project + +This directory contains Visual Studio Code workspace settings optimized for LaTeX development with this project. + +## Features + +### LaTeX Workshop Integration +- Configured to use `make` command for building +- Multiple build recipes available: + - `make` - Standard build using Docker + - `make clean` - Clean auxiliary files + - `make full` - Clean and full rebuild + +### Key Settings +- **Auto-build disabled** - Build manually with `Ctrl+Shift+B` (Windows/Linux) or `Cmd+Shift+B` (Mac) +- **PDF viewer** - Opens in a new tab within VSCode +- **Output directory** - Configured to use `Output/` folder +- **Auto-clean** - Cleans auxiliary files after successful build + +## Usage + +### Building the Document +1. **Quick Build**: Press `Ctrl+Shift+B` / `Cmd+Shift+B` +2. **Build Menu**: Press `Ctrl+Alt+B` / `Cmd+Alt+B` to see all build options +3. **Command Palette**: Press `F1` and type "LaTeX Workshop: Build" + +### Viewing the PDF +- After building, the PDF will automatically open in a new tab +- Use `Ctrl+Alt+V` / `Cmd+Alt+V` to manually open the PDF + +### Tasks +Additional tasks are available through the Command Palette (`F1`): +- `Tasks: Run Task` shows all available make commands: + - Build LaTeX Document + - Clean Build Files + - Full Build + - View PDF + - Docker Build/Clean + - List Chapters + - Word Count + - Check Prerequisites + +## Recommended Extensions + +The following extensions are recommended for the best experience: +- **LaTeX Workshop** - Main LaTeX support (required) +- **Code Spell Checker** + German dictionary - Spell checking +- **PDF Viewer** - Enhanced PDF viewing +- **GitLens** - Git integration +- **Docker** - Docker support for containerized builds + +Install all recommended extensions: +1. Open Extensions sidebar (`Ctrl+Shift+X` / `Cmd+Shift+X`) +2. Filter by `@recommended` +3. Click "Install Workspace Recommended Extensions" + +## Customization + +To override any settings for your personal preferences, create a `.vscode/settings.local.json` file (git-ignored) or modify your user settings. + +### Enable Auto-Build on Save +If you want to enable automatic building when saving `.tex` files, add this to your user settings: +```json +{ + "latex-workshop.latex.autoBuild.run": "onSave" +} +``` + +### Change PDF Viewer +To use an external PDF viewer instead of the built-in one: +```json +{ + "latex-workshop.view.pdf.viewer": "external", + "latex-workshop.view.pdf.external.viewer.command": "your-pdf-viewer", + "latex-workshop.view.pdf.external.viewer.args": ["%PDF%"] +} +``` + +## Troubleshooting + +### Build Fails +1. Ensure Docker is running: `make docker-info` +2. Check prerequisites: `make check` +3. Try a clean build: `make full` + +### PDF Doesn't Open +- Check if the PDF was created in `Output/Main.pdf` +- Try manually opening: `make view` + +### Extensions Not Working +1. Ensure LaTeX Workshop extension is installed and enabled +2. Reload VSCode window: `F1` → "Developer: Reload Window" +3. Check extension output: View → Output → Select "LaTeX Workshop" + +## File Exclusions + +The configuration hides common LaTeX auxiliary files from the file explorer: +- `*.aux`, `*.log`, `*.synctex.gz` +- `*.fdb_latexmk`, `*.fls` +- `*.out`, `*.toc`, `*.bbl`, `*.blg` +- Build directory contents (can be shown if needed) + +To show hidden files temporarily, use the file explorer's filter settings. \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..9ff9105 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,26 @@ +{ + // Recommended extensions for LaTeX development + "recommendations": [ + // LaTeX Workshop - Main LaTeX extension + "james-yu.latex-workshop", + + // PDF viewer + "tomoki1207.pdf", + + // Spell checking + "streetsidesoftware.code-spell-checker", + "streetsidesoftware.code-spell-checker-german", + + // File icons + "vscode-icons-team.vscode-icons", + + // Docker support (for building with Docker) + "ms-azuretools.vscode-docker", + + // Path intellisense + "christian-kohler.path-intellisense", + + // TODO highlighting + "gruntfuggly.todo-tree" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..775ea44 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,114 @@ +{ + // LaTeX Workshop Configuration + "latex-workshop.latex.recipes": [ + { + "name": "make", + "tools": ["make"] + }, + { + "name": "make clean", + "tools": ["make-clean"] + }, + { + "name": "make full", + "tools": ["make-full"] + } + ], + + "latex-workshop.latex.tools": [ + { + "name": "make", + "command": "make", + "args": [], + "env": {}, + "cwd": "${workspaceFolder}" + }, + { + "name": "make-clean", + "command": "make", + "args": ["clean"], + "env": {}, + "cwd": "${workspaceFolder}" + }, + { + "name": "make-full", + "command": "make", + "args": ["full"], + "env": {}, + "cwd": "${workspaceFolder}" + } + ], + + // Set default recipe + "latex-workshop.latex.recipe.default": "first", + + // Use external build command + "latex-workshop.latex.external.build.command": "make", + "latex-workshop.latex.external.build.args": [], + + // Disable auto-build on save (optional, remove if you want auto-build) + "latex-workshop.latex.autoBuild.run": "never", + + // Clean auxiliary files + "latex-workshop.latex.autoClean.run": "onBuilt", + + // PDF viewer settings + "latex-workshop.view.pdf.viewer": "tab", + "latex-workshop.view.pdf.zoom": "auto", + + // Output directory + "latex-workshop.latex.outDir": "./Output", + + // Root file + "latex-workshop.latex.rootFile.usePolling": true, + "latex-workshop.latex.rootFile.indicator": "\\documentclass", + + // Disable other build methods to avoid confusion + "latex-workshop.latex.magic.enabled": false, + "latex-workshop.latex.build.forceRecipeUsage": true, + + // File associations + "files.associations": { + "*.tex": "latex", + "*.cls": "latex", + "*.sty": "latex", + "*.bib": "bibtex" + }, + + // Editor settings for LaTeX files + "[latex]": { + "editor.wordWrap": "on", + "editor.rulers": [80, 100], + "editor.formatOnSave": false, + "editor.suggestSelection": "first" + }, + + // Spell check settings (optional) + "cSpell.language": "de,en", + "cSpell.enableFiletypes": ["latex", "bibtex"], + + // Hide auxiliary files from explorer (optional) + "files.exclude": { + "**/*.aux": true, + "**/*.log": true, + "**/*.synctex.gz": true, + "**/*.fdb_latexmk": true, + "**/*.fls": true, + "**/*.out": true, + "**/*.toc": true, + "**/*.bbl": true, + "**/*.blg": true, + "**/*.lof": true, + "**/*.lot": true, + "**/*.nav": true, + "**/*.snm": true, + "**/*.vrb": true, + "Build/**": false + }, + + // Search exclude patterns + "search.exclude": { + "Build/**": true, + "Output/**": false + } +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..8cf75c0 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,169 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Build LaTeX Document", + "type": "shell", + "command": "make", + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [] + }, + { + "label": "Clean Build Files", + "type": "shell", + "command": "make", + "args": ["clean"], + "group": "build", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [] + }, + { + "label": "Full Build (Clean + Build)", + "type": "shell", + "command": "make", + "args": ["full"], + "group": "build", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [] + }, + { + "label": "View PDF", + "type": "shell", + "command": "make", + "args": ["view"], + "group": "none", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [] + }, + { + "label": "Docker Build", + "type": "shell", + "command": "make", + "args": ["docker-build"], + "group": "build", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [] + }, + { + "label": "Docker Clean", + "type": "shell", + "command": "make", + "args": ["docker-clean"], + "group": "build", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [] + }, + { + "label": "List Chapters", + "type": "shell", + "command": "make", + "args": ["chapters"], + "group": "none", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [] + }, + { + "label": "Word Count", + "type": "shell", + "command": "make", + "args": ["count"], + "group": "none", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [] + }, + { + "label": "Check Prerequisites", + "type": "shell", + "command": "make", + "args": ["check"], + "group": "none", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [] + }, + { + "label": "Docker Info", + "type": "shell", + "command": "make", + "args": ["docker-info"], + "group": "none", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [] + } + ] +} diff --git a/.zed/README.md b/.zed/README.md new file mode 100644 index 0000000..7d254f7 --- /dev/null +++ b/.zed/README.md @@ -0,0 +1,169 @@ +# Zed Configuration for LaTeX Project + +This directory contains Zed editor workspace settings optimized for LaTeX development with this project. + +## Features + +### Build System Integration +- Configured to use `make` command for all builds +- **Auto-compile on save is DISABLED** as requested +- Manual build triggers only + +### Key Settings +- **Format on save** - Disabled for LaTeX files +- **Auto-save** - Disabled to prevent unwanted builds +- **Build command** - Uses `make` via Docker +- **PDF viewer** - Uses system default (xdg-open on Linux) +- **Word wrap** - Enabled for better readability + +## Usage + +### Building the Document +1. **Default Build**: Press `Cmd+B` (Mac) / `Ctrl+B` (Linux) +2. **Full Build**: Press `Cmd+Shift+B` (Mac) / `Ctrl+Shift+B` (Linux) +3. **Command Palette**: Press `Cmd+Shift+P` and select a task + +### Available Tasks +- **Build LaTeX Document** - Standard build using Docker +- **Clean Build Files** - Remove auxiliary files +- **Full Build** - Clean and rebuild from scratch +- **View PDF** - Open the generated PDF +- **Docker Build** - Explicit Docker build +- **Docker Clean** - Clean Docker containers +- **Word Count** - Show document statistics +- **List Chapters** - Show all chapters +- **Check Prerequisites** - Verify system requirements + +### Keyboard Shortcuts +| Action | Mac | Linux/Windows | +|--------|-----|---------------| +| Build | `Cmd+B` | `Ctrl+B` | +| Full Build | `Cmd+Shift+B` | `Ctrl+Shift+B` | +| Clean | `Cmd+K Cmd+C` | `Ctrl+K Ctrl+C` | +| View PDF | `Cmd+K Cmd+V` | `Ctrl+K Ctrl+V` | + +## Configuration Details + +### LaTeX Language Settings +```json +{ + "LaTeX": { + "format_on_save": false, // No auto-formatting + "autosave": false, // No auto-save + "tab_size": 2, // 2-space indentation + "soft_wrap": "editor_width", // Wrap at editor width + "enable_language_server": true // Enable LSP support + } +} +``` + +### Build Configuration +The project is configured to use `make` for all build operations: +- Build command: `make` +- Working directory: Project root +- Output directory: `Output/` + +### File Exclusions +The following files are hidden from the file tree: +- Build artifacts (`*.aux`, `*.log`, `*.synctex.gz`) +- Bibliography files (`*.bbl`, `*.blg`) +- Table of contents (`*.toc`, `*.lof`, `*.lot`) +- Build directory contents + +## LSP Configuration (texlab) + +If you have `texlab` language server installed, it's configured with: +- Build on save: **DISABLED** +- Forward search: Disabled +- ChkTeX: Enabled on open and save +- Formatter: latexindent + +To install texlab: +```bash +# macOS +brew install texlab + +# Linux (via cargo) +cargo install texlab + +# Or download from GitHub releases +``` + +## Customization + +### Enable Auto-Save (Not Recommended) +If you want to enable auto-save (will NOT trigger builds): +```json +{ + "autosave": { + "after_delay": 1000 + } +} +``` + +### Change PDF Viewer +To use a different PDF viewer: +```json +{ + "preview": { + "pdf_viewer": { + "open_command": "your-pdf-viewer" + } + } +} +``` + +### Enable Build on Save (Not Recommended) +If you really want to build on every save: +```json +{ + "lsp": { + "texlab": { + "initialization_options": { + "build": { + "onSave": true + } + } + } + } +} +``` + +## Troubleshooting + +### Build Doesn't Start +1. Ensure Docker is running +2. Check that `make` command works in terminal +3. Try running `make docker-info` in terminal + +### Tasks Not Available +1. Ensure you're in the project root +2. Reload Zed: `Cmd+Q` and restart +3. Check tasks.json is properly loaded + +### PDF Doesn't Open +1. Check if PDF exists in `Output/Main.pdf` +2. Verify system PDF viewer is configured +3. Try manually: `make view` in terminal + +### Language Server Issues +1. Install texlab if not already installed +2. Check Zed's language server logs +3. Disable and re-enable language server in settings + +## Important Notes + +1. **Auto-compile is intentionally disabled** - You must manually trigger builds +2. **Format on save is disabled** - LaTeX formatting can break documents +3. **Use Docker builds** - Ensures consistent environment +4. **Check git status** - Some files are auto-generated and should not be committed + +## File Structure +``` +.zed/ +├── settings.json # Zed workspace settings +├── tasks.json # Build task definitions +└── README.md # This file +``` + +These configuration files are workspace-specific and should be committed to the repository so all team members have the same settings. \ No newline at end of file diff --git a/.zed/settings.json b/.zed/settings.json new file mode 100644 index 0000000..e218a15 --- /dev/null +++ b/.zed/settings.json @@ -0,0 +1,80 @@ +{ + "languages": { + "LaTeX": { + "tab_size": 2, + "hard_tabs": false, + "soft_wrap": "editor_width", + "show_whitespaces": "selection", + "use_autoclose": true, + "enable_language_server": true + } + }, + + "file_scan_exclusions": [ + "Build/", + "*.aux", + "*.log", + "*.out", + "*.toc", + "*.lof", + "*.lot", + "*.lol", + "*.bbl", + "*.blg", + "*.synctex.gz", + "*.fdb_latexmk", + "*.fls", + "*.idx", + "*.ind", + "*.ilg", + "*.glo", + "*.gls", + "*.glg", + "*.nav", + "*.snm", + "*.vrb", + "*.bcf", + "*.run.xml" + ], + + "show_line_numbers": true, + "relative_line_numbers": false, + "cursor_blink": true, + + "git": { + "git_gutter": "tracked_files", + "inline_blame": { + "enabled": false + } + }, + + "lsp": { + "texlab": { + "settings": { + "texlab": { + "build": { + "executable": "make", + "args": [], + "onSave": false, + "forwardSearchAfter": false + }, + "chktex": { + "onEdit": false, + "onOpenAndSave": true + }, + "latexFormatter": "latexindent", + "latexindent": { + "modifyLineBreaks": false + } + } + } + } + }, + + "task_aliases": { + "build": "make", + "clean": "make clean", + "full": "make full", + "view": "make view" + } +} diff --git a/.zed/tasks.json b/.zed/tasks.json new file mode 100644 index 0000000..9adf871 --- /dev/null +++ b/.zed/tasks.json @@ -0,0 +1,170 @@ +[ + { + "label": "Build LaTeX Document", + "command": "make", + "args": [], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Clean Build Files", + "command": "make", + "args": ["clean"], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Full Build (Clean + Build)", + "command": "make", + "args": ["full"], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "View PDF", + "command": "make", + "args": ["view"], + "use_new_terminal": false, + "allow_concurrent_runs": true, + "reveal": "never" + }, + { + "label": "Docker Build", + "command": "make", + "args": ["docker-build"], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Docker Build (Cached)", + "command": "make", + "args": ["docker-build-cached"], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Docker Clean", + "command": "make", + "args": ["docker-clean"], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Docker Shell", + "command": "make", + "args": ["docker-shell"], + "use_new_terminal": true, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Docker Info", + "command": "make", + "args": ["docker-info"], + "use_new_terminal": false, + "allow_concurrent_runs": true, + "reveal": "always" + }, + { + "label": "List Chapters", + "command": "make", + "args": ["chapters"], + "use_new_terminal": false, + "allow_concurrent_runs": true, + "reveal": "always" + }, + { + "label": "Word Count", + "command": "make", + "args": ["count"], + "use_new_terminal": false, + "allow_concurrent_runs": true, + "reveal": "always" + }, + { + "label": "Check Prerequisites", + "command": "make", + "args": ["check"], + "use_new_terminal": false, + "allow_concurrent_runs": true, + "reveal": "always" + }, + { + "label": "Project Structure", + "command": "make", + "args": ["structure"], + "use_new_terminal": false, + "allow_concurrent_runs": true, + "reveal": "always" + }, + { + "label": "Help", + "command": "make", + "args": ["help"], + "use_new_terminal": false, + "allow_concurrent_runs": true, + "reveal": "always" + }, + { + "label": "Watch (Continuous Build)", + "command": "make", + "args": ["watch"], + "use_new_terminal": true, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Draft Build", + "command": "make", + "args": ["draft"], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Local Build (No Docker)", + "command": "make", + "args": ["local"], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Compile Only", + "command": "make", + "args": ["compile"], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Clean Output", + "command": "make", + "args": ["clean-output"], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Clean Auxiliary Files", + "command": "make", + "args": ["clean-aux"], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + }, + { + "label": "Distribution Clean", + "command": "make", + "args": ["distclean"], + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always" + } +]