generator-latex-template 2026.6.26 → 2026.7.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,6 +26,21 @@ and a generation into templates:
26
26
  2. Support for separate documents which require `--shell-escape` and not.
27
27
  3. Support for integrated pdflatex and lualatex documents
28
28
 
29
+ ### Markdown quick start (`mwe`)
30
+
31
+ Besides the paper and thesis document classes, the generator offers a **minimal Markdown quick start**, selectable as the `mwe` document class — for people who want a fast start with writing rather than a full thesis with all the tricks.
32
+
33
+ - Content is written in **Markdown** inside a `\begin{markdown} … \end{markdown}` block in `main.tex` (via the [`markdown`](https://ctan.org/pkg/markdown) package): `#` becomes a chapter, `##` a section; citations (`[@key]`), footnotes, task lists, pipe tables, and images work out of the box.
34
+ - It compiles with **LuaLaTeX + biber** (the `markdown` package needs Lua; the bibliography uses biblatex).
35
+ - [`zref-clever`](https://ctan.org/pkg/zref-clever) turns the Markdown `{#id}` identifiers into smart `\zcref` cross-references that print the type name (e.g. "Figure 1.1" / "Abbildung 1.1").
36
+ - It generates a single minimal `main.tex` — no thesis scaffolding, abbreviations, or `commands.tex` — hides the paper/thesis-only prompts, and ships a trimmed, quick-start README.
37
+
38
+ Generate it non-interactively with:
39
+
40
+ ```bash
41
+ yo latex-template --documentclass=mwe --lang=en
42
+ ```
43
+
29
44
  ### Precondition for the generator
30
45
 
31
46
  One has to install [Node.js](https://nodejs.org/en/) version 18 (or later) to get this generator running.
@@ -201,14 +216,23 @@ ejslint.cmd c:\git-repositories\latextemplates\generator-latex-template\generato
201
216
 
202
217
  ### Releasing a new version
203
218
 
204
- 1. Once the `refine-ltg` PR is green, **squash-merge** it into `main`; check `main` out and pull.
205
- 2. Update `CHANGELOG.md` (change `h2` heading etc.)
206
- 3. Update `package.json`, publish to [npmjs](https://www.npmjs.com/package/generator-latex-template), create GitHub release.
219
+ > **Cut the release from `main`, never from `refine-ltg`.**
220
+ > Releasing from the dev branch publishes an unmerged tree with a not-yet-finalized CHANGELOG — that is what broke the 2026.6.26 release (a stale `## [2026.6.25]` heading, a missing `[2026.6.26]:` compare link, and an `[Unreleased]:` link that was never bumped).
221
+ > So after the squash-merge, `git switch main && git pull` and confirm `git branch --show-current` prints `main` before doing anything below.
222
+
223
+ 1. Once the `refine-ltg` PR is green, **squash-merge** it into `main`, then `git switch main && git pull` (confirm you are on `main`).
224
+ 2. Update `CHANGELOG.md`: rename the top `## [Unreleased]` heading to `## [<version>]`, add the matching `[<version>]: …/compare/<prev>...<version>` link definition, and bump `[Unreleased]: …/compare/<version>...main`.
225
+ 3. **Verify the CHANGELOG before publishing:**
226
+ - Run heylogs (the same check as CI's `check-changelog.yml`) and get **0 problems**:
227
+ `jbang com.github.nbbrd.heylogs:heylogs-cli:0.18.1:bin check CHANGELOG.md`
228
+ - heylogs **cannot** validate the version links here: our CalVer headings omit the date, so `linkable`/`date-displayed`/`all-h2-contain-a-version` are off in `heylogs.properties` and heylogs skips link-checking a dateless heading. So **also check the links by hand** — the top `## [<version>]` must equal the version `release-it` will publish, and both the `[<version>]:` and the bumped `[Unreleased]:` definitions must be present and point at the right tags. Quick grep:
229
+ `grep -nE '^## \[|^\[Unreleased\]:|^\[<version>\]:' CHANGELOG.md`
230
+ 4. Update `package.json`, publish to [npmjs](https://www.npmjs.com/package/generator-latex-template), create GitHub release.
207
231
  Use [release-it](https://www.npmjs.com/package/release-it) (do not create a release on GitHub) and [github-release-from-changelog](https://www.npmjs.com/package/github-release-from-changelog).
208
232
 
209
233
  - `npx release-it`
210
234
  - `npx github-release-from-changelog`
211
- 4. On `main`, run `scripts/end-new-cycle.sh`, then **squash-merge** each template's "Update LTG" PR once it is green.
235
+ 5. On `main`, run `scripts/end-new-cycle.sh`, then **squash-merge** each template's "Update LTG" PR once it is green.
212
236
 
213
237
  ## License
214
238
 
@@ -53,6 +53,22 @@ export default class extends Generator {
53
53
  this.props.font = "default";
54
54
  }
55
55
 
56
+ if (this.props.documentclass === "mwe") {
57
+ // Minimal Markdown quick start: a fixed, self-contained feature set. The
58
+ // matching prompts are hidden in options.js, so pin every value here (this
59
+ // also makes non-interactive `yo --documentclass=mwe` robust regardless of
60
+ // any flags that leak through).
61
+ this.props.bibtextool = "biblatex";
62
+ this.props.font = "default";
63
+ this.props.latexcompiler = "lualatex"; // Markdown + fontspec need LuaLaTeX
64
+ this.props.listings = "listings";
65
+ this.props.enquotes = "csquotes";
66
+ this.props.tweakouterquote = "babel";
67
+ this.props.todo = "none";
68
+ this.props.howtotext = false;
69
+ this.props.examples = false;
70
+ }
71
+
56
72
  // --language does not work properly, therefore, we used "lang" above. The templates still use "language"
57
73
  this.props.language = this.props.lang;
58
74
 
@@ -124,6 +140,23 @@ export default class extends Generator {
124
140
  ? true
125
141
  : this.options.longtable === true || this.options.longtable === "true";
126
142
 
143
+ // `authoryear` is a plain CLI flag (no prompt): switch citations to
144
+ // author-year globally. Maps to biblatex's authoryear style (theses, lncs)
145
+ // and \citestyle{acmauthoryear} (acmart); the mwe quick start is
146
+ // author-year already. IEEE mandates numeric citations, so it is forced
147
+ // off there.
148
+ this.props.authoryear =
149
+ this.options.authoryear === true || this.options.authoryear === "true";
150
+ if (this.props.documentclass === "ieee") {
151
+ this.props.authoryear = false;
152
+ }
153
+ if (this.props.documentclass === "lncs" && this.props.authoryear) {
154
+ // natbib + splncs04nat is numeric-only; author-year for LNCS goes
155
+ // through biblatex (llncs's own citeauthoryear option needs Springer
156
+ // .bst files that are not in TeX Live)
157
+ this.props.bibtextool = "biblatex";
158
+ }
159
+
127
160
  // Only minted and the PlantUML UML example need shell-escape; tikz-uml and the
128
161
  // remaining thesis content do not.
129
162
  this.props.requiresShellEscape =
@@ -152,6 +185,22 @@ export default class extends Generator {
152
185
  }
153
186
 
154
187
  function isPaperHandling(props) {
188
+ if (props.documentclass === "mwe") {
189
+ // The mwe quick start is neither a paper nor a thesis. Its wrapper main
190
+ // (mwe-main.<lang>.tex) pulls the prose from an external Markdown file
191
+ // (mwe-manuscript.<lang>.md) via \markdownInput. English keeps the plain
192
+ // names main.tex / manuscript.md; German gets a -de suffix so both
193
+ // languages can coexist in one repo (like scientific-thesis below) with
194
+ // each wrapper referencing its own manuscript -- no rename needed.
195
+ props.isPaper = false;
196
+ props.isThesis = false;
197
+ props.filenames = {
198
+ main: props.language === "en" ? "main" : "main-de",
199
+ manuscript: props.language === "en" ? "manuscript" : "manuscript-de",
200
+ bib: "bibliography",
201
+ };
202
+ return;
203
+ }
155
204
  props.isPaper =
156
205
  props.documentclass === "acmart" ||
157
206
  props.documentclass === "ieee" ||
@@ -290,12 +339,26 @@ export default class extends Generator {
290
339
  );
291
340
  }
292
341
 
342
+ // The mwe quick start has its own minimal Markdown main; every other class
343
+ // shares the big main.<lang>.tex.
344
+ const mainTemplate =
345
+ this.props.documentclass === "mwe" ? "mwe-main." : "main.";
293
346
  this.fs.copyTpl(
294
- this.templatePath("main." + this.props.language + ".tex"),
347
+ this.templatePath(mainTemplate + this.props.language + ".tex"),
295
348
  this.destinationPath(this.props.filenames.main + ".tex"),
296
349
  this.props,
297
350
  );
298
351
 
352
+ // The mwe wrapper main pulls its prose from an external Markdown file so it
353
+ // can be edited and linted as plain Markdown (see mwe-main.<lang>.tex).
354
+ if (this.props.documentclass === "mwe") {
355
+ this.fs.copyTpl(
356
+ this.templatePath("mwe-manuscript." + this.props.language + ".md"),
357
+ this.destinationPath(this.props.filenames.manuscript + ".md"),
358
+ this.props,
359
+ );
360
+ }
361
+
299
362
  if (this.props.feature.abbreviations) {
300
363
  this.fs.copy(
301
364
  this.templatePath("abbreviations." + this.props.language + ".tex"),
@@ -303,11 +366,14 @@ export default class extends Generator {
303
366
  );
304
367
  }
305
368
 
306
- this.fs.copyTpl(
307
- this.templatePath("commands.tex"),
308
- this.destinationPath("commands.tex"),
309
- this.props,
310
- );
369
+ // mwe-main does not \input{commands}; keep the quick start minimal.
370
+ if (this.props.documentclass !== "mwe") {
371
+ this.fs.copyTpl(
372
+ this.templatePath("commands.tex"),
373
+ this.destinationPath("commands.tex"),
374
+ this.props,
375
+ );
376
+ }
311
377
 
312
378
  if (this.props.documentclass == "ustutt") {
313
379
  /*
@@ -24,6 +24,10 @@ export const options = [
24
24
  name: "PhD Thesis Template (University of Stuttgart)",
25
25
  value: "ustutt",
26
26
  },
27
+ {
28
+ name: "Minimal quick start — write your content in Markdown (LuaLaTeX + biber)",
29
+ value: "mwe",
30
+ },
27
31
  ],
28
32
  default: "acmart",
29
33
  },
@@ -181,6 +185,10 @@ export const options = [
181
185
  {
182
186
  type: "list",
183
187
  name: "latexcompiler",
188
+ when(response) {
189
+ // The mwe quick start is Markdown + fontspec, hence LuaLaTeX-only (forced in index.js).
190
+ return response.documentclass !== "mwe";
191
+ },
184
192
  message: "Which latex compiler should be used?",
185
193
  choices(state) {
186
194
  const res = [
@@ -218,7 +226,8 @@ export const options = [
218
226
  return (
219
227
  response.documentclass !== "acmart" &&
220
228
  response.documentclass !== "ieee" &&
221
- response.documentclass !== "ustutt"
229
+ response.documentclass !== "ustutt" &&
230
+ response.documentclass !== "mwe"
222
231
  );
223
232
  },
224
233
  type: "list",
@@ -324,13 +333,19 @@ export const options = [
324
333
  default: "default",
325
334
  when(response) {
326
335
  return (
327
- response.documentclass !== "ieee" && response.documentclass !== "ustutt"
336
+ response.documentclass !== "ieee" &&
337
+ response.documentclass !== "ustutt" &&
338
+ response.documentclass !== "mwe"
328
339
  );
329
340
  },
330
341
  },
331
342
  {
332
343
  type: "list",
333
344
  name: "listings",
345
+ when(response) {
346
+ // The mwe quick start has no code listings.
347
+ return response.documentclass !== "mwe";
348
+ },
334
349
  message: "Which package to typeset listings?",
335
350
  choices: [
336
351
  {
@@ -347,6 +362,10 @@ export const options = [
347
362
  {
348
363
  type: "list",
349
364
  name: "enquotes",
365
+ when(response) {
366
+ // The mwe quick start fixes csquotes (forced in index.js).
367
+ return response.documentclass !== "mwe";
368
+ },
350
369
  message: 'Which package to use to "enquote" text?',
351
370
  choices(state) {
352
371
  const res = [];
@@ -380,6 +399,9 @@ export const options = [
380
399
  {
381
400
  type: "list",
382
401
  name: "tweakouterquote",
402
+ when(response) {
403
+ return response.documentclass !== "mwe";
404
+ },
383
405
  message:
384
406
  'Enable hyphenation tweak (e.g., application"=specific for app-lication-specific at a linebreak) or enable easy quotation (e.g., "application"; not common in default latex setups)?',
385
407
  choices: [
@@ -397,6 +419,10 @@ export const options = [
397
419
  {
398
420
  type: "list",
399
421
  name: "todo",
422
+ when(response) {
423
+ // The mwe quick start has no TODO markers.
424
+ return response.documentclass !== "mwe";
425
+ },
400
426
  message: "Which package to mark TODOs?",
401
427
  choices: [
402
428
  {
@@ -421,12 +447,19 @@ export const options = [
421
447
  {
422
448
  type: "confirm",
423
449
  name: "howtotext",
450
+ when(response) {
451
+ return response.documentclass !== "mwe";
452
+ },
424
453
  message: "Include hints on text (e.g., how to write an abstract)?",
425
454
  default: true,
426
455
  },
427
456
  {
428
457
  type: "confirm",
429
458
  name: "examples",
459
+ when(response) {
460
+ // The mwe document *is* the example; the LaTeX-hints chapter does not apply.
461
+ return response.documentclass !== "mwe";
462
+ },
430
463
  message: "Include minimal LaTeX examples?",
431
464
  default: true,
432
465
  },
@@ -122,11 +122,13 @@ jobs:
122
122
  path: |
123
123
  texcount.txt
124
124
  texcount.html
125
+ <%# The mwe class writes Markdown, which aspell cannot parse; the check-markdown (Vale) workflow lints its prose instead, so the aspell spell-check job is omitted here. -%>
126
+ <% if (documentclass !== "mwe") { -%>
125
127
  spell-check:
126
128
  # This is based on https://github.com/mh61503891/action-paper-aspell/tree/master
127
129
  #
128
130
  <% if (documentclass === "scientific-thesis") { -%>
129
- # Disabled for scientific-thesis: the example content trips too many aspell false positives to maintain
131
+ # Disabled: the example content trips too many aspell false positives to maintain
130
132
  if: false
131
133
  <% } -%>
132
134
  runs-on: ubuntu-latest
@@ -180,6 +182,7 @@ jobs:
180
182
  echo 'If you want to ignore words, add them to `.aspell.<%= language %>.pws` (your personal aspell dictionary)' >> $GITHUB_STEP_SUMMARY
181
183
  exit 1
182
184
  fi
185
+ <% } -%>
183
186
  indent:
184
187
  runs-on: ubuntu-latest
185
188
  steps:
@@ -1,4 +1,10 @@
1
1
  # LaTeX Dokument
2
+ <% if (documentclass == "mwe") { -%>
3
+
4
+ Ein **minimaler Markdown-Schnellstart**: Schreibe deinen Inhalt als reines Markdown in `<%= filenames.manuscript %>.md`. Der schlanke Rahmen `<%= filenames.main %>.tex` bindet ihn per `\markdownInput` ein, LaTeX macht daraus ein PDF.
5
+ <% } -%>
6
+
7
+ Die in dieser Vorlage verwendeten LaTeX-Snippets können unter <https://latextemplates.github.io/latex-snippets/> eingesehen werden.
2
8
 
3
9
  Kompiliere es mittels
4
10
  <% if (latexcompiler == "pdflatex") { %>
@@ -4,9 +4,9 @@
4
4
  # Enhanced LNCS Template
5
5
 
6
6
  > Quick start for modern LaTeXing with [LNCS](http://www.springer.com/computer/lncs).
7
- <% if (texlive > 2024) { -%>
7
+ <% if (texlive > 2025) { -%>
8
8
 
9
- Please be aware that this template is optimized for overleaf, which is based on TeXLive 2024.
9
+ Please be aware that this template is optimized for overleaf, which is based on TeXLive 2025.
10
10
  In case you are running a later TeXLive version (or use MiKTeX), please regenerate the template with the help of the [latex template generator].
11
11
  <% } -%>
12
12
  <% break; case "ieee": -%>
@@ -14,8 +14,8 @@ In case you are running a later TeXLive version (or use MiKTeX), please regenera
14
14
 
15
15
  > Quick start for modern LaTeXing for an IEEE conference, based on the [Manuscript Template for Conference Proceedings](https://www.ieee.org/conferences_events/conferences/publishing/templates.html).
16
16
 
17
- <% if (texlive > 2024) { -%>
18
- Please be aware that this template is optimized for overleaf, which is based on TeXLive 2024.
17
+ <% if (texlive > 2025) { -%>
18
+ Please be aware that this template is optimized for overleaf, which is based on TeXLive 2025.
19
19
  In case you are running a later TeXLive version (or use MiKTeX), please regenerate the template with the help of the [latex template generator].
20
20
 
21
21
  <% } -%>
@@ -102,9 +102,39 @@ See [docs/overleaf](docs/overleaf/).
102
102
  <% break; default: -%>
103
103
  # LaTeX Document
104
104
  <% break; }
105
- } else { -%>
105
+ } else if (documentclass == "mwe") { -%>
106
+ # LaTeX Document — Markdown Quick Start
107
+ <% } else { -%>
106
108
  # LaTeX Document
107
109
  <% } -%>
110
+ <% if (documentclass == "mwe") { -%>
111
+
112
+ This is a **minimal Markdown quick start**. Write your content as plain Markdown in [`<%= filenames.manuscript %>.md`](<%= filenames.manuscript %>.md); the thin wrapper [`<%= filenames.main %>.tex`](<%= filenames.main %>.tex) pulls it in with `\markdownInput` and LaTeX turns it into a PDF — no thesis scaffolding, just the essentials: headings, citations, footnotes, tables, figures, smart cross-references (`\zcref`), and acronyms (defined once in the wrapper, recognized automatically in the running text and collected in an acronym list). Keeping the prose in a real `.md` file means your editor treats it as Markdown and the spell-/prose-checkers below lint it directly.
113
+ <% } -%>
114
+
115
+ The LaTeX snippets this template is assembled from can be inspected at <https://latextemplates.github.io/latex-snippets/>.
116
+ <% if (githubpublish) { switch (documentclass) { case "lncs": -%>
117
+
118
+ ## Examples
119
+
120
+ - [paper.pdf](https://latextemplates.github.io/lncs-enhanced/paper.pdf) - normal paper.
121
+ - [paper-minted.pdf](https://latextemplates.github.io/lncs-enhanced/paper-minted.pdf) - paper showing minted in action.
122
+ - [paper-newtx.pdf](http://latextemplates.github.io/lncs-enhanced/paper-newtx.pdf) - paper typeset in Times Roman to save some space.
123
+ - [paper-minted-newtx.pdf](http://latextemplates.github.io/lncs-enhanced/paper-minted-newtx.pdf) - paper typeset in Times Roman to save some space.
124
+ <% break; case "ieee": -%>
125
+
126
+ ## Examples
127
+
128
+ - [paper.pdf](https://latextemplates.github.io/ieee-enhanced/paper.pdf) - regular conference paper.
129
+ - [paper-minted.pdf](https://latextemplates.github.io/ieee-enhanced/paper-minted.pdf) - conference paper showing minted in action.
130
+ <% break; case "acmart": -%>
131
+
132
+ ## Examples
133
+
134
+ - [paper.pdf](https://latextemplates.github.io/acm-enhanced/paper.pdf) - regular conference paper.
135
+ - [paper-minted.pdf](https://latextemplates.github.io/acm-enhanced/paper-minted.pdf) - conference paper showing minted in action.
136
+ <% break; default: -%>
137
+ <% break; } } -%>
108
138
 
109
139
  ## Usage
110
140
 
@@ -163,10 +193,29 @@ On the command line, there are additional features:
163
193
  - `latexmk -C` or `make clean` for cleaning up
164
194
  - `make format` to reformat the `.tex` files (one sentence per line and indent)
165
195
  - `make aspell` for interactive spell checking
166
- - `make stand`: Creates a new PDF with the current status of the thesis.
196
+ - `make stand`: Creates a new PDF with the current status of the document.
167
197
  - `make view`: Opens the configured viewer
168
198
  - `make mrproper`: Cleans up and removes also editor backup files.
199
+ <% if (documentclass == "mwe") { -%>
200
+
201
+ ### Linting your Markdown
202
+
203
+ Because the prose is a plain Markdown file, the text linters run on it directly — no extraction, and the reported line numbers point straight at `<%= filenames.manuscript %>.md`. Two workflows lint it and post inline annotations: `check-markdown` runs [Vale](https://vale.sh) (spelling, repetition), and `check-textlint` runs [textlint](https://github.com/textlint/textlint) (`write-good` + `terminology`).
204
+
205
+ Run textlint locally with `npx` (needs Node.js; rules come from `.textlintrc.json`):
206
+
207
+ ```bash
208
+ npx --yes --package textlint --package textlint-rule-terminology --package textlint-rule-write-good textlint <%= filenames.manuscript %>.md
209
+ ```
169
210
 
211
+ For Vale, install it (`brew install vale` / `choco install vale`, or see <https://vale.sh/docs>) and point it at the file:
212
+
213
+ ```bash
214
+ vale <%= filenames.manuscript %>.md
215
+ ```
216
+ <% } -%>
217
+
218
+ <% if (documentclass != "mwe") { -%>
170
219
  ## Benefits
171
220
 
172
221
  Following features are enabled in this template:
@@ -266,8 +315,9 @@ Congratulations. You chose to use all available features.
266
315
  <% } -%>
267
316
 
268
317
  <% switch (documentclass) { case "lncs": -%>
269
- There is currently no official biblatex support.
270
- A first step towards that is done at [biblatex-lncs](https://ctan.org/pkg/biblatex-lncs).
318
+ Besides the default BibTeX setup (natbib + `splncs04nat`), biblatex is supported: generate with `--bibtextool=biblatex` to use the [biblatex-lncs](https://ctan.org/pkg/biblatex-lncs) style (numeric, mimicking Springer's `splncs04` look, processed with biber).
319
+
320
+ For **author-year citations** (this template's answer to `llncs`'s `citeauthoryear` option, whose Springer `.bst` files are not part of TeX Live), generate with `--authoryear=true`: this switches to biblatex with the `authoryear` style, so `\citep{key}` renders as "(Author, year)" and `\citet{key}` as "Author (year)".
271
321
 
272
322
  <% break; case "ieee": -%>
273
323
  There is currently no official biblatex support.
@@ -275,16 +325,10 @@ A first step towards that is done at the [biblatex-ieee package](https://ctan.or
275
325
 
276
326
  <% break; default: -%>
277
327
  <% break; } -%>
328
+ <% } -%>
278
329
  <% if (githubpublish) {
279
330
  switch (documentclass) {
280
331
  case "lncs": -%>
281
- ## Examples
282
-
283
- - [paper.pdf](https://latextemplates.github.io/lncs-enhanced/paper.pdf) - normal paper.
284
- - [paper-minted.pdf](https://latextemplates.github.io/lncs-enhanced/paper-minted.pdf) - paper showing minted in action.
285
- - [paper-newtx.pdf](http://latextemplates.github.io/lncs-enhanced/paper-newtx.pdf) - paper typeset in Times Roman to save some space.
286
- - [paper-minted-newtx.pdf](http://latextemplates.github.io/lncs-enhanced/paper-minted-newtx.pdf) - paper typeset in Times Roman to save some space.
287
-
288
332
  ## Background
289
333
 
290
334
  The official template is available at <https://www.springer.com/gp/computer-science/lncs/conference-proceedings-guidelines> --> "Templates, samples files & useful links" --> "LaTeX2e Proceedings Templates (zip)"
@@ -304,11 +348,6 @@ This might lead to undesired results such as hyperlinks not working any more or
304
348
  In case you think, a package needs to be altered or added, feel free to open an issue.
305
349
 
306
350
  <% break; case "ieee": -%>
307
- ## Examples
308
-
309
- - [paper.pdf](https://latextemplates.github.io/ieee-enhanced/paper.pdf) - regular conference paper.
310
- - [paper-minted.pdf](https://latextemplates.github.io/ieee-enhanced/paper-minted.pdf) - conference paper showing minted in action.
311
-
312
351
  ## Quick start
313
352
 
314
353
  - Click on `Download ZIP` or [here](https://github.com/latextemplates/IEEE/archive/main.zip).
@@ -357,6 +396,21 @@ Statement from IEEE:
357
396
  <% break; default: -%>
358
397
  <% break; }
359
398
  } else { -%>
399
+ <% } -%>
400
+ <% if (isPaper) { -%>
401
+ ## Final submission
402
+
403
+ The compiled PDF embeds the `<%= filenames.bib %>.bib` file (via the [embedfile](https://ctan.org/pkg/embedfile) package), so readers can extract the reference data from the PDF, e.g., with JabRef via "Import into library".
404
+ Some publishers' final-submission checks (e.g., IEEE PDF eXpress or PDF/A validation) reject PDFs containing file attachments.
405
+ If your submission system complains, comment out the `\embedfile` line in `<%= filenames.main %>.tex` for the camera-ready version.
406
+
407
+ ### arXiv
408
+
409
+ The first line of `<%= filenames.main %>.tex` is `\ifdefined\pdfoutput\pdfoutput=1\fi`.
410
+ Keep it when uploading to arXiv: arXiv scans the first lines for `\pdfoutput=1` to decide between `pdflatex` and DVI-producing `latex`.
411
+ Without the line, arXiv falls back to `latex`, which cannot build the modern fonts (they ship without Metafont sources) and aborts with an error such as `! I can't find file 'clmr28t10+20'`.
412
+ See [this question on TeX.SE](https://tex.stackexchange.com/q/584702/9075) for details.
413
+
360
414
  <% } -%>
361
415
  ## Tool hints
362
416
 
@@ -480,7 +534,7 @@ Alternatively, just copy and paste the contents of the [vscode.settings.json](vs
480
534
 
481
535
  You can manually trigger compilation by hitting the green button in the extension or using other methods provided by LaTeX Workshop.
482
536
 
483
- Please remove the magic comments (`% !TeX program ...`) at the top of the `main-....tex` file.
537
+ Please remove the magic comments (`% !TeX program ...`) at the top of the `<%= filenames.main %>.tex` file.
484
538
  Although [LaTeX-Workshop supports magic comments](https://github.com/James-Yu/LaTeX-Workshop/blob/master/README.md#magic-comments), it currently does not work reliably.
485
539
  Without the magic comments, compilation works.
486
540
 
@@ -536,6 +590,7 @@ docker build -t ltg .
536
590
 
537
591
  <% break; default: -%>
538
592
  <% break; } -%>
593
+ <% if (documentclass != "mwe") { -%>
539
594
  ## Contained Directories and Files
540
595
 
541
596
  ### Directories
@@ -776,15 +831,16 @@ Just answer "(a) allow for this document" and it will work.
776
831
  4. Use [pdfscissors](https://sites.google.com/site/pdfscissors) to crop the borders and title (maybe you have to allow <https://sites.google.com> in the Java security center in the control panel).
777
832
  5. Include the PDF in LaTeX via `\includegraphics{chart_cropped.pdf}`.
778
833
 
779
- <%#
780
- ### Q: Overleaf complains about missing `.sty` files.
781
-
782
- Google for the name of the `sty` and upload it to overleaf.
783
- As of 2018-02-17, these are:
834
+ <% if (uml == "tikz-uml") { -%>
835
+ ### Q: Overleaf complains about a missing `tikz-uml.sty`.
784
836
 
785
- - `lccaps.sty` - can be downloaded from <https://latextemplates.github.io/stys-for-overleaf/>.
786
- - `scientific-thesis-cover.sty` - can be downloaded from <https://raw.githubusercontent.com/latextemplates/scientific-thesis-cover/master/scientific-thesis-cover.sty>.
837
+ `tikz-uml` is not part of TeX Live; locally it is provided as a git submodule placed on the `TEXINPUTS` search path (see "UML diagram example" above).
838
+ Overleaf does not fetch git submodules, so `tikz-uml.sty` is unavailable there.
839
+ Download `tikz-uml.sty` from the [tikz-uml repository](https://plmlab.math.cnrs.fr/tikzuml/tikzuml) and upload it into your Overleaf project, next to your main `.tex` file; the UML example then compiles.
840
+ Without it, the example is skipped automatically and the rest of the document still builds.
787
841
 
842
+ <% } -%>
843
+ <%#
788
844
  ### Q: My Paderborn title page is strange. The boxes seem to be located arbitrarily.
789
845
 
790
846
  Just run pdflatex again.
@@ -815,15 +871,13 @@ We are collecting alternatives at the issue [#25](https://github.com/latextempla
815
871
  You did not setup the [plantuml package](https://www.ctan.org/pkg/plantuml) correctly.
816
872
  Please head to <https://koppor.github.io/plantuml/> for installation instructions.
817
873
 
874
+ <% } -%>
818
875
  <% } -%>
819
876
  ## Further information
820
877
 
821
878
  <% if (documentclass == 'lncs') { -%>
822
879
  - tex.stackexchange.com questions regarding LNCS: <https://tex.stackexchange.com/questions/tagged/lncs>
823
- <% if (githubpublish) { -%>
824
- - Original LNCS demonstration (without the improvements): [llncs-dem.pdf](llncs-dem.pdf)
825
- - Original LNCS documentation (without the improvements): [llncs-doc.pdf](llncs-doc.pdf)
826
- <% } -%>
880
+ - Original LNCS documentation (without the improvements): [llncsdoc.pdf](https://mirrors.ctan.org/macros/latex/contrib/llncs/llncsdoc.pdf) from the [llncs CTAN package](https://ctan.org/pkg/llncs). The old `llncs.dem` demonstration is no longer part of that package; the official sample paper (`samplepaper.tex`) is contained in Springer's [LaTeX2e Proceedings Templates (zip)](https://www.springer.com/gp/computer-science/lncs/conference-proceedings-guidelines).
827
881
  <% } -%>
828
882
  - Other templates: <https://latextemplates.github.io/>
829
883
  - For German users, go to <https://texfragen.de/>.