32 Commits

Author SHA1 Message Date
e6c1d1734b unify publisher and published join symbol for all types 2025-11-04 22:23:53 +01:00
b7062eabd7 partially implement webpage 2025-11-04 22:14:24 +01:00
34ac2e0b7d implement book 2025-11-02 21:22:46 +01:00
e02bf24ea2 implement journal article 2025-11-02 16:52:30 +01:00
a391b75dfc add author name/names 2025-11-01 23:39:49 +01:00
69124ad9c5 start rewrite 2025-11-01 19:03:15 +01:00
8ea283d4ea update citation styles 2025-11-01 16:19:35 +01:00
1d98975e81 add more citations tests 2025-11-01 16:19:01 +01:00
242eca8755 add other recommended non-breaking terms 2025-10-22 13:09:27 +02:00
a295b9b419 remove spaces at the end of lines 2025-10-21 22:18:45 +02:00
378bd509c9 improve auto-nbsp detection algorithm 2025-10-21 22:17:48 +02:00
bdbda1189f improve README wording a little 2025-10-21 20:46:14 +02:00
13465c8d78 expand documentation in README 2025-10-21 20:36:48 +02:00
7193b648f2 add remark that underline should not be used to examples 2025-10-20 19:20:32 +02:00
0c1f227c7f separate title pages in theses examples 2025-10-20 19:18:12 +02:00
e8796c7809 fallback to default pronouns in english 2025-10-20 19:15:25 +02:00
49320f1e02 disable font compensation for raw blocks 2025-10-20 18:30:29 +02:00
8d2dfb146d change the default text font to inter 2025-10-20 18:26:32 +02:00
f9cf4491eb remove first line indent for paragraphs 2025-10-17 11:53:45 +02:00
255ff918be add real author names to example assignment 2025-10-17 11:16:22 +02:00
425730c619 enable release profile for documentation 2025-10-16 22:49:31 +02:00
cea0718719 fix bibliography example and test files 2025-10-16 22:31:26 +02:00
5e7f5f92b2 rename citation styles folder 2025-10-16 22:29:07 +02:00
3bd64ec2b1 remove hayagriva 2025-10-16 22:25:40 +02:00
02de1672d3 add assignment example for bp cs 2025-10-16 22:21:04 +02:00
f33129f809 implement generation of assignment 2025-10-16 22:20:26 +02:00
dd6ecb5c9b add type signature type 2025-10-16 22:17:41 +02:00
9dcb466d84 add more citation tests
Co-authored-by: Michal Procházka <michal@prochazkaml.eu>
2025-10-16 20:39:48 +02:00
2916234223 update citation style file structure 2025-10-16 20:32:08 +02:00
b63706a8a5 adjust chapter citing and author names to better match čsn 690:2022 citation norm 2025-10-16 19:55:42 +02:00
eb60a4bb89 export title pages generation support 2025-10-16 19:53:06 +02:00
a2b749e43d start switching to hayagriva 2025-10-12 23:33:18 +02:00
26 changed files with 1040 additions and 292 deletions

View File

@@ -6,13 +6,9 @@ view_documentation: documentation.pdf
watch_documentation:
typst watch --font-path template/fonts documentation.typ & xdg-open documentation.pdf
.PHONY: watch_bp_cs
watch_bp_cs: bp.pdf
xdg-open bp.pdf & typst watch --root . --font-path template/fonts theses/bp.typ bp.pdf
.PHONY: watch_dp_cs
watch_dp_cs: dp.pdf
xdg-open dp.pdf & typst watch --root . --font-path template/fonts theses/dp.typ dp.pdf
.PHONY: watch_%
watch_%: %.pdf %_assignment.pdf
xdg-open $< & typst watch --root . --font-path template/fonts theses/$*.typ $<
.PHONY: documentation
documentation: documentation.pdf
@@ -36,7 +32,7 @@ bundle: $(BUNDLE_TARGETS)
.PHONY: clean
clean:
rm -rf pack
rm -f documentation.pdf bp.pdf dp.pdf
rm -f documentation.pdf bp_cs.pdf bp_assignment_cs.pdf dp_cs.pdf
pack/tultemplate2.zip: $(PACK_TARGETS)
@mkdir -p $(@D)
@@ -93,13 +89,13 @@ $(BUNDLEDIR)/template/%: template/%
TEMPLATE_SRCS := $(shell find template -type f)
bp.pdf: theses/bp.typ
typst compile --font-path template/fonts --root . $< $@
dp.pdf: theses/dp.typ
typst compile --font-path template/fonts --root . $< $@
documentation.pdf: documentation.typ $(TEMPLATE_SRCS)
typst compile --font-path template/fonts $<
%_assignment.pdf: theses/%_assignment.typ
typst compile --font-path template/fonts --root . $< $@
%.pdf: theses/%.typ %_assignment.pdf
typst compile --font-path template/fonts --root . $< $@
include tests/make.mk

