11 Commits

57 changed files with 823 additions and 150 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
*.ttf filter=lfs diff=lfs merge=lfs -text
*.otf filter=lfs diff=lfs merge=lfs -text

View File

@@ -2,6 +2,10 @@
view_example: example.pdf
xdg-open $<
.PHONY: watch_example
watch_example:
typst watch --font-path template/fonts example.typ & xdg-open example.pdf
.PHONY: example
example: example.pdf
@@ -36,3 +40,5 @@ TEMPLATE_SRCS := $(shell find template -type f)
%.pdf: %.typ $(TEMPLATE_SRCS)
typst compile --font-path template/fonts $<
include tests/make.mk

View File

@@ -15,3 +15,8 @@ make
```
That will compile the example document and view it.
## Repo structure note
> [!IMPORTANT]
> This repo uses git lfs to pull fonts. Please set it up (or download a packed build from releases).

View File

@@ -1,9 +1,20 @@
#import "template/template.typ": *
#show: tultemplate2.with(
"latex", "fm", "cs",
title: "Návod na použití Typst TUL šablony",
author: "Ondřej Mekina",
title_cs: "Návod na použití Typst TUL šablony",
abstract_cs: [
V tomto dokumentu se naučíte základy použití TUL Typst šablony a i nějaké lehké základy Typstu.
Šablonu vyvíjíme pro *všechny fakulty* TUL a snažíme se postupně přidávat všechny typy
vysokoškolských prací.
Tento dokument by měl být vhodný pro všechny čtenáře
(ze všech fakult a s různými úrovněmi dovedností). Pokud je něco popsáno nejasně
(nebo něco chybí), prosíme, dejte nám vědět. Snažíme se šablonu i dokumentaci průběžně
zlepšovat.
],
keywords_cs: ("šablona", "TUL", "Typst"),
author: "Ondřej Mekina, Matěj Žucha",
supervisor: "Ondřej Mekina",
)
= Lehký úvod do Typstu a této šablony
@@ -31,7 +42,6 @@ Pokud budete mít dotaz na fungování (vysvětlivky se snažím přidávat do t
návrh, nebo budete chtít nahlásit chybu, využijte jeden z následujících komunikačních kanálů:
- Můj e-mail: #link("mailto:ondrej@mekina.cz", "ondrej@mekina.cz")
- Issues na gitu šablony: https://git.zumepro.cz/tul/tultemplate2
- E-maily dalších maintainerů: #todo("přidat e-maily")
= První krůčky, aneb jak rozchodit šablonu
@@ -72,7 +82,7 @@ ale i dodatečné funkce pro jednodušší práci se šablonou -- k těm se dost
Dále je potřeba funkci zavolat jako šablonu, abychom pod mohli psát obsah.
```typst
#show: tultemplate.with(<vzhled_sablony>, <fakulta>, <jazyk>)
#show: tultemplate
```
A to je vše. Absolutní minimum pro rozchození šablony. Nebojte se, pokud neznáte názvy
vzhledů šablony, zkratku fakulty, nebo zkratku pro jazyk. Šablona vás navede pomocí chybových
@@ -246,6 +256,49 @@ Tyto pokročilejší funkce v drtivé většině dokumentů vůbec není potřeb
ty, kteří to chtějí vyzkoušet, nebo to opravdu potřebují: podívejte se buď do zdrojového kódu
této šablony nebo na dokumentaci Typstu https://typst.app/docs/.
= Pracujeme se šablonou
V předchozí kapitole jsme se dozvěděli, jak pracovat s Typstem. Šablona je navržena tak, aby
co nejvíce využívala základních funkcí Typstu -- například:
- Když uděláte nadpis -- zobrazí se v tabulce obsahu
- Když zvýrazníte text pomocí funkce `highlight` -- zvýraznění bude v barvách vaší fakulty
- Když přidáte citaci, zobrazí se v bibliografii na konci dokumentu
- Nadpis první úrovně bude na nové stránce
- ...
V této kapitole se naučíme vymaxovat využití této šablony za pomocí dalších funkcí a syntaxe.
== 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.
]
= Workflow a jak si zjednoduššit práci
Tyhle věci používat _nemusíte_, aby vám šablona fungovala. Nicméně často jsou poměrně fajn.
@@ -273,11 +326,11 @@ Pokud funkci `profile` nezavoláte, pak šablone použije profil "debug".
=== Todo
Pomocí todo svému budoucímu můžete připomenout, že je něco potřeba dodělat. Funkce todo obsah
Pomocí `todo` svému budoucímu můžete připomenout, že je něco potřeba dodělat. Funkce todo obsah
zvýrazní, a v případě, že je zvolený profil "release", při kompilaci vyhodí error. To vám
vlastně zabrání použít funkci todo v profilu "release".
Zvýraznění také můžete vypnout (ale pak se vám todo bude hůř hledat - budete muset hledat v kódu).
Zvýraznění také můžete vypnout (ale pak se vám `todo` bude hůř hledat - budete muset hledat v kódu).
Zde je ukázkové použití:
#block([

Binary file not shown.

BIN
template/fonts/inter/Inter-Black.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-BlackItalic.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-Bold.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-BoldItalic.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-ExtraBold.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-ExtraBoldItalic.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-ExtraLight.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-ExtraLightItalic.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-Italic.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-Light.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-LightItalic.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-Medium.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-MediumItalic.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-Regular.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-SemiBold.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-SemiBoldItalic.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-Thin.otf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/inter/Inter-ThinItalic.otf (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,93 @@
Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://openfontlicense.org
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

BIN
template/fonts/merriweather/Merriweather-Bold.ttf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/merriweather/Merriweather-BoldIt.ttf (Stored with Git LFS) Executable file

Binary file not shown.

BIN
template/fonts/merriweather/Merriweather-Italic.ttf (Stored with Git LFS) Executable file

Binary file not shown.

BIN
template/fonts/merriweather/Merriweather-Light.ttf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/merriweather/Merriweather-LightIt.ttf (Stored with Git LFS) Executable file

Binary file not shown.

BIN
template/fonts/merriweather/Merriweather-Regular.ttf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/merriweather/Merriweather-UltraBdIt.ttf (Stored with Git LFS) Executable file

Binary file not shown.

BIN
template/fonts/merriweather/Merriweather-UltraBold.ttf (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,48 @@
Copyright (c) 2010, 2011 by Eben Sorkin (eben@eyebytes.com),
with Reserved Font Name "Merriweather".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the copyright statement(s).
"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

BIN
template/fonts/noto_sans_mono/NotoSansMono-Black.ttf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/noto_sans_mono/NotoSansMono-Bold.ttf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/noto_sans_mono/NotoSansMono-ExtraBold.ttf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/noto_sans_mono/NotoSansMono-ExtraLight.ttf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/noto_sans_mono/NotoSansMono-Light.ttf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/noto_sans_mono/NotoSansMono-Medium.ttf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/noto_sans_mono/NotoSansMono-Regular.ttf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/noto_sans_mono/NotoSansMono-SemiBold.ttf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
template/fonts/noto_sans_mono/NotoSansMono-Thin.ttf (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,93 @@
Copyright 2022 The Noto Project Authors (https://github.com/notofonts/latin-greek-cyrillic)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://openfontlicense.org
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

41
template/lang.json Normal file
View File

@@ -0,0 +1,41 @@
{
"cs": {
"author": "Autor",
"supervisor": "Vedoucí práce",
"study_programme": "Studijní program",
"bp": "Bakalářská práce",
"dp": "Diplomová práce",
"dis": "Disertační práce",
"city": "Liberec",
"disclaimer": "Prohlášení",
"disclaimer_bp": "Prohlašuji, že svou bakalářskou práci jsem vypracoval samostatně jako původní dílo s použitím uvedené literatury a na základě konzultací s vedoucím mé bakalářské práce a konzultantem.\n\nJsem si vědom toho, že na mou bakalářskou práci se plně vztahuje zákon č. 121/2000 Sb., o právu autorském, zejména § 60 školní dílo.\n\nBeru na vědomí, že Technická univerzita v Liberci nezasahuje do mých autorských práv užitím mé bakalářské práce pro vnitřní potřebu Technické univerzity v Liberci.\n\nUžiji-li bakalářskou práci nebo poskytnu-li licenci k jejímu využití, jsem si vědom povinnosti informovat o této skutečnosti Technic-kou univerzitu v Liberci; v tomto případě má Technická univerzita v Liberci právo ode mne 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šuji, že text elektronické podoby práce vložený do IS/STAG se shoduje s textem tištěné podoby práce.\n\nBeru na vědomí, že má bakalářská práce bude zveřejněna Tech- nickou 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\nJsem si vědom následků, které podle zákona o vysokých školách mohou vyplývat z porušení tohoto prohlášení.",
"date": "[day]. [month]. [year]",
"abstract": "Abstrakt",
"keywords": "Klíčová slova"
},
"en": {
"author": "Author",
"supervisor": "Supervisor",
"study_programme": "Study programme",
"bp": "Bachelor thesis",
"dp": "Diploma thesis",
"dis": "Dissertation thesis",
"city": "Liberec",
"disclaimer": "Declaration",
"disclaimer_bp": "I hereby certify, I, myself, have written my bachelor thesis as an original and primary work using the literature listed below and consulting it with my thesis supervisor and my thesis counsellor.\n\nI acknowledge that my bachelor thesis is fully governed by Act No. 121/2000 Coll., the Copyright Act, in particular Article 60 School Work.\n\nI acknowledge that the Technical University of Liberec does not infringe my copyrights by using my bachelor thesis for internal purposes of the Technical University of Liberec.\n\nI am aware of my obligation to inform the Technical University of Liberec on having used or granted license to use the results of my bachelor thesis; in such a case the Technical University of Liberec may require reimbursement of the costs incurred for creating the result up to their actual amount.\n\nAt the same time, I honestly declare that the text of the printed version of my bachelor thesis is identical with the text of the electronic version uploaded into the IS STAG.\n\nI acknowledge that the Technical University of Liberec will make my bachelor thesis public in accordance with paragraph 47b of Act No. 111/1998 Coll., on Higher Education Institutions and on Amendment to Other Acts (the Higher Education Act), as amended.\n\nI am aware of the consequences which may under the Higher Education Act result from a breach of this declaration.",
"date": "[year]-[month]-[day]",
"abstract": "Abstract",
"keywords": "Keywords"
}
}

View File

@@ -9,3 +9,14 @@
assert_in_dict(lang_abbr, lang_ids, "language abbreviation");
return lang_ids.at(lang_abbr);
};
// Typst will usually cache this - so we don't have to re-read the file each time
#let fetch_lang_items() = {
return json("lang.json");
}
#let get_lang_item(lang_abbr, item_name) = {
assert_in_dict(lang_abbr, lang_ids, "language abbreviation");
let lang_items = fetch_lang_items();
return lang_items.at(lang_abbr).at(item_name);
}

View File

@@ -19,7 +19,7 @@
// )
// ```
//
// - style (str): Visual style to use. This can be "latex".
// - style (str): Visual style to use. This can be "classic".
// - faculty (str): Factulty abbreviation. One of "fs", "ft", "fp", "ef", "fua", "fm", "fzs", "cxi".
// - lang (str): Language code. This can be "cs" or "en".
// - document (str): Type of document. This can be "bp", "dp", "ds".
@@ -32,18 +32,20 @@
//
//-> none
#let tultemplate2(
style,
faculty,
lang,
style: "classic",
faculty: "tul",
lang: "cs",
document: none,
title: none, author: none, supervisor: none, programme: none,
title_cs: none, author: none, supervisor: none, programme: none, abstract_cs: none,
keywords_cs: none,
title_en: none, abstract_en: none, keywords_en: none,
citations: "citations.bib",
content,
) = {
import "template_classic.typ": template_classic
import "utils.typ": assert_in_dict
let templates = (
latex: template_classic,
classic: template_classic,
);
assert_in_dict(style, templates, "template name");
@@ -53,7 +55,8 @@
set text(lang: lang);
templates.at(style)(
faculty, lang, document,
title, author, supervisor, programme,
title_cs, author, supervisor, programme, abstract_cs, keywords_cs,
title_en, abstract_en, keywords_en,
"../" + citations,
content
);

View File

@@ -1,14 +1,17 @@
#import "theme.typ": faculty_logotype, tul_logomark, faculty_color
#import "lang.typ": lang_id
#import "utils.typ": assert_in_dict
#import "lang.typ": lang_id, get_lang_item
#import "utils.typ": assert_in_dict, assert_in_arr
#let base_font = "Cabin";
#let base_font = "Inter";
#let mono_font = "Noto Sans Mono";
#let serif_font = "Merriweather";
#let tul_logomark_size = 6.5em;
#let classic_header(faculty_id, language) = {
let logotype = faculty_logotype(faculty_id, language);
grid(
logotype,
block(align(right, block(tul_logomark(faculty_id), height: 5em)), width: 100%),
block(logotype, width: 100%),
block(align(right, block(tul_logomark(faculty_id), height: tul_logomark_size))),
columns: 2
);
}
@@ -19,17 +22,14 @@
document_type,
title, author, supervisor, study_programme,
) = {
let lang_id = lang_id(language);
let info_name_value_padding = 5em;
let info_name_min_width = 10em;
// document type
if type(document_type) != type(none) {
let document_types = (
bp: ("Bakalářská práce", "Bachelor thesis"),
dp: ("Diplomová práce", "Diploma thesis"),
ds: ("Disertační práce", "Dissertation thesis"),
);
assert_in_dict(document_type, document_types, "document type abbreviation");
text(document_types.at(document_type).at(lang_id), weight: "bold", font: base_font);
let document_types = ("bp", "dp", "dis", "hab", "teze", "autoref", "proj", "sp");
assert_in_arr(document_type, document_types, "document type abbreviation");
text(get_lang_item(language, document_type), weight: "bold", font: base_font);
v(0em);
}
@@ -43,31 +43,102 @@
// other info
// [field_name, field_value, bold]
let info_fields = (
(("Studijní program", "Study programme"), study_programme, false),
(("Autor", "Author"), author, true),
(("Vedoucí práce", "Supervisor"), supervisor, false),
);
("study_programme", study_programme, false),
("author", author, true),
("supervisor", supervisor, false),
)
context {
let max_field_name_width = calc.max(..info_fields.map((v) => {
if type(v.at(1)) == type(none) {
0pt
} else {
measure(v.at(0).at(lang_id) + ":").width
measure(get_lang_item(language, v.at(0)) + ":").width
}
}));
}), info_name_min_width.to-absolute());
grid(
columns: 2,
rows: (auto, 1.2em),
..info_fields.filter((v) => { type(v.at(1)) != type(none) }).map((v) => {
(
block(
text(v.at(0).at(lang_id) + ":", style: "italic", font: base_font),
width: max_field_name_width + 5em,
text(get_lang_item(language, v.at(0)) + ":", style: "italic", font: base_font),
width: max_field_name_width + info_name_value_padding,
),
text(v.at(1), font: base_font, weight: if v.at(2) { "bold" } else { "regular" })
)
}).flatten()
}).flatten(),
);
v(1em);
h(max_field_name_width + info_name_value_padding);
text(get_lang_item(language, "city") + " " + str(datetime.today().year()), font: base_font);
}
}
#let classic_mainpage(
faculty_id,
language,
document_type,
title, author, supervisor, study_programme,
) = {
import "utils.typ": has_all_none
let nonetype = type(none);
page({
if has_all_none((
document_type, title, author, supervisor, study_programme,
)) {
place(center + horizon, align(left, faculty_logotype(faculty_id, language)));
} else {
classic_header(faculty_id, language);
align({
classic_info(
faculty_id, language, document_type, title.at(language),
author, supervisor, study_programme,
);
v(5em);
}, bottom);
}
}, margin: 2cm);
}
#let disclaimer(language, faculty_id, disclaimer_type, author) = {
let disclaimers_for = ("bp");
if type(disclaimer_type) == type(none) or disclaimer_type not in disclaimers_for {
return;
}
heading(get_lang_item(language, "disclaimer"), numbering: none, outlined: false);
par(
text(get_lang_item(language, "disclaimer_" + disclaimer_type))
);
v(5em);
grid(
columns: 2,
gutter: 1em,
block(text(datetime.today().display(get_lang_item(language, "date")), lang: "cs"), width: 100%),
text(author),
);
}
#let abstract(language, title, content, keywords) = {
if type(content.at(language)) == type(none) {
return;
}
if type(title.at(language)) == type(none) {
panic("no title found for language `" + language + "` (required for abstract)");
}
heading(text(title.at(language), font: base_font), numbering: none, outlined: false);
v(2em);
heading(
level: 2,
get_lang_item(language, "abstract"),
numbering: none,
outlined: false,
);
text(content.at(language));
if type(keywords.at(language)) != type(none) {
linebreak();
linebreak();
text(get_lang_item(language, "keywords") + ": ", weight: "bold", font: base_font);
text(keywords.at(language).join(", "));
}
}
@@ -82,8 +153,12 @@
heading(("Seznam zkratek", "List of abbreviations").at(language), numbering: none);
align(center, grid(
columns: 2,
..abbrs.pairs().map((v) => {
(block(text(v.at(0), weight: "bold"), width: max_abbr_width + 1em), text(v.at(1)))
gutter: 1em,
..abbrs.pairs().map((a) => {
(
align(left, block(text(a.at(0), weight: "bold"), width: max_abbr_width + 1em)),
text(a.at(1))
)
}).flatten()
));
}
@@ -93,29 +168,46 @@
faculty_id,
language,
document_type,
title, author, supervisor, study_programme,
title_cs, author, supervisor, study_programme, abstract_cs, keywords_cs,
title_en, abstract_en, keywords_en,
citation_file,
content,
) = {
// intro page
page({
classic_header(faculty_id, language);
align({
classic_info(faculty_id, language, document_type, title, author, supervisor, study_programme);
v(5em);
}, bottom);
}, margin: 2cm);
let flip_bonding = if document_type == "bp" {
false
} else {
true
};
let title = (
"cs": title_cs,
"en": title_en,
);
// main page
classic_mainpage(faculty_id, language, document_type, title, author, supervisor, study_programme);
// styling
let faculty_color = faculty_color(faculty_id);
set par(justify: true);
set heading(numbering: "1.1.1 ");
set page(margin: (outside: 4cm, top: 3cm, bottom: 3cm), numbering: "1", footer: {
set page(
margin: if flip_bonding {
(inside: 4cm, top: 3cm, bottom: 3cm)
} else {
(left: 4cm, top: 3cm, bottom: 3cm)
},
numbering: "1", footer: {
context {
let page = counter(page).get().at(0);
align(str(page), if calc.rem(page, 2) == 0 { right } else { left })
if flip_bonding {
align(str(page), if calc.rem(page, 2) == 1 { right } else { left });
} else {
align(str(page), right);
}
}
});
set text(font: serif_font);
show heading: it => {
set par(justify: false);
block(
@@ -129,11 +221,32 @@
v(2cm);
it
};
show raw: set text(font: mono_font);
show raw.where(block: true): it => {
block(it, fill: rgb("#eee"), inset: 1em)
}
};
set highlight(fill: faculty_color.lighten(90%));
set image(width: 80%);
// disclaimer
disclaimer(language, faculty_id, document_type, author);
// abstract
let abstract_content = (
"cs": abstract_cs,
"en": abstract_en,
);
let keywords = (
"cs": keywords_cs,
"en": keywords_en,
);
if language == "cs" {
abstract("cs", title, abstract_content, keywords);
abstract("en", title, abstract_content, keywords);
} else {
abstract(language, title, abstract_content, keywords);
}
let language = lang_id(language);
// toc
@@ -147,7 +260,9 @@
abbrlist(language);
// content
if flip_bonding {
pagebreak(to: "even", weak: true);
}
content
// bibliography

View File

@@ -3,11 +3,19 @@
#let faculty_themes = (
tul: (
cmyk(80%, 81%, 0%, 0%),
(
"TECHNICKÁ UNIVERZITA V LIBERCI&",
"TECHNICAL UNIVERSITY OF LIBEREC&",
),
),
fs: (
cmyk(45%, 35%, 30%, 10%),
(
"FAKULTA STROJNÍ TUL&",
"FACULTY OF MECHANICAL ENGINEERING TUL&"
"FACULTY OF MECHANICAL ENGINEERING TUL&",
),
),
@@ -38,8 +46,8 @@
fua: (
cmyk(96%, 2%, 80%, 47%),
(
"FUA\nTUL&",
"FAA\nTUL&",
"FAKULTA UMĚNÍ A ARCHITEKTURY TUL&",
"FACULTY OF ARTS AND ARCHITECTURE TUL&",
),
),

View File

@@ -1,8 +1,29 @@
#let assert_in_dict(needle, dict, item_name) = {
if str(needle) not in dict {
#let assert_in_arr(needle, arr, item_name) = {
if str(needle) not in arr {
panic(
"unknown " + item_name + " '" + str(needle) +
"', expected one of: " + dict.keys().map((k) => { "'" + str(k) + "'" }).join(", ")
"', expected one of: " + arr.map((k) => { "'" + str(k) + "'" }).join(", ")
);
}
}
#let assert_in_dict(needle, dict, item_name) = {
assert_in_arr(needle, dict.keys(), item_name);
}
#let is_none(thing) = {
if type(thing) == type(none) {
true
} else {
false
}
}
#let has_all_none(arr) = {
for item in arr {
if not is_none(item) {
return false;
}
}
true
}

