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 +3 -2
- package/generators/app/CLAUDE.md +113 -0
- package/generators/app/templates/README.en.md +7 -0
- package/generators/app/templates/Texlivefile +6 -3
- package/generators/app/templates/diagbox.example.en.tex +4 -3
- package/generators/app/templates/dot.aspell.conf +1 -0
- package/generators/app/templates/dot.textlintrc.json +1 -1
- package/generators/app/templates/hyphenation.example.en.tex +3 -4
- package/generators/app/templates/latexmkrc +29 -6
- package/generators/app/templates/listings.example.de.tex +4 -0
- package/generators/app/templates/listings.example.en.tex +4 -0
- package/generators/app/templates/listings.long.example.en.tex +75 -0
- package/generators/app/templates/longtable.example.en.tex +1 -1
- package/generators/app/templates/main.de.tex +73 -25
- package/generators/app/templates/main.en.tex +73 -25
- package/generators/app/templates/minted.example.en.tex +4 -0
- package/generators/app/templates/minted.long.example.en.tex +75 -0
- package/generators/app/templates/otherfeatures.example.en.tex +1 -1
- package/generators/app/templates/paragraphs.example.de.tex +1 -1
- package/generators/app/templates/paragraphs.example.en.tex +2 -2
- package/generators/app/templates/subfig.example.en.tex +3 -2
- package/package.json +1 -1
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 (
|
|
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
|
|
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
|
-
%
|
|
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
|
|
10
|
+
\diagbox{Row}{Column} & A & B \\
|
|
10
11
|
\hline
|
|
11
|
-
|
|
12
|
+
1 & x & y \\
|
|
12
13
|
\hline
|
|
13
14
|
\end{tabular}
|
|
14
15
|
\end{center}
|
|
@@ -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
|
|
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
|
|
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
|
-
|
|
11
|
-
|
|
10
|
+
#------------------------------------------------------------------------------#
|
|
11
|
+
# compilation
|
|
12
12
|
|
|
13
|
-
#
|
|
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
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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';
|
|
@@ -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
|
|
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
|
|
60
|
-
%
|
|
61
|
-
\
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
897
|
+
State whether, and to which degree, the research question from <%- cref %>{sec:introduction:research-question} has been answered.
|
|
889
898
|
|
|
890
|
-
|
|
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
|
-
|
|
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)
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
59
|
-
%
|
|
60
|
-
\
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
871
|
+
State whether, and to which degree, the research question from <%- cref %>{sec:introduction:research-question} has been answered.
|
|
863
872
|
|
|
864
|
-
|
|
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
|
-
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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") { -%>
|
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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*}[!
|
|
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.
|
|
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": {
|