View File

@@ -2,24 +2,102 @@
Easy Typst template for TUL documents. Begin by compiling `example.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
```sh
make
```
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.
That will compile the example document and view it.
If you wish to help with the development (or just want to ask us something), feel free to reach out
to the maintainer:
## Repo structure note
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:
> `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)
### 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
```
This will compile it once and open it using `xdg-open`.
### 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`

View File

@@ -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},
}

View File

@@ -6,6 +6,8 @@
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.
@@ -301,94 +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
- `dp` - Diplomová práce
#line()
- `title` (nadpis dokumentu)
- Ve formátu `(<zkratka_jazyka>: "<nadpis>")`, například `(cs: "Můj nadpis")`
- Pro většinu dokumentů (kromě `other`) jsou vyžadovány verze _cs_ a _en_ (kvůli abstraktu).
#line()
- `author` (autor/autoři dokumentu)
- Příklad: `"Pavel Novák"` nebo `"Petra Velká, Jindřich Peterka"`
#line()
- `author_pronouns` (jazykový rod autora - není potřeba pro angličtinu, která základní hodnotu)
- Pro vybraný jazyk _cs_:
- `"masculine"` - Mužský rod
- `"feminine"` - Ženský rod
- `"we"` - Množné číslo
- Pro vybraný jazyk _en_:
- *`"me"`* - První osoba jednotného čísla
- `"we"` - První osoba množného čísla
#line()
- `supervisor` (vedoucí práce) <arg_supervisor>
- V podobě textového řetězce, příklad: `"prof. Jindřich Jindřich"`
- Ve formátu `(name: "<jméno>", institute: "<institut>")` (toto lze využít například při DP)
#line()
- `consultant` (konzultant práce)
- Stejně jako u #link(<arg_supervisor>, [`supervisor`])
#line()
- `programme` (studijní program) <arg_programme>
- Ve formátu `(<zkratka_jazyka>: "<název_programu>")`
- Je vyžadován jazyk, který je vybrán pro celou šablonu -- tohle je pojistka, aby uživatel šablony
nevynechal vybraný jazyk
#line()
- `specialization` (specializace)
- Stejně jako #link(<arg_programme>, [`programme`])
#line()
- `abstract` (abstrakt)
- Ve formátu `(<zkratka_jazyka>: [<abstrakt>])`, například `(cs: [Můj *krásný* abstrakt.])`
- Dokumenty vyžadují _cs_ i _en_ abstrakt (kromě typu dokumentu `other`).
#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 k začátku dokumentu seznam zkratek. Proto jsme ho přidali i do této šablony.

View File

@@ -1,4 +1,4 @@
#import "utils.typ": assert_type_signature, is_none, map_none, deref
#import "utils.typ": assert_type_signature, is_none, map_none, deref, assert_dict_has
#let arguments_structure = (
document: (
@@ -25,12 +25,19 @@
keywords: "dictionary[string : array[string]] | none",
),
acknowledgement: "dictionary[string : string | content] | none",
assignment: "string | none",
assignment: "dictionary[string : any] | content | string | none",
citations: "string",
);
#let assignment_structure = (
personal_number: "string",
department: "string",
academical_year: "string",
content: "content",
);
#let check_arguments(args) = {
#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("_", " "));
@@ -52,7 +59,7 @@
}
}
check_arguments_dict(arguments_structure, args, ());
check_arguments_dict(structure, args, if is_none(namespace) { () } else { (namespace,) });
}
#let get_arg_single(args, path) = {
@@ -122,6 +129,14 @@
}
}
#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,
@@ -141,7 +156,7 @@
project: project_info,
abstract: abstract_info,
acknowledgement: acknowledgement,
assignment: assignment,
assignment: assignment_info(assignment),
citations: citations,
)
}

View File

@@ -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="&#160;"/>
<date-part name="month" prefix="&#160;"/>
<date-part name="year" prefix="&#160;"/>
</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>
@@ -312,7 +312,7 @@
<key variable="citation-number"/>
</sort>
<layout>
<text variable="citation-number" display="left-margin" prefix="[" 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>

