generator-latex-template 2026.9.28 → 2026.10.8

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
@@ -132,7 +132,8 @@ In the long run, the contents of the `paper.tex` (and similar) files in reposito
132
132
  - Cancel workflows:
133
133
  - `gh run list -L 100 --json databaseId -s queued -R latextemplates/generator-latex-template | jq -r '.[] | .databaseId' | awk '{gsub(/\\r\\n/,RS)} 1' | while read -r run_id; do gh run cancel "$run_id" -R latextemplates/generator-latex-template || true; done`
134
134
  - `gh run list -L 100 --json databaseId -s in_progress -R latextemplates/generator-latex-template | jq -r '.[] | .databaseId' | awk '{gsub(/\\r\\n/,RS)} 1' | while read -r run_id; do gh run cancel "$run_id" -R latextemplates/generator-latex-template || true; done`
135
- - Update submodule of "derived" templates (LNCS, ...): `scripts/spread-updates.sh`
135
+ - Update submodule of "derived" templates (LNCS, ...): `scripts/spread-updates.sh`. It also links the generator's `refine-ltg` PR in the description of each template's "Update LTG" PR.
136
+ - Keep the `refine-ltg` PR description current: it links every issue the cycle fixes (the same `[repo#N]` links as the CHANGELOG).
136
137
  - Sort `dot.aspell.en.pws`: `cat dot.aspell.en.pws | (sed -u 1q; sort) | sponge dot.aspell.en.pws` <!-- hint by https://stackoverflow.com/a/56151840/873282 -->
137
138
 
138
139
  ### Testing
@@ -231,7 +232,7 @@ ejslint.cmd c:\git-repositories\latextemplates\generator-latex-template\generato
231
232
  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).
232
233
 
233
234
  - `npx release-it`
234
- - `npx github-release-from-changelog`
235
+ - `GITHUB_TOKEN=$(gh auth token) npx github-release-from-changelog` (Git Bash; it needs a GitHub token, which the logged-in `gh` CLI provides)
235
236
  5. On `main`, run `scripts/end-new-cycle.sh`, then **squash-merge** each template's "Update LTG" PR once it is green.
236
237
 
237
238
  ## License
