31 Commits

Author SHA1 Message Date
3e5da83b08 remove nix build from readme 2025-11-14 19:03:10 +01:00
fc32808531 further detail the 'Building your own thesis' in readme 2025-11-14 19:00:05 +01:00
ae65a19a99 add makefile for packed builds 2025-11-14 18:52:50 +01:00
e77cc73f14 update thesis examples in readme 2025-11-14 18:43:58 +01:00
4d4f227a4f deduplicate content for example theses 2025-11-14 18:38:33 +01:00
6a187d775a clean up the build system 2025-11-14 17:44:47 +01:00
8c3fbce8a0 implement sp 2025-11-14 17:02:50 +01:00
da23dd94fc allow generating documents without abstract or disclaimer 2025-11-14 17:02:23 +01:00
b846fb2b7d Revert improved argument checking
It should not be in master yet (in an incomplete state).

This reverts commits d19a30a24a, 071696a786 and 7a2290c00e.
2025-11-11 21:37:04 +01:00
f8971eabe6 update makefile to bundle new thesis types 2025-11-11 21:22:53 +01:00
74df4253ca do some polishing on example documents 2025-11-11 21:21:12 +01:00
Matej-Zucha-TUL
aca613995e Update theses example content 2025-11-11 19:06:51 +01:00
d19a30a24a add automatically generated argument list to documentation 2025-11-11 18:38:23 +01:00
9c954f4f9c allow content for many new fields 2025-11-11 13:39:09 +01:00
071696a786 add documentation generation for type signatures 2025-11-11 12:05:03 +01:00
7a2290c00e add base for improved argument checking 2025-11-10 23:34:51 +01:00
62d398c807 make readme more accurate 2025-11-10 10:31:27 +01:00
0be681b0f0 add build for documentation pdf 2025-11-10 10:30:00 +01:00
30fed8c158 fix formatting issue 2025-11-09 23:00:05 +01:00
4a293f7405 add env zip dependency 2025-11-09 18:08:21 +01:00
1dfefea074 update readme 2025-11-09 18:06:37 +01:00
0f4d928172 add nix flake 2025-11-09 17:55:05 +01:00
6ce51e199f add prj document type 2025-11-06 13:55:32 +01:00
c755d36d44 fix assignment fallback calling logic 2025-11-06 13:51:25 +01:00
b9f91512cb remove unnecessary imports 2025-11-06 13:49:26 +01:00
a951de2391 delete assignment source files 2025-11-06 13:48:35 +01:00
3f824c6fbe remove bibliography and toc if there is no entry 2025-11-06 13:47:57 +01:00
8442e269b9 prepare for merging assignment and these example generation 2025-11-06 13:40:00 +01:00
6f7c8210b3 update readme 2025-11-06 13:31:03 +01:00
Matěj Žucha
544e3aeca1 Add blank files for all remaining theses types 2025-11-06 13:24:09 +01:00
434e01e80d small citation style fixes for cs 2025-11-04 22:19:01 +01:00
40 changed files with 1301 additions and 1089 deletions

2
.gitignore vendored
View File