View File

@@ -0,0 +1,187 @@
<?xml version="1.0" encoding="UTF-8"?>
<style xmlns="http://purl.org/net/xbiblio/csl" version="1.0" class="in-text" default-locale="cs-CZ">
<info>
<author>
<name>Ondřej Mekina</name>
<email>ondrej@mekina.cz</email>
<uri>https://mekina.cz</uri>
</author>
<category citation-format="numeric"/>
<category field="generic-base"/>
<id>019a408a-273d-700e-ab55-02752340c208</id>
<link href="https://git.zumepro.cz/tul/tultemplate2/src/branch/master/template/citations/tul-csn690-numeric-square_brackets.csl" rel="self"/>
<published>2025-11-01T18:52:07.296874071+01:00</published>
<rights license="https://opensource.org/licenses/MIT">MIT</rights>
<summary>Citation style based on ČSN 690:2022 (numeric, brackets), adjusted for use at Technical University of Liberec</summary>
<title>TUL ČSN 690:2022 (numeric, brackets)</title>
<title-short>TUL</title-short>
<updated>2025-11-01T19:00:33.673095652+01:00</updated>
</info>
<locale lang="cs">
<terms>
<term name="ad">&#160;př.&#160;n.&#160;l.</term>
<term name="online">online</term>
<term name="bc">&#160;n.&#160;l.</term>
<term name="open-quote">„</term>
<term name="close-quote">“</term>
<term name="page-range-delimiter"></term>
<term name="accessed">citováno</term>
<term name="and others">a další</term>
<term name="available at">dostupné z</term>
<term name="no date">bez data</term>
<term name="retrieved">dostupné</term>
<term name="from">z</term>
<term name="and others">a další</term>
<term name="and">a</term>
</terms>
</locale>
<macro name="author">
<names variable="author">
<name and="text" name-as-sort-order="first" sort-separator=", " delimiter="; " delimiter-precedes-et-al="never" delimiter-precedes-last="never" et-al-use-first="5">
<name-part name="family" text-case="uppercase"/>
</name>
<et-al term="and others"/>
</names>
</macro>
<macro name="title">
<text variable="title"/>
</macro>
<macro name="format">
<choose>
<if variable="URL">
<text term="online" text-case="capitalize-first"/>
</if>
</choose>
</macro>
<macro name="published-in">
<!-- TODO: FIX: Doesn't work for webpage -->
<text variable="container-title"/>
</macro>
<macro name="publisher">
<choose>
<if variable="publisher-place">
<text variable="publisher-place"/>
<choose>
<if variable="publisher">
<text value=":&#160;"/>
</if>
</choose>
</if>
</choose>
<text variable="publisher"/>
</macro>
<macro name="numbering-paging">
<choose>
<if variable="volume">
<text variable="volume" prefix="sv.&#160;"/>
<choose>
<if variable="issue page" match="any">
<text value=", "/>
</if>
</choose>
</if>
</choose>
<choose>
<if variable="issue">
<text variable="issue" prefix="č.&#160;"/>
<choose>
<if variable="page" match="any">
<text value=", "/>
</if>
</choose>
</if>
</choose>
<text variable="page" prefix="str.&#160;"/>
</macro>
<macro name="published">
<date variable="issued">
<date-part name="year"/>
<date-part name="month" form="numeric-leading-zeros" prefix="-"/>
<date-part name="day" form="numeric-leading-zeros" prefix="-"/>
</date>
</macro>
<macro name="id">
<choose>
<if variable="ISSN">
<text prefix="ISSN&#160;" variable="ISSN"/>
<choose>
<if variable="ISBN DOI" match="any">
<text value=". "/>
</if>
</choose>
</if>
</choose>
<choose>
<if variable="ISBN">
<text prefix="ISBN&#160;" variable="ISBN"/>
<choose>
<if variable="DOI">
<text value=". "/>
</if>
</choose>
</if>
</choose>
<text prefix="DOI&#160;" variable="DOI"/>
</macro>
<macro name="accessed">
<choose>
<if variable="accessed">
<group prefix="[" suffix="]">
<text term="accessed" suffix=" "/>
<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>
</group>
</if>
</choose>
</macro>
<macro name="url">
<choose>
<if variable="URL">
<text term="retrieved" text-case="capitalize-first" suffix=" "/>
<text term="from" suffix=":&#160;"/>
<text variable="URL"/>
</if>
</choose>
</macro>
<citation prefix="[" suffix="]" delimiter=", ">
<layout>
<text variable="citation-number"/>
</layout>
</citation>
<bibliography>
<layout>
<text variable="citation-number" display="left-margin" prefix="[" suffix="]"/>
<group>
<text macro="author" suffix=". "/>
<text macro="title" suffix=". " font-style="italic"/>
<choose>
<if type="book">
<text macro="numbering-paging" suffix=". "/>
</if>
<else-if type="article-journal article-magazine article-newspaper post-weblog webpage" match="any">
<text macro="format" suffix=". "/>
<text macro="published-in" suffix=". "/>
</else-if>
<else>
<text value=" TODO "/>
</else>
</choose>
<text macro="publisher"/>
<choose>
<if variable="issued" match="any">
<text value=", "/>
</if>
<else>
<text value=". "/>
</else>
</choose>
<text macro="published" suffix=". "/>
<text macro="id" suffix=". "/>
<text macro="accessed"/>
</group>
</layout>
</bibliography>
</style>

