Compare commits
90 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
9c954f4f9c
|
|||
|
071696a786
|
|||
|
7a2290c00e
|
|||
|
62d398c807
|
|||
|
0be681b0f0
|
|||
|
30fed8c158
|
|||
|
4a293f7405
|
|||
|
1dfefea074
|
|||
|
0f4d928172
|
|||
|
6ce51e199f
|
|||
|
c755d36d44
|
|||
|
b9f91512cb
|
|||
|
a951de2391
|
|||
|
3f824c6fbe
|
|||
|
8442e269b9
|
|||
|
6f7c8210b3
|
|||
|
|
544e3aeca1 | ||
|
434e01e80d
|
|||
|
8ea283d4ea
|
|||
|
1d98975e81
|
|||
|
242eca8755
|
|||
|
a295b9b419
|
|||
|
378bd509c9
|
|||
|
bdbda1189f
|
|||
|
13465c8d78
|
|||
|
7193b648f2
|
|||
|
0c1f227c7f
|
|||
|
e8796c7809
|
|||
|
49320f1e02
|
|||
|
8d2dfb146d
|
|||
|
f9cf4491eb
|
|||
|
255ff918be
|
|||
|
425730c619
|
|||
|
cea0718719
|
|||
|
5e7f5f92b2
|
|||
|
3bd64ec2b1
|
|||
|
02de1672d3
|
|||
|
f33129f809
|
|||
|
dd6ecb5c9b
|
|||
|
9dcb466d84
|
|||
|
2916234223
|
|||
|
b63706a8a5
|
|||
|
eb60a4bb89
|
|||
|
a2b749e43d
|
|||
|
c8d42664a9
|
|||
|
497dbd270d
|
|||
|
c63864159a
|
|||
|
0ae7db2cd3
|
|||
|
79df0d4dd9
|
|||
|
6e5604705e
|
|||
|
3822ce3a98
|
|||
|
bfa2fedefb
|
|||
|
8666604e8c
|
|||
|
a0eb5f4ed0
|
|||
|
5397c85397
|
|||
|
72f5dd8372
|
|||
|
|
72c450c547 | ||
|
|
c398485af8 | ||
|
|
bcb3882254 | ||
|
d9ab5e8ab1
|
|||
|
b8502b5466
|
|||
|
ca46ff32a8
|
|||
|
f7737687db
|
|||
|
6850224e84
|
|||
|
|
08bcc0672b | ||
| 211bdc54db | |||
|
|
f8ebdfe1f8 | ||
|
|
b5e1f1d663 | ||
|
d8dc47e3b0
|
|||
|
3beac874c1
|
|||
|
0dc0ed4249
|
|||
|
5d763827e8
|
|||
|
7b3831f5fb
|
|||
|
89c3be0bf0
|
|||
|
6e17d96b8b
|
|||
|
6d27bd5df5
|
|||
|
178be2e174
|
|||
|
a90543cdbd
|
|||
|
aeb112f5a1
|
|||
|
bf63657df3
|
|||
|
3f53ed89ba
|
|||
|
da11cd88fa
|
|||
|
d915b8cf27
|
|||
|
afc1ee372f
|
|||
|
d478d63812
|
|||
|
527534f885
|
|||
|
5c35389dca
|
|||
|
f22b16a803
|
|||
|
|
f66f36d560 | ||
|
011ef2c950
|
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1,2 +1,3 @@
|
||||
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||
*.otf filter=lfs diff=lfs merge=lfs -text
|
||||
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
/*.pdf
|
||||
/pack
|
||||
/result
|
||||
|
||||
85
Makefile
85
Makefile
@@ -1,45 +1,98 @@
|
||||
.PHONY: view_example
|
||||
view_example: example.pdf
|
||||
.PHONY: view_documentation
|
||||
view_documentation: documentation.pdf
|
||||
xdg-open $<
|
||||
|
||||
.PHONY: watch_example
|
||||
watch_example:
|
||||
typst watch --font-path template/fonts example.typ & xdg-open example.pdf
|
||||
.PHONY: watch_documentation
|
||||
watch_documentation:
|
||||
typst watch --font-path template/fonts documentation.typ & xdg-open documentation.pdf
|
||||
|
||||
.PHONY: example
|
||||
example: example.pdf
|
||||
.PHONY: watch_%
|
||||
watch_%: %.pdf
|
||||
xdg-open $< & typst watch --root . --font-path template/fonts theses/$*.typ $<
|
||||
|
||||
.PHONY: documentation
|
||||
documentation: documentation.pdf
|
||||
|
||||
PACKDIR := pack/tultemplate2
|
||||
BUNDLEDIR := pack/bundle
|
||||
|
||||
TO_PACK := $(shell find template -type f) template/LICENSE
|
||||
PACK_TARGETS := $(TO_PACK:%=pack/tultemplate2/%) pack/tultemplate2/example.typ \
|
||||
pack/tultemplate2/citations.bib
|
||||
BUNDLE_TARGETS := $(TO_PACK:%=$(BUNDLEDIR)/%) $(BUNDLEDIR)/citations.bib $(BUNDLEDIR)/bp_cs.typ \
|
||||
$(BUNDLEDIR)/bp_en.typ $(BUNDLEDIR)/dp_cs.typ $(BUNDLEDIR)/Makefile
|
||||
PACK_TARGETS := $(TO_PACK:%=$(PACKDIR)/%) $(PACKDIR)/documentation.typ \
|
||||
$(PACKDIR)/documentation.pdf $(PACKDIR)/citations.bib
|
||||
|
||||
.PHONY: pack
|
||||
pack: pack/tultemplate2.zip
|
||||
|
||||
.PHONY: bundle
|
||||
bundle: $(BUNDLE_TARGETS)
|
||||
@echo "!! Bundles are made for tultemplategen and not for direct use !!"
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf pack
|
||||
rm -f example.pdf
|
||||
rm -f ./*.pdf
|
||||
|
||||
pack/tultemplate2.zip: $(PACK_TARGETS)
|
||||
@mkdir -p $(@D)
|
||||
rm -f $@
|
||||
cd pack && zip -r tultemplate2.zip tultemplate2
|
||||
|
||||
pack/tultemplate2/%: %
|
||||
ln -f $< $@
|
||||
|
||||
pack/tultemplate2/template/LICENSE: LICENSE
|
||||
$(PACKDIR)/%: %
|
||||
@mkdir -p $(@D)
|
||||
ln -f $< $@
|
||||
|
||||
pack/tultemplate2/template/%: template/%
|
||||
$(BUNDLEDIR)/citations.bib: citations.bib
|
||||
@mkdir -p $(@D)
|
||||
ln -f $< $@
|
||||
|
||||
$(BUNDLEDIR)/%.typ: theses/%.typ
|
||||
@mkdir -p $(@D)
|
||||
awk 'BEGIN{RS=""; ORS="\n\n"} NR>2{print}' $< | sed 's/\.\.\/template\//template\//' > $@
|
||||
|
||||
$(BUNDLEDIR)/Makefile: templategen.mk
|
||||
@mkdir -p $(@D)
|
||||
ln -f $< $@
|
||||
|
||||
$(PACKDIR)/template/LICENSE: LICENSE
|
||||
@mkdir -p $(@D)
|
||||
ln -f $< $@
|
||||
|
||||
$(BUNDLEDIR)/template/LICENSE: LICENSE
|
||||
@mkdir -p $(@D)
|
||||
ln -f $< $@
|
||||
|
||||
$(PACKDIR)/template/tul_citace.csl: template/tul_citace.csl
|
||||
@mkdir -p $(@D)
|
||||
cat $< | sed 's/^\s*\(.*\)$$/\1/' | tr -d '\n' > $@
|
||||
|
||||
$(BUNDLEDIR)/template/tul_citace.csl: template/tul_citace.csl
|
||||
@mkdir -p $(@D)
|
||||
cat $< | sed 's/^\s*\(.*\)$$/\1/' | tr -d '\n' > $@
|
||||
|
||||
$(PACKDIR)/template/lang.json: template/lang.json
|
||||
@mkdir -p $(@D)
|
||||
cat $< | jq -c > $@
|
||||
|
||||
$(BUNDLEDIR)/template/lang.json: template/lang.json
|
||||
@mkdir -p $(@D)
|
||||
cat $< | jq -c > $@
|
||||
|
||||
$(PACKDIR)/template/%: template/%
|
||||
@mkdir -p $(@D)
|
||||
ln -f $< $@
|
||||
|
||||
$(BUNDLEDIR)/template/%: template/%
|
||||
@mkdir -p $(@D)
|
||||
ln -f $< $@
|
||||
|
||||
TEMPLATE_SRCS := $(shell find template -type f)
|
||||
|
||||
%.pdf: %.typ $(TEMPLATE_SRCS)
|
||||
documentation.pdf: documentation.typ $(TEMPLATE_SRCS)
|
||||
typst compile --font-path template/fonts $<
|
||||
|
||||
%.pdf: theses/%.typ
|
||||
typst compile --font-path template/fonts --root . $< $@
|
||||
|
||||
include tests/make.mk
|
||||
|
||||
107
README.md
107
README.md
@@ -1,22 +1,115 @@
|
||||
# tultemplate2
|
||||
|
||||
Easy Typst template for TUL documents. Begin by compiling `example.typ` and reading it.
|
||||
Easy Typst template for TUL documents. Begin by compiling `documentation.typ` and reading it.
|
||||
|
||||
## How to compile
|
||||
## Recommended usage
|
||||
|
||||
It is recommended to use either:
|
||||
- The on-line Typst editor (https://typst.app/play/) - use some zip build from releases
|
||||
(https://git.zumepro.cz/tul/tultemplate2/releases).
|
||||
- The `typst` CLI tool (available in Arch repos and Snap)
|
||||
|
||||
On Linux, with the `typst` command available, you can just run:
|
||||
## Contributing
|
||||
|
||||
The development is done on our own Gitea instance
|
||||
(over at https://git.zumepro.cz/tul/tultemplate2). We have a GitHub mirror, but don't actively
|
||||
monitor it. We're sorry for this inconvenience, Gitea just gives us so many useful features.
|
||||
|
||||
If you wish to help with the development (or just want to ask us something), feel free to reach out
|
||||
to the maintainer:
|
||||
|
||||
Ondřej Mekina <ondrej@mekina.cz>
|
||||
|
||||
## Our goals and dreams
|
||||
|
||||
We dream of a simple way for students to make documents. Of a workflow revolving not around
|
||||
citations, fonts, paragraphs and other formal bs, but around the actual content of the document.
|
||||
|
||||
We aim to provide a robust (but simple) framework to build official documents at TUL.
|
||||
|
||||
We want to check as much as we can on behalf of the user and stop the compilation of the document if
|
||||
any formal rules could be broken. Our opinion is that the average user should not even have the
|
||||
opportunity to break formal rules. And if they want to - they will have to dig a bit (or set
|
||||
additional parameters in the template).
|
||||
|
||||
When we started developing this template, we cosmically underestimated the amount of effort we'd
|
||||
have to put into this project. Since then we consulted teachers, executives, typographers and
|
||||
previous TUL template developers. But even now we feel like we're far from perfect. So if you
|
||||
think you could help us or give us any advice to make this project thrive, please **reach out**.
|
||||
|
||||
This project was inspired by Pavel Satrapa's TUL LaTeX bundle
|
||||
(https://www.nti.tul.cz/~satrapa/vyuka/latex-tul/).
|
||||
|
||||
Our project aims to be a modern and more robust alternative. By rewriting in Typst, we have access
|
||||
to scripting. So we can programmatically pull up some information, translation and abort the
|
||||
compilation when necessary.
|
||||
|
||||
Oh and also... it's hella fast.
|
||||
|
||||
## How to build in CLI
|
||||
|
||||
> [!IMPORTANT]
|
||||
> This repo uses git lfs to pull fonts. Please set it up (or download a packed build from releases).
|
||||
> When running in CLI - you'll want to include the embedded fonts (or run using make):
|
||||
> `typst compile --font-path template/fonts example.typ`
|
||||
|
||||
### Dependencies
|
||||
|
||||
- Standard `bash` for Makefile commands (`mkdir`, `rm`, `xdg-open`, `echo`, `cd`, `ln`, `awk`, `sed`, `cat`)
|
||||
- `jq` for processing JSON files (is pretty standard on most GNU/Linux distros)
|
||||
- `GNU Make` for Makefiles
|
||||
- Typst command (`typst` on Snap / `typst` package on Arch-based repos - AUR not required)
|
||||
- `zip` if you want to make packed builds (perhaps for the on-line editor)
|
||||
|
||||
or
|
||||
|
||||
- Nix (use `nix develop` to enter the development shell and you can skip dependency installation)
|
||||
|
||||
### Building your own thesis
|
||||
|
||||
> [!TIP]
|
||||
> We **strongly** recommend to use the template package generator available at
|
||||
> https://tulsablona.zumepro.cz/
|
||||
|
||||
The generator will help you generate the necessary headers (so you don't have to go error-by-error -
|
||||
sadly, Typst does not yet support emitting multiple errors or warnings at once).
|
||||
|
||||
It will also give you some tips (like to upload the assignment PDF from STAG) on how to structure
|
||||
the thesis. And at the end, it will generate a whole example document for you.
|
||||
|
||||
### Building documentation
|
||||
|
||||
The documentation PDF explains different concepts in Typst and in this template.
|
||||
It's source code can be found in `documentation.typ`.
|
||||
|
||||
You can build (and view) it by running:
|
||||
|
||||
```sh
|
||||
make
|
||||
```
|
||||
|
||||
That will compile the example document and view it.
|
||||
This will compile it once and open it using `xdg-open`.
|
||||
|
||||
## Repo structure note
|
||||
Or when using Nix:
|
||||
|
||||
> [!IMPORTANT]
|
||||
> This repo uses git lfs to pull fonts. Please set it up (or download a packed build from releases).
|
||||
```sh
|
||||
nix build
|
||||
```
|
||||
|
||||
That will output `result/documentation.pdf` which you can view.
|
||||
|
||||
### Building thesis examples
|
||||
|
||||
Thesis examples are in `theses`. They also have assignments pulled from an external file.
|
||||
|
||||
Using:
|
||||
|
||||
```sh
|
||||
make bp_cs.pdf
|
||||
```
|
||||
|
||||
Will generate an example bachelor's thesis in czech.
|
||||
|
||||
We also have:
|
||||
- `bp_en.pdf` (only partially translated - if you wish to help translating, we'll gladly welcome it)
|
||||
- `dp_cs.pdf`
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
title = "Q117858460 --- Wikidata{,} ",
|
||||
year = "2025",
|
||||
url = "https://www.wikidata.org/w/index.php?title=Q117858460&oldid=2404700455",
|
||||
note = "[Online; cit. 24-Zář-2025]"
|
||||
urldate = {2025-09-24},
|
||||
}
|
||||
|
||||
@misc{ bibtex,
|
||||
@@ -11,5 +11,5 @@
|
||||
title = "BibTeX --- {Wikipedia}{,} The Free Encyclopedia",
|
||||
year = "2025",
|
||||
url = "https://en.wikipedia.org/w/index.php?title=BibTeX&oldid=1309039867",
|
||||
note = "[Online; cit 24-Zář-2025]"
|
||||
urldate = {2025-09-24},
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
#import "template/template.typ": *
|
||||
|
||||
#show: tultemplate2.with(
|
||||
title: (cs: "Návod na použití Typst TUL šablony"),
|
||||
author: "Ondřej Mekina, Matěj Žucha",
|
||||
supervisor: "Ondřej Mekina",
|
||||
title: (cs: [Návod na použití Typst TUL šablony]),
|
||||
author: [Ondřej Mekina, Matěj Žucha],
|
||||
supervisor: [Ondřej Mekina],
|
||||
)
|
||||
|
||||
#profile("release")
|
||||
|
||||
= Lehký úvod do Typstu a této šablony
|
||||
|
||||
Typst je profesionální sázecí nástroj podobný markdownu, LaTeXu/TeXu, groffu, atd.
|
||||
@@ -91,7 +93,7 @@ opravdu hodně vám to usnadní práci.
|
||||
|
||||
// tohle je podnadpis :)
|
||||
#heading(
|
||||
level: 3,
|
||||
level: 2,
|
||||
range(1, 6).map((v) => range(1, v).map((_) => "pod").join("") + "nadpisy").join(", ") + ", ..."
|
||||
)<chained_subheading>
|
||||
|
||||
@@ -105,6 +107,10 @@ Velmi jednoduché. Stačí na začátek řádku dát znak `=` kolikrát chcete.
|
||||
A pak obsah
|
||||
```
|
||||
|
||||
#highlight[
|
||||
V rámci šablony classic lze použít nadpisy *maximálně* třetí úrovně -- jinak šablona vyhodí chybu.
|
||||
]
|
||||
|
||||
== Zvýrazňování textu
|
||||
|
||||
Syntaxe je velmi podobná například markdownu. Stačí:
|
||||
@@ -168,8 +174,7 @@ A některé funkce berou klasický obsah -- v těch je možné psát obsah jako
|
||||
== Obrázky
|
||||
|
||||
Obrázky je možné vkládat samotné i třeba s popiskem.
|
||||
|
||||
Obrázek se vloží pomocí funkce `image`:
|
||||
Obrázek se vloží pomocí funkce `image`.
|
||||
|
||||
Přidání popisku a zároveň zalistování obrázku v indexu (aby se na ně třeba dalo odkazovat) lze
|
||||
udělat pomocí funkce `figure`.
|
||||
@@ -219,6 +224,19 @@ zrakovým postižením).
|
||||
|
||||
Tabulky se zobrazí na začátku dokumentu v seznamu (pokud to daný typ dokumentu vyžaduje).
|
||||
|
||||
== Poznámky pod čarou
|
||||
|
||||
Poznámky pod čarou jsou způsob sdělení dodatečných informácí, které pro čtenáře běžně nebudou velmi
|
||||
podstatné. Mohou sloužit například k upřesnění informací. #footnote[Nebo k doplnění technikálií]
|
||||
|
||||
Poznámka pod čarou se vytvoří následovně:
|
||||
|
||||
```typst
|
||||
#footnote[Moje poznámka]
|
||||
```
|
||||
|
||||
Šablona automaticky vytvoří čáru s barvou vaší fakulty a pod ní vloží poznámky na dané straně.
|
||||
|
||||
== Citace
|
||||
|
||||
Šablona podporuje správu citací pomocí standardního BibTeX @bibtex souboru, stejně jako
|
||||
@@ -285,78 +303,6 @@ co nejvíce využívala základních funkcí Typstu -- například:
|
||||
|
||||
V této kapitole se naučíme vymaxovat využití této šablony za pomocí dalších funkcí a syntaxe.
|
||||
|
||||
#pagebreak(weak: true)
|
||||
== Parametry této šablony
|
||||
|
||||
Šablonu standardně použijete takto:
|
||||
```typst
|
||||
#show: tultemplate2.with(
|
||||
<název_parametru>: <hodnota_parametru>,
|
||||
<nazev_dalšího_parametru>: "<hodnota_dalšího_parametru>",
|
||||
...
|
||||
)
|
||||
```
|
||||
|
||||
Funkce `tultemplate2` přijímá následující parametry.
|
||||
Zvýrazněné hodnoty jsou základní -- pokud vynecháte parametr, pak bude použita tato hodnota.
|
||||
|
||||
#line()
|
||||
- `style` (vizuální styl dokumentu)
|
||||
- *`"classic"`* - Klasický vizuální styl. Tento styl je neblíže klasické formální
|
||||
podobě dokumentů. _(doporučeno pro nováčky této šablony)_
|
||||
#line()
|
||||
- `faculty` (zkratka fakulty)
|
||||
- *`"tul"`* - barvy a logomarky univerzity
|
||||
- `"fs"` - fakulta strojní
|
||||
- `"ft"` - fakulta textilní
|
||||
- `"fp"` - fakulta přírodovědně-humanitní a pedagogická
|
||||
- `"ef"` - ekonomická fakulta
|
||||
- `"fua"` - fakulta umění a architektury
|
||||
- `"fm"` - fakulta mechatroniky, informatiky a mezioborových studií
|
||||
- `"fzs"` - fakulta zdravotnických studií
|
||||
- `"cxi"` - ústav pro nanomateriály, pokročilé technologie a inovace
|
||||
#line()
|
||||
- `lang` (základní jazyk dokumentu)
|
||||
- *`"cs"`* - čeština
|
||||
- `"en"`
|
||||
#line()
|
||||
- `document` (typ dokumentu)
|
||||
- *`"other"`* - nespecifikovaný (neformální) typ dokumentu
|
||||
- `bp` - Bakalářská práce
|
||||
#line()
|
||||
- `title` (nadpis dokumentu)
|
||||
- Ve formátu `(<zkratka_jazyka>: "<nadpis>")`, například `(cs: "Můj nadpis")`
|
||||
#line()
|
||||
- `author` (autor/autoři dokumentu)
|
||||
- Příklad: `"Pavel Novák"` nebo `"Petra Velká, Jindřich Peterka"`
|
||||
#line()
|
||||
- `author_gender` (rod autora v českém jazyce - není potřeba pro angličtinu)
|
||||
- `"masculine"` - Mužský rod
|
||||
- `"feminine"` - Ženský rod
|
||||
- `"we"` - Množné číslo
|
||||
#line()
|
||||
- `supervisor` (vedoucí práce)
|
||||
- Příklad: `"prof. Jindřich Jindřich"`
|
||||
#line()
|
||||
- `programme` (studijní program autora)
|
||||
- Ve formátu `(<zkratka_jazyka>: "<název_programu>")`
|
||||
#line()
|
||||
- `abstract` (abstrakt)
|
||||
- Ve formátu `(<zkratka_jazyka>: [<abstrakt>])`, například `(cs: [Můj *krásný* abstrakt.])`
|
||||
#line()
|
||||
- `keywords` (klíčová slova zobrazovaná pod abstraktem)
|
||||
- Ve formátu `(<zkratka_jazyka>: ("slovo1", "slovo2", ...))`
|
||||
#line()
|
||||
- `assignment` (PDF soubor se zadáním)
|
||||
- Ve formě cesty k souboru, například: `"zadani.pdf"`. Pokud je tento argument vynechán, bude
|
||||
vložena hláška "vložte zadání" na příslušné místo v dokumentu -- tu stranu můžete pak nahradit
|
||||
originálem zadání.
|
||||
#line()
|
||||
- `citations` (BibTex soubor s citacemi)
|
||||
- Ve formě cesty k souboru, například: `"citace.bib"`. Pokud není specifikován, bude použit
|
||||
výchozí (`"citations.bib"`).
|
||||
|
||||
#pagebreak(weak: true)
|
||||
== Zkratky
|
||||
|
||||
LaTeX TUL šablona má k začátku dokumentu seznam zkratek. Proto jsme ho přidali i do této šablony.
|
||||
@@ -388,6 +334,42 @@ Při dalších použití bude vypadat takto: #abbr("ZK").
|
||||
Tedy zkratku _nepřidáváte_ přímo do seznamu zkratek, ale elegantně jí používáte přímo v textu.
|
||||
]
|
||||
|
||||
== Přílohy
|
||||
|
||||
V některých typech dokumentů budete chtít přidat přílohy. Přílohy se přikládají v různých podobách:
|
||||
|
||||
- Jako odkaz (URL/URI adresa)
|
||||
- Zmínka externího souboru (například další soubor nahraný do systému)
|
||||
- Přiložený obsah (vygenerovaný Typstem v tomto dokumentu -- je tedy součástí tohoto kódu)
|
||||
- Externí PDF soubor přiložený jako obsah (jiný PDF dokument, vložený do příloh v kompletní
|
||||
podobě -- to je dobré například do tisku, kde můžete přílohy vytisknout s dokumentem)
|
||||
|
||||
#highlight[
|
||||
Přílohy lze definovat *pouze na jednom* místě v dokumentu, aby se zabránilo omylnému opakování
|
||||
příloh. Přílohy doporučujeme definovat *na konci* souboru pro přehlednost.
|
||||
]
|
||||
|
||||
Zde je ukázka definice příloh (je také použita na konci tohoto ukázkového souboru):
|
||||
|
||||
```typst
|
||||
#attachments(
|
||||
attach_link(
|
||||
"Zdrojový kód této šablony",
|
||||
"https://git.zumepro.cz/tul/tultemplate2"
|
||||
),
|
||||
attach_content(
|
||||
"Testovací obsah vygenerovaný Typstem",
|
||||
[Sem lze psát _stylovaný_ obsah.]
|
||||
),
|
||||
)
|
||||
```
|
||||
|
||||
#pagebreak(weak: true)
|
||||
== Argumenty šablony
|
||||
|
||||
#import "template/arguments.typ": print_argument_docs
|
||||
#print_argument_docs()
|
||||
|
||||
= Workflow a jak si zjednoduššit práci
|
||||
|
||||
Tyhle věci používat _nemusíte_, aby vám šablona fungovala. Nicméně často jsou poměrně fajn.
|
||||
@@ -450,3 +432,8 @@ Takhle si můžete předpřipravit délku odstavců a vyzkoušet si, jestli se r
|
||||
do požadavků. Pak můžete postupně přepisovat/vyplňovat.
|
||||
|
||||
Funkce `todo` vám zároveň zabrání v tom, aby se text Lorem Ipsum vyskytl ve výsledném dokumentu.
|
||||
|
||||
#attachments(
|
||||
attach_link("Zdrojový kód této šablony", "https://git.zumepro.cz/tul/tultemplate2"),
|
||||
attach_content("Testovací obsah vygenerovaný Typstem", [Sem lze psát _stylovaný_ obsah.]),
|
||||
)
|
||||
61
flake.lock
generated
Normal file
61
flake.lock
generated
Normal file
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1762482733,
|
||||
"narHash": "sha256-g/da4FzvckvbiZT075Sb1/YDNDr+tGQgh4N8i5ceYMg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e1ebeec86b771e9d387dd02d82ffdc77ac753abc",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs",
|
||||
"utils": "utils"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
35
flake.nix
Normal file
35
flake.nix
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, utils }:
|
||||
utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
dependencies = with pkgs; [ typst gnumake jq xdg-utils zip ];
|
||||
in
|
||||
{
|
||||
packages.documentation = pkgs.stdenv.mkDerivation {
|
||||
pname = "documentation";
|
||||
version = "1.2";
|
||||
src = ./.;
|
||||
buildInputs = dependencies;
|
||||
buildPhase = ''
|
||||
make documentation.pdf
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp -r documentation.pdf $out/ || true
|
||||
'';
|
||||
};
|
||||
|
||||
packages.default = self.packages.${system}.documentation;
|
||||
|
||||
devShell = with pkgs; mkShell {
|
||||
buildInputs = dependencies;
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -18,10 +18,11 @@
|
||||
}
|
||||
"(" + abbrs.pairs().map((v) => { v.at(0) + ":\"" + v.at(1) + "\"" }).join(",") + ")"
|
||||
});
|
||||
let target_label = label("abbr_" + abbreviation);
|
||||
if type(text) != type(none) {
|
||||
text + " (" + abbreviation + ")";
|
||||
link(target_label, text + " (" + abbreviation + ")");
|
||||
} else {
|
||||
abbreviation;
|
||||
link(target_label, abbreviation)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
189
template/arguments.typ
Normal file
189
template/arguments.typ
Normal file
@@ -0,0 +1,189 @@
|
||||
#import "utils.typ": assert_type_signature, is_none, map_none, deref, assert_dict_has
|
||||
|
||||
#let arguments_structure = (
|
||||
document: (
|
||||
visual_style: "string",
|
||||
faculty: "string",
|
||||
language: "string",
|
||||
type: "string",
|
||||
),
|
||||
title_pages: "string | boolean | none",
|
||||
title: "dictionary[string : string | content] | none",
|
||||
author: (
|
||||
name: "string | content | none",
|
||||
pronouns: "string | none",
|
||||
programme: "dictionary[string : string | content] | none",
|
||||
specialization: "dictionary[string : string | content] | none",
|
||||
year_of_study: "string | content | none",
|
||||
),
|
||||
project: (
|
||||
supervisor: "string | content | dictionary[string : string | content] | none",
|
||||
consultant: "string | content | dictionary[string : string | content] | none",
|
||||
),
|
||||
abstract: (
|
||||
content: "dictionary[string : string | content] | none",
|
||||
keywords: "dictionary[string : string | content | array[string]] | none",
|
||||
),
|
||||
acknowledgement: "dictionary[string : string | content] | none",
|
||||
assignment: "dictionary[string : any] | content | string | none",
|
||||
citations: "string",
|
||||
);
|
||||
|
||||
#let assignment_structure = (
|
||||
personal_number: "string | content",
|
||||
department: "string | content",
|
||||
academical_year: "string | content",
|
||||
content: "content",
|
||||
);
|
||||
|
||||
|
||||
#let check_arguments(args, structure: arguments_structure, namespace: none) = {
|
||||
let check_arguments_dict(structure, args, argument_path) = {
|
||||
for (key, value) in structure.pairs() {
|
||||
argument_path.push(str(key).replace("_", " "));
|
||||
|
||||
if not key in args {
|
||||
panic("invalid arguments definition");
|
||||
}
|
||||
let arg = args.at(key);
|
||||
|
||||
if type(value) == dictionary {
|
||||
check_arguments_dict(value, arg, argument_path);
|
||||
} else if type(value) == str {
|
||||
assert_type_signature(arg, value, argument_path.join(" "));
|
||||
} else {
|
||||
panic("invalid arguments definition");
|
||||
}
|
||||
|
||||
let _ = argument_path.pop();
|
||||
}
|
||||
}
|
||||
|
||||
check_arguments_dict(structure, args, if is_none(namespace) { () } else { (namespace,) });
|
||||
}
|
||||
|
||||
#let get_arg_single(args, path) = {
|
||||
let args = args;
|
||||
for segment in path.split(".") {
|
||||
if segment not in args {
|
||||
panic("invalid argument query path: " + str(path));
|
||||
}
|
||||
args = args.at(segment);
|
||||
}
|
||||
args
|
||||
}
|
||||
|
||||
#let get_arg(args, path) = {
|
||||
if type(path) == array {
|
||||
let res = ();
|
||||
for path in path {
|
||||
res.push(get_arg_single(args, path));
|
||||
}
|
||||
res
|
||||
} else if type(path) == str {
|
||||
get_arg_single(args, path)
|
||||
} else {
|
||||
panic("invalid argument path");
|
||||
}
|
||||
}
|
||||
|
||||
#let req_arg_single(args, path) = {
|
||||
let arg = get_arg_single(args, path);
|
||||
if is_none(arg) {
|
||||
let panic_message = path.split(".").join(" ").replace("_", " ") + " is missing";
|
||||
panic(panic_message);
|
||||
}
|
||||
arg
|
||||
}
|
||||
|
||||
#let req_arg(args, path) = {
|
||||
if type(path) == array {
|
||||
let res = ();
|
||||
for path in path {
|
||||
res.push(req_arg_single(args, path));
|
||||
}
|
||||
res
|
||||
} else if type(path) == str {
|
||||
req_arg_single(args, path)
|
||||
} else {
|
||||
panic("invalid argument path");
|
||||
}
|
||||
}
|
||||
|
||||
#let map_arg_single(args, path, mapper) = {
|
||||
let arg = get_arg(args, path);
|
||||
map_none(arg, mapper)
|
||||
}
|
||||
|
||||
#let map_arg(args, path, mapper) = {
|
||||
if type(path) == array {
|
||||
let res = ();
|
||||
for path in path {
|
||||
res.push(map_arg_single(args, path, mapper));
|
||||
}
|
||||
res
|
||||
} else if type(path) == str {
|
||||
map_arg_single(args, path, mapper)
|
||||
} else {
|
||||
panic("invalid argument path");
|
||||
}
|
||||
}
|
||||
|
||||
#let assignment_info(assignment) = {
|
||||
if type(assignment) == dictionary {
|
||||
assert_dict_has(assignment_structure.keys(), assignment, "assignment");
|
||||
check_arguments(assignment, structure: assignment_structure, namespace: "assignment");
|
||||
}
|
||||
assignment
|
||||
}
|
||||
|
||||
#let arguments(
|
||||
document_info,
|
||||
title_pages,
|
||||
title,
|
||||
author_info,
|
||||
project_info,
|
||||
abstract_info,
|
||||
acknowledgement,
|
||||
assignment,
|
||||
citations,
|
||||
) = {
|
||||
(
|
||||
document: document_info,
|
||||
title_pages: title_pages,
|
||||
title: title,
|
||||
author: author_info,
|
||||
project: project_info,
|
||||
abstract: abstract_info,
|
||||
acknowledgement: acknowledgement,
|
||||
assignment: assignment_info(assignment),
|
||||
citations: citations,
|
||||
)
|
||||
}
|
||||
|
||||
#let document_info(visual_style, faculty_abbreviation, language_abbreviation, document_type) = {
|
||||
(
|
||||
visual_style: visual_style,
|
||||
faculty: faculty_abbreviation,
|
||||
language: language_abbreviation,
|
||||
type: document_type,
|
||||
)
|
||||
}
|
||||
|
||||
#let author_info(name, pronouns, programme, specialization, year_of_study) = {
|
||||
(
|
||||
name: name,
|
||||
pronouns: pronouns,
|
||||
programme: programme,
|
||||
specialization: specialization,
|
||||
year_of_study: year_of_study,
|
||||
)
|
||||
}
|
||||
|
||||
#let project_info(supervisor, consultant) = {
|
||||
(supervisor: supervisor, consultant: consultant)
|
||||
}
|
||||
|
||||
#let abstract_info(abstract, keywords) = {
|
||||
(content: abstract, keywords: keywords)
|
||||
}
|
||||
@@ -60,7 +60,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
#let attachments(attachments) = {
|
||||
#let attachments(..attachments) = {
|
||||
let attachments = attachments.pos();
|
||||
assert_type_signature(
|
||||
attachments, "array[array[string | content]] | array[string | content]", "attachments"
|
||||
);
|
||||
@@ -117,6 +118,9 @@
|
||||
return;
|
||||
}
|
||||
let data = eval(data);
|
||||
if data == false {
|
||||
return;
|
||||
}
|
||||
heading(get_lang_item(language, "attachments"), numbering: none);
|
||||
|
||||
// listing
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never" default-locale="en-US">
|
||||
<info>
|
||||
<title>TUL ISO-690</title>
|
||||
<id>-----</id>
|
||||
<link href="" rel="self"/>
|
||||
<link href="" rel="documentation"/>
|
||||
<title>ISO-690 (numeric, English)</title>
|
||||
<id>http://www.zotero.org/styles/iso690-numeric-en</id>
|
||||
<link href="https://git.zumepro.cz/tul/tultemplate2/src/branch/master/template/citation_styles/iso690-numeric-square_brackets" rel="self"/>
|
||||
<link href="http://www.zotero.org/styles/iso690-numeric-en" rel="template"/>
|
||||
<author>
|
||||
<name>-----</name>
|
||||
<email>-----</email>
|
||||
<name>Ondřej Mekina</name>
|
||||
<email>ondrej@mekina.cz</email>
|
||||
</author>
|
||||
<category citation-format="numeric"/>
|
||||
<category field="generic-base"/>
|
||||
<summary>Style based on ISO 690:2010(E), V1.1</summary>
|
||||
<updated>2025-03-30T14:14:00+00:00</updated>
|
||||
<summary>Style based on ISO 690:2010(E), V1.1, square brackets</summary>
|
||||
<updated>2025-10-16T20:31:00+01:00</updated>
|
||||
<rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>
|
||||
</info>
|
||||
<locale>
|
||||
<terms>
|
||||
<term name="no date">[žádné datum]</term>
|
||||
<term name="in">v</term>
|
||||
<term name="no date">[no date]</term>
|
||||
<term name="in">in</term>
|
||||
<term name="online">online</term>
|
||||
<term name="accessed">citováno</term>
|
||||
<term name="retrieved">Dostupné</term>
|
||||
<term name="from">z</term>
|
||||
<term name="accessed">accessed</term>
|
||||
<term name="retrieved">Available</term>
|
||||
<term name="from">from</term>
|
||||
</terms>
|
||||
</locale>
|
||||
<macro name="author">
|
||||
@@ -221,11 +221,11 @@
|
||||
<choose>
|
||||
<if variable="URL">
|
||||
<group prefix=" [" suffix="]">
|
||||
<text term="accessed" suffix=" "/>
|
||||
<text term="accessed" text-case="capitalize-first"/>
|
||||
<date variable="accessed">
|
||||
<date-part name="year"/>
|
||||
<date-part name="month" form="numeric-leading-zeros" prefix="-"/>
|
||||
<date-part name="day" form="numeric-leading-zeros" prefix="-"/>
|
||||
<date-part name="day" prefix=" "/>
|
||||
<date-part name="month" prefix=" "/>
|
||||
<date-part name="year" prefix=" "/>
|
||||
</date>
|
||||
</group>
|
||||
</if>
|
||||
@@ -264,7 +264,7 @@
|
||||
<group>
|
||||
<text term="retrieved" suffix=" " text-case="capitalize-first"/>
|
||||
<text term="from" suffix=": "/>
|
||||
<text variable="URL" suffix=" "/>
|
||||
<text variable="URL"/>
|
||||
</group>
|
||||
</if>
|
||||
</choose>
|
||||
@@ -297,7 +297,7 @@
|
||||
<sort>
|
||||
<key variable="citation-number"/>
|
||||
</sort>
|
||||
<layout prefix="(" suffix=")" delimiter=", ">
|
||||
<layout prefix="[" suffix="]" delimiter=", ">
|
||||
<group delimiter=", ">
|
||||
<text variable="citation-number"/>
|
||||
<group>
|
||||
@@ -312,7 +312,7 @@
|
||||
<key variable="citation-number"/>
|
||||
</sort>
|
||||
<layout>
|
||||
<text variable="citation-number" display="left-margin" suffix=". "/>
|
||||
<text variable="citation-number" display="left-margin" prefix="[" suffix="]"/>
|
||||
<choose>
|
||||
<if type="book map" match="any">
|
||||
<group display="right-inline">
|
||||
@@ -486,9 +486,6 @@
|
||||
<group display="right-inline">
|
||||
<text macro="archive"/>
|
||||
</group>
|
||||
<group display="right-inline">
|
||||
<text macro="abstract"/>
|
||||
</group>
|
||||
<group display="right-inline">
|
||||
<text macro="note"/>
|
||||
</group>
|
||||
497
template/citations/tul-csn690-numeric-square_brackets.csl
Normal file
497
template/citations/tul-csn690-numeric-square_brackets.csl
Normal file
@@ -0,0 +1,497 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never" default-locale="en-US">
|
||||
<info>
|
||||
<title>ČSN ISO 690:2022 (TUL)</title>
|
||||
<id>https://git.zumepro.cz/tul/tultemplate2/src/branch/master/template/tul_citace.csl</id>
|
||||
<link href="https://git.zumepro.cz/tul/tultemplate2/src/branch/master/template/citation_styles/tul-csn690-numeric-square_brackets" rel="self"/>
|
||||
<link href="http://www.zotero.org/styles/iso690-numeric-en" rel="template"/>
|
||||
<author>
|
||||
<name>Ondřej Mekina</name>
|
||||
<email>ondrej@mekina.cz</email>
|
||||
</author>
|
||||
<category citation-format="numeric"/>
|
||||
<category field="generic-base"/>
|
||||
<summary>Citační styl založen na ČSN ISO 690:2022 (numeric, hranaté závorky), upraven pro použití na Technické Univerzitě v Liberci</summary>
|
||||
<updated>2025-10-16T20:31:00+01:00</updated>
|
||||
<rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>
|
||||
</info>
|
||||
<locale>
|
||||
<terms>
|
||||
<term name="no date">[bez data]</term>
|
||||
<term name="in">v</term>
|
||||
<term name="online">online</term>
|
||||
<term name="accessed">citováno</term>
|
||||
<term name="retrieved">dostupné</term>
|
||||
<term name="from">z</term>
|
||||
</terms>
|
||||
</locale>
|
||||
<macro name="author">
|
||||
<names variable="author">
|
||||
<name and="text" name-as-sort-order="first" sort-separator=", " delimiter="; " delimiter-precedes-last="never">
|
||||
<name-part name="family" text-case="uppercase"/>
|
||||
<name-part name="given"/>
|
||||
</name>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="editor">
|
||||
<names variable="editor">
|
||||
<name and="text" name-as-sort-order="all" sort-separator=", " delimiter=", " delimiter-precedes-last="never">
|
||||
<name-part name="family" text-case="uppercase"/>
|
||||
<name-part name="given"/>
|
||||
</name>
|
||||
<label prefix=" (" form="short" suffix=".)"/>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="translator">
|
||||
<names variable="translator">
|
||||
<name and="text" name-as-sort-order="all" sort-separator=", " delimiter=", " delimiter-precedes-last="never">
|
||||
<name-part name="family" text-case="uppercase"/>
|
||||
<name-part name="given"/>
|
||||
</name>
|
||||
<label prefix=" (" form="short" suffix=".)"/>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="responsability">
|
||||
<choose>
|
||||
<if variable="author editor translator" match="any">
|
||||
<choose>
|
||||
<if variable="author">
|
||||
<text macro="author"/>
|
||||
</if>
|
||||
<else-if variable="editor">
|
||||
<text macro="editor"/>
|
||||
</else-if>
|
||||
<else>
|
||||
<text macro="translator"/>
|
||||
</else>
|
||||
</choose>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="container-author">
|
||||
<names variable="container-author">
|
||||
<name and="text" name-as-sort-order="all" sort-separator=", " delimiter=", " delimiter-precedes-last="always">
|
||||
<name-part name="family" text-case="uppercase"/>
|
||||
<name-part name="given"/>
|
||||
</name>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="container-responsability">
|
||||
<choose>
|
||||
<if variable="container-author editor translator" match="any">
|
||||
<choose>
|
||||
<if variable="container-author">
|
||||
<text macro="container-author"/>
|
||||
</if>
|
||||
<else-if variable="editor">
|
||||
<text macro="editor"/>
|
||||
</else-if>
|
||||
<else>
|
||||
<text macro="translator"/>
|
||||
</else>
|
||||
</choose>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="year-date">
|
||||
<choose>
|
||||
<if variable="issued">
|
||||
<date variable="issued">
|
||||
<date-part name="year" form="long"/>
|
||||
</date>
|
||||
</if>
|
||||
<else>
|
||||
<text term="no date"/>
|
||||
</else>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="title">
|
||||
<choose>
|
||||
<if type="book thesis map motion_picture song manuscript" match="any">
|
||||
<text variable="title" font-style="italic" suffix=". "/>
|
||||
</if>
|
||||
|
||||
<else-if type="paper-conference speech chapter article-journal article-magazine article-newspaper entry entry-dictionary entry-encyclopedia post-weblog post webpage broadcast" match="any">
|
||||
<text variable="title" suffix=". " font-style="italic"/>
|
||||
<choose>
|
||||
<if variable="URL">
|
||||
<text term="online" text-case="capitalize-first" suffix=". "/>
|
||||
</if>
|
||||
</choose>
|
||||
<choose>
|
||||
<if type="chapter paper-conference" match="any">
|
||||
<text term="in" text-case="capitalize-first" suffix=": "/>
|
||||
</if>
|
||||
</choose>
|
||||
<choose>
|
||||
<if variable="container-author editor translator" match="any">
|
||||
<text macro="container-responsability"/>
|
||||
<choose>
|
||||
<if variable="container-title event" match="any">
|
||||
<text value=". "/>
|
||||
</if>
|
||||
</choose>
|
||||
</if>
|
||||
</choose>
|
||||
<choose>
|
||||
<if variable="container-title">
|
||||
<text variable="container-title" suffix="."/>
|
||||
</if>
|
||||
<else>
|
||||
<text variable="event" font-style="italic" suffix="."/>
|
||||
</else>
|
||||
</choose>
|
||||
</else-if>
|
||||
|
||||
<else-if type="report">
|
||||
<text variable="number" suffix=": "/>
|
||||
<text variable="title" font-style="italic"/>
|
||||
</else-if>
|
||||
<else-if type="patent">
|
||||
<text variable="title" font-style="italic" suffix="."/>
|
||||
</else-if>
|
||||
<else>
|
||||
<text variable="title" font-style="italic" suffix="."/>
|
||||
</else>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="number">
|
||||
<text variable="number"/>
|
||||
</macro>
|
||||
<macro name="medium">
|
||||
<text variable="medium" prefix=" [" suffix="]"/>
|
||||
</macro>
|
||||
<macro name="version">
|
||||
<text variable="version"/>
|
||||
</macro>
|
||||
<macro name="genre">
|
||||
<choose>
|
||||
<if type="map">
|
||||
<choose>
|
||||
<if variable="genre">
|
||||
<text variable="genre" prefix="[" suffix="]"/>
|
||||
</if>
|
||||
<else>
|
||||
<text value="map" prefix="[" suffix="]"/>
|
||||
</else>
|
||||
</choose>
|
||||
</if>
|
||||
<else>
|
||||
<text variable="genre"/>
|
||||
</else>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="date">
|
||||
<choose>
|
||||
<if variable="issued">
|
||||
<date variable="issued">
|
||||
<date-part name="day" suffix=". "/>
|
||||
<date-part name="month" form="numeric" suffix=". "/>
|
||||
<date-part name="year"/>
|
||||
</date>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="edition">
|
||||
<text variable="edition" form="long"/>
|
||||
</macro>
|
||||
<macro name="publisher-group">
|
||||
<group delimiter=": ">
|
||||
<text variable="publisher-place"/>
|
||||
<text variable="publisher"/>
|
||||
</group>
|
||||
</macro>
|
||||
<macro name="issue">
|
||||
<group delimiter=", ">
|
||||
<text variable="volume" prefix="Svazek "/>
|
||||
<choose>
|
||||
<if variable="volume">
|
||||
<text variable="issue" prefix="č. "/>
|
||||
<text variable="page" prefix="s. "/>
|
||||
</if>
|
||||
<else-if variable="issue">
|
||||
<text variable="issue" prefix="Č. "/>
|
||||
<text variable="page" prefix="s. "/>
|
||||
</else-if>
|
||||
<else>
|
||||
<text variable="page" prefix="S. "/>
|
||||
</else>
|
||||
</choose>
|
||||
</group>
|
||||
</macro>
|
||||
<macro name="accessed">
|
||||
<choose>
|
||||
<if variable="URL">
|
||||
<group prefix=" [" suffix="]">
|
||||
<text term="accessed"/>
|
||||
<date variable="accessed">
|
||||
<date-part name="year" prefix=" "/>
|
||||
<date-part name="month" form="numeric-leading-zeros" prefix="-"/>
|
||||
<date-part name="day" form="numeric-leading-zeros" prefix="-"/>
|
||||
</date>
|
||||
</group>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="collection">
|
||||
<group delimiter=", ">
|
||||
<text variable="collection-title"/>
|
||||
<text variable="collection-number"/>
|
||||
</group>
|
||||
</macro>
|
||||
<macro name="page">
|
||||
<choose>
|
||||
<if type="book thesis manuscript" match="any">
|
||||
<text variable="number-of-pages" suffix=" p"/>
|
||||
</if>
|
||||
<else-if type="chapter paper-conference article-newspaper" match="any">
|
||||
<text variable="page" prefix="str. "/>
|
||||
</else-if>
|
||||
<else-if type="report patent" match="any">
|
||||
<text variable="page" suffix=" p"/>
|
||||
</else-if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="isbn">
|
||||
<text variable="ISBN" prefix="ISBN "/>
|
||||
</macro>
|
||||
<macro name="doi">
|
||||
<text variable="DOI" prefix="DOI "/>
|
||||
</macro>
|
||||
<macro name="url">
|
||||
<choose>
|
||||
<if variable="DOI" match="none">
|
||||
<choose>
|
||||
<if variable="URL">
|
||||
<group>
|
||||
<text term="retrieved" suffix=" " text-case="capitalize-first"/>
|
||||
<text term="from" suffix=": "/>
|
||||
<text variable="URL"/>
|
||||
</group>
|
||||
</if>
|
||||
</choose>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="archive">
|
||||
<group delimiter=": ">
|
||||
<text variable="archive"/>
|
||||
<text macro="archive_location"/>
|
||||
</group>
|
||||
</macro>
|
||||
<macro name="archive_location">
|
||||
<choose>
|
||||
<if variable="archive_location">
|
||||
<text variable="archive_location"/>
|
||||
</if>
|
||||
<else>
|
||||
<text variable="call-number"/>
|
||||
</else>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="abstract">
|
||||
<text variable="abstract"/>
|
||||
</macro>
|
||||
<macro name="note">
|
||||
<text variable="note"/>
|
||||
</macro>
|
||||
<citation collapse="citation-number" after-collapse-delimiter="; ">
|
||||
<sort>
|
||||
<key variable="citation-number"/>
|
||||
</sort>
|
||||
<layout prefix="[" suffix="]" delimiter=", ">
|
||||
<group delimiter=", ">
|
||||
<text variable="citation-number"/>
|
||||
<group>
|
||||
<label variable="locator" suffix=". " form="short" strip-periods="true"/>
|
||||
<text variable="locator"/>
|
||||
</group>
|
||||
</group>
|
||||
</layout>
|
||||
</citation>
|
||||
<bibliography>
|
||||
<sort>
|
||||
<key variable="citation-number"/>
|
||||
</sort>
|
||||
<layout>
|
||||
<text variable="citation-number" display="left-margin" prefix="[" suffix="]"/>
|
||||
<choose>
|
||||
<if type="book map" match="any">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="genre" suffix=". "/>
|
||||
<text macro="edition" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=", "/>
|
||||
<text macro="year-date" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="collection" suffix=". "/>
|
||||
<text macro="isbn" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</if>
|
||||
<else-if type="article-journal article-magazine" match="any">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="edition" suffix=". "/>
|
||||
<text macro="date" suffix=". "/>
|
||||
<text macro="issue" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="doi" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="article-newspaper">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="edition" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=", "/>
|
||||
<text macro="date" suffix=". "/>
|
||||
<text macro="page" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="chapter entry entry-dictionary entry-encyclopedia" match="any">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" font-style="normal" suffix=". "/>
|
||||
<text macro="edition" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=", "/>
|
||||
<text macro="year-date" suffix=". "/>
|
||||
<text macro="page" suffix=". "/>
|
||||
<text macro="collection" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="isbn" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="speech">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="genre" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=". "/>
|
||||
<text macro="date" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="page" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="paper-conference">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="genre" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=", "/>
|
||||
<text macro="date" suffix=". "/>
|
||||
<text macro="page" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="collection" suffix=". "/>
|
||||
<text macro="isbn" suffix=". "/>
|
||||
<text macro="doi" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="thesis">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="genre" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=", "/>
|
||||
<text macro="year-date" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="post-weblog post webpage" match="any">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=", "/>
|
||||
<text macro="date" suffix=". "/>
|
||||
<text macro="url" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="broadcast motion_picture song" match="any">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="medium" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=", "/>
|
||||
<text macro="date" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="collection" suffix=". "/>
|
||||
<text macro="isbn" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="report" match="any">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="genre" suffix=". "/>
|
||||
<text macro="edition" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=", "/>
|
||||
<text macro="year-date" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="collection" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="manuscript" match="any">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="genre" suffix=". "/>
|
||||
<text macro="edition" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=", "/>
|
||||
<text macro="year-date" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="collection" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="patent">
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="date" suffix=". "/>
|
||||
<text macro="number" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="collection" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else>
|
||||
<group display="right-inline">
|
||||
<text macro="responsability" suffix=". "/>
|
||||
<text macro="title" suffix=". "/>
|
||||
<text macro="version" suffix=". "/>
|
||||
<text macro="medium" suffix=". "/>
|
||||
<text macro="genre" suffix=". "/>
|
||||
<text macro="date" suffix=". "/>
|
||||
<text macro="edition" suffix=". "/>
|
||||
<text macro="publisher-group" suffix=". "/>
|
||||
<text macro="number" suffix=". "/>
|
||||
<text macro="accessed" suffix=". "/>
|
||||
<text macro="collection" suffix=". "/>
|
||||
<text macro="page" suffix=". "/>
|
||||
<text macro="isbn" suffix=". "/>
|
||||
<text macro="url"/>
|
||||
</group>
|
||||
</else>
|
||||
</choose>
|
||||
<group display="right-inline">
|
||||
<text macro="archive"/>
|
||||
</group>
|
||||
<group display="right-inline">
|
||||
<text macro="note"/>
|
||||
</group>
|
||||
</layout>
|
||||
</bibliography>
|
||||
</style>
|
||||
@@ -1,60 +1,17 @@
|
||||
#import "../lang.typ": get_lang_item
|
||||
#import "common.typ": (
|
||||
mainpage,
|
||||
default_styling,
|
||||
assignment,
|
||||
disclaimer,
|
||||
abstract,
|
||||
toc,
|
||||
abbrlist,
|
||||
imagelist,
|
||||
tablelist,
|
||||
bibliogr
|
||||
)
|
||||
#import "../attachments.typ": attachment_list
|
||||
#import "../utils.typ": is_none, assert_dict_has, assert_not_none
|
||||
#import "../arguments.typ": req_arg, get_arg
|
||||
#import "../utils.typ": assert_dict_has, is_none
|
||||
#import "common.typ": mainpage, assignment, external_title_pages
|
||||
|
||||
#let bp(
|
||||
// general settings
|
||||
faculty_id, faculty_color, language, assignment_document, citation_file,
|
||||
|
||||
// document info
|
||||
title, author, author_gender, supervisor, consultant, study_programme, study_branch, abstract_content,
|
||||
keywords,
|
||||
|
||||
content
|
||||
) = {
|
||||
let force_langs = ("cs", "en");
|
||||
assert_not_none(title, "title");
|
||||
assert_dict_has(force_langs, title, "title");
|
||||
|
||||
assert_not_none(study_programme, "study programme");
|
||||
assert_dict_has((language,), study_programme, "study programme");
|
||||
assert_not_none(study_branch, "study branch");
|
||||
assert_dict_has((language,), study_branch, "study branch");
|
||||
|
||||
assert_not_none(abstract_content, "abstract");
|
||||
assert_dict_has(force_langs, abstract_content, "abstract");
|
||||
if not is_none(keywords) {
|
||||
assert_dict_has(force_langs, keywords, "keywords");
|
||||
}
|
||||
#let bp(args) = {
|
||||
let language = req_arg(args, "document.language");
|
||||
let programme = req_arg(args, "author.programme");
|
||||
assert_dict_has((language,), programme, "study programme");
|
||||
let specialization = req_arg(args, "author.specialization");
|
||||
assert_dict_has((language,), specialization, "study specialization");
|
||||
if language == "cs" {
|
||||
assert_not_none(author_gender, "author gender");
|
||||
let _ = req_arg(args, "author.pronouns");
|
||||
}
|
||||
|
||||
mainpage(faculty_id, language, "bp", title, author, supervisor, consultant, study_programme, study_branch);
|
||||
assignment(language, assignment_document);
|
||||
default_styling(false, faculty_color, {
|
||||
disclaimer(language, faculty_id, "bp", author, author_gender);
|
||||
abstract("cs", title, abstract_content, keywords);
|
||||
abstract("en", title, abstract_content, keywords);
|
||||
toc(language);
|
||||
abbrlist(language);
|
||||
imagelist(language);
|
||||
tablelist(language);
|
||||
pagebreak(weak: true);
|
||||
content;
|
||||
bibliogr(language, citation_file);
|
||||
attachment_list(language);
|
||||
});
|
||||
mainpage(args);
|
||||
assignment(args);
|
||||
}
|
||||
|
||||
@@ -1,48 +1,66 @@
|
||||
// tools & utils
|
||||
#import "../theme.typ": faculty_logotype, tul_logomark, faculty_color
|
||||
#import "../lang.typ": lang_id, get_lang_item
|
||||
#import "../utils.typ": assert_in_dict, assert_in_arr, map_none, assert_dict_has
|
||||
#import "../utils.typ": assert_in_dict, assert_in_arr, map_none, assert_dict_has, is_none
|
||||
#import "../arguments.typ": req_arg, map_arg, get_arg
|
||||
#import "common.typ": default_styling, external_title_pages
|
||||
|
||||
// thesis types
|
||||
#import "bp.typ": bp
|
||||
#import "other.typ": other
|
||||
#import "dp.typ": dp
|
||||
#import "prj.typ": prj
|
||||
#import "other.typ": other_title_page, other_base
|
||||
#import "thesis_base.typ": thesis_base, thesis_base_title_pages
|
||||
|
||||
#let template_classic(
|
||||
// general settings
|
||||
language, faculty_id, document_type, citation_file, assignment_document,
|
||||
#let document_types = (
|
||||
"bp": (bp, thesis_base, thesis_base_title_pages),
|
||||
"dp": (dp, thesis_base, thesis_base_title_pages),
|
||||
"prj": (prj, thesis_base, thesis_base_title_pages),
|
||||
"other": (other_title_page, other_base, (args) => {}),
|
||||
)
|
||||
|
||||
// document info
|
||||
title, author, author_gender, supervisor, consultant, study_programme, study_branch, abstract, keywords,
|
||||
#let prep_args(args) = {
|
||||
let language = req_arg(args, "document.language");
|
||||
|
||||
// content
|
||||
content,
|
||||
) = {
|
||||
// argument pre-checking
|
||||
let document_types = (
|
||||
"bp": bp,
|
||||
"other": other,
|
||||
)
|
||||
assert_in_dict(document_type, document_types, "document type");
|
||||
map_none(title, (v) => assert_dict_has((language,), v, "title"));
|
||||
map_none(study_programme, (v) => assert_dict_has((language,), v, "study programme"));
|
||||
map_none(study_branch, (v) => assert_dict_has((language,), v, "study branch"));
|
||||
|
||||
|
||||
document_types.at(document_type)(
|
||||
faculty_id,
|
||||
faculty_color(faculty_id),
|
||||
language,
|
||||
assignment_document,
|
||||
map_none(citation_file, (v) => "../../" + v),
|
||||
title,
|
||||
author,
|
||||
author_gender,
|
||||
supervisor,
|
||||
consultant,
|
||||
study_programme,
|
||||
study_branch,
|
||||
abstract,
|
||||
keywords,
|
||||
content,
|
||||
assert_in_dict(req_arg(args, "document.type"), document_types, "document type");
|
||||
map_arg(args, "title", (v) => assert_dict_has((language,), v, "title"));
|
||||
map_arg(args, "author.programme", (v) => assert_dict_has((language,), v, "study programme"));
|
||||
map_arg(
|
||||
args, "author.specialization", (v) => assert_dict_has((language,), v, "study specialization")
|
||||
);
|
||||
map_arg(
|
||||
args, "acknowledgement", (v) => assert_dict_has((language,), v, "acknowledgement content")
|
||||
);
|
||||
|
||||
args.assignment = map_arg(args, "assignment", (v) => {
|
||||
if type(v) == str {
|
||||
"../../" + v
|
||||
} else {
|
||||
v
|
||||
}
|
||||
});
|
||||
args.citations = map_arg(args, "citations", (v) => "../../" + v);
|
||||
args.title_pages = map_arg(args, "title_pages", (v) => "../../" + v);
|
||||
|
||||
args
|
||||
}
|
||||
|
||||
#let template_classic(args, content) = {
|
||||
let args = prep_args(args);
|
||||
|
||||
if not is_none(get_arg(args, "title_pages")) {
|
||||
external_title_pages(req_arg(args, "title_pages"));
|
||||
document_types.at(req_arg(args, "document.type")).at(1)(args, content);
|
||||
} else {
|
||||
document_types.at(req_arg(args, "document.type")).at(0)(args);
|
||||
document_types.at(req_arg(args, "document.type")).at(1)(args, content);
|
||||
}
|
||||
}
|
||||
|
||||
#let title_pages_classic(args) = {
|
||||
let args = prep_args(args);
|
||||
|
||||
document_types.at(req_arg(args, "document.type")).at(0)(args);
|
||||
document_types.at(req_arg(args, "document.type")).at(2)(args);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#import "../theme.typ": faculty_logotype, tul_logomark, faculty_color
|
||||
#import "../lang.typ": get_lang_item
|
||||
#import "../utils.typ": is_none
|
||||
#import "../lang.typ": get_lang_item, set_czech_nonbreakable_terms
|
||||
#import "../utils.typ": is_none, assert_dict_has, has_all_none, map_none
|
||||
#import "../arguments.typ": req_arg, get_arg
|
||||
|
||||
#let base_font = "Inter";
|
||||
#let mono_font = "Noto Sans Mono";
|
||||
@@ -14,7 +15,7 @@
|
||||
|
||||
// TYPST ELEMENT STYLING
|
||||
|
||||
#let default_styling(flip_bonding, faculty_color, content) = {
|
||||
#let default_styling(flip_bonding, faculty_color, content, language) = {
|
||||
// page
|
||||
set page(
|
||||
margin: if flip_bonding {
|
||||
@@ -34,8 +35,11 @@
|
||||
});
|
||||
|
||||
// text
|
||||
set text(font: serif_font);
|
||||
set text(font: base_font);
|
||||
set par(justify: true);
|
||||
if language == "cs" {
|
||||
content = set_czech_nonbreakable_terms(content);
|
||||
}
|
||||
|
||||
// figures
|
||||
let figure_numbering(realcount, c) = {
|
||||
@@ -69,13 +73,28 @@
|
||||
v(2cm);
|
||||
it
|
||||
};
|
||||
show heading.where(): it => {
|
||||
if it.level > 3 {
|
||||
panic("maximum allowed heading level is 3");
|
||||
} else {
|
||||
it
|
||||
}
|
||||
}
|
||||
|
||||
// other
|
||||
show raw: set text(font: mono_font);
|
||||
show raw.where(block: false): set text(font: mono_font, size: 1.25em);
|
||||
show raw.where(block: true): it => {
|
||||
block(it, fill: rgb("#eee"), inset: 1em)
|
||||
};
|
||||
show link: it => {
|
||||
if type(it.dest) == label or type(it.dest) == location {
|
||||
it;
|
||||
} else {
|
||||
text(it, fill: faculty_color);
|
||||
}
|
||||
}
|
||||
set highlight(fill: faculty_color.lighten(90%));
|
||||
set line(stroke: (paint: faculty_color, thickness: .7pt), length: 100%);
|
||||
|
||||
content
|
||||
}
|
||||
@@ -90,20 +109,46 @@
|
||||
);
|
||||
}
|
||||
|
||||
// DOCUMENT INFO
|
||||
// DOCUMENT INFO
|
||||
|
||||
#let info(
|
||||
#let person_info(record, item_name) = {
|
||||
if is_none(record) {
|
||||
none
|
||||
} else if type(record) == str or type(record) == content {
|
||||
record
|
||||
} else if type(record) == dictionary {
|
||||
if "name" in record {
|
||||
record.at("name");
|
||||
if "institute" in record {
|
||||
text("\n " + record.at("institute"), style: "italic")
|
||||
}
|
||||
} else {
|
||||
let panic_message = (
|
||||
item_name + " name is required (or try not specifying " + item_name + " at all)"
|
||||
);
|
||||
panic(panic_message);
|
||||
}
|
||||
} else {
|
||||
let panic_message = "invalid " + item_name + " - expected a string or a dictionary";
|
||||
panic(panic_message);
|
||||
}
|
||||
}
|
||||
|
||||
#let info_base(
|
||||
faculty_id,
|
||||
language,
|
||||
document_type,
|
||||
title, author, supervisor, consultant, study_programme, study_branch,
|
||||
display_document_type,
|
||||
title,
|
||||
info_fields,
|
||||
show_city: true,
|
||||
) = {
|
||||
let info_name_value_padding = 5em;
|
||||
let info_name_min_width = 10em;
|
||||
let gutter = .7em;
|
||||
|
||||
// document type
|
||||
if type(document_type) != type(none) {
|
||||
text(get_lang_item(language, document_type), weight: "bold", font: base_font);
|
||||
if display_document_type != "other" and display_document_type != "other_asgn" {
|
||||
text(get_lang_item(language, display_document_type), weight: "bold", font: base_font);
|
||||
v(0em);
|
||||
}
|
||||
|
||||
@@ -114,15 +159,6 @@
|
||||
);
|
||||
v(0em);
|
||||
|
||||
// other info
|
||||
// [field_name, field_value, bold]
|
||||
let info_fields = (
|
||||
("study_programme", study_programme, false),
|
||||
("study_branch", study_branch, false),
|
||||
("author", author, true),
|
||||
("supervisor", supervisor, false),
|
||||
("consultant", consultant, false),
|
||||
)
|
||||
context {
|
||||
let max_field_name_width = calc.max(..info_fields.map((v) => {
|
||||
if type(v.at(1)) == type(none) {
|
||||
@@ -133,7 +169,7 @@
|
||||
}), info_name_min_width.to-absolute());
|
||||
grid(
|
||||
columns: 2,
|
||||
gutter: .5em,
|
||||
gutter: gutter,
|
||||
..info_fields.filter((v) => { type(v.at(1)) != type(none) }).map((v) => {
|
||||
(
|
||||
align(top, block(
|
||||
@@ -145,47 +181,118 @@
|
||||
}).flatten(),
|
||||
);
|
||||
v(1em);
|
||||
h(max_field_name_width + info_name_value_padding);
|
||||
text(get_lang_item(language, "city") + " " + str(datetime.today().year()), font: base_font);
|
||||
h(max_field_name_width + info_name_value_padding + gutter);
|
||||
if show_city {
|
||||
text(get_lang_item(language, "city") + " " + str(datetime.today().year()), font: base_font);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#let info_mainpage(
|
||||
faculty_id,
|
||||
language,
|
||||
document_type,
|
||||
title, author, supervisor, consultant, study_programme, study_specialization, year_of_study,
|
||||
) = {
|
||||
info_base(faculty_id, language, document_type, title, (
|
||||
("author", author, true),
|
||||
("supervisor", person_info(supervisor, "supervisor"), false),
|
||||
("consultant", person_info(consultant, "consultant"), false),
|
||||
("study_programme", study_programme, false),
|
||||
("study_specialization", study_specialization, false),
|
||||
("year_of_study", year_of_study, false),
|
||||
));
|
||||
}
|
||||
|
||||
#let info_assignment(
|
||||
faculty_id,
|
||||
language,
|
||||
document_type,
|
||||
title, author, personal_number, study_programme, department, academical_year,
|
||||
) = {
|
||||
info_base(faculty_id, language, document_type + "_asgn", title, (
|
||||
("names", author, true),
|
||||
("personal_number", personal_number, false),
|
||||
("study_programme", study_programme, false),
|
||||
("assigning_department", department, false),
|
||||
("academical_year", academical_year, false),
|
||||
), show_city: false);
|
||||
}
|
||||
|
||||
// MAINPAGE
|
||||
|
||||
#let mainpage(
|
||||
faculty_id,
|
||||
language,
|
||||
document_type,
|
||||
title, author, supervisor, consultant, study_programme, study_branch
|
||||
) = {
|
||||
import "../utils.typ": has_all_none, map_none
|
||||
let nonetype = type(none);
|
||||
page({
|
||||
if has_all_none((
|
||||
document_type, title, author, supervisor, consultant, study_programme,
|
||||
)) {
|
||||
place(center + horizon, align(left, faculty_logotype(faculty_id, language)));
|
||||
} else {
|
||||
header(faculty_id, language);
|
||||
align({
|
||||
info(
|
||||
faculty_id, language, document_type, map_none(title, (v) => v.at(language)),
|
||||
author, supervisor, consultant, map_none(study_programme, (v) => v.at(language)),
|
||||
map_none(study_branch, (v) => v.at(language)),
|
||||
);
|
||||
v(5em);
|
||||
}, bottom);
|
||||
}
|
||||
}, margin: 2cm);
|
||||
#let mainpage(args) = {
|
||||
let (
|
||||
language, document_type, faculty,
|
||||
title, author, supervisor, consultant, study_programme, study_specialization, year_of_study,
|
||||
) = get_arg(args, (
|
||||
"document.language",
|
||||
"document.type",
|
||||
"document.faculty",
|
||||
"title",
|
||||
"author.name",
|
||||
"project.supervisor",
|
||||
"project.consultant",
|
||||
"author.programme",
|
||||
"author.specialization",
|
||||
"author.year_of_study",
|
||||
));
|
||||
set text(font: base_font);
|
||||
set page(margin: 2cm);
|
||||
pagebreak(weak: true);
|
||||
if has_all_none((
|
||||
document_type, title, author, supervisor, consultant, study_programme,
|
||||
)) {
|
||||
place(center + horizon, align(left, faculty_logotype(faculty_id, language)));
|
||||
} else {
|
||||
header(faculty, language);
|
||||
align({
|
||||
info_mainpage(
|
||||
faculty, language, document_type, map_none(title, (v) => v.at(language)),
|
||||
author, supervisor, consultant, map_none(study_programme, (v) => v.at(language)),
|
||||
map_none(study_specialization, (v) => v.at(language)), year_of_study,
|
||||
);
|
||||
v(5em);
|
||||
}, bottom);
|
||||
}
|
||||
}
|
||||
|
||||
#let assignmentpage(args, language, document_type, faculty, title, author, programme, content) = {
|
||||
let (personal_number, department, academical_year) = req_arg(args, (
|
||||
"personal_number", "department", "academical_year",
|
||||
));
|
||||
set text(font: base_font);
|
||||
set page(margin: 2cm);
|
||||
pagebreak(weak: true);
|
||||
header(faculty, language);
|
||||
info_assignment(
|
||||
faculty, language, document_type, title.at(language), author, personal_number,
|
||||
programme.at(language), department, academical_year,
|
||||
);
|
||||
show heading: it => {
|
||||
block(it, above: 1em, below: 1em);
|
||||
}
|
||||
content;
|
||||
}
|
||||
|
||||
// _ EMBEDDED
|
||||
|
||||
#let pdfembed(path) = {
|
||||
import "@preview/muchpdf:0.1.1": muchpdf
|
||||
set page(margin: 0em);
|
||||
muchpdf(read(path, encoding: none));
|
||||
}
|
||||
|
||||
// ASSIGNMENT PAGE
|
||||
|
||||
#let assignment(language, document) = {
|
||||
if type(document) == type(none) {
|
||||
#let assignment(args, show_fallback: true) = {
|
||||
if is_none(get_arg(args, "assignment")) {
|
||||
if not show_fallback {
|
||||
return;
|
||||
}
|
||||
page(
|
||||
place(center + horizon, text(
|
||||
get_lang_item(language, "place_assignment"),
|
||||
get_lang_item(req_arg(args, "document.language"), "place_assignment"),
|
||||
fill: red,
|
||||
size: 3em,
|
||||
font: base_font,
|
||||
@@ -196,18 +303,43 @@
|
||||
);
|
||||
return;
|
||||
}
|
||||
import "@preview/muchpdf:0.1.1": muchpdf
|
||||
set page(margin: 0em);
|
||||
muchpdf(read(document, encoding: none));
|
||||
let assignment = req_arg(args, "assignment");
|
||||
if type(assignment) == str {
|
||||
pdfembed(req_arg(args, "assignment"));
|
||||
} else if type(assignment) == content {
|
||||
req_arg(args, "assignment");
|
||||
} else if type(assignment) == dictionary {
|
||||
assignmentpage(
|
||||
assignment,
|
||||
..req_arg(args, (
|
||||
"document.language", "document.type", "document.faculty", "title", "author.name",
|
||||
"author.programme",
|
||||
)),
|
||||
req_arg(assignment, "content"),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// EXTERNAL TITLE PAGES
|
||||
|
||||
#let external_title_pages(path) = {
|
||||
pdfembed(path);
|
||||
}
|
||||
|
||||
// DISCLAIMER PAGE
|
||||
|
||||
#let disclaimer(language, faculty_id, disclaimer_type, author, author_gender) = {
|
||||
#let disclaimer(args) = {
|
||||
import "../lang.typ": disclaimer
|
||||
let (language, faculty, disclaimer_type, author) = req_arg(args, (
|
||||
"document.language",
|
||||
"document.faculty",
|
||||
"document.type",
|
||||
"author.name",
|
||||
));
|
||||
let author_pronouns = get_arg(args, "author.pronouns");
|
||||
heading(get_lang_item(language, "disclaimer"), numbering: none, outlined: false);
|
||||
par(
|
||||
text(disclaimer(language, disclaimer_type, author_gender))
|
||||
text(disclaimer(language, disclaimer_type, author_pronouns))
|
||||
);
|
||||
v(5em);
|
||||
grid(
|
||||
@@ -220,10 +352,34 @@
|
||||
);
|
||||
}
|
||||
|
||||
// ACKNOWLEDGEMENT PAGE
|
||||
|
||||
#let acknowledgement(args) = {
|
||||
let content = get_arg(args, "acknowledgement");
|
||||
let (language, author) = req_arg(args, ("document.language", "author.name"));
|
||||
if is_none(content) {
|
||||
return;
|
||||
}
|
||||
heading(get_lang_item(language, "acknowledgement"), numbering: none, outlined: false);
|
||||
par(content.at(language));
|
||||
v(2em);
|
||||
align(right, author);
|
||||
}
|
||||
|
||||
// ABSTRACT
|
||||
|
||||
#let abstract(language, title, content, keywords) = {
|
||||
heading(text(title.at(language), font: base_font), numbering: none, outlined: false);
|
||||
#let display_keywords(keywords) = {
|
||||
if type(keywords) == array {
|
||||
keywords.join(", ")
|
||||
} else if type(keywords) == str or type(keywords) == content {
|
||||
keywords
|
||||
}
|
||||
}
|
||||
|
||||
#let abstract(language, args) = {
|
||||
heading(
|
||||
text(req_arg(args, "title").at(language), font: base_font), numbering: none, outlined: false
|
||||
);
|
||||
v(2em);
|
||||
heading(
|
||||
level: 2,
|
||||
@@ -231,12 +387,13 @@
|
||||
numbering: none,
|
||||
outlined: false,
|
||||
);
|
||||
text(content.at(language));
|
||||
text(req_arg(args, "abstract.content").at(language));
|
||||
let keywords = get_arg(args, "abstract.keywords");
|
||||
if not is_none(keywords) and type(keywords.at(language)) != type(none) {
|
||||
linebreak();
|
||||
linebreak();
|
||||
text(get_lang_item(language, "keywords") + ": ", weight: "bold", font: base_font);
|
||||
text(keywords.at(language).join(", "));
|
||||
display_keywords(keywords.at(language))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -311,7 +468,12 @@
|
||||
gutter: 1em,
|
||||
..abbrs.pairs().map((a) => {
|
||||
(
|
||||
align(left, block(text(a.at(0), weight: "bold"), width: max_abbr_width + 1em)),
|
||||
align(left, {
|
||||
[
|
||||
#block(text(a.at(0), weight: "bold"), width: max_abbr_width + 1em)
|
||||
#label("abbr_" + a.at(0))
|
||||
]
|
||||
}),
|
||||
text(a.at(1))
|
||||
)
|
||||
}).flatten()
|
||||
@@ -326,17 +488,29 @@
|
||||
show repeat: none;
|
||||
block(text(it, weight: "bold", size: 1.2em), above: 1.5em);
|
||||
};
|
||||
outline(title: get_lang_item(language, "toc"));
|
||||
context {
|
||||
if query(heading.where(bookmarked: true)).len() > 0 {
|
||||
outline(title: get_lang_item(language, "toc"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// BIBLIOGRAPHY
|
||||
|
||||
#let bibliogr(language, citations_file) = {
|
||||
if language == "cs" {
|
||||
bibliography(citations_file, style: "../tul_citace.csl");
|
||||
} else if language == "en" {
|
||||
bibliography(citations_file, style: "iso-690-numeric");
|
||||
} else {
|
||||
panic("unknown language for bibliography '" + language + "'");
|
||||
#let bibliogr(args) = {
|
||||
let (language, citations_file) = req_arg(args, ("document.language", "citations"));
|
||||
let styles = (
|
||||
"cs": "../citations/tul-csn690-numeric-square_brackets.csl",
|
||||
"en": "../citations/iso690-numeric-square_brackets.csl",
|
||||
);
|
||||
let style = styles.at(language);
|
||||
context {
|
||||
if query(ref.where(element: none)).len() > 0 {
|
||||
bibliography(
|
||||
citations_file,
|
||||
style: style,
|
||||
title: get_lang_item(language, "bibliography"),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
18
template/classic/dp.typ
Normal file
18
template/classic/dp.typ
Normal file
@@ -0,0 +1,18 @@
|
||||
#import "../arguments.typ": req_arg, get_arg, map_arg
|
||||
#import "../utils.typ": assert_dict_has, is_none
|
||||
#import "common.typ": mainpage, assignment, external_title_pages
|
||||
|
||||
#let dp(args) = {
|
||||
let language = req_arg(args, "document.language");
|
||||
let programme = req_arg(args, "author.programme");
|
||||
assert_dict_has((language,), programme, "study programme");
|
||||
map_arg(args, "author.specialization", (v) => {
|
||||
assert_dict_has((language,), v, "study specialization");
|
||||
});
|
||||
if language == "cs" {
|
||||
let _ = req_arg(args, "author.pronouns");
|
||||
}
|
||||
|
||||
mainpage(args);
|
||||
assignment(args);
|
||||
}
|
||||
@@ -9,31 +9,30 @@
|
||||
abbrlist,
|
||||
imagelist,
|
||||
tablelist,
|
||||
bibliogr,
|
||||
)
|
||||
#import "../attachments.typ": attachment_list
|
||||
#import "../utils.typ": is_none, assert_not_none, assert_dict_has, assert_in_arr
|
||||
#import "../arguments.typ": req_arg
|
||||
#import "../theme.typ": faculty_color
|
||||
|
||||
#let other(
|
||||
// general settings
|
||||
faculty_id, faculty_color, language, assignment_document, citation_file,
|
||||
|
||||
// document info
|
||||
title, author, _, supervisor, consultant, study_programme, study_branch, abstract_content, keywords,
|
||||
|
||||
content
|
||||
) = {
|
||||
assert_not_none(title, "title");
|
||||
#let other_title_page(args) = {
|
||||
let (language, title) = req_arg(args, ("document.language", "title"));
|
||||
assert_dict_has((language,), title, "title");
|
||||
mainpage(args);
|
||||
}
|
||||
|
||||
mainpage(faculty_id, language, none, title, author, supervisor, consultant, study_programme, study_branch);
|
||||
default_styling(true, faculty_color, {
|
||||
#let other_base(args, content) = {
|
||||
let (language, title) = req_arg(args, ("document.language", "title"));
|
||||
|
||||
default_styling(true, faculty_color(req_arg(args, "document.faculty")), {
|
||||
toc(language);
|
||||
abbrlist(language);
|
||||
imagelist(language);
|
||||
tablelist(language);
|
||||
imagelist(language);
|
||||
abbrlist(language);
|
||||
pagebreak(to: "even", weak: true);
|
||||
content;
|
||||
bibliography(citation_file, style: "../tul_citace.csl");
|
||||
bibliogr(args);
|
||||
attachment_list(language);
|
||||
});
|
||||
}, language);
|
||||
}
|
||||
|
||||
17
template/classic/prj.typ
Normal file
17
template/classic/prj.typ
Normal file
@@ -0,0 +1,17 @@
|
||||
#import "../arguments.typ": req_arg, get_arg
|
||||
#import "../utils.typ": assert_dict_has, is_none
|
||||
#import "common.typ": mainpage, assignment, external_title_pages
|
||||
|
||||
#let prj(args) = {
|
||||
let language = req_arg(args, "document.language");
|
||||
let programme = req_arg(args, "author.programme");
|
||||
assert_dict_has((language,), programme, "study programme");
|
||||
let specialization = req_arg(args, "author.specialization");
|
||||
assert_dict_has((language,), specialization, "study specialization");
|
||||
if language == "cs" {
|
||||
let _ = req_arg(args, "author.pronouns");
|
||||
}
|
||||
|
||||
mainpage(args);
|
||||
assignment(args, show_fallback: false);
|
||||
}
|
||||
50
template/classic/thesis_base.typ
Normal file
50
template/classic/thesis_base.typ
Normal file
@@ -0,0 +1,50 @@
|
||||
#import "../theme.typ": faculty_color
|
||||
#import "../arguments.typ": get_arg, req_arg
|
||||
#import "../utils.typ": is_none, assert_dict_has
|
||||
#import "common.typ": (
|
||||
default_styling,
|
||||
disclaimer,
|
||||
abstract,
|
||||
acknowledgement,
|
||||
toc,
|
||||
tablelist,
|
||||
imagelist,
|
||||
abbrlist,
|
||||
bibliogr,
|
||||
)
|
||||
#import "../attachments.typ": attachment_list
|
||||
|
||||
#let force_langs = ("cs", "en");
|
||||
|
||||
#let thesis_base(args, content) = {
|
||||
assert_dict_has(force_langs, req_arg(args, "title"), "title");
|
||||
assert_dict_has(force_langs, req_arg(args, "abstract.content"), "abstract");
|
||||
assert_dict_has(force_langs, req_arg(args, "abstract.keywords"), "keywords");
|
||||
|
||||
let language = req_arg(args, "document.language");
|
||||
default_styling(false, faculty_color(req_arg(args, "document.faculty")), {
|
||||
if is_none(get_arg(args, "title_pages")) {
|
||||
disclaimer(args);
|
||||
}
|
||||
abstract("cs", args);
|
||||
abstract("en", args);
|
||||
acknowledgement(args);
|
||||
toc(language);
|
||||
tablelist(language);
|
||||
imagelist(language);
|
||||
abbrlist(language);
|
||||
pagebreak(weak: true);
|
||||
content;
|
||||
bibliogr(args);
|
||||
attachment_list(language);
|
||||
}, language);
|
||||
}
|
||||
|
||||
#let thesis_base_title_pages(args) = {
|
||||
let language = req_arg(args, "document.language");
|
||||
default_styling(false, faculty_color(req_arg(args, "document.faculty")), {
|
||||
if is_none(get_arg(args, "title_pages")) {
|
||||
disclaimer(args);
|
||||
}
|
||||
}, language);
|
||||
}
|
||||
@@ -5,16 +5,27 @@
|
||||
"supervisor": "Vedoucí práce",
|
||||
"consultant": "Konzultant práce",
|
||||
"study_programme": "Studijní program",
|
||||
"study_branch": "Studijní obor",
|
||||
"study_specialization": "Specializace",
|
||||
"year_of_study": "Ročník",
|
||||
"names": "Jméno a příjmení",
|
||||
"assigning_department": "Zadávající katedra",
|
||||
"personal_number": "Osobní číslo",
|
||||
"academical_year": "Akademický rok",
|
||||
|
||||
"bp": "Bakalářská práce",
|
||||
"bp_asgn": "Zadání bakalářské práce",
|
||||
"dp": "Diplomová práce",
|
||||
"dp_asgn": "Zadání diplomové práce",
|
||||
"prj": "Projekt",
|
||||
"prj_asgn": "Zadání projektu",
|
||||
|
||||
"city": "Liberec",
|
||||
|
||||
"toc": "Obsah",
|
||||
"bibliography": "Použitá literatura",
|
||||
|
||||
"disclaimer": "Prohlášení",
|
||||
"disclaimer_content": "Prohlašuj{g:i|i|eme}, že {svůj} {práce:tu} js{g:em|em|me} vypracoval{g:|a|i} samostatně jako původní dílo s použitím uvedené literatury a na základě konzultací s vedoucím {{g:mé|mé|naší}} bakalářské práce a konzultantem.\n\nJs{g:em|em|me} si vědom{g:|a|i} toho, že na {{g:moji|moji|naši}} {práce:tu} se plně vztahuje zákon č. 121/2000 Sb., o právu autorském, zejména § 60 – školní dílo.\n\nBer{g:u|u|eme} na vědomí, že Technická univerzita v Liberci nezasahuje do {g:mých|mých|našich} autorských práv užitím {{g:mé|mé|naší}} {práce:té} pro vnitřní potřebu Technické univerzity v Liberci.\n\nUžij{g:i|i|eme}-li {práce:tu} nebo poskytn{g:u|u|eme}-li licenci k {jejímu} využití, js{g:em|em|me} si vědom{g:|a|i} povinnosti informovat o této skutečnosti Technickou univerzitu v Liberci; v tomto případě má Technická univerzita v Liberci právo od{g:e|e|} {g:mne|mne|nás} požadovat úhradu nákladů, které vynaložila na vytvoření díla, až do jejich skutečné výše.\n\nSoučasně čestně prohlašuj{g:i|i|eme}, že text elektronické podoby práce vložený do IS/STAG se shoduje s textem tištěné podoby práce.\n\nBer{g:u|u|eme} na vědomí, že {{g:můj|můj|naše}} {práce:ta} bude {zveřejněn} Technickou univerzitou v Liberci v souladu s § 47b zákona č. 111/1998 Sb., o vysokých školách a o změně a doplnění dalších zákonů (zákon o vysokých školách), ve znění pozdějších předpisů.\n\nJs{g:em|em|me} si vědom{g:|a|i} následků, které podle zákona o vysokých školách mohou vyplývat z porušení tohoto prohlášení.",
|
||||
"disclaimer_content": "Prohlašuj{g:i|i|eme}, že {svůj} {práce:tu} js{g:em|em|me} vypracoval{g:|a|i} samostatně jako původní dílo s použitím uvedené literatury a na základě konzultací s vedoucím {{g:mé|mé|naší}} {práce:té} a konzultantem.\n\nJs{g:em|em|me} si vědom{g:|a|i} toho, že na {{g:moji|moji|naši}} {práce:tu} se plně vztahuje zákon č. 121/2000 Sb., o právu autorském, zejména § 60 – školní dílo.\n\nBer{g:u|u|eme} na vědomí, že Technická univerzita v Liberci nezasahuje do {g:mých|mých|našich} autorských práv užitím {{g:mé|mé|naší}} {práce:té} pro vnitřní potřebu Technické univerzity v Liberci.\n\nUžij{g:i|i|eme}-li {práce:tu} nebo poskytn{g:u|u|eme}-li licenci k {jejímu} využití, js{g:em|em|me} si vědom{g:|a|i} povinnosti informovat o této skutečnosti Technickou univerzitu v Liberci; v tomto případě má Technická univerzita v Liberci právo od{g:e|e|} {g:mne|mne|nás} požadovat úhradu nákladů, které vynaložila na vytvoření díla, až do jejich skutečné výše.\n\nSoučasně čestně prohlašuj{g:i|i|eme}, že text elektronické podoby práce vložený do IS/STAG se shoduje s textem tištěné podoby práce.\n\nBer{g:u|u|eme} na vědomí, že {{g:můj|můj|naše}} {práce:ta} bude {zveřejněn} Technickou univerzitou v Liberci v souladu s § 47b zákona č. 111/1998 Sb., o vysokých školách a o změně a doplnění dalších zákonů (zákon o vysokých školách), ve znění pozdějších předpisů.\n\nJs{g:em|em|me} si vědom{g:|a|i} následků, které podle zákona o vysokých školách mohou vyplývat z porušení tohoto prohlášení.",
|
||||
|
||||
"disclaimer_replace": {
|
||||
"bp": {
|
||||
@@ -30,12 +41,43 @@
|
||||
"svůj": "svoji",
|
||||
"jejímu": "jejímu",
|
||||
"zveřejněn": "zveřejněna"
|
||||
},
|
||||
|
||||
"dp": {
|
||||
"práce:ta": "diplomová práce",
|
||||
"práce:tu": "diplomovou práci",
|
||||
"práce:té": "diplomové práce",
|
||||
"moji": "moji",
|
||||
"naše": "naše",
|
||||
"naši": "naši",
|
||||
"naší": "naší",
|
||||
"mé": "mé",
|
||||
"můj": "moje",
|
||||
"svůj": "svoji",
|
||||
"jejímu": "jejímu",
|
||||
"zveřejněn": "zveřejněna"
|
||||
},
|
||||
|
||||
"prj": {
|
||||
"práce:ta": "projekt",
|
||||
"práce:tu": "projekt",
|
||||
"práce:té": "projektu",
|
||||
"moji": "můj",
|
||||
"naše": "náš",
|
||||
"naši": "náš",
|
||||
"naší": "náš",
|
||||
"mé": "mého",
|
||||
"můj": "můj",
|
||||
"svůj": "svůj",
|
||||
"jejímu": "jeho",
|
||||
"zveřejněn": "zveřejněn"
|
||||
}
|
||||
},
|
||||
|
||||
"date": "[day]. [month]. [year]",
|
||||
|
||||
"abstract": "Abstrakt",
|
||||
"acknowledgement": "Poděkování",
|
||||
"keywords": "Klíčová slova",
|
||||
"abbrs": "Seznam zkratek",
|
||||
"image_list": "Seznam obrázků",
|
||||
@@ -45,7 +87,21 @@
|
||||
"next_page_attachment": "začíná na další straně",
|
||||
"attached_bellow": "dále přiloženo",
|
||||
|
||||
"place_assignment": "Sem vložte zadání"
|
||||
"place_assignment": "Sem vložte zadání",
|
||||
|
||||
"break_rules": {
|
||||
"space_after": [
|
||||
"((?i)[kosuvzai])",
|
||||
"(tj|tzv|tzn)\\."
|
||||
],
|
||||
"nonbreaking_terms": [
|
||||
"(s\\. r\\. o|a\\. s|v\\. o\\. s)\\.",
|
||||
"č\\. ([pe]|ev)\\.",
|
||||
"ev?\\. č\\.",
|
||||
"(?i)Technická univerzita v Liberci\\b",
|
||||
"(?i)Česká republika\\b"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
"en": {
|
||||
@@ -54,13 +110,24 @@
|
||||
"supervisor": "Supervisor",
|
||||
"consultant": "Consultant",
|
||||
"study_programme": "Study programme",
|
||||
"study_branch": "Study branch",
|
||||
"study_specialization": "Specialization",
|
||||
"year_of_study": "Year of study",
|
||||
"names": "Name",
|
||||
"assigning_department": "Assigning department",
|
||||
"personal_number": "Personal number",
|
||||
"academical_year": "Academical year",
|
||||
|
||||
"bp": "Bachelor thesis",
|
||||
"bp_asgn": "Bachelor thesis assignment",
|
||||
"dp": "Diploma thesis",
|
||||
"dp_asgn": "Diploma thesis assignment",
|
||||
"prj": "Project",
|
||||
"prj_asgn": "Project assignment",
|
||||
|
||||
"city": "Liberec",
|
||||
|
||||
"toc": "Contents",
|
||||
"bibliography": "Bibliography",
|
||||
|
||||
"disclaimer": "Declaration",
|
||||
"disclaimer_content": "{g:I|We} hereby certify, {g:I|we}, {g:myself|ourselves}, have written {g:my|our} {thesis} as an original and primary work using the literature listed below and consulting it with {g:my|our} thesis supervisor and {g:my|our} thesis counsellor.\n\n{g:I|We} acknowledge that {g:my|our} {thesis} is fully governed by Act No. 121/2000 Coll., the Copyright Act, in particular Article 60 – School Work.\n\n{g:I|We} acknowledge that the Technical University of Liberec does not infringe {g:my|our} copyrights by using {g:my|our} {thesis} for internal purposes of the Technical University of Liberec.\n\n{g:I|We} {g:am|are} aware of {g:my|our} obligation to inform the Technical University of Liberec on having used or granted license to use the results of {g:my|our} {thesis}; in such a case the Technical University of Liberec may require reimbursement of the costs incurred for creating the result up to their actual amount.\n\nAt the same time, {g:I|we} honestly declare that the text of the printed version of {g:my|our} {thesis} is identical with the text of the electronic version uploaded into the IS STAG.\n\n{g:I|We} acknowledge that the Technical University of Liberec will make {g:my|our} {thesis} public in accordance with paragraph 47b of Act No. 111/1998 Coll., on Higher Education Institutions and on Amendment to Other Acts (the Higher Education Act), as amended.\n\n{g:I|We} {g:am|are} aware of the consequences which may under the Higher Education Act result from a breach of this declaration.",
|
||||
@@ -68,12 +135,21 @@
|
||||
"disclaimer_replace": {
|
||||
"bp": {
|
||||
"thesis": "bachelor thesis"
|
||||
},
|
||||
|
||||
"dp": {
|
||||
"thesis": "diploma thesis"
|
||||
},
|
||||
|
||||
"prj": {
|
||||
"thesis": "project"
|
||||
}
|
||||
},
|
||||
|
||||
"date": "[year]-[month]-[day]",
|
||||
|
||||
"abstract": "Abstract",
|
||||
"acknowledgement": "Acknowledgement",
|
||||
"keywords": "Keywords",
|
||||
"abbrs": "List of abbreviations",
|
||||
"image_list": "List of images",
|
||||
|
||||
@@ -45,13 +45,40 @@
|
||||
});
|
||||
}
|
||||
|
||||
#let disclaimer(language, document_type, author_gender) = {
|
||||
#let set_czech_nonbreakable_terms(content) = {
|
||||
let rules = get_lang_item("cs", "break_rules");
|
||||
let space_after = rules.at("space_after");
|
||||
let nonbreaking_terms = rules.at("nonbreaking_terms");
|
||||
|
||||
let terms = "\b(" + nonbreaking_terms.join("|") + ")";
|
||||
let chain = (
|
||||
"\b((" + space_after.join("|") + ") )+" +
|
||||
"(" + terms + "|\w+\b)"
|
||||
);
|
||||
|
||||
let apply_rules(exprs: ("",), content) = {
|
||||
let res = content;
|
||||
for expr in exprs {
|
||||
res = {
|
||||
show regex(expr): box;
|
||||
res;
|
||||
};
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
show heading: apply_rules.with(exprs: (chain, terms));
|
||||
show par: apply_rules.with(exprs: (chain, terms));
|
||||
content
|
||||
}
|
||||
|
||||
#let disclaimer(language, document_type, author_pronouns) = {
|
||||
let disclaimer = get_lang_item(language, "disclaimer_content");
|
||||
let replacements = get_lang_item(language, "disclaimer_replace").at(document_type);
|
||||
if language == "cs" {
|
||||
disclaimer = replace_czech_gender(disclaimer, author_gender);
|
||||
disclaimer = replace_czech_gender(disclaimer, author_pronouns);
|
||||
} else if language == "en" {
|
||||
disclaimer = replace_english_pronounce(disclaimer, author_gender);
|
||||
disclaimer = replace_english_pronounce(disclaimer, author_pronouns);
|
||||
}
|
||||
for (key, value) in replacements.pairs() {
|
||||
disclaimer = disclaimer.replace("{" + key + "}", value);
|
||||
|
||||
@@ -26,11 +26,15 @@
|
||||
// - faculty (str): Factulty abbreviation. One of "fs", "ft", "fp", "ef", "fua", "fm", "fzs", "cxi".
|
||||
// - lang (str): Language code. This can be "cs" or "en".
|
||||
// - document (str): Type of document. This can be "bp" or "other".
|
||||
// - title_pages (str): The title pages exported from STAG (supported for some document types)
|
||||
// - title (dictionary): The title of the document.
|
||||
// - author (str): The name of the document's author.
|
||||
// - author_gender (str): The gender of the document's author. Needed only for the `cs` language.
|
||||
// - author_pronouns (str): The gender of the document's author. Needed only for the `cs` language.
|
||||
// - supervisor (str): The name of the document's supervisor.
|
||||
// - consultant (str): The name of the document's consultant.
|
||||
// - programme (dictionary): Study programme.
|
||||
// - specialization (disctionary): Study specialization
|
||||
// - year_of_study (int): Year of study
|
||||
// - abstract (dictionary): The abstract.
|
||||
// - keywords (dictionary): The abstract keywords.
|
||||
// - assignment (str): Filepath of the assignment document/page.
|
||||
@@ -43,8 +47,10 @@
|
||||
style: "classic", faculty: "tul", lang: "cs", document: "other",
|
||||
|
||||
// document info
|
||||
title: none, keywords: none, abstract: none, author: none, author_gender: none,
|
||||
supervisor: none, consultant: none, programme: none, branch: none,
|
||||
title_pages: none,
|
||||
title: none, keywords: none, abstract: none, acknowledgement: none, author: none,
|
||||
author_pronouns: none, supervisor: none, consultant: none, programme: none,
|
||||
specialization: none, year_of_study: none,
|
||||
|
||||
// links
|
||||
assignment: none, citations: "citations.bib",
|
||||
@@ -52,28 +58,30 @@
|
||||
// content
|
||||
content,
|
||||
) = {
|
||||
import "utils.typ": assert_in_dict, assert_type_signature
|
||||
import "arguments.typ": (
|
||||
arguments,
|
||||
document_info,
|
||||
author_info,
|
||||
project_info,
|
||||
abstract_info,
|
||||
check_arguments,
|
||||
req_arg,
|
||||
)
|
||||
|
||||
// argument checking
|
||||
assert_type_signature(style, "string", "visual style argument");
|
||||
assert_type_signature(faculty, "string", "faculty id argument");
|
||||
assert_type_signature(lang, "string", "language abbreviation argument");
|
||||
assert_type_signature(document, "string | none", "document kind argument");
|
||||
assert_type_signature(title, "dictionary[string : string] | none", "title argument");
|
||||
assert_type_signature(keywords, "dictionary[string : array[string]] | none", "keywords argument");
|
||||
assert_type_signature(
|
||||
abstract, "dictionary[string : string | content] | none", "abstract argument"
|
||||
let args = arguments(
|
||||
document_info(style, faculty, lang, document),
|
||||
title_pages,
|
||||
title,
|
||||
author_info(author, author_pronouns, programme, specialization, year_of_study),
|
||||
project_info(supervisor, consultant),
|
||||
abstract_info(abstract, keywords),
|
||||
acknowledgement,
|
||||
assignment,
|
||||
citations,
|
||||
);
|
||||
assert_type_signature(author, "string | none", "author argument");
|
||||
assert_type_signature(author_gender, "string | none", "author gender argument");
|
||||
assert_type_signature(supervisor, "string | none", "supervisor argument");
|
||||
assert_type_signature(consultant, "string | none", "consultant argument");
|
||||
assert_type_signature(
|
||||
programme, "dictionary[string : string] | none", "study programme argument"
|
||||
);
|
||||
assert_type_signature(branch, "dictionary[string : string] | none", "study branch argument");
|
||||
assert_type_signature(assignment, "string | none", "assignment document argument");
|
||||
assert_type_signature(citations, "string", "citations file argument");
|
||||
check_arguments(args);
|
||||
|
||||
import "utils.typ": assert_in_dict, assert_type_signature
|
||||
|
||||
// templates
|
||||
import "classic/classic.typ": template_classic
|
||||
@@ -88,16 +96,56 @@
|
||||
set text(lang: lang);
|
||||
|
||||
// template call
|
||||
templates.at(style)(
|
||||
lang, faculty, document, citations, assignment,
|
||||
title, author, author_gender, supervisor, consultant,
|
||||
programme, branch, abstract, keywords, content
|
||||
);
|
||||
templates.at(style)(args, content);
|
||||
|
||||
import "prototyping.typ": assert_release_ready
|
||||
assert_release_ready();
|
||||
}
|
||||
|
||||
#let tultitlepages2(
|
||||
style: "classic", faculty: "tul", lang: "cs", document: "other",
|
||||
|
||||
title: none, author: none,
|
||||
author_pronouns: none, supervisor: none, consultant: none, programme: none,
|
||||
specialization: none, year_of_study: none,
|
||||
|
||||
assignment: none,
|
||||
) = {
|
||||
import "arguments.typ": (
|
||||
arguments,
|
||||
document_info,
|
||||
author_info,
|
||||
project_info,
|
||||
abstract_info,
|
||||
check_arguments,
|
||||
req_arg,
|
||||
)
|
||||
let args = arguments(
|
||||
document_info(style, faculty, lang, document),
|
||||
none,
|
||||
title,
|
||||
author_info(author, author_pronouns, programme, specialization, year_of_study),
|
||||
project_info(supervisor, consultant),
|
||||
abstract_info(none, none),
|
||||
none,
|
||||
assignment,
|
||||
"",
|
||||
);
|
||||
check_arguments(args);
|
||||
import "utils.typ": assert_in_dict, assert_type_signature
|
||||
import "classic/classic.typ": title_pages_classic
|
||||
let title_pages = (
|
||||
classic: title_pages_classic,
|
||||
);
|
||||
assert_in_dict(style, title_pages, "template name");
|
||||
|
||||
import "lang.typ": lang_ids
|
||||
assert_in_dict(lang, lang_ids, "language abbreviation");
|
||||
set text(lang: lang);
|
||||
|
||||
title_pages.at(style)(args);
|
||||
}
|
||||
|
||||
// Make a new abbreviation
|
||||
//
|
||||
// - abbreviation (str): The abbreviation
|
||||
|
||||
298
template/type_signature.typ
Normal file
298
template/type_signature.typ
Normal file
@@ -0,0 +1,298 @@
|
||||
#let doc(inner, argument_name, explanation) = {
|
||||
inner.doc = (argname: argument_name, expl: explanation);
|
||||
inner
|
||||
}
|
||||
|
||||
#let type_primitive(id, name, cs_name) = {
|
||||
(type: "primitive", type_id: id, type_name: name, type_name_cs: cs_name)
|
||||
}
|
||||
|
||||
#let int = type_primitive("integer", "an 'integer'", "celé číslo");
|
||||
#let float = type_primitive("float", "a 'float'", "desetinné číslo");
|
||||
#let bool = type_primitive("boolean", "a 'boolean'", "pravdivostní hodnota");
|
||||
#let string = type_primitive("string", "a 'string'", "textový řetězec");
|
||||
#let content = type_primitive("content", "a 'content'", "obsah generovaný Typst syntaxí");
|
||||
|
||||
#let literal(value) = {
|
||||
(type: "literal", value: value)
|
||||
}
|
||||
|
||||
#let variants(..variants) = {
|
||||
(type: "variants", variants: variants.pos())
|
||||
}
|
||||
|
||||
#let slice(items) = {
|
||||
(type: "slice", items: items)
|
||||
}
|
||||
|
||||
#let tuple(..items) = {
|
||||
(type: "tuple", items: items.pos())
|
||||
}
|
||||
|
||||
#let keyval(key, val) = {
|
||||
(type: "keyval", key: key, val: val)
|
||||
}
|
||||
|
||||
#let dict(keyval) = {
|
||||
(type: "dictionary", key: keyval.key, val: keyval.val)
|
||||
}
|
||||
|
||||
#let struct(..keyvals) = {
|
||||
let copy_doc(from, to) = {
|
||||
if "doc" in from {
|
||||
let to = to;
|
||||
to.doc = from.doc;
|
||||
to
|
||||
} else {
|
||||
to
|
||||
}
|
||||
}
|
||||
|
||||
let keyvals = keyvals.pos();
|
||||
let res = ().to-dict();
|
||||
for keyval in keyvals {
|
||||
if keyval.key.type != "literal" {
|
||||
panic("invalid type signature, struct keys must be literals");
|
||||
}
|
||||
res.insert(keyval.key.value, copy_doc(keyval, keyval.val));
|
||||
}
|
||||
(type: "struct", pairs: res)
|
||||
}
|
||||
|
||||
#let signature_check(value, signature, name_prefix) = {
|
||||
let error_target_name(target, name_prefix) = {
|
||||
name_prefix + if "doc" in target { " ('" + target.doc.argname + "')" } else { "" }
|
||||
}
|
||||
|
||||
let error_value_name(value) = {
|
||||
str(type(value))
|
||||
}
|
||||
|
||||
let dbg_literal(literal) = {
|
||||
if type(literal) == str {
|
||||
"\"" + literal + "\""
|
||||
} else {
|
||||
"'" + str(literal) + "'"
|
||||
}
|
||||
}
|
||||
|
||||
let error_expected_type(target) = {
|
||||
if target.type == "variants" {
|
||||
let variants = target.variants;
|
||||
let last = variants.pop();
|
||||
let res = (variants.map((v) => { error_expected_type(v) })).join(", ");
|
||||
if type(last) != type(none) {
|
||||
if type(res) != type(none) {
|
||||
res + " or " + error_expected_type(last)
|
||||
} else {
|
||||
error_expected_type(last)
|
||||
}
|
||||
} else {
|
||||
res
|
||||
}
|
||||
} else if target.type == "slice" or target.type == "tuple" {
|
||||
"an array"
|
||||
} else if target.type == "dictionary" or target.type == "struct" {
|
||||
"a dictionary/hashmap"
|
||||
} else if target.type == "primitive" {
|
||||
target.type_name
|
||||
} else if target.type == "literal" {
|
||||
dbg_literal(target.value)
|
||||
} else {
|
||||
panic();
|
||||
}
|
||||
}
|
||||
|
||||
let error(target, name_prefix, value, is_value: false, target_doc: none) = {
|
||||
if type(target_doc) != type(none) {
|
||||
error_target_name(target_doc)
|
||||
} else {
|
||||
error_target_name(target, name_prefix)
|
||||
} + " " + if is_value {
|
||||
"is unexpected"
|
||||
} else {
|
||||
"has an unexpected type '" + error_value_name(value) + "'"
|
||||
} + ", expected " + error_expected_type(target)
|
||||
}
|
||||
|
||||
let in_variants(value, variants, matcher) = {
|
||||
for variant in variants {
|
||||
if matcher(value, variant).at(0) == true {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
let matches_type(value, target, name_prefix: "") = {
|
||||
if target.type == "variants" {
|
||||
return if in_variants(value, target.variants, matches_type.with(name_prefix: name_prefix)) {
|
||||
(true,)
|
||||
} else {
|
||||
(false, error(target, name_prefix, value, is_value: true))
|
||||
}
|
||||
} else if target.type == "literal" {
|
||||
return if value != target.value {
|
||||
(false, error(target, name_prefix, value, is_value: true))
|
||||
} else {
|
||||
(true,)
|
||||
}
|
||||
}
|
||||
if type(value) == dictionary {
|
||||
if target.type == "struct" {
|
||||
for key in target.pairs.keys() {
|
||||
if key not in value {
|
||||
return (false, (
|
||||
error_target_name(target, name_prefix) +
|
||||
" is missing an entry for key " +
|
||||
dbg_literal(key)
|
||||
));
|
||||
}
|
||||
}
|
||||
for (key, val) in value.pairs() {
|
||||
if key not in target.pairs {
|
||||
return (
|
||||
false, name_prefix + " contains an unexpected key " + dbg_literal(key)
|
||||
);
|
||||
}
|
||||
matches_type(
|
||||
val, target.pairs.at(key), name_prefix: name_prefix + " " + str(key)
|
||||
)
|
||||
}
|
||||
} else if target.type == "dictionary" {
|
||||
for (key, val) in value.pairs() {
|
||||
let cur = matches_type(key, target.key, name_prefix: name_prefix + " key");
|
||||
if not cur.at(0) {
|
||||
return cur;
|
||||
}
|
||||
let cur = matches_type(
|
||||
val, target.val, name_prefix: name_prefix + " value"
|
||||
);
|
||||
if not cur.at(0) {
|
||||
return cur;
|
||||
}
|
||||
}
|
||||
(true,)
|
||||
} else {
|
||||
(false, error(target, name_prefix, value))
|
||||
}
|
||||
} else if type(value) == array {
|
||||
if target.type == "slice" {
|
||||
for (idx, val) in value.enumerate() {
|
||||
let cur = matches_type(
|
||||
val, target.items, name_prefix: name_prefix + " item at index " + str(idx)
|
||||
);
|
||||
if not cur.at(0) {
|
||||
return cur;
|
||||
}
|
||||
}
|
||||
(true,)
|
||||
} else if target.type == "tuple" {
|
||||
for (idx, target) in target.items.enumerate() {
|
||||
if idx >= value.len() {
|
||||
return (false, name_prefix + " is missing an item: " + error_expected_type(target))
|
||||
}
|
||||
let cur = matches_type(
|
||||
value.at(idx), target, name_prefix: name_prefix + " item at index " + str(idx)
|
||||
);
|
||||
if not cur.at(0) {
|
||||
return cur;
|
||||
}
|
||||
}
|
||||
(true,)
|
||||
} else {
|
||||
(false, error(target, name_prefix, value))
|
||||
}
|
||||
} else {
|
||||
if target.type != "primitive" or str(type(value)) != target.type_id {
|
||||
(false, error(target, name_prefix, value))
|
||||
} else {
|
||||
(true,)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
matches_type(value, signature, name_prefix: name_prefix)
|
||||
}
|
||||
|
||||
#let signature_docs(target, is_nested: false) = {
|
||||
let typeinfo(target, flatten: false, disable_doc: false) = {
|
||||
let try_doc(target, mapper: (v) => { v }) = {
|
||||
if "doc" in target and not disable_doc {
|
||||
mapper(target.doc.expl);
|
||||
} else {
|
||||
""
|
||||
}
|
||||
}
|
||||
|
||||
if target.type == "struct" {
|
||||
if not flatten {
|
||||
[slovník s přesnými atributy (_dictionary_)];
|
||||
try_doc(target, mapper: (v) => { [ -- ]; v; });
|
||||
":";
|
||||
}
|
||||
list(
|
||||
..target.pairs.pairs().map(((key, val)) => {
|
||||
raw(key);
|
||||
try_doc(val, mapper: (v) => { [ -- ]; text(v); });
|
||||
": "
|
||||
typeinfo(val, disable_doc: true);
|
||||
})
|
||||
);
|
||||
} else if target.type == "dictionary" {
|
||||
[slovník (_dictionary_)];
|
||||
try_doc(target, mapper: (v) => { [ -- ]; v; });
|
||||
":";
|
||||
list(
|
||||
{
|
||||
"S klíči typu ";
|
||||
typeinfo(target.val);
|
||||
},
|
||||
{
|
||||
"S hodnotami typu ";
|
||||
typeinfo(target.key);
|
||||
},
|
||||
);
|
||||
} else if target.type == "slice" {
|
||||
|
||||
} else if target.type == "tuple" {
|
||||
|
||||
} else if target.type == "primitive" {
|
||||
text(target.type_name_cs + " (");
|
||||
text(target.type_id, style: "italic");
|
||||
text(")");
|
||||
try_doc(target, mapper: (v) => { [ -- ]; text(v); });
|
||||
} else if target.type == "variants" {
|
||||
list(
|
||||
..target.variants.map((v) => {
|
||||
list.item({
|
||||
typeinfo(v);
|
||||
});
|
||||
})
|
||||
);
|
||||
} else {
|
||||
panic();
|
||||
}
|
||||
}
|
||||
|
||||
let args = ();
|
||||
if target.type == "struct" {
|
||||
for val in target.pairs.values() {
|
||||
args.push(signature_docs(val, is_nested: true));
|
||||
}
|
||||
} else {
|
||||
if "doc" in target and type(target.doc.argname) != type(none) {
|
||||
args.push({
|
||||
raw(target.doc.argname);
|
||||
[: ]
|
||||
typeinfo(target, flatten: true)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if not is_nested {
|
||||
list(..args.flatten());
|
||||
} else {
|
||||
args.flatten()
|
||||
}
|
||||
}
|
||||
@@ -158,7 +158,7 @@
|
||||
};
|
||||
let is_subset(subset, of, matcher) = {
|
||||
for item in subset {
|
||||
if not has_value(item, of, matcher) {
|
||||
if not has_value(item, of, matcher) and not has_value("any", of, matcher) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -309,3 +309,11 @@
|
||||
}
|
||||
mapper(value)
|
||||
}
|
||||
|
||||
#let deref(arr) = {
|
||||
if arr.len() == 0 {
|
||||
arr.at(0)
|
||||
} else {
|
||||
arr
|
||||
}
|
||||
}
|
||||
|
||||
13
templategen.mk
Normal file
13
templategen.mk
Normal file
@@ -0,0 +1,13 @@
|
||||
THESIS_FILE := thesis
|
||||
TYPST_FONTPATH := --font-path template/fonts
|
||||
|
||||
.PHONY: watch
|
||||
watch: $(THESIS_FILE).pdf
|
||||
xdg-open $< & typst watch $(TYPST_FONTPATH) $(THESIS_FILE).typ
|
||||
|
||||
.PHONY: view
|
||||
view: $(THESIS_FILE).pdf
|
||||
xdg-open $<
|
||||
|
||||
%.pdf: %.typ
|
||||
typst compile $(TYPST_FONTPATH) $<
|
||||
@@ -1,40 +1,343 @@
|
||||
@article{Wang2025,
|
||||
author = {Wang, Erming and Yu, Kaiwen and Cao, Jiqing and Wang, Minghui and Katsel, Pavel and Song, Won-min and Wang, Zhen and Li, Yuxin and Wang, Xusheng and Wang, Qian and Xu, Peng and Yu, Gefei and Zhu, Li and Geng, Jia and Habibi, Parnian and Qian, Lu and Tuck, Tony and Li, Aiqun and TCW, Julia and Roussos, Panos and Brennand, Kristen J. and Haroutunian, Vahram and Johnson, Erik C.B. and Seyfried, Nicholas T. and Levey, Allan I. and Bennett, David A. and Peng, Junmin and Cai, Dongming and Zhang, Bin},
|
||||
title = {Multiscale proteomic modeling reveals protein networks driving Alzheimer’s disease pathogenesis},
|
||||
journal = {Cell},
|
||||
year = {2025},
|
||||
volume = {},
|
||||
number = {},
|
||||
pages = {},
|
||||
publisher = {Elsevier},
|
||||
doi = {10.1016/j.cell.2025.08.038},
|
||||
url = {https://doi.org/10.1016/j.cell.2025.08.038},
|
||||
issn = {0092-8674}
|
||||
author = {Wang, Erming and Yu, Kaiwen and Cao, Jiqing and Wang, Minghui and Katsel, Pavel and Song, Won-min and Wang, Zhen and Li, Yuxin and Wang, Xusheng and Wang, Qian and Xu, Peng and Yu, Gefei and Zhu, Li and Geng, Jia and Habibi, Parnian and Qian, Lu and Tuck, Tony and Li, Aiqun and TCW, Julia and Roussos, Panos and Brennand, Kristen J. and Haroutunian, Vahram and Johnson, Erik C.B. and Seyfried, Nicholas T. and Levey, Allan I. and Bennett, David A. and Peng, Junmin and Cai, Dongming and Zhang, Bin},
|
||||
title = {Multiscale proteomic modeling reveals protein networks driving Alzheimer’s disease pathogenesis},
|
||||
journal = {Cell},
|
||||
year = {2025},
|
||||
publisher = {Elsevier},
|
||||
doi = {10.1016/j.cell.2025.08.038},
|
||||
url = {https://doi.org/10.1016/j.cell.2025.08.038},
|
||||
issn = {0092-8674}
|
||||
}
|
||||
|
||||
@misc{csl,
|
||||
title = {Citation Style Language},
|
||||
year = {2025},
|
||||
medium = {online},
|
||||
accessed = {2025-06-10},
|
||||
URL = {https://citationstyles.org/},
|
||||
title = {Citation Style Language},
|
||||
year = {2025},
|
||||
urldate = {2025-06-10},
|
||||
URL = {https://citationstyles.org/},
|
||||
}
|
||||
|
||||
@misc{linux,
|
||||
journal = {Blog | Linux Foundation},
|
||||
title = {Classic SysAdmin: Vim 101: A Beginner’s Guide to Vim},
|
||||
year = {2025},
|
||||
medium = {online},
|
||||
accessed = {2025-06-10},
|
||||
URL = {https://www.linuxfoundation.org/blog/blog/classic-sysadmin-vim-101-a-beginners-guide-to-vim},
|
||||
journal = {Blog | Linux Foundation},
|
||||
title = {Classic SysAdmin: Vim 101: A Beginner’s Guide to Vim},
|
||||
year = {2025},
|
||||
urldate = {2025-06-10},
|
||||
URL = {https://www.linuxfoundation.org/blog/blog/classic-sysadmin-vim-101-a-beginners-guide-to-vim},
|
||||
}
|
||||
|
||||
@book{Satrapa2011,
|
||||
author = {Pavel Satrapa},
|
||||
title = {IPv6},
|
||||
publisher = {Edice CZ.NIC},
|
||||
year = {2011},
|
||||
edition = {3. vydání},
|
||||
ISBN = {978-80-904248-4-9},
|
||||
URL = {https://www.bookport.cz/kniha/ipv6-treti-vydani-5999/},
|
||||
@book{Satrapa2019,
|
||||
author = {Pavel Satrapa},
|
||||
title = {IPv6 - čtvrté vydání},
|
||||
subtitle = {Internetový protokol verze 6},
|
||||
publisher = {Edice CZ.NIC},
|
||||
address = {Milešovská 5, 130 00 Praha 3},
|
||||
year = {2019},
|
||||
edition = {1. elektronické vydání},
|
||||
isbn = {978-80-88168-43-0},
|
||||
url = {https://www.bookport.cz/kniha/ipv6-ctvrte-vydani-5998/},
|
||||
}
|
||||
|
||||
@unpublished{Mekina2025_Typst,
|
||||
author = {Ondřej Mekina and Matěj Žucha},
|
||||
title = {Návod na použití Typst TUL šablony},
|
||||
subtitle = {Podnázev},
|
||||
publisher = {Nakladatelství Zumepro},
|
||||
address = {Liberec},
|
||||
year = {2025},
|
||||
edition = {1. vyd.},
|
||||
url = {https://zumepro.cz},
|
||||
}
|
||||
|
||||
@misc{Lhotka2011,
|
||||
author = {Ladislav Lhotka and Pavel Satrapa},
|
||||
title = {Networking studies V},
|
||||
subtitle = {selected technical reports},
|
||||
publisher = {Cesnet},
|
||||
address = {Praha},
|
||||
year = {2011},
|
||||
edition = {2. vydání},
|
||||
isbn = {978-80-904689-1-7},
|
||||
issn = {1234-5678},
|
||||
url = {https://www.cesnet.cz/},
|
||||
}
|
||||
|
||||
@misc{k8VgnlxDB5OWBNwl,
|
||||
title = {Nejlepší programovací jazyky na světě},
|
||||
subtitle = {Rust},
|
||||
publisher = {Zumepro},
|
||||
address = {Jablonec nad Nisou},
|
||||
year = {2025},
|
||||
volume = {69},
|
||||
number = {2},
|
||||
issn = {1234-5678},
|
||||
}
|
||||
|
||||
@article{Mekina2025_Rust,
|
||||
author = {Ondřej Mekina},
|
||||
journal = {Nejlepší programovací jazyky na světě: Rust},
|
||||
title = {Programovací jazyk Rust},
|
||||
subtitle = {Neexistuje dokonalý programovací jazyk},
|
||||
publisher = {Zumepro},
|
||||
address = {Jablonec nad Nisou},
|
||||
year = {2025},
|
||||
pages = {1-999},
|
||||
volume = {69},
|
||||
number = {2},
|
||||
issn = {1234-5678},
|
||||
url = {https://zumepro.cz},
|
||||
}
|
||||
|
||||
@incollection{Satrapa2019_Part,
|
||||
author = {Pavel Satrapa},
|
||||
booktitle = {IPv6 - čtvrté vydání},
|
||||
booksubtitle = {Internetový protokol verze 6},
|
||||
title = {Linux},
|
||||
subtitle = {Podnázev části},
|
||||
publisher = {Edice CZ.NIC},
|
||||
address = {Milešovská 5, 130 00 Praha 3},
|
||||
year = {2019},
|
||||
edition = {1. elektronické vydání},
|
||||
pages = {355-366},
|
||||
isbn = {978-80-88168-43-0},
|
||||
url = {https://example.org},
|
||||
}
|
||||
|
||||
@manual{Mizuno1995,
|
||||
author = {Kazumi Mizuno and Asahi Higashiyama and Satoru Kuriyama},
|
||||
title = {Controller for game machine},
|
||||
subtitle = {Game console controller},
|
||||
year = {1995},
|
||||
url = {https://patents.google.com/patent/WO1995032777A1/en},
|
||||
}
|
||||
|
||||
@thesis{Martinec2024,
|
||||
author = {Tomáš Martinec},
|
||||
title = {Problematika generování offline trajektorií průmyslových robotů při výrobě kompozitních konstrukcí},
|
||||
subtitle = {Podnázev},
|
||||
address = {Studentská 1402/2, 461 17 Liberec 1},
|
||||
year = {2024},
|
||||
school = {Technická univerzita v Liberci},
|
||||
type = {Habilitační práce},
|
||||
url = {https://dspace.tul.cz/handle/15240/176519},
|
||||
}
|
||||
|
||||
@manual{pk1LquauFJ9DLrfE,
|
||||
title = {IEEE Standard for Floating-Point Arithmetic},
|
||||
subtitle = {Podnázev},
|
||||
publisher = {IEEE Standards Association},
|
||||
address = {New York, USA},
|
||||
year = {2019},
|
||||
edition = {754-2019},
|
||||
url = {https://standards.ieee.org/ieee/754/6210/},
|
||||
}
|
||||
|
||||
@article{grippin_sars-cov-2_2025,
|
||||
title = {{SARS}-{CoV}-2 {mRNA} vaccines sensitize tumours to immune checkpoint blockade},
|
||||
issn = {0028-0836, 1476-4687},
|
||||
url = {https://www.nature.com/articles/s41586-025-09655-y},
|
||||
doi = {10.1038/s41586-025-09655-y},
|
||||
abstract = {Immune checkpoint inhibitors ({ICIs}) extend survival in many patients with cancer but are ineffective in patients without pre-existing immunity1-9. Although personalized {mRNA} cancer vaccines sensitize tumours to {ICIs} by directing immune attacks against preselected antigens, personalized vaccines are limited by complex and time-intensive manufacturing processes10-14. Here we show that {mRNA} vaccines targeting {SARS}-{CoV}-2 also sensitize tumours to {ICIs}. In preclinical models, {SARS}-{CoV}-2 {mRNA} vaccines led to a substantial increase in type I interferon, enabling innate immune cells to prime {CD}8+ T cells that target tumour-associated antigens. Concomitant {ICI} treatment is required for maximal efficacy in immunologically cold tumours, which respond by increasing {PD}-L1 expression. Similar correlates of vaccination response are found in humans, including increases in type I interferon, myeloid-lymphoid activation in healthy volunteers and {PD}-L1 expression on tumours. Moreover, receipt of {SARS}-{CoV}-2 {mRNA} vaccines within 100 days of initiating {ICI} is associated with significantly improved median and three-year overall survival in multiple large retrospective cohorts. This benefit is similar among patients with immunologically cold tumours. Together, these results demonstrate that clinically available {mRNA} vaccines targeting non-tumour-related antigens are potent immune modulators capable of sensitizing tumours to {ICIs}.},
|
||||
journaltitle = {Nature},
|
||||
shortjournal = {Nature},
|
||||
author = {Grippin, Adam J. and Marconi, Christiano and Copling, Sage and Li, Nan and Braun, Chen and Woody, Cole and Young, Elliana and Gupta, Priti and Wang, Min and Wu, Annette and Jeong, Seong Dong and Soni, Dhruvkumar and Weidert, Frances and Xie, Chao and Goldenberg, Eden and Kim, Andrew and Zhao, Chong and DeVries, Anna and Castillo, Paul and Lohray, Rishabh and Rooney, Michael K. and Schrank, Benjamin R. and Wang, Yifan and Ma, Yifan and Chang, Enoch and Kouzy, Ramez and Dyson, Kyle and Jafarnia, Jordan and Nariman, Nina and Gladish, Gregory and New, Jacob and Argueta, Ada and Amaya, Diana and Thomas, Nagheme and Doty, Andria and Chen, Joe and Copling, Nikhil and Alatrash, Gabriel and Simon, Julie and Davies, Alicia Bea and Dennis, William and Liang, Richard and Lewis, Jeff and Wei, Xiong and Rinsurongkawong, Waree and Vaporciyan, Ara A. and Johns, Andrew and {D3CODE Team} and Aaroe, Ashley and Abraham, Sanu and Andrews, Lee and Badami, Kiran K. and Baganz, Janna A. and Bajwa, Pratibha and Barbosa, Gregory R. and Beird, Hannah C. and Brock, Kristy and Burton, Elizabeth M. and Cata, Juan and Chung, Caroline and Claussen, Catherine and Crommett, John and Cutherell, Michael and Dabaja, Bouthaina and Dagher, Hiba and Daniels, Kevin M. and Domask, Mary and Draetta, Giulio and Edelkamp, Paul and Fisher, Sarah and French, Katy Elizabeth and Futreal, Andrew and Gaeta, Maria and Godoy, Myrna and Goldstein, Drew and Gunther, Jillian and Hutcheson, Kate and Jaffray, David and Jin, Jeff and John, Teny Matthew and Kell, Trey and Knafl, Mark and Kwan, Rayson C. and Lee, J. Jack and Litton, Jennifer and McEnery, Kevin W. and McGuire, Mary and Mescher, Benjamin and Musunuru, Tejo and Muthu, Mayoora and Nates, Joseph and Owen, Craig S. and Padmakumar, Priyadharshini and Palaskas, Nicholas and Patel, Jay J. and Prabhakaran, Sabitha and Ramsey, Lucas and Ravi, Vinod and Hernandez, Cristhiam Rojas and Sajith, Bilja and Scheet, Paul A. and Schmidt, Stephanie and Shaw, Kenna R. and Shete, Sanjay and Shoenthal, Daniel P. and Stoltenberg, Lessley J. and Tawbi, Hussein and Turin, Anastasia and Unni, Samir and Vicknamparampil, Benju and Weber, Max C. and Weinstein, John and Woodman, Scott Eric and Wozny, Mark C. and Wu, Carol and Wu, Jia and Yao, James C. and Young, Chingyi and Yu, Emily and Zatorski, Steven and Aloia, Thomas A. and Trujillo, John Cuenca and Gibbons, Christopher and Kothari, Anai and Subbiah, Ishwaria and Thompson, Phillip and Lee, Jack and Lee, Ji-Hyun and Sun, Ryan and Sharma, Padmanee and Tran, Hai and Zhang, Jianjun and Gibbons, Don L. and Wargo, Jennifer and Kim, Betty Y. S. and Heymach, John V. and Mendez-Gomez, Hector R. and Jiang, Wen and Sayour, Elias J. and Lin, Steven H.},
|
||||
urldate = {2025-11-01},
|
||||
date = {2025-10-22},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@article{wang_enabling_2025,
|
||||
title = {Enabling Sustainable Cloud Computing With Low-Carbon Server Design},
|
||||
volume = {45},
|
||||
rights = {https://ieeexplore.ieee.org/Xplorehelp/downloads/license-information/{IEEE}.html},
|
||||
issn = {0272-1732, 1937-4143},
|
||||
url = {https://ieeexplore.ieee.org/document/11014506/},
|
||||
doi = {10.1109/MM.2025.3572955},
|
||||
abstract = {To combat climate change, we must reduce carbon emissions from hyperscale cloud computing. Compute servers cause the majority of a general-purpose cloud’s emissions. Thus, we are motivated to design carbon-efficient compute server stock keeping units ({SKUs}), or {GreenSKUs}, using recently available low-carbon components. We built three {GreenSKU} prototypes, integrating energy-efficient {CPUs}, reusing old dynamic {RAM} via compute express link, and reusing old solid-state drives. We reveal challenges that limit {GreenSKUs}’ carbon savings at scale and may prevent their adoption by cloud providers. To address these challenges, we developed a novel framework, {GSF} ({GreenSKU} Framework), that enables cloud providers to systematically evaluate {GreenSKUs}’ carbon savings at scale. By implementing {GSF} within Microsoft Azure’s production constraints, we demonstrate that {GreenSKUs} reduce net cloud emissions by 8\%, which is globally significant. This work is the first to demonstrate and quantify how carbon-efficient server designs translate to measurable cloud-scale emissions reductions, enabling meaningful contributions to cloud sustainability goals.},
|
||||
pages = {19--28},
|
||||
number = {4},
|
||||
journaltitle = {{IEEE} Micro},
|
||||
shortjournal = {{IEEE} Micro},
|
||||
author = {Wang, Jaylen and Berger, Daniel S. and Kazhamiaka, Fiodar and Irvene, Celine and Zhang, Chaojie and Choukse, Esha and Frost, Kali and Fonseca, Rodrigo and Warrier, Brijesh and Bansal, Chetan and Stern, Jonathan and Bianchini, Ricardo and Sriraman, Akshitha},
|
||||
urldate = {2025-11-01},
|
||||
date = {2025-07},
|
||||
}
|
||||
|
||||
@article{hurlburt_between_2025,
|
||||
title = {Between the Lines: International {IT} Initiatives},
|
||||
volume = {27},
|
||||
rights = {https://ieeexplore.ieee.org/Xplorehelp/downloads/license-information/{IEEE}.html},
|
||||
issn = {1520-9202, 1941-045X},
|
||||
doi = {10.1109/MITP.2025.3613070},
|
||||
shorttitle = {Between the Lines},
|
||||
pages = {4--10},
|
||||
number = {5},
|
||||
journaltitle = {{IT} Professional},
|
||||
shortjournal = {{IT} Prof.},
|
||||
author = {Hurlburt, George F.},
|
||||
urldate = {2025-11-01},
|
||||
date = {2025-09},
|
||||
}
|
||||
|
||||
@book{gjengset_rust_2022,
|
||||
location = {San Francisco},
|
||||
title = {Rust for rustaceans: idiomatic programming for experienced developers},
|
||||
isbn = {978-1-7185-0185-0},
|
||||
shorttitle = {Rust for rustaceans},
|
||||
abstract = {"For developers who've mastered the basics, this book is the next step on your way to professional-level programming in Rust. It covers everything you need to build and maintain larger code bases, write powerful and flexible applications and libraries, and confidently expand the scope and complexity of your projects. Author Jon Gjengset takes you deep into the Rust programming language, dissecting core topics like ownership, traits, concurrency, and unsafe code. You'll explore key concepts like type layout and trait coherence, delve into the inner workings of concurrent programming and asynchrony with async/await, and take a tour of the world of no\_std programming. Gjengset also provides expert guidance on {API} design, testing strategies, and error handling, and will help develop your understanding of foreign function interfaces, object safety, procedural macros, and much more."--Publisher website},
|
||||
pagetotal = {252},
|
||||
publisher = {No Starch Press},
|
||||
author = {Gjengset, Jon},
|
||||
date = {2022},
|
||||
keywords = {Handbooks and manuals, Instructional and educational works, Rust (Computer program language)},
|
||||
}
|
||||
|
||||
@misc{vaswani_attention_2023,
|
||||
title = {Attention Is All You Need},
|
||||
url = {http://arxiv.org/abs/1706.03762},
|
||||
doi = {10.48550/arXiv.1706.03762},
|
||||
abstract = {The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new simple network architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely. Experiments on two machine translation tasks show these models to be superior in quality while being more parallelizable and requiring significantly less time to train. Our model achieves 28.4 {BLEU} on the {WMT} 2014 English-to-German translation task, improving over the existing best results, including ensembles by over 2 {BLEU}. On the {WMT} 2014 English-to-French translation task, our model establishes a new single-model state-of-the-art {BLEU} score of 41.8 after training for 3.5 days on eight {GPUs}, a small fraction of the training costs of the best models from the literature. We show that the Transformer generalizes well to other tasks by applying it successfully to English constituency parsing both with large and limited training data.},
|
||||
number = {{arXiv}:1706.03762},
|
||||
publisher = {{arXiv}},
|
||||
author = {Vaswani, Ashish and Shazeer, Noam and Parmar, Niki and Uszkoreit, Jakob and Jones, Llion and Gomez, Aidan N. and Kaiser, Lukasz and Polosukhin, Illia},
|
||||
urldate = {2025-11-01},
|
||||
date = {2023-08-02},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {1706.03762 [cs]},
|
||||
keywords = {Computer Science - Computation and Language, Computer Science - Machine Learning},
|
||||
}
|
||||
|
||||
@inproceedings{von_marttens_dark_2026,
|
||||
title = {Dark energy and cosmic acceleration},
|
||||
volume = {5},
|
||||
url = {https://ui.adsabs.harvard.edu/abs/2026enap....5...33V},
|
||||
doi = {10.1016/B978-0-443-21439-4.00104-8},
|
||||
eventtitle = {Encyclopedia of Astrophysics},
|
||||
pages = {33--53},
|
||||
author = {von Marttens, Rodrigo and Alcaniz, Jailson},
|
||||
urldate = {2025-11-01},
|
||||
date = {2026-01-01},
|
||||
note = {{ADS} Bibcode: 2026enap....5...33V},
|
||||
}
|
||||
|
||||
@collection{culhane_ieee_2024,
|
||||
location = {Piscataway, {NJ}},
|
||||
title = {{IEEE} Quantum Week 2024: 15-20 September 2024, Montréal, Québec, Canada: proceedings},
|
||||
isbn = {979-8-3315-4137-8},
|
||||
shorttitle = {{IEEE} Quantum Week 2024},
|
||||
pagetotal = {1},
|
||||
publisher = {{IEEE}},
|
||||
editor = {Culhane, Candace},
|
||||
date = {2024},
|
||||
doi = {10.1109/QCE60285.2024},
|
||||
note = {Meeting Name: {IEEE} International Conference on Quantum Computing and Engineering},
|
||||
}
|
||||
|
||||
@movie{kubrick_2001_1968,
|
||||
title = {2001: A Space Odyssey},
|
||||
publisher = {Metro-Goldwyn-Mayer},
|
||||
author = {Kubrick, Stanley},
|
||||
date = {1968-04-02},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@online{gmannickg_why_2012,
|
||||
title = {Why is processing a sorted array faster than processing an unsorted array?},
|
||||
url = {https://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-processing-an-unsorted-array},
|
||||
publisher = {Stack Overflow},
|
||||
author = {{GManNickG}},
|
||||
urldate = {2025-11-01},
|
||||
date = {2012-06-27},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@letter{franklin_silence_1722,
|
||||
title = {Silence Dogood, No. 1},
|
||||
url = {https://web.archive.org/web/20080907231417/http://www.historycarper.com/resources/twobf1/sd1.htm},
|
||||
type = {Letter},
|
||||
author = {Franklin, Benjamin},
|
||||
urldate = {2025-11-01},
|
||||
date = {1722-04-02},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@patent{page_method_2001,
|
||||
title = {Method for node ranking in a linked database},
|
||||
url = {https://patents.google.com/patent/US6285999B1/en},
|
||||
holder = {Google {LLC}},
|
||||
abstract = {A method assigns importance ranks to nodes in a linked database, such as any database of documents containing citations, the world wide web or any other hypermedia database. The rank assigned to a document is calculated from the ranks of documents citing it. In addition, the rank of a document is calculated from a constant representing the probability that a browser through the database will randomly jump to the document. The method is particularly useful in enhancing the performance of search engine results for hypermedia databases, such as the world wide web, whose documents have a large variation in quality.},
|
||||
pages = {12},
|
||||
type = {patentus},
|
||||
number = { 6,285,999 B1},
|
||||
author = {Page, Lawrence},
|
||||
urldate = {2025-11-01},
|
||||
date = {2001-09-04},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@software{torvalds_linux_2025,
|
||||
title = {Linux kernel},
|
||||
url = {https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/?h=v6.17.6},
|
||||
version = {6.17.6},
|
||||
publisher = {The Linux Kernel Organization, Inc.},
|
||||
author = {Torvalds, Linus},
|
||||
urldate = {2025-11-01},
|
||||
date = {2025-10-29},
|
||||
}
|
||||
|
||||
@inreference{wikipedia_contributors_rust_2025,
|
||||
title = {Rust (programming language)},
|
||||
url = {https://en.wikipedia.org/w/index.php?title=Rust_(programming_language)&oldid=1318205510},
|
||||
booktitle = {Wikipedia, The Free Encyclopedia.},
|
||||
publisher = {Wikipedia, The Free Encyclopedia.},
|
||||
author = {{Wikipedia contributors}},
|
||||
urldate = {2025-11-01},
|
||||
date = {2025-10-22},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@letter{torvalds_re_2012,
|
||||
title = {Re: [Regression w/ patch] Media commit causes user space to misbahave (was: Re: Linux 3.8-rc1)},
|
||||
url = {https://lkml.org/lkml/2012/12/23/75},
|
||||
type = {E-mail},
|
||||
author = {Torvalds, Linus},
|
||||
urldate = {2025-11-01},
|
||||
date = {2012-12-23},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@inreference{noauthor_citation_nodate,
|
||||
title = {citation překlad z angličtiny do češtiny},
|
||||
url = {https://slovnik.seznam.cz/preklad/anglicky_cesky/citation},
|
||||
booktitle = {Seznam Slovník},
|
||||
urldate = {2025-11-01},
|
||||
}
|
||||
|
||||
@misc{lecun_mnist_2010,
|
||||
title = {{MNIST} handwritten digit database},
|
||||
url = {http://yann.lecun.com/exdb/mnist},
|
||||
publisher = {{ATT} Labs},
|
||||
author = {{LeCun}, Yann and Cortes, Corinna and Burges, {CJ}},
|
||||
urldate = {2025-11-01},
|
||||
date = {2010},
|
||||
}
|
||||
|
||||
@artwork{smetana_vysehrad_nodate,
|
||||
title = {Vyšehrad},
|
||||
author = {Smetana, Bedřich},
|
||||
}
|
||||
|
||||
@audio{presley_ghetto_1969,
|
||||
location = {American Sound, Memphis},
|
||||
title = {In the Ghetto},
|
||||
url = {https://www.youtube.com/watch?v=FJ-r0bilzhU},
|
||||
publisher = {{RCA} Victor},
|
||||
author = {Presley, Elvis},
|
||||
urldate = {2025-11-01},
|
||||
date = {1969-01-20},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@artwork{prokofiev_romeo_1938,
|
||||
title = {Romeo and Juliet},
|
||||
author = {Prokofiev, Sergei},
|
||||
date = {1938},
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
@Wang2025
|
||||
@csl
|
||||
@linux
|
||||
@Satrapa2011
|
||||
|
||||
#set text(lang: "cs")
|
||||
#bibliography("citations.bib", title: "Bibliography - CZ", style: "../template/tul_citace.csl")
|
||||
#bibliography(
|
||||
"citations.bib",
|
||||
title: "Bibliography - CZ",
|
||||
style: "../template/citations/tul-csn690-numeric-square_brackets.csl",
|
||||
full: true,
|
||||
)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
@Wang2025
|
||||
@csl
|
||||
@linux
|
||||
@Satrapa2011
|
||||
|
||||
#bibliography("citations.bib", title: "Bibliography - EN", style: "iso-690-numeric")
|
||||
#bibliography(
|
||||
"citations.bib",
|
||||
title: "Bibliography - EN",
|
||||
style: "../template/citations/iso690-numeric-square_brackets.csl",
|
||||
full: true,
|
||||
)
|
||||
|
||||
0
theses/autoref_cs.typ
Normal file
0
theses/autoref_cs.typ
Normal file
0
theses/autoref_en.typ
Normal file
0
theses/autoref_en.typ
Normal file
331
theses/bp_cs.typ
Normal file
331
theses/bp_cs.typ
Normal file
@@ -0,0 +1,331 @@
|
||||
#import "../template/template.typ": *
|
||||
|
||||
#show: tultemplate2.with(
|
||||
style: "classic",
|
||||
faculty: "fm",
|
||||
lang: "cs",
|
||||
document: "bp",
|
||||
assignment: (
|
||||
personal_number: [A00000007],
|
||||
department: [Ústav šablon],
|
||||
academical_year: [2025/2026],
|
||||
content: [
|
||||
= Zásady pro vypracování:
|
||||
+ Seznamte se s možnostmi šablon
|
||||
+ Navrhněte několik možných stylů šablon
|
||||
+ Seznamte se s nástrojem Typst
|
||||
+ Implementujte šablonu
|
||||
+ Zkonzultujte šablonu
|
||||
+ Opravte spoustu věcí
|
||||
+ Zkonzultujte šablonu
|
||||
+ Opravte spoustu věcí
|
||||
+ Zkonzultujte šablonu
|
||||
+ Snad už nebude nic potřeba opravit
|
||||
= Seznam odborné literatury:
|
||||
_Přísně tajné_
|
||||
],
|
||||
),
|
||||
title: (
|
||||
cs: [Ukázka dokumentu typu Bakalářská práce pro FM TUL v češtině],
|
||||
en: [Example document for a Bachelor's thesis for FM TUL in Czech],
|
||||
),
|
||||
author: [Matěj Žucha],
|
||||
author_pronouns: "masculine",
|
||||
programme: (cs: [MI6000000007 Přísně tajné]),
|
||||
specialization: (cs: [Vytváření šablon]),
|
||||
supervisor: [Ondřej Mekina],
|
||||
abstract: (
|
||||
cs: [
|
||||
Tento dokument slouží jako praktická ukázka všech důležitcýh funkcí šablony _tultemplate2_,
|
||||
s názornými příklady použítí a jejich podrobným popisem.
|
||||
],
|
||||
en: [
|
||||
This document serves as a practical demonstration of all the important features of the
|
||||
_tultemplate2_ template, with useful examples and their respective descriptions.
|
||||
],
|
||||
),
|
||||
keywords: (
|
||||
cs: [Ukázka, Klíčových, Slov, Česky],
|
||||
en: [Example, Keywords, In, English],
|
||||
),
|
||||
acknowledgement: (cs: [Lorem ipsum dolor sit amet.]),
|
||||
citations: "citations.bib",
|
||||
)
|
||||
|
||||
= Co najdete v této šabloně
|
||||
|
||||
Tato šablona má sloužit jako ukázková bakalářská práce napsaná pomocí jazyka *Typst* a šablony
|
||||
*tultemplate2*. Může posloužit jako jednoduchý základ i pro vaši práci, stačí se naučit používat
|
||||
pár užitečných funkcí, jako např. vkládání obrázků, tabulek, citací nebo odkazů.
|
||||
|
||||
Na rozdíl od souboru _documentation.typ_, který je dostupný ke stažení na stránkách projektu, obsahuje
|
||||
tento dokument jenom to nejpotřebnější ze znalostí, co postačí k úspěšnému napsání práce. Pokud vám budou nějaké funkce chybět, můžete se podívat do zmíněného souboru, anebo kontaktovat některého z autorů, kteří se vám pokusí pomoct. Jen pro úplnost je zde ve zkratce něco málo o jazyce typst a motivaci k tvorbě této šablony:
|
||||
|
||||
Typst je profesionální sázecí nástroj podobný markdownu, LaTeXu/TeXu, groffu, atd.
|
||||
|
||||
Typst je moderní obdobou starších nástrojů, které postrádají spoustu důležitých funkcí, bez kterých
|
||||
se v dnešní době prakticky nedá fungovat. Uživatel často musí importovat nepřeberné množství
|
||||
balíčků, které poskytují (podle mě) naprosto základní funkcionalitu - jako například správná podpora
|
||||
UTF-8 znaků, formátování prvků na základě jazykového lokálu, apod.
|
||||
|
||||
= Začínáme se šablonou
|
||||
|
||||
Tuto šablonu jste si pravděpodobně stáhli z generátoru na webu www.tulsablona.cz a vložili ji do Typst
|
||||
online editoru. Tím pádem vidíte kromě zdrojového kódu také výsledný PDF soubor. Jak už asi víte, hlavní
|
||||
rozdíl mezi tradičními textovými procesory jako Microsoft Word nebo LibreOffice Writer a mezi sázecími
|
||||
programy jako LaTeX nebo Typst je právě způsob, kterým se upravuje vzhled a obsah dokumentu.
|
||||
|
||||
Zatímco ve Wordu jsou uživatelé zvyklí, že pomocí tlačítek a klávesových zkratek mění dokument napřímo,
|
||||
Typst (a i LaTeX) používají tzv. zdrojový soubor, který není ničím jiným než obyčejným textovým souborem,
|
||||
a následně na vyžádání umí tento zdrojový soubor zkompilovat tj. proměnit na výsledný dokument, např. ve formátu PDF.
|
||||
|
||||
Proto zde najdete popis všech důležitých funkcí nikoliv jako galerii obrázků toho, na která tlačítka se má
|
||||
klikat, nýbrž jako ukázka a návod všech speciálních sekvencí textu, které Typst podporuje a které šablona vyhodnocuje jinak než obsah zprávy.
|
||||
|
||||
== Odstavce
|
||||
|
||||
Jak jsou někteří z vás možná zvyklí z Markdownu, odstavce, nadpisy a vlastně pro přehlednost všechny
|
||||
logicky oddělené bloky se oddělují prázným řádkem. Toho jste si jistě mohli při prohlížení tohoto souboru
|
||||
všimnout. Můžete si vyzkoušet, co se stane, když
|
||||
použijete jenom ukončení řádku enterem,
|
||||
|
||||
nebo když použijete zmíněný prázdný řádek,
|
||||
|
||||
|
||||
|
||||
anebo co se stane při použití dvou a více prázdných řádků. (spoiler: 1 a více prázdných řádků mají identické
|
||||
chování, pouze ukončení řádku je interpretováno stejně jako např. mezerník nebo tabulátor)
|
||||
|
||||
Uživatel má tím pádem svobodu v tom, jestli ve zdrojovém souboru používá dlouhé řádky plné textu,
|
||||
nebo
|
||||
má
|
||||
raději
|
||||
přehlednější
|
||||
formátování
|
||||
a sám si obsah dělí na řádky, protože ve výsledném PDF souboru se stejně spojí do jednoho celistvého odstavce.
|
||||
Musí akorát ručně dbát na to, aby odstavce nebyly příliš krátké, ani příliš dlouhé.
|
||||
|
||||
S souvislosti s odstavci bych ještě zmínil, že Typst se za vás stará také o zarovnávání písma a slov do bloků
|
||||
a dělení slov mezi řádky, když už se na něj nevejdou. Chováním odpovídá pravidlům českého pravopisu a typografie, takže se o to nemusíte vůbec starat.
|
||||
|
||||
== Nadpisy
|
||||
|
||||
První důležitá funkce kromě psaní samotného textu, k čemuž není zapotřebí žádná speciální syntax, jsou nadpisy.
|
||||
Stejně jako v jiných programech, i Typst podporuje nadpisy více úrovní. Pro nadpis první úrovně se používá znaménko
|
||||
rovná se a mezera na začátku řádku, čili ve zdrojovém souboru Typstu je používán takto:
|
||||
|
||||
```typst
|
||||
= Můj nadpis první úrovně
|
||||
```
|
||||
|
||||
Pro nadpis druhé úrovně pak použijeme dvě rovná se, pro nadpis třetí úrovně tři rovná se.
|
||||
Šablona *tultemplate2* Vám ovšem bohužel nedovolí nadpis čtvrté a další úrovně, protože by takový
|
||||
nadpis porušoval směrnice TUL o formátování dokumentů. Ale nemusíte se bát. Pokud takový nadpis
|
||||
uděláte -- šablona vyhodí chybu, aby vás na to upozornila.
|
||||
|
||||
```typst
|
||||
= Nadpis
|
||||
== Podnadpis
|
||||
=== Podpodnadpis
|
||||
|
||||
A pak obsah
|
||||
```
|
||||
|
||||
== Číslování kapitol
|
||||
|
||||
Asi jste si všimli, že každý nadpis začíná číslem dané kapitoly. Toto číslování provádí Typst automaticky, promítne se následně i v sekci Obsah na začátku souboru, nemusíte se tak opět o nic starat.
|
||||
|
||||
= Používání funkcí
|
||||
|
||||
Používání většiny funkcionalit Typstu je prováděno pomocí tzv. volání funkce. Je to velmi podobné předchozím ukázkám,
|
||||
akorát místo toho, aby se text obalil pouze jedním symbolem či podobnou jednoduchou značkou, obalíme text jménem dané funkce. Syntaxe vypadá nějak takto:
|
||||
```typst
|
||||
#Název_funkce[samotný text nebo jiné parametry]
|
||||
```
|
||||
Pokud v editoru napíšete symbol hashtagu, začne vám automaticky našeptávat všechny možné funkce a jejich popisy. Přejdeme rovnou k dalším praktickým příkladům.
|
||||
|
||||
== Zvýrazňování textu
|
||||
|
||||
Syntaxe základního zvýraznění je velmi podobná například Markdownu. Stačí použít následující symboly:
|
||||
|
||||
```typst
|
||||
*tučně*
|
||||
_kurzívou_
|
||||
```
|
||||
|
||||
Další stylování lze dělat právě přes funkce, viz třeba:
|
||||
|
||||
```typst
|
||||
#strike[přeškrtnuto]
|
||||
#highlight[zvýrazněno]
|
||||
#underline[podtrženo] // podtržení by se NEMĚLO používat
|
||||
```
|
||||
|
||||
Pro úplnost a ukázku je zde přímo v textu *tučný text*, _text kurzívou_, #strike[přeškrtnutý text] a #highlight[text zvýrazněný podle barvy příslušící vaší fakultě], #underline[podtržený text] (ačkoli typografové doporučují podtržení nepoužívat).
|
||||
|
||||
== Odkazy<links>
|
||||
|
||||
Odkazy je možné dělat na URL/URI zdroje, e-maily, telefony, atd...
|
||||
Odkázat URL (URI) je možné bez zavolání funkce, odkaz stačí prostě a jednodušše napsat:
|
||||
https://git.zumepro.cz/tul/tultemplate2
|
||||
|
||||
```typst
|
||||
https://git.zumepro.cz/tul/tultemplate2
|
||||
```
|
||||
|
||||
Tohle interně volá funkci `link`.
|
||||
|
||||
Pokud odkazujeme na méně časté věci (jako e-maily), můžeme použít funkci `link` přímo.
|
||||
```typst
|
||||
#link("mailto:ondrej@mekina.cz")
|
||||
```
|
||||
|
||||
Dalši předpony (URI schémata) můžete najít třeba na Wikipedii
|
||||
https://en.wikipedia.org/wiki/List_of_URI_schemes.
|
||||
|
||||
== Obrázky
|
||||
|
||||
Obrázky je možné vkládat samotné, nebo i s popiskem.
|
||||
Obrázek se vloží pomocí funkce `image`.
|
||||
|
||||
Přidání popisku a zároveň zalistování obrázku v indexu (aby se na ně třeba dalo odkazovat) lze
|
||||
udělat pomocí funkce `figure`.
|
||||
|
||||
#block([
|
||||
```typst
|
||||
#figure(
|
||||
image("mujobrazek.jpg"),
|
||||
caption: [
|
||||
*Krásný* obrázek, který vypadá jako obrázek.
|
||||
]
|
||||
)
|
||||
```
|
||||
], breakable: false)
|
||||
|
||||
Tady je praktická ukázka jednoduchého vložení obrázku s popiskem:
|
||||
|
||||
#figure(image("../template/assets/tul_logo.svg", width: 25%), caption: [
|
||||
Logo *TUL*
|
||||
])
|
||||
|
||||
První parametr funkce je zobrazovaný obsah, v našem případě zmíněný `image`. K němu můžeme psát různé parametry, v příkladu máme třeba nastavení šířky obrázku v procentech. Jako poslední je parametr `caption`, s jehož pomocí můžeme nastavit popisek obrázku/figury.
|
||||
|
||||
Obrázky se zobrazí na začátku dokumentu v seznamu (pokud to daný typ dokumentu vyžaduje). I toto za vás Typst dělá automaticky, vám tak stačí do textu přidávat obrázky, jak se to hodí, a všechny se poté korektně zobrazí v Seznamu obrázků s odkazem i správně uvedenou stránkou, na které se obrázek nachází. Obrázky jsou také automaticky číslovány podle předepsaného způsobu, podobně jako kapitoly.
|
||||
|
||||
== Tabulky
|
||||
|
||||
Tabulky lze vytvářet takto:
|
||||
|
||||
```typst
|
||||
#figure(table(
|
||||
columns: 3,
|
||||
table.header([], [*Sloupec 1*], [*Sloupec 2*]),
|
||||
[*Řádek 1*], [a], [b],
|
||||
[*Řádek 2*], [c], [d],
|
||||
), caption: "Moje krásná tabulka")
|
||||
```
|
||||
|
||||
Parametr `columns` udává počet sloupců tabulky. Poté následuje libovolný počet buněk tabulky, pro lepší přehlednost jsou v příkladu jednotlivé řádky oddělené. Nakonec je zde opět parametr `caption` sloužící k zadání popisku tabulky.
|
||||
|
||||
#highlight[Hlavičku tabulky (první řádek) je dobré zabalit do funkce header (viz. výše)], to je
|
||||
kvůli tomu, že Typst do vygenerovaného PDF souboru poté přidá metadata (například pro osoby se
|
||||
zrakovým postižením).
|
||||
|
||||
#figure(table(
|
||||
columns: 3,
|
||||
table.header([], [*Sloupec 1*], [*Sloupec 2*]),
|
||||
[*Řádek 1*], [a], [b],
|
||||
[*Řádek 2*], [c], [d],
|
||||
), caption: "Moje krásná tabulka")
|
||||
|
||||
Tabulky se zobrazí na začátku dokumentu v seznamu (pokud to daný typ dokumentu vyžaduje). Jak už jste asi pochopili, i toto provede šablona automaticky.
|
||||
|
||||
== Citace
|
||||
|
||||
Šablona podporuje správu citací pomocí standardního BibTeX @bibtex souboru, stejně jako
|
||||
například LaTeX. Generování citací v BibTeX zápisu umí téměř každá stránka nebo program, které mají pro citace podporu.
|
||||
Kód takovéto citace ve vhodném formátu stačí přidat do souboru _citations.bib_, poté je možné se
|
||||
na ně odkazovat pomocí `@jmeno_citace`, nebo `#cite(<jmeno_citace>)`. Můžu se tak třeba odkázat na
|
||||
citaci Typstu #cite(<typst>).
|
||||
|
||||
Formát souboru _citations.bib_ je naprosto stejný jako pro LaTeX. Tyto citace lze přímo vložit
|
||||
třeba z webu https://www.citace.com ve formátu BibTeX -- Typst tento formát také umí přečíst.
|
||||
Můžete se do souboru s příponou .bib podívat, zjistíte, že je to opravdu jen obyčejný textový soubor se specifickou strukturou.
|
||||
V přiloženém ukázkovém souboru už nějaké citace jsou - např. již použitá citace se jménem `typst`.
|
||||
|
||||
Soubor, ze kterého se načtou citace lze změnit pomocí argumentu šablony (tj. struktura na začátku souboru):
|
||||
|
||||
```typst
|
||||
#show: tultemplate2.with(
|
||||
...
|
||||
citations: "jinysoubor.bib",
|
||||
...
|
||||
)
|
||||
```
|
||||
|
||||
== Vnitřní odkazy a kotvy<ukazka_odkazu>
|
||||
|
||||
Trochu navážeme na Odkazy (@links).
|
||||
|
||||
Můžete dělat i vnitřní odkazy třeba na kapitoly, stránky nebo obrázky s popiskem (zabalené ve
|
||||
`figure`).
|
||||
|
||||
```typst
|
||||
= Dobrá kapitola<dobra_kapitola>
|
||||
|
||||
Podívejme se na Dobrou kapitolu (@dobra_kapitola).
|
||||
```
|
||||
|
||||
Takhle vypadá kotva:
|
||||
|
||||
```typst
|
||||
<nazev_kotvy>
|
||||
```
|
||||
|
||||
Kotvu dáte někam do souboru a můžete na ní odkazovat stejně jako na citace:
|
||||
|
||||
```typst
|
||||
@nazev_kotvy
|
||||
```
|
||||
Můžeme se podívat na názornou ukázku odkazu (@ukazka_odkazu).
|
||||
|
||||
== Zkratky
|
||||
|
||||
LaTeX TUL šablona má k začátku dokumentu seznam zkratek. Proto jsme ho přidali i do této šablony.
|
||||
Seznam zkratek je v této šabloně nastaven tak, aby se zobrazoval pouze pokud je v něm alespoň jedna
|
||||
zkratka (přišlo nám to poměrně logické).
|
||||
|
||||
Zkratku #abbr("ABC", "Abeceda") vytvoříte (definujete) pomocí:
|
||||
|
||||
```typst
|
||||
#abbr("ABC", "Abeceda")
|
||||
```
|
||||
|
||||
Potom zkratku #abbr("ABC") už můžete použít přímo (bez opakované definice):
|
||||
|
||||
```typst
|
||||
#abbr("ABC")
|
||||
```
|
||||
|
||||
Šablona zajistí následující věci:
|
||||
- Zkratka se zobrazí v seznamu zkratek
|
||||
- Při prvním použití zkratky vás šablona donutí zkratku definovat
|
||||
- Definice zkratky bude použita právě jednou (poprvé)
|
||||
|
||||
Při prvním použití zkratky (při definici) bude zkratka v textu vypadat takto:
|
||||
#abbr("ZK", "Zkratka").
|
||||
Při dalších použití bude vypadat takto: #abbr("ZK").
|
||||
|
||||
#highlight[
|
||||
Tedy zkratku _nepřidáváte_ přímo do seznamu zkratek, ale elegantně jí používáte přímo v textu.
|
||||
]
|
||||
|
||||
== Přílohy
|
||||
|
||||
Na konec souboru (nebo klidně doprostřed či na začátek, hlavní je, že pouze jednou) je také možné dát strukturu generující přílohy. Momentálně jsou podporované čtyři typy příloh: odkaz, obsah, PDF soubor vložený na konec dokumentu a odkaz na externí soubor (například přiložený do systému s bakalářskou prací).
|
||||
Jako demonstrace by měla postačit praktická ukázka, která ve zdrojovém kódu následuje hned za tímto odstavcem, a která generuje přílohy tohoto dokumentu.
|
||||
|
||||
#attachments(
|
||||
attach_link("Zdrojový kód této šablony", "https://git.zumepro.cz/tul/tultemplate2"),
|
||||
attach_content("Testovací obsah vygenerovaný Typstem", [Sem lze psát _stylovaný_ obsah.]),
|
||||
)
|
||||
295
theses/bp_en.typ
Normal file
295
theses/bp_en.typ
Normal file
@@ -0,0 +1,295 @@
|
||||
#import "../template/template.typ": *
|
||||
|
||||
#show: tultemplate2.with(
|
||||
style: "classic",
|
||||
faculty: "fm",
|
||||
lang: "en",
|
||||
document: "bp",
|
||||
title_pages: "bp_en_assignment.pdf",
|
||||
title: (
|
||||
en: "Example document for a Bachelor's thesis for FM TUL in English",
|
||||
cs: "Ukázka dokumentu typu Bakalářská práce pro FM TUL v angličtině",
|
||||
),
|
||||
author: "Matěj Žucha",
|
||||
abstract: (
|
||||
en: [
|
||||
This document serves as a practical demonstration of all the important features of the
|
||||
_tultemplate2_ template, with useful examples and their respective descriptions.
|
||||
],
|
||||
cs: [
|
||||
Tento dokument slouží jako praktická ukázka všech důležitcýh funkcí šablony _tultemplate2_,
|
||||
s názornými příklady použítí a jejich podrobným popisem.
|
||||
],
|
||||
),
|
||||
keywords: (
|
||||
en: ("Example", "Keywords", "In", "English"),
|
||||
cs: ("Ukázka", "Klíčových", "Slov", "Česky"),
|
||||
),
|
||||
acknowledgement: (en: "Lorem ipsum dolor sit amet."),
|
||||
citations: "citations.bib",
|
||||
)
|
||||
|
||||
= A quick few words about this template
|
||||
|
||||
This template should serve as an example Bachelor thesis written with the help of the *Typst* programming language and the *tultemplate2* template. It can be used as a starting point for your own report, you just have to learn a few of its useful functions, e.g. how to insert images, tables, citacions or links.
|
||||
|
||||
In contrast with the _documentation.typ_ file, which is available for download on the project's page, this document only contains the most necessary knowledge to complete most reports. If you find this document lacking in features, you can look at the aforementioned docs or contact one of the authors, who will try to help you. Just for the sake of completeness, here is a few words about the Typst programming aanguage and about Typst, as well as about the motivation behind the creation of this template:
|
||||
|
||||
Typst is a professional typesetting language similar to markdown, LaTeX/TeX, groff, etc.
|
||||
|
||||
Typst is the modern equivalent of older typesetting tools, which often lack a lot of important features, such that make it next to impossible to work without today. The user must often import an incountable number of packages, which only provide only the most basic of functionalities - for example proper UTF-8 character support, formatting of elements based on the set locale, etc.
|
||||
|
||||
= Getting Started with the Template
|
||||
|
||||
You have probably downloaded this template from the generator on the website www.tulsablona.cz and inserted it into the Typst online editor. Therefore, besides the source code, you can also see the resulting PDF file. As you probably know, the main difference between traditional word processors like Microsoft Word or LibreOffice Writer and typesetting programs like LaTeX or Typst is the way in which the appearance and content of the document are edited.
|
||||
|
||||
While Word users are used to changing the document directly using buttons and keyboard shortcuts, Typst (and also LaTeX) use a so-called source file, which is nothing more than an ordinary text file, and can then, on request, compile this source file – i.e., turn it into the final document, for example in PDF format.
|
||||
|
||||
That’s why here you will find a description of all the important functions not as a gallery of images showing which buttons to click, but rather as an example and guide to all the special text sequences that Typst supports and that the template interprets differently from the main content of the report.
|
||||
|
||||
== Paragraphs
|
||||
|
||||
Some of you might know this concept from using Markdown, where paragraphs, headings and for the sake of clarity all logically coherent blocks are separated by an empty line. You might have already spotted this while reading through this document. You can try for yourself what happens when
|
||||
you just end the line
|
||||
|
||||
or when you properly use an empty line,
|
||||
|
||||
|
||||
|
||||
|
||||
or maybe what happens if you use two or more empty rows. (spoiler: 1 or more empty lines share identical behavior, while newlining only is interpreted the same as using spaces or tabs)
|
||||
|
||||
Therefore, the user has freedom of choosing whether he uses long lines full of text,
|
||||
or
|
||||
if
|
||||
he
|
||||
prefers
|
||||
a
|
||||
cleaner
|
||||
formatting
|
||||
and manages the separation of content to lines, because it all gets concatenated into a nice consice paragraph.
|
||||
The user has to manually watch out for the length of the paragraphs, so that they are neither too short or too long.
|
||||
|
||||
In the context of paragraphs, it should be mentioned that Typst also manages the alignment of text and words into blocks and the division of words between lines when they don't fit.
|
||||
This behavior complies with the English grammar and typography rules fully, so you don't have to think about that at all.
|
||||
|
||||
== Headings
|
||||
|
||||
První důležitá funkce kromě psaní samotného textu, k čemuž není zapotřebí žádná speciální syntax, jsou nadpisy.
|
||||
Stejně jako v jiných programech, i Typst podporuje nadpisy více úrovní. Pro nadpis první úrovně se používá znaménko
|
||||
rovná se a mezera na začátku řádku, čili ve zdrojovém souboru Typstu je používán takto:
|
||||
|
||||
```typst
|
||||
= Můj nadpis první úrovně
|
||||
```
|
||||
|
||||
Pro nadpis druhé úrovně pak použijeme dvě rovná se, pro nadpis třetí úrovně tři rovná se... Úrovní podnadpisů je dost na to, že vám pravděpodobně nedojdou.
|
||||
|
||||
```typst
|
||||
= Nadpis
|
||||
== Podnadpis
|
||||
=== Podpodnadpis
|
||||
==== už tomu asi rozumíte ...
|
||||
|
||||
A pak obsah
|
||||
```
|
||||
|
||||
== Číslování kapitol
|
||||
|
||||
Asi jste si všimli, že každý nadpis začíná číslem dané kapitoly. Toto číslování provádí Typst automaticky, promítne se následně i v sekci Obsah na začátku souboru, nemusíte se tak opět o nic starat.
|
||||
|
||||
= Používání funkcí
|
||||
|
||||
Používání většiny funkcionalit Typstu je prováděno pomocí tzv. volání funkce. Je to velmi podobné předchozím ukázkám,
|
||||
akorát místo toho, aby se text obalil pouze jedním symbolem či podobnou jednoduchou značkou, obalíme text jménem dané funkce. Syntaxe vypadá nějak takto:
|
||||
```typst
|
||||
#Název_funkce[samotný text nebo jiné parametry]
|
||||
```
|
||||
Pokud v editoru napíšete symbol hashtagu, začne vám automaticky našeptávat všechny možné funkce a jejich popisy. Přejdeme rovnou k dalším praktickým příkladům.
|
||||
|
||||
== Zvýrazňování textu
|
||||
|
||||
Syntaxe základního zvýraznění je velmi podobná například Markdownu. Stačí použít následující symboly:
|
||||
|
||||
```typst
|
||||
*tučně*
|
||||
_kurzívou_
|
||||
```
|
||||
|
||||
Další stylování lze dělat právě přes funkce, viz třeba:
|
||||
|
||||
```typst
|
||||
#strike[přeškrtnuto]
|
||||
#highlight[zvýrazněno]
|
||||
#underline[podtrženo] // underline SHOULD NOT be used
|
||||
```
|
||||
|
||||
Pro úplnost a ukázku je zde přímo v textu *tučný text*, _text kurzívou_, #strike[přeškrtnutý text] a #highlight[text zvýrazněný podle barvy příslušící vaší fakultě], #underline[podtržený text] (ačkoli typografové doporučují podtržení nepoužívat).
|
||||
|
||||
== Odkazy<links>
|
||||
|
||||
Odkazy je možné dělat na URL/URI zdroje, e-maily, telefony, atd...
|
||||
Odkázat URL (URI) je možné bez zavolání funkce, odkaz stačí prostě a jednodušše napsat:
|
||||
https://git.zumepro.cz/tul/tultemplate2
|
||||
|
||||
```typst
|
||||
https://git.zumepro.cz/tul/tultemplate2
|
||||
```
|
||||
|
||||
Tohle interně volá funkci `link`.
|
||||
|
||||
Pokud odkazujeme na méně časté věci (jako e-maily), můžeme použít funkci `link` přímo.
|
||||
```typst
|
||||
#link("mailto:ondrej@mekina.cz")
|
||||
```
|
||||
|
||||
Dalši předpony (URI schémata) můžete najít třeba na Wikipedii
|
||||
https://en.wikipedia.org/wiki/List_of_URI_schemes.
|
||||
|
||||
== Obrázky
|
||||
|
||||
Obrázky je možné vkládat samotné, nebo i s popiskem.
|
||||
|
||||
Obrázek se vloží pomocí funkce `image`:
|
||||
|
||||
Přidání popisku a zároveň zalistování obrázku v indexu (aby se na ně třeba dalo odkazovat) lze
|
||||
udělat pomocí funkce `figure`.
|
||||
|
||||
#block([
|
||||
```typst
|
||||
#figure(
|
||||
image("mujobrazek.jpg"),
|
||||
caption: [
|
||||
*Krásný* obrázek, který vypadá jako obrázek.
|
||||
]
|
||||
)
|
||||
```
|
||||
], breakable: false)
|
||||
|
||||
Tady je praktická ukázka jednoduchého vložení obrázku s popiskem:
|
||||
|
||||
#figure(image("../template/assets/tul_logo.svg", width: 25%), caption: [
|
||||
Logo *TUL*
|
||||
])
|
||||
|
||||
První parametr funkce je zobrazovaný obsah, v našem případě zmíněný `image`. K němu můžeme psát různé parametry, v příkladu máme třeba nastavení šířky obrázku v procentech. Jako poslední je parametr `caption`, s jehož pomocí můžeme nastavit popisek obrázku/figury.
|
||||
|
||||
Obrázky se zobrazí na začátku dokumentu v seznamu (pokud to daný typ dokumentu vyžaduje). I toto za vás Typst dělá automaticky, vám tak stačí do textu přidávat obrázky, jak se to hodí, a všechny se poté korektně zobrazí v Seznamu obrázků s odkazem i správně uvedenou stránkou, na které se obrázek nachází. Obrázky jsou také automaticky číslovány podle předepsaného způsobu, podobně jako kapitoly.
|
||||
|
||||
== Tabulky
|
||||
|
||||
Tabulky lze vytvářet takto:
|
||||
|
||||
```typst
|
||||
#figure(table(
|
||||
columns: 3,
|
||||
table.header([], [*Sloupec 1*], [*Sloupec 2*]),
|
||||
[*Řádek 1*], [a], [b],
|
||||
[*Řádek 2*], [c], [d],
|
||||
), caption: "Moje krásná tabulka")
|
||||
```
|
||||
|
||||
Parametr `columns` udává počet sloupců tabulky. Poté následuje libovolný počet buněk tabulky, pro lepší přehlednost jsou v příkladu jednotlivé řádky oddělené. Nakonec je zde opět parametr `caption` sloužící k zadání popisku tabulky.
|
||||
|
||||
#highlight[Hlavičku tabulky (první řádek) je dobré zabalit do funkce header (viz. výše)], to je
|
||||
kvůli tomu, že Typst do vygenerovaného PDF souboru poté přidá metadata (například pro osoby se
|
||||
zrakovým postižením).
|
||||
|
||||
#figure(table(
|
||||
columns: 3,
|
||||
table.header([], [*Sloupec 1*], [*Sloupec 2*]),
|
||||
[*Řádek 1*], [a], [b],
|
||||
[*Řádek 2*], [c], [d],
|
||||
), caption: "Moje krásná tabulka")
|
||||
|
||||
Tabulky se zobrazí na začátku dokumentu v seznamu (pokud to daný typ dokumentu vyžaduje). Jak už jste asi pochopili, i toto provede šablona automaticky.
|
||||
|
||||
== Citace
|
||||
|
||||
Šablona podporuje správu citací pomocí standardního BibTeX @bibtex souboru, stejně jako
|
||||
například LaTeX. Generování citací v BibTeX zápisu umí téměř každá stránka nebo program, které mají pro citace podporu.
|
||||
Kód takovéto citace ve vhodném formátu stačí přidat do souboru _citations.bib_, poté je možné se
|
||||
na ně odkazovat pomocí `@jmeno_citace`, nebo `#cite(<jmeno_citace>)`. Můžu se tak třeba odkázat na
|
||||
citaci Typstu #cite(<typst>).
|
||||
|
||||
Formát souboru _citations.bib_ je naprosto stejný jako pro LaTeX. Tyto citace lze přímo vložit
|
||||
třeba z webu https://www.citace.com ve formátu BibTeX -- Typst tento formát také umí přečíst.
|
||||
Můžete se do souboru s příponou .bib podívat, zjistíte, že je to opravdu jen obyčejný textový soubor se specifickou strukturou.
|
||||
V přiloženém ukázkovém souboru už nějaké citace jsou - např. již použitá citace se jménem `typst`.
|
||||
|
||||
Soubor, ze kterého se načtou citace lze změnit pomocí argumentu šablony (tj. struktura na začátku souboru):
|
||||
|
||||
```typst
|
||||
#show: tultemplate2.with(
|
||||
...
|
||||
citations: "jinysoubor.bib",
|
||||
...
|
||||
)
|
||||
```
|
||||
|
||||
== Vnitřní odkazy a kotvy<ukazka_odkazu>
|
||||
|
||||
Trochu navážeme na Odkazy (@links).
|
||||
|
||||
Můžete dělat i vnitřní odkazy třeba na kapitoly, stránky nebo obrázky s popiskem (zabalené ve
|
||||
`figure`).
|
||||
|
||||
```typst
|
||||
= Dobrá kapitola<dobra_kapitola>
|
||||
|
||||
Podívejme se na Dobrou kapitolu (@dobra_kapitola).
|
||||
```
|
||||
|
||||
Takhle vypadá kotva:
|
||||
|
||||
```typst
|
||||
<nazev_kotvy>
|
||||
```
|
||||
|
||||
Kotvu dáte někam do souboru a můžete na ní odkazovat stejně jako na citace:
|
||||
|
||||
```typst
|
||||
@nazev_kotvy
|
||||
```
|
||||
Můžeme se podívat na názornou ukázku odkazu (@ukazka_odkazu).
|
||||
|
||||
== Zkratky
|
||||
|
||||
LaTeX TUL šablona má k začátku dokumentu seznam zkratek. Proto jsme ho přidali i do této šablony.
|
||||
Seznam zkratek je v této šabloně nastaven tak, aby se zobrazoval pouze pokud je v něm alespoň jedna
|
||||
zkratka (přišlo nám to poměrně logické).
|
||||
|
||||
Zkratku #abbr("ABC", "Abeceda") vytvoříte (definujete) pomocí:
|
||||
|
||||
```typst
|
||||
#abbr("ABC", "Abeceda")
|
||||
```
|
||||
|
||||
Potom zkratku #abbr("ABC") už můžete použít přímo (bez opakované definice):
|
||||
|
||||
```typst
|
||||
#abbr("ABC")
|
||||
```
|
||||
|
||||
Šablona zajistí následující věci:
|
||||
- Zkratka se zobrazí v seznamu zkratek
|
||||
- Při prvním použití zkratky vás šablona donutí zkratku definovat
|
||||
- Definice zkratky bude použita právě jednou (poprvé)
|
||||
|
||||
Při prvním použití zkratky (při definici) bude zkratka v textu vypadat takto:
|
||||
#abbr("ZK", "Zkratka").
|
||||
Při dalších použití bude vypadat takto: #abbr("ZK").
|
||||
|
||||
#highlight[
|
||||
Tedy zkratku _nepřidáváte_ přímo do seznamu zkratek, ale elegantně jí používáte přímo v textu.
|
||||
]
|
||||
|
||||
== Přílohy
|
||||
|
||||
Na konec souboru (nebo klidně doprostřed či na začátek, hlavní je, že pouze jednou) je také možné dát strukturu generující přílohy. Momentálně jsou podporované dva typy příloh, odkaz a obsah.
|
||||
Jako demonstrace by měla postačit praktická ukázka, která ve zdrojovém kódu následuje hned za tímto odstavcem, a která generuje přílohy tohoto dokumentu.
|
||||
|
||||
#attachments(
|
||||
attach_link("Zdrojový kód této šablony", "https://git.zumepro.cz/tul/tultemplate2"),
|
||||
attach_content("Testovací obsah vygenerovaný Typstem", [Sem lze psát _stylovaný_ obsah.]),
|
||||
)
|
||||
0
theses/dis_cs.typ
Normal file
0
theses/dis_cs.typ
Normal file
0
theses/dis_en.typ
Normal file
0
theses/dis_en.typ
Normal file
309
theses/dp_cs.typ
Normal file
309
theses/dp_cs.typ
Normal file
@@ -0,0 +1,309 @@
|
||||
#import "../template/template.typ": *
|
||||
|
||||
#show: tultemplate2.with(
|
||||
style: "classic",
|
||||
faculty: "fm",
|
||||
lang: "cs",
|
||||
document: "dp",
|
||||
title_pages: "dp_cs_assignment.pdf",
|
||||
title: (
|
||||
cs: "Ukázka dokumentu typu Diplomová práce pro FM TUL v češtině",
|
||||
en: "Example document for a Master's thesis for FM TUL in Czech",
|
||||
),
|
||||
author: "Matěj Žucha",
|
||||
abstract: (
|
||||
cs: [
|
||||
Tento dokument slouží jako praktická ukázka všech důležitcýh funkcí šablony _tultemplate2_,
|
||||
s názornými příklady použítí a jejich podrobným popisem.
|
||||
],
|
||||
en: [
|
||||
This document serves as a practical demonstration of all the important features of the
|
||||
_tultemplate2_ template, with useful examples and their respective descriptions.
|
||||
]
|
||||
),
|
||||
keywords: (
|
||||
cs: ("Ukázka", "Klíčových", "Slov", "Česky"),
|
||||
en: ("Example", "Keywords", "In", "English"),
|
||||
),
|
||||
acknowledgement: (cs: "Lorem ipsum dolor sit amet."),
|
||||
citations: "citations.bib",
|
||||
)
|
||||
|
||||
= Co najdete v této šabloně
|
||||
|
||||
Tato šablona má sloužit jako ukázková bakalářská práce napsaná pomocí jazyka *Typst* a šablony
|
||||
*tultemplate2*. Může posloužit jako jednoduchý základ i pro vaši práci, stačí se naučit používat
|
||||
pár užitečných funkcí, jako např. vkládání obrázků, tabulek, citací nebo odkazů.
|
||||
|
||||
Na rozdíl od souboru _example.typ_, který je dostupný ke stažení na stránkách projektu, obsahuje
|
||||
tento dokument jenom to nejpotřebnější ze znalostí, co postačí k úspěšnému napsání práce. Jen pro
|
||||
úplnost je zde ve zkratce něco málo o jazyce typst a motivaci k tvorbě této šablony:
|
||||
|
||||
Typst je profesionální sázecí nástroj podobný markdownu, LaTeXu/TeXu, groffu, atd.
|
||||
|
||||
Typst je moderní obdobou starších nástrojů, které postrádají spoustu důležitých funkcí, bez kterých
|
||||
se v dnešní době prakticky nedá fungovat. Uživatel často musí importovat nepřeberné množství
|
||||
balíčků, které poskytují (podle mě) naprosto základní funkcionalitu - jako například správná podpora
|
||||
UTF-8 znaků, formátování prvků na základě jazykového lokálu, apod.
|
||||
|
||||
= Začínáme se šablonou
|
||||
|
||||
Tuto šablonu jste si pravděpodobně stáhli z generátoru na webu www.tulsablona.cz a vložili ji do Typst
|
||||
online editoru. Tím pádem vidíte kromě zdrojového kódu také výsledný PDF soubor. Jak už asi víte, hlavní
|
||||
rozdíl mezi tradičními textovými procesory jako Microsoft Word nebo LibreOffice Writer a mezi sázecími
|
||||
programy jako LaTeX nebo Typst je právě způsob, kterým se upravuje vzhled a obsah dokumentu.
|
||||
|
||||
Zatímco ve Wordu jsou uživatelé zvyklí, že pomocí tlačítek a klávesových zkratek mění dokument napřímo,
|
||||
Typst (a i LaTeX) používají tzv. zdrojový soubor, který není ničím jiným než obyčejným textovým souborem,
|
||||
a následně na vyžádání umí tento zdrojový soubor zkompilovat tj. proměnit na výsledný dokument, např. ve formátu PDF.
|
||||
|
||||
Proto zde najdete popis všech důležitých funkcí nikoliv jako galerii obrázků toho, na která tlačítka se má
|
||||
klikat, nýbrž jako ukázka a návod všech speciálních sekvencí textu, které Typst podporuje a které šablona vyhodnocuje jinak než obsah zprávy.
|
||||
|
||||
== Odstavce
|
||||
|
||||
Jak jsou někteří z vás možná zvyklí z Markdownu, odstavce, nadpisy a vlastně pro přehlednost všechny
|
||||
logicky oddělené bloky se oddělují prázným řádkem. Toho jste si jistě mohli při prohlížení tohoto souboru
|
||||
všimnout. Můžete si vyzkoušet, co se stane, když
|
||||
použijete jenom ukončení řádku enterem,
|
||||
|
||||
nebo když použijete zmíněný prázdný řádek,
|
||||
|
||||
|
||||
|
||||
anebo co se stane při použití dvou a více prázdných řádků. (spoiler: 1 a více prázdných řádků mají identické
|
||||
chování, pouze ukončení řádku je interpretováno stejně jako např. mezerník)
|
||||
|
||||
Uživatel má tím pádem svobodu v tom, jestli ve zdrojovém souboru používá dlouhé řádky plné textu,
|
||||
nebo
|
||||
má
|
||||
raději
|
||||
přehlednější
|
||||
formátování
|
||||
a sám si obsah dělí na řádky, protože ve výsledném PDF souboru se stejně spojí do jednoho celistvého odstavce.
|
||||
Musí akorát ručně dbát na to, aby odstavce nebyly příliš krátké, ani příliš dlouhé.
|
||||
|
||||
S souvislosti s odstavci bych ještě zmínil, že Typst se za vás stará také o zarovnávání písma a slov do bloků
|
||||
a dělení slov mezi řádky. Chováním odpovídá pravidlům českého pravopisu a typografie, takže se o to nemusíte vůbec starat.
|
||||
|
||||
== Nadpisy
|
||||
|
||||
První důležitá funkce kromě psaní samotného textu, k čemuž není zapotřebí žádná speciální syntax, jsou nadpisy.
|
||||
Stejně jako v jiných programech, i Typst podporuje nadpisy více úrovní. Pro nadpis první úrovně se používá znaménko
|
||||
rovná se a mezera na začátku řádku, čili ve zdrojovém souboru Typstu je používán takto:
|
||||
|
||||
```typst
|
||||
= Můj nadpis první úrovně
|
||||
```
|
||||
|
||||
Pro nadpis druhé úrovně pak použijeme dvě rovná se, pro nadpis třetí úrovně tři rovná se.
|
||||
Šablona *tultemplate2* Vám ovšem bohužel nedovolí nadpis čtvrté a další úrovně, protože by takový
|
||||
nadpis porušoval směrnice TUL o formátování dokumentů. Ale nemusíte se bát. Pokud takový nadpis
|
||||
uděláte -- šablona vyhodí chybu, aby vás na to upozornila.
|
||||
|
||||
```typst
|
||||
= Nadpis
|
||||
== Podnadpis
|
||||
=== Podpodnadpis
|
||||
|
||||
A pak obsah
|
||||
```
|
||||
|
||||
== Číslování kapitol
|
||||
|
||||
Asi jste si všimli, že každý nadpis začíná číslem dané kapitoly. Toto číslování provádí Typst automaticky, promítne se následně i v sekci Obsah na začátku souboru, nemusíte se tak opět o nic starat.
|
||||
|
||||
= Používání funkcí
|
||||
|
||||
Používání většiny funkcionalit Typstu je prováděno pomocí tzv. volání funkce. Je to velmi podobné předchozím ukázkám,
|
||||
akorát místo toho, aby se text obalil pouze jedním symbolem či podobnou jednoduchou značkou, obalíme text jménem dané funkce. Syntaxe vypadá nějak takto:
|
||||
```typst
|
||||
#Název_funkce[samotný text nebo jiné parametry]
|
||||
```
|
||||
Pokud v editoru napíšete symbol hashtagu, začne vám automaticky našeptávat všechny možné funkce a jejich popisy. Přejdeme rovnou k dalším praktickým příkladům.
|
||||
|
||||
== Zvýrazňování textu
|
||||
|
||||
Syntaxe základního zvýraznění je velmi podobná například Markdownu. Stačí použít následující symboly:
|
||||
|
||||
```typst
|
||||
*tučně*
|
||||
_kurzívou_
|
||||
```
|
||||
|
||||
Další stylování lze dělat právě přes funkce, viz třeba:
|
||||
|
||||
```typst
|
||||
#strike[přeškrtnuto]
|
||||
#highlight[zvýrazněno]
|
||||
#underline[podtrženo] // podtržení by se NEMĚLO používat
|
||||
```
|
||||
|
||||
Pro úplnost a ukázku je zde přímo v textu *tučný text*, _text kurzívou_, #strike[přeškrtnutý text], #highlight[text zvýrazněný podle barvy příslušící vaší fakultě] a #underline[podtržený text] (ačkoli typografové doporučují podtržení nepoužívat).
|
||||
|
||||
== Odkazy<links>
|
||||
|
||||
Odkazy je možné dělat na URL/URI zdroje, e-maily, telefony, atd...
|
||||
Odkázat URL (URI) je možné bez zavolání funkce, odkaz stačí prostě a jednodušše napsat:
|
||||
https://git.zumepro.cz/tul/tultemplate2
|
||||
|
||||
```typst
|
||||
https://git.zumepro.cz/tul/tultemplate2
|
||||
```
|
||||
|
||||
Tohle interně volá funkci `link`.
|
||||
|
||||
Pokud odkazujeme na méně časté věci (jako e-maily), můžeme použít funkci `link` přímo.
|
||||
```typst
|
||||
#link("mailto:ondrej@mekina.cz")
|
||||
```
|
||||
|
||||
Dalši předpony (URI schémata) můžete najít třeba na Wikipedii
|
||||
https://en.wikipedia.org/wiki/List_of_URI_schemes.
|
||||
|
||||
== Obrázky
|
||||
|
||||
Obrázky je možné vkládat samotné, nebo i s popiskem.
|
||||
Obrázek se vloží pomocí funkce `image`.
|
||||
|
||||
Přidání popisku a zároveň zalistování obrázku v indexu (aby se na ně třeba dalo odkazovat) lze
|
||||
udělat pomocí funkce `figure`.
|
||||
|
||||
#block([
|
||||
```typst
|
||||
#figure(
|
||||
image("mujobrazek.jpg"),
|
||||
caption: [
|
||||
*Krásný* obrázek, který vypadá jako obrázek.
|
||||
]
|
||||
)
|
||||
```
|
||||
], breakable: false)
|
||||
|
||||
Tady je praktická ukázka jednoduchého vložení obrázku s popiskem:
|
||||
|
||||
#figure(image("../template/assets/tul_logo.svg", width: 25%), caption: [
|
||||
Logo *TUL*
|
||||
])
|
||||
|
||||
První parametr funkce je zobrazovaný obsah, v našem případě zmíněný `image`. K němu můžeme psát různé parametry, v příkladu máme třeba nastavení šířky obrázku v procentech. Jako poslední je parametr `caption`, s jehož pomocí můžeme nastavit popisek obrázku/figury.
|
||||
|
||||
Obrázky se zobrazí na začátku dokumentu v seznamu (pokud to daný typ dokumentu vyžaduje). I toto za vás Typst dělá automaticky, vám tak stačí do textu přidávat obrázky, jak se to hodí, a všechny se poté korektně zobrazí v Seznamu obrázků s odkazem i správně uvedenou stránkou, na které se obrázek nachází. Obrázky jsou také automaticky číslovány podle předepsaného způsobu, podobně jako kapitoly.
|
||||
|
||||
== Tabulky
|
||||
|
||||
Tabulky lze vytvářet takto:
|
||||
|
||||
```typst
|
||||
#figure(table(
|
||||
columns: 3,
|
||||
table.header([], [*Sloupec 1*], [*Sloupec 2*]),
|
||||
[*Řádek 1*], [a], [b],
|
||||
[*Řádek 2*], [c], [d],
|
||||
), caption: "Moje krásná tabulka")
|
||||
```
|
||||
|
||||
Parametr `columns` udává počet sloupců tabulky. Poté následuje libovolný počet buněk tabulky, pro lepší přehlednost jsou v příkladu jednotlivé řádky oddělené. Nakonec je zde opět parametr `caption` sloužící k zadání popisku tabulky.
|
||||
|
||||
#highlight[Hlavičku tabulky (první řádek) je dobré zabalit do funkce header (viz. výše)], to je
|
||||
kvůli tomu, že Typst do vygenerovaného PDF souboru poté přidá metadata (například pro osoby se
|
||||
zrakovým postižením).
|
||||
|
||||
#figure(table(
|
||||
columns: 3,
|
||||
table.header([], [*Sloupec 1*], [*Sloupec 2*]),
|
||||
[*Řádek 1*], [a], [b],
|
||||
[*Řádek 2*], [c], [d],
|
||||
), caption: "Moje krásná tabulka")
|
||||
|
||||
Tabulky se zobrazí na začátku dokumentu v seznamu (pokud to daný typ dokumentu vyžaduje). Jak už jste asi pochopili, i toto provede šablona automaticky.
|
||||
|
||||
== Citace
|
||||
|
||||
Šablona podporuje správu citací pomocí standardního BibTeX @bibtex souboru, stejně jako
|
||||
například LaTeX. Generování citací v BibTeX zápisu umí téměř každá stránka nebo program, které mají pro citace podporu.
|
||||
Kód takovéto citace ve vhodném formátu stačí přidat do souboru _citations.bib_, poté je možné se
|
||||
na ně odkazovat pomocí `@jmeno_citace`, nebo `#cite(<jmeno_citace>)`. Můžu se tak třeba odkázat na
|
||||
citaci Typstu #cite(<typst>).
|
||||
|
||||
Formát souboru _citations.bib_ je naprosto stejný jako pro LaTeX. Tyto citace lze přímo vložit
|
||||
třeba z webu https://www.citace.com ve formátu BibTeX -- Typst tento formát také umí přečíst.
|
||||
Můžete se do souboru s příponou .bib podívat, zjistíte, že je to opravdu jen obyčejný textový soubor se specifickou strukturou.
|
||||
V přiloženém ukázkovém souboru už nějaké citace jsou - např. již použitá citace se jménem `typst`.
|
||||
|
||||
Soubor, ze kterého se načtou citace lze změnit pomocí argumentu šablony (tj. struktura na začátku souboru):
|
||||
|
||||
```typst
|
||||
#show: tultemplate2.with(
|
||||
...
|
||||
citations: "jinysoubor.bib",
|
||||
...
|
||||
)
|
||||
```
|
||||
|
||||
== Vnitřní odkazy a kotvy<ukazka_odkazu>
|
||||
|
||||
Trochu navážeme na Odkazy (@links).
|
||||
|
||||
Můžete dělat i vnitřní odkazy třeba na kapitoly, stránky nebo obrázky s popiskem (zabalené ve
|
||||
`figure`).
|
||||
|
||||
```typst
|
||||
= Dobrá kapitola<dobra_kapitola>
|
||||
|
||||
Podívejme se na Dobrou kapitolu (@dobra_kapitola).
|
||||
```
|
||||
|
||||
Takhle vypadá kotva:
|
||||
|
||||
```typst
|
||||
<nazev_kotvy>
|
||||
```
|
||||
|
||||
Kotvu dáte někam do souboru a můžete na ní odkazovat stejně jako na citace:
|
||||
|
||||
```typst
|
||||
@nazev_kotvy
|
||||
```
|
||||
Můžeme se podívat na názornou ukázku odkazu (@ukazka_odkazu).
|
||||
|
||||
== Zkratky
|
||||
|
||||
LaTeX TUL šablona má k začátku dokumentu seznam zkratek. Proto jsme ho přidali i do této šablony.
|
||||
Seznam zkratek je v této šabloně nastaven tak, aby se zobrazoval pouze pokud je v něm alespoň jedna
|
||||
zkratka (přišlo nám to poměrně logické).
|
||||
|
||||
Zkratku #abbr("ABC", "Abeceda") vytvoříte (definujete) pomocí:
|
||||
|
||||
```typst
|
||||
#abbr("ABC", "Abeceda")
|
||||
```
|
||||
|
||||
Potom zkratku #abbr("ABC") už můžete použít přímo (bez opakované definice):
|
||||
|
||||
```typst
|
||||
#abbr("ABC")
|
||||
```
|
||||
|
||||
Šablona zajistí následující věci:
|
||||
- Zkratka se zobrazí v seznamu zkratek
|
||||
- Při prvním použití zkratky vás šablona donutí zkratku definovat
|
||||
- Definice zkratky bude použita právě jednou (poprvé)
|
||||
|
||||
Při prvním použití zkratky (při definici) bude zkratka v textu vypadat takto:
|
||||
#abbr("ZK", "Zkratka").
|
||||
Při dalších použití bude vypadat takto: #abbr("ZK").
|
||||
|
||||
#highlight[
|
||||
Tedy zkratku _nepřidáváte_ přímo do seznamu zkratek, ale elegantně jí používáte přímo v textu.
|
||||
]
|
||||
|
||||
== Přílohy
|
||||
|
||||
Na konec souboru (nebo klidně doprostřed či na začátek, hlavní je, že pouze jednou) je také možné dát strukturu generující přílohy. Momentálně jsou podporované čtyři typy příloh: odkaz, obsah, PDF soubor vložený na konec dokumentu a odkaz na externí soubor (například přiložený do systému s diplomovou prací).
|
||||
Jako demonstrace by měla postačit praktická ukázka, která ve zdrojovém kódu následuje hned za tímto odstavcem, a která generuje přílohy tohoto dokumentu.
|
||||
|
||||
#attachments(
|
||||
attach_link("Zdrojový kód této šablony", "https://git.zumepro.cz/tul/tultemplate2"),
|
||||
attach_content("Testovací obsah vygenerovaný Typstem", [Sem lze psát _stylovaný_ obsah.]),
|
||||
)
|
||||
0
theses/dp_en.typ
Normal file
0
theses/dp_en.typ
Normal file
0
theses/hab_cs.typ
Normal file
0
theses/hab_cs.typ
Normal file
0
theses/hab_en.typ
Normal file
0
theses/hab_en.typ
Normal file
33
theses/prj_cs.typ
Normal file
33
theses/prj_cs.typ
Normal file
@@ -0,0 +1,33 @@
|
||||
#import "../template/template.typ": *
|
||||
|
||||
#show: tultemplate2.with(
|
||||
style: "classic",
|
||||
faculty: "fm",
|
||||
lang: "cs",
|
||||
document: "prj",
|
||||
title: (
|
||||
cs: "Ukázka dokumentu typu Projekt pro FM TUL v češtině",
|
||||
en: "Example document of type Project for FM TUL in Czech",
|
||||
),
|
||||
author: "Matěj Žucha",
|
||||
author_pronouns: "masculine",
|
||||
programme: (cs: "MI6000000007 Přísně tajné"),
|
||||
specialization: (cs: "Vytváření šablon"),
|
||||
supervisor: "Ondřej Mekina",
|
||||
abstract: (
|
||||
cs: [
|
||||
Tento dokument slouží jako praktická ukázka všech důležitcýh funkcí šablony _tultemplate2_,
|
||||
s názornými příklady použítí a jejich podrobným popisem.
|
||||
],
|
||||
en: [
|
||||
This document serves as a practical demonstration of all the important features of the
|
||||
_tultemplate2_ template, with useful examples and their respective descriptions.
|
||||
],
|
||||
),
|
||||
keywords: (
|
||||
cs: ("Ukázka", "Klíčových", "Slov", "Česky"),
|
||||
en: ("Example", "Keywords", "In", "English"),
|
||||
),
|
||||
acknowledgement: (cs: "Lorem ipsum dolor sit amet."),
|
||||
citations: "citations.bib",
|
||||
)
|
||||
0
theses/prj_en.typ
Normal file
0
theses/prj_en.typ
Normal file
0
theses/sp_cs.typ
Normal file
0
theses/sp_cs.typ
Normal file
0
theses/sp_en.typ
Normal file
0
theses/sp_en.typ
Normal file
0
theses/teze_cs.typ
Normal file
0
theses/teze_cs.typ
Normal file
0
theses/teze_en.typ
Normal file
0
theses/teze_en.typ
Normal file
Reference in New Issue
Block a user