@@ -1,2 +1,4 @@
/*.pdf
/pack
/result
/target

215
Makefile
View File

@@ -1,101 +1,160 @@
.PHONY: view_documentation
view_documentation: documentation.pdf
xdg-open $<
.PHONY: watch_documentation
watch_documentation:
typst watch --font-path template/fonts documentation.typ & xdg-open documentation.pdf
.PHONY: watch_%
watch_%: %.pdf %_assignment.pdf
xdg-open $< & typst watch --root . --font-path template/fonts theses/$*.typ $<
.PHONY: documentation
documentation: documentation.pdf
PACKDIR := pack/tultemplate2
BUNDLEDIR := pack/bundle
BUILD_DIR := target
PACKS_ROOT := $(BUILD_DIR)/pack
PACKDIR := $(PACKS_ROOT)/tultemplate2
BUNDLEDIR := $(PACKS_ROOT)/bundle
TO_PACK := $(shell find template -type f) template/LICENSE
BUNDLE_THESES := bp_cs bp_en dp_cs dp_en prj_cs prj_en
BUNDLE_TARGETS := $(TO_PACK:%=$(BUNDLEDIR)/%) $(BUNDLEDIR)/citations.bib $(BUNDLEDIR)/bp_cs.typ \
$(BUNDLEDIR)/bp_en.typ $(BUNDLEDIR)/dp_cs.typ $(BUNDLEDIR)/Makefile
$(BUNDLE_THESES:%=$(BUNDLEDIR)/%.typ) $(BUNDLEDIR)/Makefile
PACK_TARGETS := $(TO_PACK:%=$(PACKDIR)/%) $(PACKDIR)/documentation.typ \
$(PACKDIR)/documentation.pdf $(PACKDIR)/citations.bib
$(PACKDIR)/documentation.pdf $(PACKDIR)/citations.bib $(PACKDIR)/Makefile
TEMPLATE_SRCS := $(shell find template -type f)
# == MAIN TARGETS ==
.PHONY: view_documentation
view_documentation: $(BUILD_DIR)/documentation.pdf
xdg-open $<
.PHONY: pack
pack: pack/tultemplate2.zip
pack: $(PACKDIR)/tultemplate2.zip
.PHONY: bundle
bundle: $(BUNDLE_TARGETS)
@echo "!! Bundles are made for tultemplategen and not for direct use !!"
.PHONY: watch_documentation
watch_documentation: $(BUILD_DIR)/documentation.pdf
xdg-open $< & typst watch --font-path template/fonts documentation.typ $<
.PHONY: thesis_%
thesis_%: $(BUILD_DIR)/%.pdf
xdg-open $<
.PHONY: documentation
documentation: $(BUILD_DIR)/documentation.pdf
.PHONY: clean
clean:
rm -rf pack
rm -f documentation.pdf bp_cs.pdf bp_assignment_cs.pdf dp_cs.pdf
rm -rf target
pack/tultemplate2.zip: $(PACK_TARGETS)
# == ROOTS ==
$(BUILD_DIR):
mkdir $@
$(PACKS_ROOT): | $(BUILD_DIR)
mkdir $@
$(PACKDIR): | $(PACKS_ROOT)
mkdir $@
$(BUNDLEDIR): | $(PACKS_ROOT)
mkdir $@
# == UTILS ==
define minify_csl
cat $(1) | sed 's/^\s*\(.*\)$$/\1/' | tr -d '\n' > $(2)
endef
define minify_json
cat $(1) | jq -c > $(2)
endef
define replace_with_file_line
sed "s/$(1)/$$(sed '$(3)q;d' $(2))/g"
endef
# == DOCUMENTATION ==
$(BUILD_DIR)/documentation.pdf: documentation.typ $(TEMPLATE_SRCS) | $(BUILD_DIR)
typst compile --font-path template/fonts $< $@
# == THESES EXAMPLES ==
$(BUILD_DIR)/subs_%.txt: theses/%.typ | $(BUILD_DIR)
awk 'BEGIN{RS=""; ORS="\n\n"} NR>2{print}' $< > $@
$(BUILD_DIR)/header_%.txt: theses/%.typ
awk 'BEGIN{RS=""; ORS="\n\n"} NR<3{print}' $< > $@
$(BUILD_DIR)/content_%_cs.txt: $(BUILD_DIR)/subs_%_cs.txt theses/content_cs.typ
cat theses/content_cs.typ | \
$(call replace_with_file_line,{{ta}},$<,1) | $(call replace_with_file_line,{{tou}},$<,2) | \
awk 'BEGIN{RS=""; ORS="\n\n"} NR>2{print}' > $@
$(BUILD_DIR)/content_%_en.txt: $(BUILD_DIR)/subs_%_en.txt theses/content_en.typ
cat theses/content_en.typ | \
$(call replace_with_file_line,{{what}},$<,1) | \
awk 'BEGIN{RS=""; ORS="\n\n"} NR>2{print}' > $@
$(BUILD_DIR)/%.typ: $(BUILD_DIR)/header_%.txt $(BUILD_DIR)/content_%.txt | $(BUILD_DIR)
cat $^ > $@
$(BUILD_DIR)/%.pdf: $(BUILD_DIR)/%.typ $(TEMPLATE_SRCS) | $(BUILD_DIR)
typst compile --font-path template/fonts --root . $< $@
# == PACKS - clean builds for direct use ==
$(PACKDIR)/%: % | $(PACKDIR)
ln -f $< $@
$(PACKDIR)/template: | $(PACKDIR)
mkdir $@
$(PACKDIR)/template/LICENSE: LICENSE | $(PACKDIR)/template
ln -f $< $@
$(PACKDIR)/Makefile: packed.mk | $(PACKDIR)
ln -f $< $@
$(PACKDIR)/template/tul_citace.csl: template/tul_citace.csl | $(PACKDIR)/template
$(call minify_csl,$<,$@)
$(PACKDIR)/template/lang.json: template/lang.json | $(PACKDIR)/template
$(call minify_json,$<,$@)
$(PACKDIR)/template/%: template/% | $(PACKDIR)/template
@mkdir -p $(@D)
ln -f $< $@
$(PACKDIR)/%.pdf: $(BUILD_DIR)/%.pdf | $(PACKDIR)
ln -f $< $@
$(PACKDIR)/tultemplate2.zip: $(PACK_TARGETS) | $(PACKDIR)
rm -f $@
cd pack && zip -r tultemplate2.zip tultemplate2
cd $(PACKS_ROOT) && zip -r tultemplate2.zip tultemplate2
$(PACKDIR)/%: %
# == BUNDLES - packs for tultemplategen ==
$(BUNDLEDIR)/template: | $(BUNDLEDIR)
mkdir $@
$(BUNDLEDIR)/template/LICENSE: LICENSE | $(BUNDLEDIR)/template
ln -f $< $@
$(BUNDLEDIR)/Makefile: templategen.mk | $(BUNDLEDIR)
ln -f $< $@
$(BUNDLEDIR)/template/tul_citace.csl: template/tul_citace.csl | $(BUNDLEDIR)/template
$(call minify_csl,$<,$@)
$(BUNDLEDIR)/template/lang.json: template/lang.json | $(BUNDLEDIR)/template
$(call minify_json,$<,$@)
$(BUNDLEDIR)/citations.bib: citations.bib | $(BUNDLEDIR)
ln -f $< $@
$(BUNDLEDIR)/template/%: template/% | $(BUNDLEDIR)/template
@mkdir -p $(@D)
ln -f $< $@
$(BUNDLEDIR)/citations.bib: citations.bib
@mkdir -p $(@D)
ln -f $< $@
$(BUNDLEDIR)/%.typ: $(BUILD_DIR)/content_%.txt | $(BUNDLEDIR)
sed 's/\.\.\/template\//template\//' $< > $@
$(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)
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 . $< $@
# == TESTS ==
include tests/make.mk

View File

@@ -1,6 +1,6 @@
# 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.
## Recommended usage
@@ -23,7 +23,8 @@ 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.
citations, fonts, paragraphs and other formal nonsense, but around the actual content of the
document.
We aim to provide a robust (but simple) framework to build official documents at TUL.
@@ -50,7 +51,7 @@ Oh and also... it's hella fast.
> [!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:
> 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
@@ -61,6 +62,10 @@ Oh and also... it's hella fast.
- 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]
@@ -73,6 +78,38 @@ 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.
Now, if you don't want to use the generator, drop into the repo directory and run:
```sh
make pack
```
This will generate outputs at `target/pack/tultemplate2` and `target/pack/tultemplate2.zip`.
We recommend copying the files (either from the zip or the directory) somewhere else and (in there)
running:
```sh
make view_documentation
```
After you have created your own `filename.typ` you can run:
```sh
make view_filename
```
or
```sh
make watch_filename
```
The `Makefile` provided in the packed build is just an example... feel free to adjust it according
to your needs.
The packed builds also provide `documentation.pdf` such that you can jump into it straight away
or keep it around during the writing of your own thesis.
### Building documentation
The documentation PDF explains different concepts in Typst and in this template.
@@ -88,16 +125,25 @@ 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.
Thesis examples are in `theses`. In the files with names like `bp_en.typ` you can find the example
header for each thesis (and after that some spelling substitutions for the build system).
And in `theses/content_cs.typ` and `theses/content_en.typ` is the content for the theses.
Using:
```sh
make bp_cs.pdf
make thesis_bp_cs
```
Will generate an example bachelor's thesis in czech.
Will view an example bachelor's thesis in czech. If you want to keep the PDF file after viewing:
We also have:
- `bp_en.pdf` (only partially translated - if you wish to help translating, we'll gladly welcome it)
- `dp_cs.pdf`
```sh
make target/bp_cs.pdf
```
We also have (at the moment):
- `bp_en`
- `dp_cs`
- `dp_en`
- `prj_cs`
- `prj_en`

View File

@@ -1,9 +1,9 @@
#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")
@@ -102,7 +102,6 @@ Velmi jednoduché. Stačí na začátek řádku dát znak `=` kolikrát chcete.
= Nadpis
== Podnadpis
=== Podpodnadpis
==== už tomu asi rozumíte ...
A pak obsah
```

61
flake.lock generated Normal file
View 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
}

19
flake.nix Normal file
View File

@@ -0,0 +1,19 @@
{
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
{
devShell = with pkgs; mkShell {
buildInputs = dependencies;
};
}
);
}

13
packed.mk Normal file
View File

@@ -0,0 +1,13 @@
TYPST_FONTPATH := --font-path template/fonts
.PHONY: watch_%
watch_%: %.pdf
xdg-open $< & typst watch $(TYPST_FONTPATH) $*.typ
.PHONY: view_%
view_%: %.pdf
xdg-open $<
.PHONY: %.pdf
%.pdf: %.typ
typst compile $(TYPST_FONTPATH) $<

View File

@@ -8,21 +8,21 @@
type: "string",
),
title_pages: "string | boolean | none",
title: "dictionary[string : string] | none",
title: "dictionary[string : string | content] | none",
author: (
name: "string | none",
name: "string | content | none",
pronouns: "string | none",
programme: "dictionary[string : string] | none",
specialization: "dictionary[string : string] | none",
year_of_study: "integer | none",
programme: "dictionary[string : string | content] | none",
specialization: "dictionary[string : string | content] | none",
year_of_study: "string | content | none",
),
project: (
supervisor: "string | dictionary[string : string] | none",
consultant: "string | dictionary[string : string] | none",
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 : array[string]] | none",
keywords: "dictionary[string : string | content | array[string]] | none",
),
acknowledgement: "dictionary[string : string | content] | none",
assignment: "dictionary[string : any] | content | string | none",
@@ -30,9 +30,9 @@
);
#let assignment_structure = (
personal_number: "string",
department: "string",
academical_year: "string",
personal_number: "string | content",
department: "string | content",
academical_year: "string | content",
content: "content",
);

View File

@@ -27,7 +27,7 @@
</locale>
<macro name="author">
<names variable="author">
<name and="text" name-as-sort-order="all" sort-separator=", " delimiter="; " delimiter-precedes-last="never">
<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>
@@ -203,7 +203,7 @@
</macro>
<macro name="issue">
<group delimiter=", ">
<text variable="volume" prefix="Vol.&#160;"/>
<text variable="volume" prefix="Svazek&#160;"/>
<choose>
<if variable="volume">
<text variable="issue" prefix="č.&#160;"/>

View File

@@ -1,7 +1,6 @@
#import "../arguments.typ": req_arg, get_arg
#import "../utils.typ": assert_dict_has, is_none
#import "common.typ": mainpage, assignment, external_title_pages
#import "thesis_base.typ": thesis_base
#let bp(args) = {
let language = req_arg(args, "document.language");

View File

@@ -8,12 +8,19 @@
// thesis types
#import "bp.typ": bp
#import "dp.typ": dp
#import "prj.typ": prj
#import "sp.typ": sp
#import "other.typ": other_title_page, other_base
#import "thesis_base.typ": thesis_base, thesis_base_title_pages
#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),
"sp": (sp, thesis_base.with(
show_disclaimer: false,
require_abstract: false,
), thesis_base_title_pages),
"other": (other_title_page, other_base, (args) => {}),
)

View File

@@ -114,7 +114,7 @@
#let person_info(record, item_name) = {
if is_none(record) {
none
} else if type(record) == str {
} else if type(record) == str or type(record) == content {
record
} else if type(record) == dictionary {
if "name" in record {
@@ -200,7 +200,7 @@
("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),
("year_of_study", year_of_study, false),
));
}
@@ -285,8 +285,11 @@
// ASSIGNMENT PAGE
#let assignment(args) = {
#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(req_arg(args, "document.language"), "place_assignment"),
@@ -365,7 +368,18 @@
// ABSTRACT
#let abstract(language, args) = {
#let display_keywords(keywords) = {
if type(keywords) == array {
keywords.join(", ")
} else if type(keywords) == str or type(keywords) == content {
keywords
}
}
#let abstract(language, args, require: true) = {
if not require and is_none(get_arg(args, "abstract.content")) {
return;
}
heading(
text(req_arg(args, "title").at(language), font: base_font), numbering: none, outlined: false
);
@@ -382,7 +396,7 @@
linebreak();
linebreak();
text(get_lang_item(language, "keywords") + ": ", weight: "bold", font: base_font);
text(keywords.at(language).join(", "));
display_keywords(keywords.at(language))
}
}
@@ -477,26 +491,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(args) = {
let (language, citations_file) = req_arg(args, ("document.language", "citations"));
if language == "cs" {
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: "../citations/iso690-numeric-square_brackets.csl",
title: get_lang_item(language, "bibliography"),
);
} else {
panic("unknown language for bibliography '" + language + "'");
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"),
);
}
}
}

View File

@@ -1,7 +1,6 @@
#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
#import "thesis_base.typ": thesis_base
#let dp(args) = {
let language = req_arg(args, "document.language");

17
template/classic/prj.typ Normal file
View 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);
}

19
template/classic/sp.typ Normal file
View File

@@ -0,0 +1,19 @@
#import "../arguments.typ": req_arg, get_arg, map_arg
#import "../utils.typ": assert_dict_has
#import "common.typ": mainpage, assignment
#let sp(args) = {
let language = req_arg(args, "document.language");
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");
});
if language == "cs" {
let _ = req_arg(args, "author.pronouns");
}
mainpage(args);
assignment(args, show_fallback: false);
}

View File

@@ -16,18 +16,20 @@
#let force_langs = ("cs", "en");
#let thesis_base(args, content) = {
#let thesis_base(args, content, show_disclaimer: true, require_abstract: true) = {
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");
if require_abstract {
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")) {
if show_disclaimer and is_none(get_arg(args, "title_pages")) {
disclaimer(args);
}
abstract("cs", args);
abstract("en", args);
abstract("cs", args, require: require_abstract);
abstract("en", args, require: require_abstract);
acknowledgement(args);
toc(language);
tablelist(language);

View File

@@ -16,6 +16,10 @@
"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",
"sp": "Semestrální práce",
"sp_asgn": "Zadání semestrální práce",
"city": "Liberec",
@@ -23,7 +27,7 @@
"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": {
@@ -54,6 +58,21 @@
"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"
}
},
@@ -104,6 +123,10 @@
"bp_asgn": "Bachelor thesis assignment",
"dp": "Diploma thesis",
"dp_asgn": "Diploma thesis assignment",
"prj": "Project",
"prj_asgn": "Project assignment",
"sp": "Term paper",
"sp_asgn": "Term paper assignment",
"city": "Liberec",
@@ -120,6 +143,10 @@
"dp": {
"thesis": "diploma thesis"
},
"prj": {
"thesis": "project"
}
},

View File

@@ -2,7 +2,7 @@
// | TULTemplate 2 |
// +---------------+
//
// Unofficial TUL template for all kinds of documents.
// Typst TUL template for all kinds of documents.
//
// Git: https://git.zumepro.cz/tul/tultemplate2

View File

@@ -9,5 +9,6 @@ watch: $(THESIS_FILE).pdf
view: $(THESIS_FILE).pdf
xdg-open $<
.PHONY: %.pdf
%.pdf: %.typ
typst compile $(TYPST_FONTPATH) $<

0
theses/autoref_cs.typ Normal file
View File

0
theses/autoref_en.typ Normal file
View File

View File

@@ -5,15 +5,38 @@
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",
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é_
],
),
author: "Matěj Žucha",
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_,
Tento dokument slouží jako praktická ukázka všech důležitých funkcí šablony _tultemplate2_,
s názornými příklady použítí a jejich podrobným popisem.
],
en: [
@@ -22,287 +45,12 @@
],
),
keywords: (
cs: ("Ukázka", "Klíčových", "Slov", "Česky"),
en: ("Example", "Keywords", "In", "English"),
cs: [Ukázka, Klíčových, Slov, Česky],
en: [Example, Keywords, In, English],
),
acknowledgement: (cs: "Lorem ipsum dolor sit amet."),
acknowledgement: (cs: [Lorem ipsum dolor sit amet.]),
citations: "citations.bib",
)
= Co najdete v této šabloně
Tato šablona 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 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
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 tím pádem svobodu v tom, jestli ve zdrojovém souboru používá dlouhé řádky plné textu,
nebo
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ž 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 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 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 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 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 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") 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ě 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.]),
)
Bakalářská práce
bakalářskou práci

View File

@@ -1,35 +0,0 @@
#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,291 +5,51 @@
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ě",
assignment: (
personal_number: [A00000007],
department: [Department of templates],
academical_year: [2025/2026],
content: [
= Principles for drafting:
+ Familiarize yourself with available templates
+ Design several possible template styles
+ Learn to use Typst
+ Implement the template
+ Review the template
+ Fix many issues
+ Review the template
+ Fix many issues
+ Review the template
+ Hopefully nothing more needs fixing
= List of professional literature:
_Top secret_
],
),
author: "Matěj Žucha",
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: "me",
programme: (en: [MI6000000007 Top secret]),
specialization: (en: [Creation of templates]),
supervisor: [Ondřej Mekina],
abstract: (
cs: [
Tento dokument slouží jako praktická ukázka všech důležitých 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.
],
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"),
cs: [Ukázka, Klíčových, Slov, Česky],
en: [Example, Keywords, In, English],
),
acknowledgement: (en: "Lorem ipsum dolor sit amet."),
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.
Thats 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 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 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 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 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 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") 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ě 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.]),
)
Bachelor thesis

View File

@@ -1,35 +0,0 @@
#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_
],
),
)

295
theses/content_cs.typ Normal file
View File

@@ -0,0 +1,295 @@
#import "../template/template.typ": *
#show: tultemplate2
= Co najdete v této šabloně
Tato šablona sloužit jako ukázka práce typu `{{ta}}` v jazyce *Typst* a šabloně
*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 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
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 tím pádem svobodu v tom, jestli ve zdrojovém souboru používá dlouhé řádky plné textu,
nebo
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ž 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.
== Klikatelný obsah
Pokud používáte oficiální Typst online editor, můžete jednoduše klepnout na jakýkoliv text v pravé části (náhledové PDF), který se měnit,
a editor podle toho automaticky přesune váš kurzor na správné místo.
Je to sice drobná, ale zato velmi užitečná funkce.
== 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.
= Kontrola šablony při kompilaci
Tato šablona je vytvořena tak, že když se ji pokusíte zkompilovat s nesprávnou syntaxí nebo s nějakou
chybějící důležitou částí hlavičky,
nenechá vás to provést. Vždy se podívejte na chybové hlášky, které šablona vypisuje, protože vás snadno navedou k opravě všech chyb.
Můžete to vyzkoušet tak, že smažete něco z hlavičky nebo že např. použijete funkci, která není nikde definovaná.
= 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 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 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 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 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 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") 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ě 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 {{tou}}).
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.]),
)

314
theses/content_en.typ Normal file
View File

@@ -0,0 +1,314 @@
#import "../template/template.typ": *
#show: tultemplate2
= A quick few words about this template
This template should serve as an example {{what}} 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
documentt 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
language 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.
Thats 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.
== Clickable content
When using the official Typst online editor, you can simply click on any text in the right side (the preview PDF),
and your cursor will jump directly to that text in the source file.
A small but very practical feature.
== Headings
The first important feature, apart from writing the text itself (which requires no special syntax), is the usage of headings.
Just like in other programs, Typst also supports multi-level headings. For a first-level heading, an equals sign followed
by a space is used at the beginning of a line, meaning that in a Typst source file it is written like this:
```typst
= My first level heading
```
For a second-level heading, we then use two equals signs; for a third-level heading, three equals signs…
There are enough subheading levels that youll probably never run out. However, the TUL guidelines for writing reports
forbid usage of level four heading or larger, so you can (and should) only use headings from level 1 to 3.
If you try to use fourth-level or larger heading, the template will warn you not to do that and will refuse to compile
until you fix this. More on this behavior later.
```typst
= Heading
== Subheading
=== Subsubheading
And then your content
```
== Chapter Numbering
Youve probably noticed that each heading begins with the number of its respective chapter. Typst handles this numbering
automatically, and its also reflected in the *Table of Contents* at the start of the document, so you dont have to
worry about it yourself.
== Template compile-time checks
This template is created in such a way that when you try to compile it with incorrect syntax or an imoportant
part of the header missing, it won't let you. Always see the error messages the template provides,
as they will simply guide you to fix your mistakes. You can try this by deleting something from the header,
or by using e.g. a function that ins't defined anywhere.
= Using Functions
Most Typst features are used through whats called *function calls*. This is quite similar to the previous examples,
except that instead of wrapping text with a single symbol or a simple marker, we wrap it with the name of the function.
The syntax looks like this:
```typst
#Function_name[text itself or other parameters]
```
When you type the hash symbol in the editor, it will automatically start suggesting all available functions and their descriptions.
Lets move on to some practical examples.
== Text Highlighting
The syntax for basic highlighting is very similar to Markdown. You just need to use the following symbols:
```typst
*bold*
_italic_
```
More styling options can be applied through functions, for example:
```typst
#strike[struck through]
#highlight[highlighted]
#underline[underlined] // underline SHOULD NOT be used
```
For completeness and demonstration, here in the text we have *bold text*, _italic text_, #strike[struck-through text],
and #highlight[text highlighted with your facultys color], as well as #underline[underlined text]
(although typographers generally advise against using underlining).
== Links<links>
You can create links to URLs/URIs, emails, phone numbers, and more.
A URL (URI) link can be written directly, without calling any function --- just type it in:
https://git.zumepro.cz/tul/tultemplate2
```typst
https://git.zumepro.cz/tul/tultemplate2
```
Internally, this automatically calls the `link` function.
If we want to link to less common things (like email addresses), we can call the `link` function explicitly:
```typst
#link("mailto:ondrej@mekina.cz")
```
You can find other prefixes (URI schemes) on Wikipedia:
https://en.wikipedia.org/wiki/List_of_URI_schemes.
== Images
Images can be inserted either by themselves or with a caption.
An image is inserted using the `image` function:
To add a caption and also include the image in the index (so you can reference it later), use the `figure` function:
#block([
```typst
#figure(
image("myimage.jpg"),
caption: [
*A beautiful* picture that looks like a picture.
]
)
```
], breakable: false)
Heres a practical example of inserting an image with a caption:
#figure(image("../template/assets/tul_logo.svg", width: 25%), caption: [
Logo of *TUL*
])
The first parameter of the function is the displayed content --- in our case, the mentioned `image`. You can then specify various parameters for it; in the example, we define the image width as a percentage.
The last parameter is `caption`, which lets us set the figures (or images) caption text.
If the document type requires it, images will automatically appear in a list at the beginning of the document. Typst handles this automatically for you --- all you need to do is add images wherever appropriate, and theyll show up correctly in the *List of Figures*, complete with references and page numbers.
Images are also numbered automatically according to the predefined style, similar to chapters.
== Tables
Tables can be created like this:
```typst
#figure(table(
columns: 3,
table.header([], [*Column 1*], [*Column 2*]),
[*Row 1*], [a], [b],
[*Row 2*], [c], [d],
), caption: "My beautiful table")
```
The `columns` parameter specifies the number of columns in the table. Then comes any number of table cells --- for clarity, the rows are separated in the example. Finally, theres again a `caption` parameter, used to provide a caption for the table.
#highlight[Its a good idea to wrap the table header (the first row) in the `header` function (as shown above)] --- this ensures Typst includes extra metadata in the generated PDF (for example, for people with visual impairments).
#figure(table(
columns: 3,
table.header([], [*Column 1*], [*Column 2*]),
[*Row 1*], [a], [b],
[*Row 2*], [c], [d],
), caption: "My beautiful table")
Tables also appear at the beginning of the document in a list (if required by the document type).
As youve probably noticed by now, Typsts template takes care of this automatically.
== Citations
The template supports citation management using a standard BibTeX file @bibtex, just like LaTeX. Almost every website or program that supports citations can generate BibTeX-formatted entries.
You simply add the code for such a citation, in the proper format, to the file _citations.bib_. Once added, you can reference it using `@citation_name` or `#cite(<citation_name>)`.
For example, I can reference the Typst citation as #cite(<typst>).
The format of the _citations.bib_ file is exactly the same as in LaTeX. You can even copy entries directly from sites like [citace.com](https://www.citace.com) in BibTeX format --- Typst understands that format, too.
If you open a `.bib` file, youll see that its simply a plain text file with a specific structure.
The provided sample file already contains several citations --- for instance, the one named `typst`, which was already used above.
You can change the file from which citations are loaded using a template argument (i.e., in the structure at the beginning of your Typst document):
```typst
#show: tultemplate2.with(
...
citations: "anotherfile.bib",
...
)
```
== Internal Links and Anchors<example_anchor>
Lets continue from the *Links* section (@links).
You can also create internal links --- for instance, to chapters, pages, or labeled images (those wrapped with the `figure` function).
```typst
= A Good Chapter<good_chapter>
Lets take a look at A Good Chapter (@good_chapter).
```
Heres what an anchor looks like:
```typst
<anchor_name>
```
You place the anchor anywhere in the file, and you can reference it the same way you reference citations:
```typst
@anchor_name
```
For example, we can take a look at this illustrative reference (@example_anchor).
== Abbreviations
The LaTeX TUL template includes a list of abbreviations at the beginning of the document. Therefore, weve included one here as well.
This list is configured to appear only if there is *at least one* abbreviation defined --- which seemed quite logical.
You can create (define) an abbreviation with #abbr("ABC", "Alphabet") like this:
```typst
#abbr("ABC", "Alphabet")
```
After that, you can use the abbreviation #abbr("ABC") directly without redefining it:
```typst
#abbr("ABC")
```
The template automatically ensures the following:
- The abbreviation appears in the list of abbreviations
- When you use an abbreviation for the first time, the template *requires* you to define it
- The definition is used only once (the first time it appears)
When used for the first time (definition), the abbreviation will look like this:
#abbr("ABR", "Abbreviation").
In subsequent uses, it will appear as: #abbr("ABR").
#highlight[
In other words, you do _not_ add abbreviations directly to the abbreviation list.
You simply use them elegantly within the text itself.
]
== Attachments
At the end of the file (or anywhere else, as long as its included only once), you can add a structure that generates attachments.
Currently, two types of attachments are supported --- links and content.
As a demonstration, heres a practical example (included right after this paragraph in the source code), which generates the attachments for this document:
#attachments(
attach_link("Source code of this template", "https://git.zumepro.cz/tul/tultemplate2"),
attach_content("Test content generated by Typst", [Here you can write _styled_ content.]),
)

0
theses/dis_cs.typ Normal file
View File

0
theses/dis_en.typ Normal file
View File

View File

@@ -5,305 +5,52 @@
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",
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é_
],
),
author: "Matěj Žucha",
title: (
cs: [Ukázka dokumentu typu Diplomová práce pro FM TUL v češtině],
en: [Example document for a Diploma 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_,
Tento dokument slouží jako praktická ukázka všech důležitých 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"),
cs: [Ukázka, Klíčových, Slov, Česky],
en: [Example, Keywords, In, English],
),
acknowledgement: (cs: "Lorem ipsum dolor sit amet."),
acknowledgement: (cs: [Lorem ipsum dolor sit amet.]),
citations: "citations.bib",
)
= Co najdete v této šabloně
Tato šablona 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 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
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 tím pádem svobodu v tom, jestli ve zdrojovém souboru používá dlouhé řádky plné textu,
nebo
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 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 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 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 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 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") 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ě 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.]),
)
Diplomová práce
diplomovou prací

View File

@@ -1,35 +0,0 @@
#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é_
],
),
)

55
theses/dp_en.typ Normal file
View File

@@ -0,0 +1,55 @@
#import "../template/template.typ": *
#show: tultemplate2.with(
style: "classic",
faculty: "fm",
lang: "en",
document: "dp",
assignment: (
personal_number: [A00000007],
department: [Department of templates],
academical_year: [2025/2026],
content: [
= Principles for drafting:
+ Familiarize yourself with available templates
+ Design several possible template styles
+ Learn to use Typst
+ Implement the template
+ Review the template
+ Fix many issues
+ Review the template
+ Fix many issues
+ Review the template
+ Hopefully nothing more needs fixing
= List of professional literature:
_Top secret_
],
),
title: (
cs: [Ukázka dokumentu typu Diplomová práce pro FM TUL v češtině],
en: [Example document for a Diploma thesis for FM TUL in Czech],
),
author: [Matěj Žucha],
author_pronouns: "me",
programme: (en: [MI6000000007 Top secret]),
specialization: (en: [Creation of templates]),
supervisor: [Ondřej Mekina],
abstract: (
cs: [
Tento dokument slouží jako praktická ukázka všech důležitých 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: (en: [Lorem ipsum dolor sit amet.]),
citations: "citations.bib",
)
Diploma thesis

0
theses/hab_cs.typ Normal file
View File

0
theses/hab_en.typ Normal file
View File

56
theses/prj_cs.typ Normal file
View File

@@ -0,0 +1,56 @@
#import "../template/template.typ": *
#show: tultemplate2.with(
style: "classic",
faculty: "fm",
lang: "cs",
document: "prj",
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é_
],
),
title: (
cs: [Ukázka dokumentu typu Projekt pro FM TUL v češtině],
en: [Example document for a Project report 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žitých 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",
)
Ročníkový projekt
ročníkovým projektem

55
theses/prj_en.typ Normal file
View File

@@ -0,0 +1,55 @@
#import "../template/template.typ": *
#show: tultemplate2.with(
style: "classic",
faculty: "fm",
lang: "en",
document: "prj",
assignment: (
personal_number: [A00000007],
department: [Department of templates],
academical_year: [2025/2026],
content: [
= Principles for drafting:
+ Familiarize yourself with available templates
+ Design several possible template styles
+ Learn to use Typst
+ Implement the template
+ Review the template
+ Fix many issues
+ Review the template
+ Fix many issues
+ Review the template
+ Hopefully nothing more needs fixing
= List of professional literature:
_Top secret_
],
),
title: (
cs: [Ukázka dokumentu typu Projekt pro FM TUL v češtině],
en: [Example document for a Project report for FM TUL in Czech],
),
author: [Matěj Žucha],
author_pronouns: "me",
programme: (en: [MI6000000007 Top secret]),
specialization: (en: [Creation of templates]),
supervisor: [Ondřej Mekina],
abstract: (
cs: [
Tento dokument slouží jako praktická ukázka všech důležitých 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: (en: [Lorem ipsum dolor sit amet.]),
citations: "citations.bib",
)
Project

0
theses/sp_cs.typ Normal file
View File

0
theses/sp_en.typ Normal file
View File

0
theses/teze_cs.typ Normal file
View File

0
theses/teze_en.typ Normal file
View File