View File

@@ -3,7 +3,7 @@
#import "common.typ": mainpage, assignment, external_title_pages
#import "thesis_base.typ": thesis_base
#let bp(args, content) = {
#let bp(args) = {
let language = req_arg(args, "document.language");
let programme = req_arg(args, "author.programme");
assert_dict_has((language,), programme, "study programme");
@@ -15,5 +15,4 @@
mainpage(args);
assignment(args);
thesis_base(args, content);
}

View File

@@ -8,18 +8,19 @@
// thesis types
#import "bp.typ": bp
#import "dp.typ": dp
#import "other.typ": other
#import "thesis_base.typ": thesis_base
#import "other.typ": other_title_page, other_base
#import "thesis_base.typ": thesis_base, thesis_base_title_pages
#let template_classic(args, content) = {
#let document_types = (
"bp": (bp, thesis_base, thesis_base_title_pages),
"dp": (dp, thesis_base, thesis_base_title_pages),
"other": (other_title_page, other_base, (args) => {}),
)
#let prep_args(args) = {
let language = req_arg(args, "document.language");
// argument pre-checking
let document_types = (
"bp": bp,
"dp": dp,
"other": other,
)
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"));
@@ -30,14 +31,34 @@
args, "acknowledgement", (v) => assert_dict_has((language,), v, "acknowledgement content")
);
args.assignment = map_arg(args, "assignment", (v) => "../../" + v);
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);
if not is_none(get_arg(args, "title_pages")) and not req_arg(args, "document.type") == "other" {
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"));
thesis_base(args, content);
document_types.at(req_arg(args, "document.type")).at(1)(args, content);
} else {
document_types.at(req_arg(args, "document.type"))(args, content);
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);
}

View File

@@ -5,7 +5,6 @@
#let base_font = "Inter";
#let mono_font = "Noto Sans Mono";
#let mono_font_compensation = 1.3010575323879552;
#let serif_font = "Merriweather";
#let tul_logomark_size = 6.5em;
@@ -36,8 +35,8 @@
});
// text
set text(font: serif_font);
set par(justify: true, first-line-indent: 0.63cm);
set text(font: base_font);
set par(justify: true);
if language == "cs" {
content = set_czech_nonbreakable_terms(content);
}
@@ -83,7 +82,7 @@
}
// other
show raw: set text(font: mono_font, size: mono_font_compensation * 1em);
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)
};
@@ -135,19 +134,21 @@
}
}
#let info(
#let info_base(
faculty_id,
language,
document_type,
title, author, supervisor, consultant, study_programme, study_specialization, year_of_study,
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 document_type != "other" {
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);
}
@@ -158,16 +159,6 @@
);
v(0em);
// other info
// [field_name, field_value, bold]
let info_fields = (
("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", map_none(year_of_study, (v) => str(v) + "."), false),
)
context {
let max_field_name_width = calc.max(..info_fields.map((v) => {
if type(v.at(1)) == type(none) {
@@ -191,10 +182,43 @@
);
v(1em);
h(max_field_name_width + info_name_value_padding + gutter);
text(get_lang_item(language, "city") + " " + str(datetime.today().year()), font: base_font);
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", map_none(year_of_study, (v) => str(v) + "."), 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(args) = {
@@ -213,23 +237,42 @@
"author.specialization",
"author.year_of_study",
));
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, language);
align({
info(
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);
}
}, margin: 2cm);
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
@@ -257,7 +300,21 @@
);
return;
}
pdfembed(req_arg(args, "assignment"))
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
@@ -270,13 +327,13 @@
#let disclaimer(args) = {
import "../lang.typ": disclaimer
let (language, faculty, disclaimer_type, author, author_pronouns) = req_arg(args, (
let (language, faculty, disclaimer_type, author) = req_arg(args, (
"document.language",
"document.faculty",
"document.type",
"author.name",
"author.pronouns",
));
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_pronouns))
@@ -429,11 +486,15 @@
let (language, citations_file) = req_arg(args, ("document.language", "citations"));
if language == "cs" {
bibliography(
citations_file, style: "../tul_citace.csl", title: get_lang_item(language, "bibliography"),
citations_file,
style: "../citations/tul-csn690-numeric-square_brackets.csl",
title: get_lang_item(language, "bibliography"),
);
} else if language == "en" {
bibliography(
citations_file, style: "iso-690-numeric", title: get_lang_item(language, "bibliography"),
citations_file,
style: "../citations/iso690-numeric-square_brackets.csl",
title: get_lang_item(language, "bibliography"),
);
} else {
panic("unknown language for bibliography '" + language + "'");

View File

@@ -3,7 +3,7 @@
#import "common.typ": mainpage, assignment, external_title_pages
#import "thesis_base.typ": thesis_base
#let dp(args, content) = {
#let dp(args) = {
let language = req_arg(args, "document.language");
let programme = req_arg(args, "author.programme");
assert_dict_has((language,), programme, "study programme");
@@ -16,5 +16,4 @@
mainpage(args);
assignment(args);
thesis_base(args, content);
}