@@ -0,0 +1,113 @@
1
+ <!-- Loaded automatically when Claude works on files under generators/app/. Moved from the repository root CLAUDE.md. -->
2
+
3
+ ## Adding a package or example (wire every place, or a variant silently drops it)
4
+
5
+ The generated document is assembled from micro-templates; a new LaTeX package or
6
+ example section has to be wired in **lockstep** across several files. Miss one and
7
+ the feature vanishes for some switch combination without any error.
8
+
9
+ 1. **Content** — add/extend `generators/app/templates/<name>.example.<lang>.tex`
10
+ (the demo body) and/or `<name>.preamble.<lang>.tex` (the `\usepackage`). Example
11
+ bodies use the `<%- bexample %> … <%- eexample %>` convention (=
12
+ `\begin{ltgexample}…\end{ltgexample}`), which **runs the body in place and echoes
13
+ its own source lines** — it is *not* the old `latexdemo`/`\PrintDemo`. Most examples
14
+ are a single shared `.en` file included from both mains. Give each feature its **own**
15
+ `<feature>.preamble.<lang>.tex` (one concern per file — e.g. `tikz.preamble`,
16
+ `longtable.preamble`, `uml.plantuml.preamble`), **not** a catch-all "examples" preamble.
17
+ **Config vs. demo:** a package a feature needs to *work* belongs in that feature's
18
+ config preamble and is loaded wherever the feature is on; a package that only *renders
19
+ a demo* is the example's own concern. So `\mathbb` (a real feature) is provided by
20
+ `math.preamble.en.tex` — `\@ifundefined{mathbb}{\usepackage{amssymb}}{}`, guarded
21
+ because `amssymb` clashes with `mathdesign`/`newtxmath`/`unicode-math` — and the math
22
+ *example* is then gated to where `math.preamble` is included (`isThesis ||
23
+ feature.abbreviations`), so LNCS etc. don't reference an undefined `\mathbb`.
24
+ 2. **Wire the includes into `main.en.tex` AND `main.de.tex`.** Example includes go in
25
+ the `LaTeX Hints` chapter (the whole chapter is already guarded by
26
+ `<% if (examples) %>`); package loads go in the preamble area. Guard each with the
27
+ right condition (`isThesis`, a switch value, …) — and gate an example to where the
28
+ config that makes it compile is present.
29
+ 3. **`Texlivefile`** — add the TeX Live package name, guarded (usually
30
+ `githubpublish || <condition>`; `githubpublish` deliberately bundles everything).
31
+ 4. **Shell-escape is derived, never hardcoded.** It is the boolean
32
+ `requiresShellEscape` in `index.js` (`listings == "minted" || uml == "plantuml"`).
33
+ Extend that expression if the new package needs `\write18`; the `latexmkrc` and the
34
+ `main.*.tex` editor hints read the flag.
35
+ 5. **New user switch?** Decide **prompt vs. plain flag** first:
36
+ - A **prompt** in `options.js` (scope with `when()`, give a `default`) is interactive
37
+ and nice for discovery — but **every** template's `update-files.yml` that satisfies
38
+ its `when()` must pass the flag (like `--todo`), or the non-interactive `yo` run in CI
39
+ blocks on the prompt and fails. So a thesis-only prompt (e.g. `uml`) means
40
+ `scientific-thesis-template` *and* `uni-stuttgart-dissertation-template` need
41
+ `--uml=…` added to their (template-managed) `update-files.yml`.
42
+ - A **plain CLI flag** read from `this.options` in `index.js` with a default (e.g.
43
+ `longtable`) never prompts, so it never breaks CI and needs no `update-files.yml`
44
+ change — at the cost of interactive discovery.
45
+ Either way default it in `index.js` (prompt: `if (!this.props.x) this.props.x = "none";`
46
+ / flag: read `this.options.x` with a fallback), and if it's a prompt add the axis to
47
+ `__tests__/matrix.js` **and** the list in `.github/generate-workflows.py` (kept in
48
+ sync). Model on the `todo` / `uml` (prompt) and `longtable` (flag) options.
49
+ 6. **Not in TeX Live** (e.g. `tikz-uml`) — guard usage with
50
+ `\IfFileExists{<pkg>.sty}{…}{…}` so a plain `npx`/submodule-less generation still
51
+ compiles (it just skips the demo). Provide the package via a git submodule +
52
+ `TEXINPUTS` (in `latexmkrc`) and a recursive checkout in the generated `check.yml`,
53
+ and document the setup in `README.en.md`. External-tool packages (PlantUML needs
54
+ Java) also need the tool installed in `check.yml` and `--shell-escape`.
55
+
56
+ **Verify (LaTeX-free first, then compile):** `npx ejs-lint <file>` on every changed
57
+ EJS template; run **`npm test`**, not `node --test` directly — `npm test`'s `pretest`
58
+ runs `eslint .` (incl. `prettier`), which `node --test` skips, so a prettier-only nit
59
+ in `index.js`/`options.js` passes locally but fails CI (run `npx eslint --fix .` to
60
+ match the formatter). `npm test` is the pairwise suite; `npm run test:all` is the full
61
+ matrix. Then generate locally with the **exact** `update-files.yml` flags (a missing
62
+ required option such as `acmformat` or `todo` drops you into an interactive prompt,
63
+ which reads as a hang) and grep the output. Sanity-compile new `.tex` in a *minimal
64
+ standalone* document (the full thesis pulls in packages a local TeX Live may lack);
65
+ `perl -c` the generated `latexmkrc`; validate the generated `check.yml` as YAML. The
66
+ `check-make.yml` build also runs `make format` (latexindent) + `git diff --exit-code`,
67
+ so generated output must already be latexindent-clean — column-aligned tables in
68
+ particular (see `lookForAlignDelims` in `localSettings.yaml`).
69
+
70
+ ### EJS whitespace: `-%>` eats the trailing newline
71
+
72
+ Almost every control tag ends with `-%>` (the EJS "newline slurp"): `<% if (…) { -%>`,
73
+ `<% } -%>`, `<% switch/case/break … -%>`, and `<%- include('…', this); -%>`. That slurp
74
+ is deliberate — it keeps the control flow (and the include statements themselves) from
75
+ emitting stray blank lines into the generated `.tex`. A plain `<% } %>` (no dash) leaves
76
+ its newline and can inject an unwanted blank line, so the convention is the dashed form;
77
+ only use plain `%>` when you actually want that newline.
78
+
79
+ The consequence (and a real footgun): **the blank-line layout of the output is not the
80
+ layout of the source.** Because `-%>` eats one trailing newline, two adjacent
81
+ `-%>`-terminated blocks/includes render with **no** blank line between them. To get a
82
+ blank line between blocks you need one of:
83
+ - the first block's file to **end with a trailing blank line** (how most
84
+ `*.preamble.*.tex` separate themselves — e.g. `font.preamble` ends with a blank line
85
+ then `<% } -%>`), **or**
86
+ - an **explicit blank line in the source** between the two `-%>` tags (the `-%>` eats one
87
+ newline, the remaining one + the content's own trailing newline = a blank line).
88
+
89
+ This is exactly the `nowidow` bug: it followed `microtype.preamble`, which does *not* end
90
+ with a trailing blank, and the include `-%>` ate the source newline — so the block butted
91
+ against microtype until an explicit blank line was added between the two includes. When a
92
+ generated block is missing/extra a blank line, this slurp interaction is the first thing
93
+ to check.
94
+
95
+ ### Compile gotchas the single-variant local test misses
96
+
97
+ `npm test` only checks that the generator *generates*; the **multi-variant template
98
+ builds** (each `update-ltg` PR compiles every `main*.tex` for both languages and several
99
+ formats) catch things a single local `yo` + compile does not. Two that have bitten:
100
+
101
+ - **Two-column layouts can't use `longtable`** ("longtable not in 1-column mode"). IEEE and
102
+ the ACM `sigconf`/`sigplan`/`acmtog` formats are two-column, so any `longtable` (or other
103
+ one-column-only) example must be gated on `!twocolumn` (a derived prop in `index.js`:
104
+ `documentclass == "ieee" || (acmart && acmformat ∈ {acmtog,sigconf,sigplan})`). Single-column
105
+ figures (`figure`, not `figure*`) are fine in two columns.
106
+ - **A template repo ships ONE shared `abbreviations.tex`** — the `update-files.yml` "Prepare
107
+ files" step keeps only one variant's copy (e.g. the `en`+minted one), and **every** main
108
+ file (English *and* German) does `\input{abbreviations}`. So a glossary entry used by any
109
+ language's example must be defined in **both** `abbreviations.en.tex` and
110
+ `abbreviations.de.tex` (the unused one just never appears in that document's list). Making
111
+ `\gls` entries language-exclusive breaks the other language's variant with
112
+ "Glossary entry `…' has not been defined". The same single-shared-file logic applies to
113
+ other `this.fs.copy`'d siblings (`commands.tex`, …).
@@ -670,6 +670,13 @@ The author of the class offers a large FAQ at <http://www.michaelshell.org/tex/i
670
670
  Please read on there.
671
671
  The other possibility is to execute `texdoc ieeetran` and read in the documentation.
672
672
  For example, there is an explanation of how to typeset the affiliation information with four or more authors properly.
673
+
674
+ ### Q: How are the two columns of the last page balanced?
675
+
676
+ The [flushend](https://ctan.org/pkg/flushend) package balances them automatically; no command in the text is needed.
677
+ An `\AtEndDocument` hook in the preamble (right after `\usepackage{flushend}`) activates flushend for the last page and, when the text ends in the first column, ends that column, so that flushend distributes the text over both columns.
678
+ If you do not want balanced columns, remove `\usepackage{flushend}` together with that hook.
679
+ If flushend produces odd spacing on the last page (IEEEtran's author warns about that for references), balance by hand instead: remove flushend and enable `\IEEEtriggeratref{N}` in front of `\bibliographystyle`, which starts a new column before reference `N`.
673
680
  <% break; case "ustutt": -%>
674
681
 
675
682
  ### Q: How to rename `thesis-example.tex`?
@@ -235,6 +235,9 @@ nowidow
235
235
  ntheorem
236
236
  <% } -%>
237
237
  paralist
238
+ <% if (githubpublish || twocolumn) { -%>
239
+ pdfcol<%# required by the tcolorbox library "breakable" (example boxes in two-column documents) %>
240
+ <% } -%>
238
241
  pdfcomment
239
242
  pdfescape
240
243
  <% if (githubpublish || isThesis) { -%>
@@ -253,8 +256,8 @@ placeins
253
256
  <% if (githubpublish || (uml == "plantuml")) { -%>
254
257
  plantuml<%# plantuml.sty for the PlantUML UML example; the diagram also needs an external PlantUML install %>
255
258
  <% } -%>
256
- <% if ((documentclass == 'acmart') || (documentclass == 'ieee')) { -%>
257
- preprint<%# this includes balance%>
259
+ <% if (documentclass == 'acmart') { -%>
260
+ preprint<%# this includes balance, used by the acmart option "balance"%>
258
261
  <% } -%>
259
262
  <% if (githubpublish || isThesis) { -%>
260
263
  psnfss<%# provides pifont%>
@@ -290,7 +293,7 @@ soulpos
290
293
  spelling
291
294
  <% } -%>
292
295
  stringenc
293
- sttools<%# this includes stfloats; at least required by acmart, ieee, lncs, ustutt, scientific-thesis %>
296
+ sttools<%# this includes stfloats (at least required by acmart, ieee, lncs, ustutt, scientific-thesis) and flushend (ieee: balances the columns on the last page) %>
294
297
  subfig
295
298
  svn-prov<%# at least required by acmart, ustutt, scientific-thesis%>
296
299
  <% if (githubpublish || isThesis) { -%>
@@ -1,14 +1,15 @@
1
+ <%# Keep the first cell of the table short: latexindent pads the first cell of every row to its width, and the echoed code has to fit a narrow column (IEEE, ACM). -%>
1
2
  <%- bexample %>
2
- % Source: https://tex.stackexchange.com/a/468994/9075
3
+ % Adapted from https://tex.stackexchange.com/a/468994/9075
3
4
  \begin{<% if (documentclass == 'ieee') { %>figure<% } else { %>table<% } %>}
4
5
  \caption{Table with diagonal line}
5
6
  \label{tab:diag}
6
7
  \begin{center}
7
8
  \begin{tabular}{|l|c|c|}
8
9
  \hline
9
- \diagbox[width=10em]{Diag \\Column Head I}{Diag Column\\Head II} & Second & Third \\
10
+ \diagbox{Row}{Column} & A & B \\
10
11
  \hline
11
- & foo & bar \\
12
+ 1 & x & y \\
12
13
  \hline
13
14
  \end{tabular}
14
15
  \end{center}
@@ -1,5 +1,6 @@
1
1
  add-tex-command "minted options" ppppppppppppppppppppppp
2
2
  add-tex-command @ifundefined pppppp
3
+ add-tex-command AtEndDocument p
3
4
  add-tex-command Cref p
4
5
  add-tex-command DeclareFontFamily ppp
5
6
  add-tex-command DeclareFontShape pppppp
@@ -4,7 +4,7 @@
4
4
  },
5
5
  "filters": {
6
6
  "allowlist": {
7
- "allow": ["/\\bonly\\b/i"]
7
+ "allow": ["/\\bonly\\b/i", "/\\bFinally,/"]
8
8
  }
9
9
  },
10
10
  "rules": {
@@ -7,16 +7,15 @@ Here are some hints:
7
7
 
8
8
  <%- bexample %>
9
9
  In case you write <%- bquote %>application-specific<%- equote %>, then the word will only be hyphenated at the dash.
10
- You can also write \verb1applica\allowbreak{}tion-specific1 (result: applica\allowbreak{}tion-specific), but this is much more effort.
10
+ You can also insert \verb1\allowbreak{}1 into the word, as in applica\allowbreak{}tion-specific, but this is much more effort.
11
11
 
12
12
  <% if (tweakouterquote == "outerquote") { -%>
13
13
  In the net, you will read about that one can use a normal quote sign followed by an equal sign (\verb1"=1) to specify that hyphenation is allowed at other places in the word.
14
14
  Since we use the quote sign for automatic quotation, this is not possible anymore.
15
- Please use the command \verb1\hydash1 for the same purpose.
16
- Example: \verb1application\hydash specific1 (result: application\hydash specific).
15
+ Please use the command \verb1\hydash1 for the same purpose, as in application\hydash specific.
17
16
  <% } else { -%>
18
17
  You can now write words containing hyphens which are hyphenated at other places in the word.
19
- For instance, \verb1application"=specific1 gets application"=specific.
18
+ For that, write \verb1"=1 instead of \verb1-1, as in application"=specific.
20
19
  This is enabled by an additional configuration of the babel package.
21
20
  <% } -%>
22
21
  <%- eexample %>
@@ -7,14 +7,34 @@ $pdflatex = '<%= reallatexcompiler %> <% if (requiresShellEscape) { %>--shell-es
7
7
  $ENV{'TEXINPUTS'} = './tikz-uml//:' . ($ENV{'TEXINPUTS'} // '');
8
8
  <% } -%>
9
9
 
10
- #Use SumatraPDF instead of the default PDF viewer
11
- $pdf_previewer = 'start "C:\Program Files\SumatraPDF\SumatraPDF.exe"';
10
+ #------------------------------------------------------------------------------#
11
+ # compilation
12
12
 
13
- #SumatraPDF updates automatically
13
+ # automatically call lualatex/pdflatex (instead of latex)
14
+ $pdf_mode = 1;
15
+
16
+ # replaces main.pdf by jobname.pdf
17
+ # Note: -pvc may then not find the PDF.
18
+ #$jobname = 'thesis';
19
+
20
+ #------------------------------------------------------------------------------#
21
+ # preview
22
+ # You may put these settings in ~/.latexmkrc instead.
23
+
24
+ # >0 <-> equivalent to -pv
14
25
  $preview_mode = 0;
26
+ # >0 <-> equivalent to -pvc
27
+ #$preview_continuous_mode = 1;
15
28
 
16
- #automatically call lualatex/pdflatex (instead of latex)
17
- $pdf_mode = 1;
29
+ if ($^O eq 'MSWin32') {
30
+ # Use SumatraPDF instead of the default PDF viewer; it reloads the PDF automatically
31
+ $pdf_previewer = 'start "C:\Program Files\SumatraPDF\SumatraPDF.exe"';
32
+ }
33
+ # 'evince' is 'Document Viewer' (GNOME's default)
34
+ #$pdf_previewer = 'evince';
35
+
36
+ #------------------------------------------------------------------------------#
37
+ # bibliography and glossaries
18
38
 
19
39
  # enable deletion of *.bbl when calling "latexmk -c"
20
40
  $bibtex_use = 2;
@@ -33,6 +53,9 @@ sub run_makeglossaries {
33
53
  };
34
54
  }
35
55
 
36
- #remove more files than in the default configuration
56
+ #------------------------------------------------------------------------------#
57
+ # cleanup
58
+
59
+ # remove more files than in the default configuration
37
60
  @generated_exts = qw(acn acr alg aux code fls glg glo glo-abr gls glsdefs idx ind ist lof lol lot out run.xml synctex thm toc tpt upa upb wrt);
38
61
  $clean_ext .= ' %R.ist %R.xdy';
@@ -62,3 +62,7 @@ public class Hello {
62
62
  }
63
63
  \end{lstlisting}
64
64
  <%- eexample %>
65
+ <% if (isThesis) { -%>
66
+
67
+ <%- include('listings.long.example.en.tex', this); -%>
68
+ <% } -%>
@@ -62,3 +62,7 @@ public class Hello {
62
62
  }
63
63
  \end{lstlisting}
64
64
  <%- eexample %>
65
+ <% if (isThesis) { -%>
66
+
67
+ <%- include('listings.long.example.en.tex', this); -%>
68
+ <% } -%>
@@ -0,0 +1,75 @@
1
+ Listings longer than the remaining space continue on the next page if they are \emph{not} floating.
2
+ A floating listing is always placed on a single page.
3
+ <%- Cref %>{lst:long} spans multiple pages.
4
+
5
+ \begin{lstlisting}[
6
+ language=Java,
7
+ caption={Long Java listing spanning multiple pages},
8
+ label={lst:long}]
9
+ public class Squares {
10
+
11
+ /** Returns the square of 1. */
12
+ public int square1() {
13
+ return 1 * 1;
14
+ }
15
+
16
+ /** Returns the square of 2. */
17
+ public int square2() {
18
+ return 2 * 2;
19
+ }
20
+
21
+ /** Returns the square of 3. */
22
+ public int square3() {
23
+ return 3 * 3;
24
+ }
25
+
26
+ /** Returns the square of 4. */
27
+ public int square4() {
28
+ return 4 * 4;
29
+ }
30
+
31
+ /** Returns the square of 5. */
32
+ public int square5() {
33
+ return 5 * 5;
34
+ }
35
+
36
+ /** Returns the square of 6. */
37
+ public int square6() {
38
+ return 6 * 6;
39
+ }
40
+
41
+ /** Returns the square of 7. */
42
+ public int square7() {
43
+ return 7 * 7;
44
+ }
45
+
46
+ /** Returns the square of 8. */
47
+ public int square8() {
48
+ return 8 * 8;
49
+ }
50
+
51
+ /** Returns the square of 9. */
52
+ public int square9() {
53
+ return 9 * 9;
54
+ }
55
+
56
+ /** Returns the square of 10. */
57
+ public int square10() {
58
+ return 10 * 10;
59
+ }
60
+
61
+ /** Returns the square of 11. */
62
+ public int square11() {
63
+ return 11 * 11;
64
+ }
65
+
66
+ /** Returns the square of 12. */
67
+ public int square12() {
68
+ return 12 * 12;
69
+ }
70
+
71
+ public static void main(String[] args) {
72
+ System.out.println(new Squares().square12());
73
+ }
74
+ }
75
+ \end{lstlisting}
@@ -1,7 +1,7 @@
1
1
  <%= heading2 %>{Tables spanning multiple pages}
2
2
 
3
3
  The \href{https://ctan.org/pkg/longtable}{longtable} package typesets tables that automatically break across page boundaries.
4
- The header (\verb+\endhead+) and footer (\verb+\endfoot+) rows are repeated on every page; once enough rows are added, the table spans several pages on its own.
4
+ The header (\verb+\endhead+) and footer (\verb+\endfoot+) rows are repeated on every page; once enough rows are added, the table spans more than one page on its own.
5
5
 
6
6
  <%- bexample %>
7
7
  \begin{longtable}{|l|l|l|}
@@ -56,9 +56,18 @@
56
56
  % For the final version, replace "draftcls" by "final"
57
57
  \documentclass[<%= ieeevariant %>,<%= papersize %>paper,ngerman]{IEEEtran}[2015/08/26]
58
58
 
59
- % Balance the last page using the balance package (see https://ctan.org/pkg/balance)
60
- % Alternative to balance is the pbalance package (see https://ctan.org/pkg/pbalance), which sometimes works better
61
- \usepackage{balance}
59
+ % Balance the columns on the last page using the flushend package (see https://ctan.org/pkg/flushend).
60
+ % It needs no command in the text.
61
+ % The balance package (see https://ctan.org/pkg/balance) needs \balance in the first column of the last page, otherwise it warns "You have called \balance in second column".
62
+ % The pbalance package (see https://ctan.org/pkg/pbalance) does not work together with stfloats, which is loaded for \fnbelowfloat.
63
+ % IEEEtran's own way is \IEEEtriggeratref, see the bibliography section at the end of this file.
64
+ \usepackage{flushend}
65
+ % flushend activates its balancing output routine only right before the final \clearpage, which is too late in some documents (e.g., the German example paper under LuaLaTeX): the last page is shipped out before. Thus, \flushcolsend activates it already here.
66
+ % flushend only balances when the text of the last page reaches the second column.
67
+ % If the text ends in the first column, end that column and put an empty box into the second one, so that flushend distributes the text over both columns.
68
+ \makeatletter
69
+ \AtEndDocument{\flushcolsend\if@firstcolumn\ifdim\pagetotal>\z@\newpage\hbox to\columnwidth{}\fi\fi}
70
+ \makeatother
62
71
 
63
72
  <% break; case "scientific-thesis": -%>
64
73
 
@@ -291,7 +300,7 @@
291
300
  <% if (useExampleEnvironment) { -%>
292
301
  \usepackage[realmainfile]{currfile}
293
302
  \usepackage{tcolorbox}
294
- \tcbuselibrary{<%= listings %>}
303
+ \tcbuselibrary{<%= listings %><% if (twocolumn) { %>,breakable<% } %>}
295
304
  <% } -%>
296
305
  <% } -%>
297
306
 
@@ -376,7 +385,7 @@
376
385
  <% if (thesisvariant == "university-of-hamburg") { -%>
377
386
  \usepackage{geometry}
378
387
  <% } -%>
379
- <%- include('scientific-thesis-cover.preamble.en.tex', this); %>
388
+ <%- include('scientific-thesis-cover.preamble.de.tex', this); %>
380
389
  <% break; } -%>
381
390
  <% if ((latexcompiler == "pdflatex") || (latexcompiler == "both")) { indent = '' -%>
382
391
 
@@ -609,7 +618,7 @@ Kurzfassung der Arbeit.
609
618
  In one sentence, what’s the topic?
610
619
  Phrase it in a way that your reader will understand.
611
620
  If you’re writing a PhD thesis, your readers are the examiners – assume they are familiar with the general field of research, so you need to tell them specifically what topic your thesis addresses.
612
- Same advice works for scientific papers – the readers are the peer reviewers, and eventually others in your field interested in your research, so again they know the background work, but want to know specifically what topic your paper covers.
621
+ Same advice works for scientific papers – the readers are the peer reviewers, and later others in your field interested in your research, so again they know the background work, but want to know specifically what topic your paper covers.
613
622
 
614
623
  \emph{State the problem you tackle.}
615
624
  What’s the key research question?
@@ -620,12 +629,12 @@ Kurzfassung der Arbeit.
620
629
  Keep working at this step until you have a single, concise (and understandable) question.
621
630
 
622
631
  \emph{Summarize (in one sentence) why nobody else has adequately answered the research question yet.}
623
- For a PhD thesis, you’ll have an entire chapter, covering what’s been done previously in the literature.
632
+ For a PhD thesis, you’ll have an entire chapter, covering the prior work in the literature.
624
633
  Here you have to boil that down to one sentence.
625
- But remember, the trick is not to try and cover all the various ways in which people have tried and failed; the trick is to explain that there’s this one particular approach that nobody else tried yet (hint: it’s the thing that your research does).
634
+ But remember, the trick is not to try and cover all the ways in which people have tried and failed; the trick is to explain that there’s this one particular approach that nobody else tried yet (hint: it’s the thing that your research does).
626
635
  But here you’re phrasing it in such a way that it’s clear it’s a gap in the literature.
627
636
  So use a phrase such as “previous work has failed to address…”.
628
- (if you’re writing a more general essay, you still need to summarize the source material you’re drawing on, so you can pull the same trick – explain in a few words what the general message in the source material is, but expressed in terms of what’s missing)
637
+ (if you’re writing a more general essay, you still need to summarize the source material you’re drawing on, so you can pull the same trick – explain in one sentence what the general message in the source material is, but expressed in terms of what’s missing)
629
638
 
630
639
  \emph{Explain, in one sentence, how you tackled the research question.}
631
640
  What’s your big new idea?
@@ -636,11 +645,11 @@ Kurzfassung der Arbeit.
636
645
  Did you run experiments?
637
646
  Build a piece of software?
638
647
  Carry out case studies?
639
- This is likely to be the longest sentence, especially if it’s a PhD thesis – after all you’re probably covering several years worth of research.
648
+ This tends to be the longest sentence, above all in a PhD thesis, which covers years of research.
640
649
  But don’t overdo it – we’re still looking for a sentence that you could read aloud without having to stop for breath.
641
650
  Remember, the word ‘abstract’ means a summary of the main ideas with most of the detail left out.
642
651
  So feel free to omit detail!
643
- (For those of you who got this far and are still insisting on writing an essay rather than signing up for a PhD, this sentence is really an elaboration of sentence 4 – explore the consequences of your new perspective).
652
+ (For those of you who got this far and are still insisting on writing an essay rather than signing up for a PhD, this sentence elaborates on sentence 4 – explore the consequences of your new perspective).
644
653
 
645
654
  \emph{As a single sentence, what’s the key impact of your research?
646
655
  Here we’re not looking for the outcome of an experiment.
@@ -776,7 +785,7 @@ A scientific argument always has the following steps that all must come in this
776
785
  \item[SM6] \emph{Now interpret your results} by contextualizing the measurements and drawing conclusion that lead to answering your research problem or defining further follow-up research problems.
777
786
  \end{itemize}
778
787
  %
779
- This template will mark various parts of the structure with SM1-SM6 to recall to you which step of a scientific argument is used and where.
788
+ This template marks the parts of the structure with SM1-SM6 to recall to you which step of a scientific argument is used and where.
780
789
 
781
790
  \emph{Purpose and scope of <%- cref %>{sec:introduction}}.
782
791
  The introduction chapter is a summary of your work and your scientific argument that must be understandable to anyone in your scientific field, e.g., anyone in Data Science.
@@ -789,14 +798,14 @@ Section~\ref{sec:introduction:results} then presents the results and their inter
789
798
  A reader should need to read further only if they are not convinced or need more details to reproduce your study.
790
799
  The individual chapters and sections provide the details for each of the steps in your scientific argument.
791
800
 
792
- You usually write the introduction chapter \emph{after} you wrote all other chapters, but you should keep on making notes for each of the sections as you write the later chapters.
801
+ Write the introduction chapter \emph{after} you wrote all other chapters, but you should keep on making notes for each of the sections as you write the later chapters.
793
802
  .
794
803
 
795
804
  \emph{Purpose and scope of the introduction paragraph to a chapter}.
796
805
  The paragraph you are reading above is a typical introductory paragraph to a chapter.
797
806
  It is a high-level summary of the chapters' topic (SM1 and SM2).
798
807
  It gives the reader some guidance by breaking down the chapter topic into subtopics that are named (SM3) in the right order with forward references to the corresponding sections (SM4).
799
- It may close with announcing the result you obtain (SM6) but this is usually not done in the opening paragraph of the introduction.
808
+ It may close with announcing the result you obtain (SM6) but the opening paragraph of the introduction is not the place for it.
800
809
 
801
810
  \emph{Zwei Arten von Lesenden}.
802
811
  Die Arbeit soll sich von vorne bis hinten lesen lassen: Jeder Begriff wird eingeführt, bevor er verwendet wird.
@@ -832,7 +841,7 @@ This introduction has to
832
841
  \end{itemize}
833
842
 
834
843
  You have to provide citations/literature references for each of the statements and claims you are making.
835
- This section is usually a summary of the related work discussion in <%- cref %>{sec:background}.
844
+ This section summarizes the related work discussion in <%- cref %>{sec:background}.
836
845
 
837
846
  At the end of this section, you have established a \emph{knowledge gap} between the state of the art and the general objective you developed in <%- cref %>{sec:introduction:topic}.
838
847
  \emph{Stating a (knowledge) gap between a status quo and a desired situation is the \emph{first step} of a writing scientific argument.}
@@ -843,7 +852,7 @@ At the end of this section, you have established a \emph{knowledge gap} between
843
852
 
844
853
  \emph{Purpose and scope}.
845
854
  In this section you state in which way you will address the knowledge gap you identified at the end of <%- cref %>{sec:introduction:state-of-art}.
846
- You usually cannot address and resolve the entire knowledge gap in your work.
855
+ One work cannot address and resolve the entire knowledge gap.
847
856
  The purpose of this section is to detail the specific part of the knowledge that you will address.
848
857
  You thereby make all the assumptions explicit that underlie your work (``in this report we focus on genomes of female giraffes who lived in the years 1950-2000 in South Africa'').
849
858
 
@@ -854,7 +863,7 @@ Your general research question states
854
863
  \item and the evaluation criteria that will determine whether you are successful (``...that are present in at least 75\% of the studied giraffes'')
855
864
  \end{itemize}
856
865
 
857
- You will usually break your general research question down into sub-research questions.
866
+ Break your general research question down into sub-research questions.
858
867
  You may do this here.
859
868
  The sub-research questions have to form a chain that take you in smaller steps from the starting point/assumptions of your general research question to your final objective and evaluation.
860
869
 
@@ -876,7 +885,7 @@ In each paragraph you first briefly explain the concept of the step in your meth
876
885
 
877
886
  \emph{Purpose and scope}.
878
887
  You close the introduction by stating the evaluation setup you designed to evaluate the success of your study regarding the research objective, which comes in two steps.
879
- It is most likely a summary of your evaluation in <%- cref %>{sec:evaluation}.
888
+ It summarizes your evaluation in <%- cref %>{sec:evaluation}.
880
889
 
881
890
  <%= heading2 %>*{Results (SM5)}
882
891
 
@@ -885,9 +894,9 @@ You state the evaluation method that is in line with your research question from
885
894
  <%= heading2 %>*{Interpretation (SM6)}
886
895
 
887
896
  You summarize your interpretation of the results and draw conclusions.
888
- State whether and to which degree the research question from <%- cref %>{sec:introduction:research-question} has been answered successfully or not.
897
+ State whether, and to which degree, the research question from <%- cref %>{sec:introduction:research-question} has been answered.
889
898
 
890
- Finally state briefly how much closer society and science have come in answering the general objective you outlined in <%- cref %>{sec:introduction:topic}.
899
+ Close by stating how much closer society and science have come in answering the general objective you outlined in <%- cref %>{sec:introduction:topic}.
891
900
 
892
901
  %%% ===============================================================================
893
902
  \section{Background (SM1)}\label{sec:background}
@@ -952,7 +961,7 @@ provide details based on <%- cref %>{sec:problem-exposition:context-understandin
952
961
 
953
962
  \emph{Purpose and scope}.
954
963
  After you stated research context (SM1), research problem (SM2), and research method (SM3) in <%- cref %>{sec:introduction} and possibly <%- cref %>{sec:problem-exposition}, the remainder of your entire report addresses execution (SM4), results (SM5), and interpretation (SM6).
955
- You usually do this by addressing various sub-problems again through scientific arguments following the 6 steps SM1-SM6.
964
+ Do this by addressing the sub-problems through scientific arguments that follow the 6 steps SM1-SM6.
956
965
 
957
966
  Have a short chapter introduction that recalls and explains the first research problem of your thesis.
958
967
  The problem has to show up in the introduction in <%- cref %>{sec:introduction:research-question} or in <%- cref %>{sec:problem-exposition:research-problems} already.
@@ -980,7 +989,7 @@ if certain details take too much space.
980
989
 
981
990
  \emph{The third, fourth, and following paragraph provides details on applying the method or developing a new approach, i.e., execution (SM4) and may explain results (SM5)}, i.e. details on the steps needed to reproduce the results.
982
991
 
983
- Results (SM5) can come in many forms, e.g., conceptual diagrams, algorithms, tables, charts, a list of articles from a literature research etc. You must reference them (``<%- cref %>{fig:my_label} shows.
992
+ Results (SM5) come in different forms, e.g., conceptual diagrams, algorithms, tables, charts, a list of articles from a literature research etc. You must reference them (``<%- cref %>{fig:my_label} shows.
984
993
  ..'') and describe the results in text.
985
994
  If you use diagrams, tables, or charts, you cannot expect the reader to know what to you expect them to see in a diagram, table or chart.
986
995
  Describe to them how to read these, explain the meaning of particular elements, point out special observations.
@@ -998,7 +1007,7 @@ Make use of appendices if certain details take too much space.
998
1007
  Here you can infer what a particular observation means (for you), how it can be applied, or what others can do with it.
999
1008
  Do not interpret your results before you have described all of them.
1000
1009
  This is a common mistake done by most beginner writers.
1001
- You want to quickly get to the point, which is the final finding or interpretation.
1010
+ Get to the point: the final finding or interpretation.
1002
1011
  But you forget that your reader does not understand yet what you are interpreting - they do not know yet what you do know.
1003
1012
  Interpret the results only after describing all of them.
1004
1013
  The interpretation must be based on the written description only.
@@ -1129,6 +1138,10 @@ Weitere Hinweise gibt \href{https://doi.org/10.1007/978-1-4471-6639-9}{\emph{Wri
1129
1138
  {\LTGendlineexample=\numexpr\inputlineno-1\relax%
1130
1139
  \tcbinputlisting{%
1131
1140
  listing only,
1141
+ <% if (twocolumn) { -%>
1142
+ % Über Spalten und Seiten umbrechen. Eine nicht umbrechbare Box ragt in die Gleitobjekte oder den unteren Rand, wenn die Gleitobjekte einer Seite den schmalen Spalten zu wenig Platz lassen
1143
+ breakable,
1144
+ <% } -%>
1132
1145
  listing file=\currfilepath,
1133
1146
  colback=green!5!white,
1134
1147
  colframe=green!25,
@@ -1251,7 +1264,7 @@ See \url{https://help.jabref.org/en/CleanupEntries} for an overview of the clean
1251
1264
  <%= heading1 %>{Zusammenfassung und Ausblick}\label{sec:conclusion}
1252
1265
  %%% ===============================================================================
1253
1266
 
1254
- Your conclusions are not just a factual summary of your work, but they position, interpret, and defend your findings against the state of the art that you discussed in <%- cref %>{sec:introduction:state-of-art}.
1267
+ Your conclusions are more than a factual summary of your work: they position, interpret, and defend your findings against the state of the art that you discussed in <%- cref %>{sec:introduction:state-of-art}.
1255
1268
  You specifically outline which concrete findings or methodological contributions advance our knowledge towards the general objective you introduced in <%- cref %>{sec:introduction:topic}.
1256
1269
  Objectively discuss which parts you solved and in which parts you failed.
1257
1270
 
@@ -1343,7 +1356,7 @@ Hier bitte einen kurzen Durchgang durch die Arbeit.
1343
1356
  <% break; default: -%>
1344
1357
  <% break; } -%>
1345
1358
  <% if (isPaper) { -%>
1346
- <%= indent %>Identification of funding sources and other support, and thanks to individuals and groups that assisted in the research and the preparation of the work should be included in an acknowledgment section, which is placed just before the reference section in your document \cite{acmart}.
1359
+ <%= indent %>Identification of funding sources and other support, and thanks to individuals and groups that assisted in the research and the preparation of the work should be included in an acknowledgment section, which comes right before the reference section in your document \cite{acmart}.
1347
1360
  <% if (howtotext) { -%>
1348
1361
 
1349
1362
  <%= indent %>The hints on writing a paper/thesis are taken from Dirk Fahland's \href{https://github.com/dfahland/Master-or-Bachelor-thesis-Template-Eindhoven-University-of-Technology}{LaTeX template for Bachelor and Master theses at Eindhoven University of Technology}.
@@ -1442,6 +1455,41 @@ Alle Links wurden zuletzt am 29.03.2021 geprüft.
1442
1455
 
1443
1456
  \lipsum[1]
1444
1457
 
1458
+ %%% ===============================================================================
1459
+ <%= heading1 %>{Nutzung von KI-Tools}\label{sec:ai-tools}
1460
+ %%% ===============================================================================
1461
+
1462
+ % Hier wird dokumentiert, inwiefern KI-Tools zur Erstellung wesentlicher Teile dieser Arbeit verwendet wurden.
1463
+ <% if (thesisvariant == "ustutt") { -%>
1464
+ % Die Erklärung am Ende dieser Arbeit fordert diesen Anhang.
1465
+ % Siehe die Formvorgaben für Abschlussarbeiten des Fachbereichs Informatik der Universität Stuttgart: https://www.f05.uni-stuttgart.de/informatik/dokumente/Formulare/Formvorgaben-Abschlussarbeiten.pdf
1466
+ <% } -%>
1467
+ % Die Struktur ist mit der Prüferin oder dem Prüfer abzustimmen.
1468
+ % Nur übernommene KI-Outputs (z.B. Text, Abbildungen) müssen aufgeführt werden; die Nutzung von KI zur Recherche oder Rechtschreibprüfung nicht.
1469
+ % Wurden keine KI-Outputs als wesentliche Teile übernommen, ist dies statt der Tabelle zu erklären.
1470
+
1471
+ <% if (examples) { -%>
1472
+ \begin{tabular}{lll}
1473
+ \toprule
1474
+ KI-Tool & Genutzt für & Genutzt in \\
1475
+ \midrule
1476
+ ChatGPT5 & Erstellung von Abbildungen & <%- cref %>{fig:label,fig:jpg} \\
1477
+ Google AI search & Pseudocode für Algorithmus XYZ & <%- cref %>{alg:example} \\
1478
+ DeepL Write & Umformulierung der Einleitung & <%- cref %>{sec:introduction} \\
1479
+ \bottomrule
1480
+ \end{tabular}
1481
+ <% } else { -%>
1482
+ \begin{tabular}{lll}
1483
+ \toprule
1484
+ KI-Tool & Genutzt für & Genutzt in \\
1485
+ \midrule
1486
+ ChatGPT5 & Erstellung von Abbildungen & Abb. 3.4, 5.2 und 6.3 \\
1487
+ Google AI search & Pseudocode für Algorithmus XYZ & Listing 4.1 \\
1488
+ DeepL Write & Umformulierung der Einleitung & <%- cref %>{sec:introduction} \\
1489
+ \bottomrule
1490
+ \end{tabular}
1491
+ <% } -%>
1492
+
1445
1493
  \pagestyle{empty}
1446
1494
  \renewcommand*{\chapterpagestyle}{empty}
1447
1495
  <% if (documentclass == "scientific-thesis") { -%>
@@ -55,9 +55,18 @@
55
55
  % DO NOT DOWNLOAD IEEEtran.cls - Use the one of your LaTeX distribution
56
56
  \documentclass[<%= ieeevariant %>,<%= papersize %>paper,english]{IEEEtran}[2015/08/26]
57
57
 
58
- % Balance the last page using the balance package (see https://ctan.org/pkg/balance)
59
- % Alternative to balance is the pbalance package (see https://ctan.org/pkg/pbalance), which sometimes works better
60
- \usepackage{balance}
58
+ % Balance the columns on the last page using the flushend package (see https://ctan.org/pkg/flushend).
59
+ % It needs no command in the text.
60
+ % The balance package (see https://ctan.org/pkg/balance) needs \balance in the first column of the last page, otherwise it warns "You have called \balance in second column".
61
+ % The pbalance package (see https://ctan.org/pkg/pbalance) does not work together with stfloats, which is loaded for \fnbelowfloat.
62
+ % IEEEtran's own way is \IEEEtriggeratref, see the bibliography section at the end of this file.
63
+ \usepackage{flushend}
64
+ % flushend activates its balancing output routine only right before the final \clearpage, which is too late in some documents (e.g., the German example paper under LuaLaTeX): the last page is shipped out before. Thus, \flushcolsend activates it already here.
65
+ % flushend only balances when the text of the last page reaches the second column.
66
+ % If the text ends in the first column, end that column and put an empty box into the second one, so that flushend distributes the text over both columns.
67
+ \makeatletter
68
+ \AtEndDocument{\flushcolsend\if@firstcolumn\ifdim\pagetotal>\z@\newpage\hbox to\columnwidth{}\fi\fi}
69
+ \makeatother
61
70
  <% break; case "scientific-thesis": -%>
62
71
 
63
72
  % The following package allows \\ at the title page
@@ -279,7 +288,7 @@
279
288
  <% if (useExampleEnvironment) { -%>
280
289
  \usepackage[realmainfile]{currfile}
281
290
  \usepackage{tcolorbox}
282
- \tcbuselibrary{<%= listings %>}
291
+ \tcbuselibrary{<%= listings %><% if (twocolumn) { %>,breakable<% } %>}
283
292
  <% } -%>
284
293
  <% } -%>
285
294
 
@@ -578,7 +587,7 @@ Zweitgutachter: Dr. Eduard Exempel %TODO Bei Bedarf Geschlechter d
578
587
  In one sentence, what’s the topic?
579
588
  Phrase it in a way that your reader will understand.
580
589
  If you’re writing a PhD thesis, your readers are the examiners – assume they are familiar with the general field of research, so you need to tell them specifically what topic your thesis addresses.
581
- Same advice works for scientific papers – the readers are the peer reviewers, and eventually others in your field interested in your research, so again they know the background work, but want to know specifically what topic your paper covers.
590
+ Same advice works for scientific papers – the readers are the peer reviewers, and later others in your field interested in your research, so again they know the background work, but want to know specifically what topic your paper covers.
582
591
 
583
592
  \emph{State the problem you tackle.}
584
593
  What’s the key research question?
@@ -589,12 +598,12 @@ If you can’t summarize your thesis/paper/essay in one key question, then you d
589
598
  Keep working at this step until you have a single, concise (and understandable) question.
590
599
 
591
600
  \emph{Summarize (in one sentence) why nobody else has adequately answered the research question yet.}
592
- For a PhD thesis, you’ll have an entire chapter, covering what’s been done previously in the literature.
601
+ For a PhD thesis, you’ll have an entire chapter, covering the prior work in the literature.
593
602
  Here you have to boil that down to one sentence.
594
- But remember, the trick is not to try and cover all the various ways in which people have tried and failed; the trick is to explain that there’s this one particular approach that nobody else tried yet (hint: it’s the thing that your research does).
603
+ But remember, the trick is not to try and cover all the ways in which people have tried and failed; the trick is to explain that there’s this one particular approach that nobody else tried yet (hint: it’s the thing that your research does).
595
604
  But here you’re phrasing it in such a way that it’s clear it’s a gap in the literature.
596
605
  So use a phrase such as “previous work has failed to address…”.
597
- (if you’re writing a more general essay, you still need to summarize the source material you’re drawing on, so you can pull the same trick – explain in a few words what the general message in the source material is, but expressed in terms of what’s missing)
606
+ (if you’re writing a more general essay, you still need to summarize the source material you’re drawing on, so you can pull the same trick – explain in one sentence what the general message in the source material is, but expressed in terms of what’s missing)
598
607
 
599
608
  \emph{Explain, in one sentence, how you tackled the research question.}
600
609
  What’s your big new idea?
@@ -605,11 +614,11 @@ What’s your overall view on the question you introduced in step 2?)
605
614
  Did you run experiments?
606
615
  Build a piece of software?
607
616
  Carry out case studies?
608
- This is likely to be the longest sentence, especially if it’s a PhD thesis – after all you’re probably covering several years worth of research.
617
+ This tends to be the longest sentence, above all in a PhD thesis, which covers years of research.
609
618
  But don’t overdo it – we’re still looking for a sentence that you could read aloud without having to stop for breath.
610
619
  Remember, the word ‘abstract’ means a summary of the main ideas with most of the detail left out.
611
620
  So feel free to omit detail!
612
- (For those of you who got this far and are still insisting on writing an essay rather than signing up for a PhD, this sentence is really an elaboration of sentence 4 – explore the consequences of your new perspective).
621
+ (For those of you who got this far and are still insisting on writing an essay rather than signing up for a PhD, this sentence elaborates on sentence 4 – explore the consequences of your new perspective).
613
622
 
614
623
  \emph{As a single sentence, what’s the key impact of your research?
615
624
  Here we’re not looking for the outcome of an experiment.
@@ -750,7 +759,7 @@ A scientific argument always has the following steps that all must come in this
750
759
  \item[SM6] \emph{Now interpret your results} by contextualizing the measurements and drawing conclusion that lead to answering your research problem or defining further follow-up research problems.
751
760
  \end{itemize}
752
761
  %
753
- This template will mark various parts of the structure with SM1-SM6 to recall to you which step of a scientific argument is used and where.
762
+ This template marks the parts of the structure with SM1-SM6 to recall to you which step of a scientific argument is used and where.
754
763
 
755
764
  \emph{Purpose and scope of <%- cref %>{sec:introduction}}.
756
765
  The introduction chapter is a summary of your work and your scientific argument that must be understandable to anyone in your scientific field, e.g., anyone in Data Science.
@@ -763,14 +772,14 @@ Section~\ref{sec:introduction:results} then presents the results and their inter
763
772
  A reader should need to read further only if they are not convinced or need more details to reproduce your study.
764
773
  The individual chapters and sections provide the details for each of the steps in your scientific argument.
765
774
 
766
- You usually write the introduction chapter \emph{after} you wrote all other chapters, but you should keep on making notes for each of the sections as you write the later chapters.
775
+ Write the introduction chapter \emph{after} you wrote all other chapters, but you should keep on making notes for each of the sections as you write the later chapters.
767
776
  .
768
777
 
769
778
  \emph{Purpose and scope of the introduction paragraph to a chapter}.
770
779
  The paragraph you are reading above is a typical introductory paragraph to a chapter.
771
780
  It is a high-level summary of the chapters' topic (SM1 and SM2).
772
781
  It gives the reader some guidance by breaking down the chapter topic into subtopics that are named (SM3) in the right order with forward references to the corresponding sections (SM4).
773
- It may close with announcing the result you obtain (SM6) but this is usually not done in the opening paragraph of the introduction.
782
+ It may close with announcing the result you obtain (SM6) but the opening paragraph of the introduction is not the place for it.
774
783
 
775
784
  \emph{Two kinds of readers}.
776
785
  Write your report so that it can be read from beginning to end: introduce every concept before you use it.
@@ -806,7 +815,7 @@ This introduction has to
806
815
  \end{itemize}
807
816
 
808
817
  You have to provide citations/literature references for each of the statements and claims you are making.
809
- This section is usually a summary of the related work discussion in <%- cref %>{sec:background}.
818
+ This section summarizes the related work discussion in <%- cref %>{sec:background}.
810
819
 
811
820
  At the end of this section, you have established a \emph{knowledge gap} between the state of the art and the general objective you developed in <%- cref %>{sec:introduction:topic}.
812
821
  \emph{Stating a (knowledge) gap between a status quo and a desired situation is the \emph{first step} of a writing scientific argument.}
@@ -817,7 +826,7 @@ At the end of this section, you have established a \emph{knowledge gap} between
817
826
 
818
827
  \emph{Purpose and scope}.
819
828
  In this section you state in which way you will address the knowledge gap you identified at the end of <%- cref %>{sec:introduction:state-of-art}.
820
- You usually cannot address and resolve the entire knowledge gap in your work.
829
+ One work cannot address and resolve the entire knowledge gap.
821
830
  The purpose of this section is to detail the specific part of the knowledge that you will address.
822
831
  You thereby make all the assumptions explicit that underlie your work (``in this report we focus on genomes of female giraffes who lived in the years 1950-2000 in South Africa'').
823
832
 
@@ -828,7 +837,7 @@ Your general research question states
828
837
  \item and the evaluation criteria that will determine whether you are successful (``...that are present in at least 75\% of the studied giraffes'')
829
838
  \end{itemize}
830
839
 
831
- You will usually break your general research question down into sub-research questions.
840
+ Break your general research question down into sub-research questions.
832
841
  You may do this here.
833
842
  The sub-research questions have to form a chain that take you in smaller steps from the starting point/assumptions of your general research question to your final objective and evaluation.
834
843
 
@@ -850,7 +859,7 @@ In each paragraph you first briefly explain the concept of the step in your meth
850
859
 
851
860
  \emph{Purpose and scope}.
852
861
  You close the introduction by stating the evaluation setup you designed to evaluate the success of your study regarding the research objective, which comes in two steps.
853
- It is most likely a summary of your evaluation in <%- cref %>{sec:evaluation}.
862
+ It summarizes your evaluation in <%- cref %>{sec:evaluation}.
854
863
 
855
864
  <%= heading2 %>*{Results (SM5)}
856
865
 
@@ -859,9 +868,9 @@ You state the evaluation method that is in line with your research question from
859
868
  <%= heading2 %>*{Interpretation (SM6)}
860
869
 
861
870
  You summarize your interpretation of the results and draw conclusions.
862
- State whether and to which degree the research question from <%- cref %>{sec:introduction:research-question} has been answered successfully or not.
871
+ State whether, and to which degree, the research question from <%- cref %>{sec:introduction:research-question} has been answered.
863
872
 
864
- Finally state briefly how much closer society and science have come in answering the general objective you outlined in <%- cref %>{sec:introduction:topic}.
873
+ Close by stating how much closer society and science have come in answering the general objective you outlined in <%- cref %>{sec:introduction:topic}.
865
874
 
866
875
  %%% ===============================================================================
867
876
  \section{Background (SM1)}\label{sec:background}
@@ -926,7 +935,7 @@ provide details based on <%- cref %>{sec:problem-exposition:context-understandin
926
935
 
927
936
  \emph{Purpose and scope}.
928
937
  After you stated research context (SM1), research problem (SM2), and research method (SM3) in <%- cref %>{sec:introduction} and possibly <%- cref %>{sec:problem-exposition}, the remainder of your entire report addresses execution (SM4), results (SM5), and interpretation (SM6).
929
- You usually do this by addressing various sub-problems again through scientific arguments following the 6 steps SM1-SM6.
938
+ Do this by addressing the sub-problems through scientific arguments that follow the 6 steps SM1-SM6.
930
939
 
931
940
  Have a short chapter introduction that recalls and explains the first research problem of your thesis.
932
941
  The problem has to show up in the introduction in <%- cref %>{sec:introduction:research-question} or in <%- cref %>{sec:problem-exposition:research-problems} already.
@@ -954,7 +963,7 @@ if certain details take too much space.
954
963
 
955
964
  \emph{The third, fourth, and following paragraph provides details on applying the method or developing a new approach, i.e., execution (SM4) and may explain results (SM5)}, i.e. details on the steps needed to reproduce the results.
956
965
 
957
- Results (SM5) can come in many forms, e.g., conceptual diagrams, algorithms, tables, charts, a list of articles from a literature research etc. You must reference them (``<%- cref %>{fig:my_label} shows.
966
+ Results (SM5) come in different forms, e.g., conceptual diagrams, algorithms, tables, charts, a list of articles from a literature research etc. You must reference them (``<%- cref %>{fig:my_label} shows.
958
967
  ..'') and describe the results in text.
959
968
  If you use diagrams, tables, or charts, you cannot expect the reader to know what to you expect them to see in a diagram, table or chart.
960
969
  Describe to them how to read these, explain the meaning of particular elements, point out special observations.
@@ -972,7 +981,7 @@ Make use of appendices if certain details take too much space.
972
981
  Here you can infer what a particular observation means (for you), how it can be applied, or what others can do with it.
973
982
  Do not interpret your results before you have described all of them.
974
983
  This is a common mistake done by most beginner writers.
975
- You want to quickly get to the point, which is the final finding or interpretation.
984
+ Get to the point: the final finding or interpretation.
976
985
  But you forget that your reader does not understand yet what you are interpreting - they do not know yet what you do know.
977
986
  Interpret the results only after describing all of them.
978
987
  The interpretation must be based on the written description only.
@@ -1071,7 +1080,7 @@ The remainder of the paper starts with a presentation of related work (<%- cref
1071
1080
  <% } -%>
1072
1081
  <% if (!examples && (documentclass == 'ieee')) { %>Afterwards, we present some Lorem Ipsum (<%- cref %>{sec:loremipsum}).
1073
1082
  <% } -%>
1074
- Finally, a conclusion is drawn and outlook on future work is made (<%- cref %>{sec:outlook}).
1083
+ The paper closes with a conclusion and an outlook on future work (<%- cref %>{sec:outlook}).
1075
1084
 
1076
1085
  <%= heading1 %>{Related Work}
1077
1086
  \label{sec:relatedwork}
@@ -1097,6 +1106,10 @@ More hints are given in \href{https://doi.org/10.1007/978-1-4471-6639-9}{\emph{W
1097
1106
  {\LTGendlineexample=\numexpr\inputlineno-1\relax%
1098
1107
  \tcbinputlisting{%
1099
1108
  listing only,
1109
+ <% if (twocolumn) { -%>
1110
+ % Split across columns and pages. An unbreakable box overflows into the floats or the bottom margin when the floats of a page leave the narrow columns too little room
1111
+ breakable,
1112
+ <% } -%>
1100
1113
  listing file=\currfilepath,
1101
1114
  colback=green!5!white,
1102
1115
  colframe=green!25,
@@ -1221,7 +1234,7 @@ See \url{https://help.jabref.org/en/CleanupEntries} for an overview of the clean
1221
1234
  <%= heading1 %>{Conclusion and Outlook}\label{sec:conclusion}
1222
1235
  %%% ===============================================================================
1223
1236
 
1224
- Your conclusions are not just a factual summary of your work, but they position, interpret, and defend your findings against the state of the art that you discussed in <%- cref %>{sec:introduction:state-of-art}.
1237
+ Your conclusions are more than a factual summary of your work: they position, interpret, and defend your findings against the state of the art that you discussed in <%- cref %>{sec:introduction:state-of-art}.
1225
1238
  You specifically outline which concrete findings or methodological contributions advance our knowledge towards the general objective you introduced in <%- cref %>{sec:introduction:topic}.
1226
1239
  Objectively discuss which parts you solved and in which parts you failed.
1227
1240
 
@@ -1311,7 +1324,7 @@ Be specific in the sense that your arguments for future work should be based on
1311
1324
  <% break; default: -%>
1312
1325
  <% break; } -%>
1313
1326
  <% if (isPaper) { -%>
1314
- <%= indent%>Identification of funding sources and other support, and thanks to individuals and groups that assisted in the research and the preparation of the work should be included in an acknowledgment section, which is placed just before the reference section in your document \cite{acmart}.
1327
+ <%= indent%>Identification of funding sources and other support, and thanks to individuals and groups that assisted in the research and the preparation of the work should be included in an acknowledgment section, which comes right before the reference section in your document \cite{acmart}.
1315
1328
  <% if (howtotext) { -%>
1316
1329
 
1317
1330
  <%= indent%>The hints on writing a paper/thesis are taken from Dirk Fahland's \href{https://github.com/dfahland/Master-or-Bachelor-thesis-Template-Eindhoven-University-of-Technology}{LaTeX template for Bachelor and Master theses at Eindhoven University of Technology}.
@@ -1409,6 +1422,41 @@ All links were last followed on October 5, 2020.
1409
1422
 
1410
1423
  \lipsum[1]
1411
1424
 
1425
+ %%% ===============================================================================
1426
+ <%= heading1 %>{Use of AI Tools}\label{sec:ai-tools}
1427
+ %%% ===============================================================================
1428
+
1429
+ % Document to what extent AI tools were used for generating significant parts of this work.
1430
+ <% if (thesisvariant == "ustutt") { -%>
1431
+ % The declaration at the end of this thesis requires this appendix.
1432
+ % See the layout requirements of the CS department of the University of Stuttgart: https://www.f05.uni-stuttgart.de/informatik/dokumente/Formulare/Formvorgaben-Abschlussarbeiten_en.pdf
1433
+ <% } -%>
1434
+ % Agree on its structure with your examiner.
1435
+ % Only AI outputs (e.g., text or figures) adopted into this thesis need to be listed; using AI for searching or spell checking does not.
1436
+ % If no AI outputs were adopted as significant parts of this thesis, state this instead of the table.
1437
+
1438
+ <% if (examples) { -%>
1439
+ \begin{tabular}{lll}
1440
+ \toprule
1441
+ AI Tool & Used for & Used where \\
1442
+ \midrule
1443
+ ChatGPT5 & Generating figures & <%- cref %>{fig:label,fig:jpg} \\
1444
+ Google AI search & Pseudo code for algorithm XYZ & <%- cref %>{alg:example} \\
1445
+ DeepL Write & Rephrasing the introduction & <%- cref %>{sec:introduction} \\
1446
+ \bottomrule
1447
+ \end{tabular}
1448
+ <% } else { -%>
1449
+ \begin{tabular}{lll}
1450
+ \toprule
1451
+ AI Tool & Used for & Used where \\
1452
+ \midrule
1453
+ ChatGPT5 & Generating figures & Fig. 3.4, 5.2, and 6.3 \\
1454
+ Google AI search & Pseudo code for algorithm XYZ & Listing 4.1 \\
1455
+ DeepL Write & Rephrasing the introduction & <%- cref %>{sec:introduction} \\
1456
+ \bottomrule
1457
+ \end{tabular}
1458
+ <% } -%>
1459
+
1412
1460
  \pagestyle{empty}
1413
1461
  \renewcommand*{\chapterpagestyle}{empty}
1414
1462
  <% if (documentclass == "scientific-thesis") { -%>
@@ -48,3 +48,7 @@ public class Hello {
48
48
  \label{lst:flJava}
49
49
  \end{listing}
50
50
  <%- eexample %>
51
+ <% if (isThesis) { -%>
52
+
53
+ <%- include('minted.long.example.en.tex', this); -%>
54
+ <% } -%>
@@ -0,0 +1,75 @@
1
+ Listings longer than the remaining space continue on the next page if they are \emph{not} floating.
2
+ A floating listing is always placed on a single page.
3
+ Thus, use \verb+\captionof{listing}+ instead of the \verb+listing+ environment.
4
+ <%- Cref %>{lst:long} spans multiple pages.
5
+
6
+ \begin{minted}[linenos=true]{java}
7
+ public class Squares {
8
+
9
+ /** Returns the square of 1. */
10
+ public int square1() {
11
+ return 1 * 1;
12
+ }
13
+
14
+ /** Returns the square of 2. */
15
+ public int square2() {
16
+ return 2 * 2;
17
+ }
18
+
19
+ /** Returns the square of 3. */
20
+ public int square3() {
21
+ return 3 * 3;
22
+ }
23
+
24
+ /** Returns the square of 4. */
25
+ public int square4() {
26
+ return 4 * 4;
27
+ }
28
+
29
+ /** Returns the square of 5. */
30
+ public int square5() {
31
+ return 5 * 5;
32
+ }
33
+
34
+ /** Returns the square of 6. */
35
+ public int square6() {
36
+ return 6 * 6;
37
+ }
38
+
39
+ /** Returns the square of 7. */
40
+ public int square7() {
41
+ return 7 * 7;
42
+ }
43
+
44
+ /** Returns the square of 8. */
45
+ public int square8() {
46
+ return 8 * 8;
47
+ }
48
+
49
+ /** Returns the square of 9. */
50
+ public int square9() {
51
+ return 9 * 9;
52
+ }
53
+
54
+ /** Returns the square of 10. */
55
+ public int square10() {
56
+ return 10 * 10;
57
+ }
58
+
59
+ /** Returns the square of 11. */
60
+ public int square11() {
61
+ return 11 * 11;
62
+ }
63
+
64
+ /** Returns the square of 12. */
65
+ public int square12() {
66
+ return 12 * 12;
67
+ }
68
+
69
+ public static void main(String[] args) {
70
+ System.out.println(new Squares().square12());
71
+ }
72
+ }
73
+ \end{minted}
74
+ \captionof{listing}{Long Java listing spanning multiple pages}
75
+ \label{lst:long}
@@ -16,7 +16,7 @@ Brackets work as designed:
16
16
  One can also input backticks in verbatim text: \verb|`test`|.
17
17
  <%- eexample %>
18
18
 
19
- Acronyms can be typeset in running text with \verb+\initialism+, which sets them as small caps that blend into the surrounding lowercase text. It is the lightweight alternative to the full acronym and glossary management (\verb+\gls+, with an automatic list of abbreviations) provided by the thesis variants: \verb+\initialism+ only typesets the acronym and does not add it to any list. The macro and a few ready-made acronyms (\verb+\OMG+, \verb+\BPEL+, \verb+\BPMN+, \verb+\UML+) are defined in \texttt{commands.tex}, where you can add your own.
19
+ Acronyms can be typeset in running text with \verb+\initialism+, which sets them as small caps that blend into the surrounding lowercase text. It is the lightweight alternative to the full acronym and glossary management (\verb+\gls+, with an automatic list of abbreviations) provided by the thesis variants: \verb+\initialism+ only typesets the acronym and does not add it to any list. The macro and the ready-made acronyms (\verb+\OMG+, \verb+\BPEL+, \verb+\BPMN+, \verb+\UML+) are defined in \texttt{commands.tex}, where you can add your own.
20
20
 
21
21
  <%- bexample %>
22
22
  The \UML is maintained by the \OMG; related standards include \BPEL and \BPMN.
@@ -17,7 +17,7 @@ Dies verwendet man quasi nie.
17
17
 
18
18
  Folglich werden neue Absätze insbesondere \emph{nicht} durch Doppelbackslashes erzeugt.
19
19
  Beispielsweise begann der letzte Satz in einem neuen Absatz.
20
- Eine ausführliche Motivation hierfür findet sich in \url{http://loopspace.mathforge.org/HowDidIDoThat/TeX/VCS/#section.3}.
20
+ Andrew Stacey begründet dies ausführlich im Abschnitt <%- bquote %>Line Wrapping<%- equote %> seines \href{https://loopspace.mathforge.org/HowDidIDoThat/TeX/VCS/#section.3}{\emph{Document Revision System}}\footnote{\url{https://loopspace.mathforge.org/HowDidIDoThat/TeX/VCS/}}.
21
21
  <%- eexample %>
22
22
 
23
23
  <% if (documentclass == 'scientific-thesis') { -%>
@@ -14,9 +14,9 @@ This leads to a hard line break.
14
14
  The text starts at the beginning of a new line.
15
15
  In LaTeX, you can do that by using two backslashes (\textbackslash\textbackslash).
16
16
  \\
17
- This is rarely used.
17
+ Running text seldom needs a hard line break.
18
18
 
19
19
  Please do \textit{not} use two backslashes for new paragraphs.
20
20
  For instance, this sentence belongs to the same paragraph, whereas the last one started a new one.
21
- A long motivation for that is provided at \url{http://loopspace.mathforge.org/HowDidIDoThat/TeX/VCS/#section.3}.
21
+ Andrew Stacey gives a long motivation for that in the section <%- bquote %>Line Wrapping<%- equote %> of his \href{https://loopspace.mathforge.org/HowDidIDoThat/TeX/VCS/#section.3}{\emph{Document Revision System}}\footnote{\url{https://loopspace.mathforge.org/HowDidIDoThat/TeX/VCS/}}.
22
22
  <%- eexample %>
@@ -1,10 +1,11 @@
1
1
  <%# \subfloat is defined by the subfig package -%>
2
+ <%# IEEE: figure* at the top ([!t]) as in IEEEtran's bare_conf.tex. LaTeX cannot place a figure* at the bottom; stfloats (loaded for \fnbelowfloat) can, but with "!" it may leave the columns too little room. -%>
2
3
  <%= heading2 %>{Sub Figures}
3
4
 
4
5
  An example of two sub figures is shown in <%- cref %>{fig:two_sub_figures}.
5
6
 
6
7
  <%- bexample %>
7
- \begin{figure<% if (documentclass == 'ieee') { %>*<% } %>}[!b]
8
+ \begin{figure<% if (documentclass == 'ieee') { %>*<% } %>}[<%= documentclass == 'ieee' ? '!t' : '!b' %>]
8
9
  \centering
9
10
  \subfloat[Case I]{\includegraphics[width=.4\linewidth]{example-image-a}%
10
11
  \label{fig:first_case}}
@@ -27,7 +28,7 @@ e.g., \verb+\subfloat[]+.
27
28
  An example is shown in <%- cref %>{fig:two_sub_figures_ieee}.
28
29
 
29
30
  <%- bexample %>
30
- \begin{figure*}[!b]
31
+ \begin{figure*}[!t]
31
32
  \centering
32
33
  \subfloat[]{\includegraphics[width=.4\linewidth]{example-image-a}%
33
34
  \label{fig:first_case_ieee}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "generator-latex-template",
3
- "version": "2026.9.28",
3
+ "version": "2026.10.8",
4
4
  "description": "Generates a latex template to be used as start for writing scientific works (papers, articles, theses)",
5
5
  "homepage": "https://github.com/latextemplates/generator-latex-template",
6
6
  "author": {