4 Commits

Author SHA1 Message Date
f956b862c5 add readme 2025-09-24 13:42:15 +02:00
3d183b8673 add function documentation and citation file changing 2025-09-24 13:37:44 +02:00
a446bce8e6 add packing for zipped builds 2025-09-24 13:02:53 +02:00
86cdf2bbc7 add license 2025-09-24 13:01:45 +02:00
8 changed files with 155 additions and 27 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
/*.pdf /*.pdf
/pack

19
LICENSE Normal file
View File

@@ -0,0 +1,19 @@
Copyright (c) 2025 Ondřej Mekina, Matěj Žucha
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -5,6 +5,33 @@ view_example: example.pdf
.PHONY: example .PHONY: example
example: example.pdf example: example.pdf
TO_PACK := $(shell find template -type f) template/LICENSE
PACK_TARGETS := $(TO_PACK:%=pack/tultemplate2/%) pack/tultemplate2/example.typ
.PHONY: pack
pack: pack/tultemplate2.zip
.PHONY: clean
clean:
rm -rf pack
rm -f example.pdf
pack/tultemplate2.zip: $(PACK_TARGETS)
@mkdir -p $(@D)
rm -f $@
cd pack && zip -r tultemplate2.zip tultemplate2
pack/tultemplate2/example.typ: example.typ
ln -f $< $@
pack/tultemplate2/template/LICENSE: LICENSE
@mkdir -p $(@D)
ln -f $< $@
pack/tultemplate2/template/%: template/%
@mkdir -p $(@D)
ln -f $< $@
TEMPLATE_SRCS := $(shell find template -type f) TEMPLATE_SRCS := $(shell find template -type f)
%.pdf: %.typ $(TEMPLATE_SRCS) %.pdf: %.typ $(TEMPLATE_SRCS)

17
README.md Normal file
View File

@@ -0,0 +1,17 @@
# tultemplate2
Easy Typst template for TUL documents. Begin by compiling `example.typ` and reading it.
## How to compile
It is recommended to use either:
- The on-line Typst editor (https://typst.app/play/) - use some zip build from releases
- The `typst` CLI tool (available in Arch repos and Snap)
On Linux, with the `typst` command available, you can just run:
```sh
make
```
That will compile the example document and view it.

View File

@@ -1,7 +1,7 @@
#import "template/template.typ": * #import "template/template.typ": *
#show: tultemplate.with( #show: tultemplate2.with(
"classic", "fm", "cs", "latex", "fm", "cs",
title: "Návod na použití Typst TUL šablony", title: "Návod na použití Typst TUL šablony",
author: "Ondřej Mekina", author: "Ondřej Mekina",
) )
@@ -192,6 +192,26 @@ Tady je praktická ukázka jednoduchého vložení obrázku s popiskem:
Logo *TUL* Logo *TUL*
]) ])
== Citace
Šablona podporuje správu citací pomocí standardního BibTeX @bibtex souboru, stejně jako
například LaTeX. 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.
Soubor, ze kterého se načtou citace lze změnit pomocí argumentu šablony:
```typst
#show: tultemplate2.with(
...
citations: "jinysoubor.bib",
...
)
```
== Vnitřní odkazy a kotvy == Vnitřní odkazy a kotvy
Trochu navážeme na Odkazy (@links). Trochu navážeme na Odkazy (@links).
@@ -217,13 +237,6 @@ Kotvu dáte někam do souboru a můžete na ní odkazovat stejně jako na citace
@nazev_kotvy @nazev_kotvy
``` ```
== Citace
Šablona samozřejmě podporuje správu citací pomocí standardního BibTeX @bibtex souboru, stejně jako
ta LaTeXová. Citace ve vhodném formátu stačí přidat do souboru _citacions.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>).
== Pro pokročilé == Pro pokročilé
Typst spoustu dalších způsobů stylování (a i skriptování). Podívejte se třeba na zdrojový kód Typst spoustu dalších způsobů stylování (a i skriptování). Podívejte se třeba na zdrojový kód
@@ -271,7 +284,7 @@ Zde je ukázkové použití:
```typst ```typst
#todo( #todo(
"koupit vajíčka", "koupit vajíčka",
do_highlight: false // vypnout zvýraznění (pokud chcete) accent: false // vypnout zvýraznění (pokud chcete)
) )
``` ```
], breakable: false) ], breakable: false)
@@ -288,7 +301,7 @@ paragrafů, počtu písmen, atd...
Výše volaná funkce vygeneruje deset slov Lorem Ipsum. Doporučuji `lorem` kombinovat s `todo`. Výše volaná funkce vygeneruje deset slov Lorem Ipsum. Doporučuji `lorem` kombinovat s `todo`.
```typst ```typst
#todo(lorem(10), do_highlight: false) #todo(lorem(10), accent: false)
``` ```
Takhle si můžete předpřipravit délku odstavců a vyzkoušet si, jestli se rozsahem práce trefíte Takhle si můžete předpřipravit délku odstavců a vyzkoušet si, jestli se rozsahem práce trefíte

View File

@@ -1,6 +1,13 @@
#let todos = state("todos", "0"); #let todos = state("todos", "0");
#let is_prod = state("is_prod", "false"); #let is_prod = state("is_prod", "false");
// Set a build profile.
//
// This can be:
// - debug (debug comments and todos are displayed)
// - release (document will be ready for release)
//
// - profile (str): The target profile
#let profile(profile) = { #let profile(profile) = {
let profiles = ("debug", "release"); let profiles = ("debug", "release");
if profile not in profiles { if profile not in profiles {
@@ -33,13 +40,19 @@
} }
} }
#let todo(content, do_highlight: true) = { // Sets an item that should be done later.
//
// This will cause an error when compiling with a release profile.
//
// - content (str): What should you do?
// - accent (bool): Whether to highlight the todo
#let todo(content, accent: true) = {
context { context {
todos.update(todos => { todos.update(todos => {
str(eval(todos) + 1) str(eval(todos) + 1)
}); });
} }
if do_highlight { if accent {
highlight(text(content, fill: white), fill: red, radius: .25em, extent: .25em); highlight(text(content, fill: white), fill: red, radius: .25em, extent: .25em);
} else { } else {
text(content); text(content);

View File

@@ -1,27 +1,60 @@
// +---------------+
// | TULTemplate 2 |
// +---------------+
//
// Unofficial TUL template for all kinds of documents.
//
// Git: https://git.zumepro.cz/tul/tultemplate2
#import "prototyping.typ": todo, profile #import "prototyping.typ": todo, profile
#let tultemplate( // TUL Template 2
template_id, //
faculty_abbreviation, // Use this at the beginning of a Typst file:
language, // ```typst
document_type: none, // #import "template/template.typ": *
title: none, author: none, supervisor: none, study_programme: none, //
// #show: tultemplate2.with(
// "classic", "fm", "cs", ...
// )
// ```
//
// - style (str): Visual style to use. This can be "latex".
// - 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".
// - title (str): The title of the document.
// - author (str): The name of the document's author.
// - supervisor (str): The name of the document's supervisor.
// - programme (str): Study programme.
// - citations (str): The location of the citation file.
// - content (content): The content of the document
//
//-> none
#let tultemplate2(
style,
faculty,
lang,
document: none,
title: none, author: none, supervisor: none, programme: none,
citations: "citations.bib",
content, content,
) = { ) = {
import "template_classic.typ": template_classic import "template_classic.typ": template_classic
import "utils.typ": assert_in_dict import "utils.typ": assert_in_dict
let templates = ( let templates = (
classic: template_classic, latex: template_classic,
); );
assert_in_dict(template_id, templates, "template name"); assert_in_dict(style, templates, "template name");
// global set-up // global set-up
import "lang.typ": lang_ids import "lang.typ": lang_ids
assert_in_dict(language, lang_ids, "language abbreviation"); assert_in_dict(lang, lang_ids, "language abbreviation");
set text(lang: language); set text(lang: lang);
templates.at(template_id)( templates.at(style)(
faculty_abbreviation, language, document_type, faculty, lang, document,
title, author, supervisor, study_programme, title, author, supervisor, programme,
"../" + citations,
content content
); );
@@ -29,6 +62,10 @@
assert_release_ready(); assert_release_ready();
} }
// Make a new abbreviation
//
// - abbreviation (str): The abbreviation
// - text (str): Optionally, the text - the meaning of the abbreviation.
#let abbr(abbreviation, ..text) = { #let abbr(abbreviation, ..text) = {
import "abbreviations.typ": abbr import "abbreviations.typ": abbr
return abbr(abbreviation, if text.pos().len() == 0 { none } else { text.pos().at(0) }); return abbr(abbreviation, if text.pos().len() == 0 { none } else { text.pos().at(0) });

View File

@@ -94,6 +94,7 @@
language, language,
document_type, document_type,
title, author, supervisor, study_programme, title, author, supervisor, study_programme,
citation_file,
content, content,
) = { ) = {
// intro page // intro page
@@ -150,5 +151,5 @@
content content
// bibliography // bibliography
bibliography("../citations.bib", style: "./tul_citace.csl") bibliography(citation_file, style: "./tul_citace.csl")
} }