View File

@@ -16,11 +16,15 @@
#import "../arguments.typ": req_arg
#import "../theme.typ": faculty_color
#let other(args, content) = {
#let other_title_page(args) = {
let (language, title) = req_arg(args, ("document.language", "title"));
assert_dict_has((language,), title, "title");
mainpage(args);
}
#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);
tablelist(language);

View File

@@ -14,8 +14,9 @@
)
#import "../attachments.typ": attachment_list
#let force_langs = ("cs", "en");
#let thesis_base(args, content) = {
let force_langs = ("cs", "en");
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");
@@ -38,3 +39,12 @@
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);
}

View File

@@ -7,9 +7,15 @@
"study_programme": "Studijní program",
"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",
"city": "Liberec",
@@ -64,7 +70,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": {
@@ -75,9 +95,15 @@
"study_programme": "Study programme",
"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",
"city": "Liberec",

View File

@@ -46,30 +46,29 @@
}
#let set_czech_nonbreakable_terms(content) = {
let space_after = (
"[kosuvzai]",
"(tj|tzv|tzn)\.",
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)"
);
show regex("\b((?i)(" + space_after.join("|") + ") )+\w+\b"): match => {
box(match);
}
let nonbreaking_abbreviations = (
"a. s",
"s. r. o",
"v. o. s",
"k. s",
"n. p",
"p. o",
"č. ([pe]|ev)",
"ev?. č",
);
show regex(
"(?i)\b(" + nonbreaking_abbreviations.map((v) => { v.replace(".", "\\.") }).join("|") + ")\."
): match => {
box(match);
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
}

View File

@@ -34,6 +34,7 @@
// - 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.
@@ -101,6 +102,50 @@
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

View File

@@ -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;
}
}

View File

@@ -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 Alzheimers 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 Alzheimers 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/},
@online{csl,
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 Beginners 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},
@online{linux,
journal = {Blog | Linux Foundation},
title = {Classic SysAdmin: Vim 101: A Beginners 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 = {CZ.NIC},
address = {Praha},
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ě},
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 = {Praha},
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 = {Liberec},
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 clouds 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 Azures 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},
}

View File

@@ -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,
)

View File

@@ -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,
)

View File