0
tests/citations.bib Normal file
View File

4
tests/citations.typ Normal file
View File

@@ -0,0 +1,4 @@
// todo: add citations
#pagebreak(weak: true)
#bibliography("citations.bib", title: "Bibliography - CZ", style: "../template/tul_citace.csl")

59
tests/fonts.typ Normal file
View File

@@ -0,0 +1,59 @@
#let display_font(family, weight) = {
if type(family) == type(none) {
block(
spacing: 2em,
text("Příšerně žluťoučký kůn úpěl ďábelské ódy. " + lorem(25), weight: weight)
)
} else {
block(
spacing: 2em,
text("Příšerně žluťoučký kůn úpěl ďábelské ódy. " + lorem(25), font: family, weight: weight)
)
}
}
#show heading.where(level: 1): it => {
v(3em);
it;
}
= #highlight[TUL Mono]
== Regular
#display_font("tul mono", "regular")
= #highlight[Inter]
== Regular
#display_font("inter", "regular")
== Light
#display_font("inter", "light")
== Bold
#display_font("inter", "bold")
#pagebreak()
= #highlight[Default]
== Regular
#display_font(none, "regular")
= #highlight[Merriweather]
== Regular
#display_font("merriweather", "regular")
== Light
#display_font("merriweather", "light")
== Bold
#display_font("merriweather", "bold")

6
tests/make.mk Normal file
View File

@@ -0,0 +1,6 @@
.PHONY: test_%
test_%: tests/%.pdf
xdg-open $<
tests/%.pdf: tests/%.typ
typst compile --root . --font-path template/fonts $<