@@ -5,16 +5,12 @@
faculty: "fm",
lang: "cs",
document: "bp",
title_pages: "bp_cs_assignment.pdf",
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",
supervisor: "Ondřej Mekina",
consultant: "Michal Procházka (nepovinný údaj)",
programme: (cs: "Můj krásný studijní program"),
specialization: (cs: "Moje krásná studijní specializace"),
abstract: (
cs: [
Tento dokument slouží jako praktická ukázka všech důležitcýh funkcí šablony _tultemplate2_,
@@ -96,7 +92,7 @@ Stejně jako v jiných programech, i Typst podporuje nadpisy více úrovní. Pro
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ě
= Můj nadpis první úrovně
```
Pro nadpis druhé úrovně pak použijeme dvě rovná se, pro nadpis třetí úrovně tři rovná se.
@@ -132,17 +128,17 @@ Syntaxe základního zvýraznění je velmi podobná například Markdownu. Sta
```typst
*tučně*
_kurzívou_
```
```
Další stylování lze dělat právě přes funkce, viz třeba:
```typst
#underline[podtrženo]
#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_, #underline[podtržený text], #strike[přeškrtnutý text] a #highlight[text zvýrazněný podle barvy příslušící vaší fakultě].
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>

View File

@@ -0,0 +1,35 @@
#import "../template/template.typ": *
#tultitlepages2(
author: "Matěj Žucha",
author_pronouns: "masculine",
supervisor: "Ondřej Mekina",
document: "bp",
faculty: "fm",
programme: (cs: "MI6000000007 Přísně tajné"),
specialization: (cs: "Vytváření šablon"),
title: (cs: "Návod na použití Typst TUL šablony"),
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 nebude nic potřeba opravit
= Seznam odborné literatury:
_Přísně tajné_
],
),
)

View File

@@ -5,16 +5,12 @@
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",
author_pronouns: "me",
supervisor: "Ondřej Mekina",
consultant: "Michal Procházka (nepovinný údaj)",
programme: (en: "My beautiful study programme"),
branch: (en: "My beautiful study branch"),
abstract: (
en: [
This document serves as a practical demonstration of all the important features of the
@@ -84,7 +80,7 @@ Stejně jako v jiných programech, i Typst podporuje nadpisy více úrovní. Pro
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ě
= 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.
@@ -118,17 +114,17 @@ Syntaxe základního zvýraznění je velmi podobná například Markdownu. Sta
```typst
*tučně*
_kurzívou_
```
```
Další stylování lze dělat právě přes funkce, viz třeba:
```typst
#underline[podtrženo]
#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_, #underline[podtržený text], #strike[přeškrtnutý text] a #highlight[text zvýrazněný podle barvy příslušící vaší fakultě].
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>

View File

@@ -0,0 +1,35 @@
#import "../template/template.typ": *
#tultitlepages2(
lang: "en",
author: "Matěj Žucha",
supervisor: "Ondřej Mekina",
document: "bp",
faculty: "fm",
programme: (en: "MI6000000007 Top secret"),
specialization: (en: "Creating templates"),
title: (en: "A guide to use the Typst TUL template"),
assignment: (
personal_number: "A00000007",
department: "Template department",
academical_year: "2025/2026",
content: [
= Guidelines for development:
+ Familiarize yourself with the template options
+ Design several possible template styles
+ Familiarize yourself with the Typst tool
+ Implement the template
+ Consult on the template
+ Fix a bunch of things
+ Consult on the template
+ Fix a bunch of things
+ Consult on the template
+ Hopefully nothing else needs to be fixed
= List of professional literature:
_Top secret_
],
),
)

View File

@@ -5,15 +5,12 @@
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",
author_pronouns: "masculine",
supervisor: "Ondřej Mekina",
consultant: "Michal Procházka (nepovinný údaj)",
programme: (cs: "Můj krásný studijní program"),
abstract: (
cs: [
Tento dokument slouží jako praktická ukázka všech důležitcýh funkcí šablony _tultemplate2_,
@@ -96,7 +93,7 @@ Stejně jako v jiných programech, i Typst podporuje nadpisy více úrovní. Pro
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ě
= Můj nadpis první úrovně
```
Pro nadpis druhé úrovně pak použijeme dvě rovná se, pro nadpis třetí úrovně tři rovná se.
@@ -132,17 +129,17 @@ Syntaxe základního zvýraznění je velmi podobná například Markdownu. Sta
```typst
*tučně*
_kurzívou_
```
```
Další stylování lze dělat právě přes funkce, viz třeba:
```typst
#underline[podtrženo]
#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_, #underline[podtržený text], #strike[přeškrtnutý text] a #highlight[text zvýrazněný podle barvy příslušící vaší fakultě].
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>

View File

@@ -0,0 +1,35 @@
#import "../template/template.typ": *
#tultitlepages2(
author: "Matěj Žucha",
author_pronouns: "masculine",
supervisor: "Ondřej Mekina",
document: "dp",
faculty: "fm",
programme: (cs: "MI6000000007 Přísně tajné"),
specialization: (cs: "Vytváření šablon"),
title: (cs: "Návod na použití Typst TUL šablony"),
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 nebude nic potřeba opravit
= Seznam odborné literatury:
_Přísně tajné_
],
),
)