develop (inside joke)
This commit is contained in:
4
Makefile
4
Makefile
@@ -1,3 +1,7 @@
|
|||||||
|
.PHONY: view_example
|
||||||
|
view_example: example.pdf
|
||||||
|
zathura $<
|
||||||
|
|
||||||
.PHONY: example
|
.PHONY: example
|
||||||
example: example.pdf
|
example: example.pdf
|
||||||
|
|
||||||
|
139
example.typ
139
example.typ
@@ -6,6 +6,141 @@
|
|||||||
author: "Ondřej Mekina",
|
author: "Ondřej Mekina",
|
||||||
)
|
)
|
||||||
|
|
||||||
= Todo
|
= Lehký úvod do Typstu a této šablony
|
||||||
|
|
||||||
WIP
|
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.
|
||||||
|
|
||||||
|
Další velkou výhodou Typstu je velmi rychlá kompilace dokumentů. S použitím inkrementální kompilace
|
||||||
|
pomocí Typstové funkce `watch` je vše prakticky instantní. On-line Typst aplikace na URL
|
||||||
|
https://typst.app/play, kterou bych doporučil používat začátečníkům, se prakticky až vychloubá
|
||||||
|
rychlou kompilací -- změny vidíte téměř po každém stisku klávesy.
|
||||||
|
|
||||||
|
Tyto dva hlavní důvody byly mou motivací pro tvorbu této šablony.
|
||||||
|
|
||||||
|
== Hlášení chyb a návrhy na funkce
|
||||||
|
|
||||||
|
Mainteinerem šablony jsem já, Ondřej Mekina, ale jakékoliv návhry na zlepšení, pomoc s vývojem a
|
||||||
|
hlášení chyb moc rád uvítám.
|
||||||
|
|
||||||
|
Pokud budete mít dotaz na fungování (vysvětlivky se snažím přidávat do tohoto ukázkového dokumentu),
|
||||||
|
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
|
||||||
|
|
||||||
|
== Editor, CLI, LSP
|
||||||
|
|
||||||
|
Jaký zvolit editor?
|
||||||
|
|
||||||
|
=== Pro lidi, kteří svůj život nežijí v příkazové řádce
|
||||||
|
|
||||||
|
Pro začátečníky doporučuji použít on-line Typst editor https://typst.app/play. Můžete ho vyzkoušet
|
||||||
|
i bez účtu.
|
||||||
|
|
||||||
|
=== Pro Arch uživatele
|
||||||
|
|
||||||
|
Pro pokročilejší je možné použít i CLI (je v Arch repu a jmenuje se... uhodnete to? `typst`).
|
||||||
|
Soubor zkompilujete pomocí:
|
||||||
|
```sh
|
||||||
|
typst compile file.typ
|
||||||
|
```
|
||||||
|
#highlight[Pozor! Pro kompilaci s touto šablonou budete chtít ještě fonty:]
|
||||||
|
```sh
|
||||||
|
typst compile --font-path template/fonts file.typ
|
||||||
|
```
|
||||||
|
Kde `template` je název složky s touto šablonou -- změňte dle potřeby.
|
||||||
|
|
||||||
|
Jako LSP doporučuji použít `tinymist` (pro nvim je v masonu), téměř kompletně podporuje funkce
|
||||||
|
(umí například `textDocument/definition` nebo `textDocument/signatureHelp`, docela fajn věci).
|
||||||
|
|
||||||
|
== Absolutní minimum
|
||||||
|
|
||||||
|
Rozchodit šablonu je poměrně jednoduché. Stačí do projektu vložit složku se šablonou a použít
|
||||||
|
import, nezapomeňte nahradit `nazev_slozky` za název složky.
|
||||||
|
```typst
|
||||||
|
#import "nazev_slozky/template.typ": *
|
||||||
|
```
|
||||||
|
Takto naimportujete všechny nabízené funkce. To obsahuje hlavní šablonovou funkci `tultemplate`,
|
||||||
|
ale i dodatečné funkce pro jednodušší práci se šablonou -- k těm se dostaneme později.
|
||||||
|
|
||||||
|
Dále je potřeba funkci zavolat jako šablonu, abychom pod ní mohli psát obsah.
|
||||||
|
```typst
|
||||||
|
#show: tultemplate.with(<vzhled_sablony>, <fakulta>, <jazyk>)
|
||||||
|
```
|
||||||
|
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
|
||||||
|
hlášek (nebo se můžete podívat do zdrojového souboru pro toto PDF `example.typ`).
|
||||||
|
|
||||||
|
== Titulní stránka
|
||||||
|
|
||||||
|
Nyní pojďme přidat nějaký obsah na titulní stránku. Jednoduše do volání šablony přidáme další
|
||||||
|
parametry.
|
||||||
|
```typst
|
||||||
|
#show: tultemplate.with(..., title: "Můj úžasný dokument", author: "Já")
|
||||||
|
```
|
||||||
|
Všechny možné parametry by vám měl našeptávat váš editor (nebo LSP) -- poslouchejte takové nápovědy,
|
||||||
|
opravdu hodně vám to usnadní práci.
|
||||||
|
|
||||||
|
= Základy formátování v Typstu
|
||||||
|
|
||||||
|
// tohle je podnadpis :)
|
||||||
|
#heading(
|
||||||
|
level: 3,
|
||||||
|
range(1, 6).map((v) => range(1, v).map((_) => "pod").join("") + "nadpisy").join(", ") + ", ..."
|
||||||
|
)
|
||||||
|
|
||||||
|
Velmi jednoduché. Stačí na začátek řádku dát znak `=` kolikrát chcete.
|
||||||
|
```typst
|
||||||
|
= Nadpis
|
||||||
|
== Podnadpis
|
||||||
|
=== Podpodnadpis
|
||||||
|
==== už tomu asi rozumíte ...
|
||||||
|
|
||||||
|
A pak obsah
|
||||||
|
```
|
||||||
|
|
||||||
|
== Zvýrazňování textu
|
||||||
|
|
||||||
|
Syntaxe je velmi podobná například markdownu. Stačí:
|
||||||
|
```typst
|
||||||
|
*tučně*
|
||||||
|
_kurzívou_
|
||||||
|
```
|
||||||
|
Další stylování lze dělat přes funkce.
|
||||||
|
```typst
|
||||||
|
#underscore[podtrženo]
|
||||||
|
#strike[přeškrtnuto]
|
||||||
|
```
|
||||||
|
A to nám krásně navazuje na další kapitolu.
|
||||||
|
|
||||||
|
== Funkce
|
||||||
|
|
||||||
|
Funkce se v Typstu volají pomocí znaku `#`.
|
||||||
|
Některé funkce neberou žádné parametry.
|
||||||
|
```typst
|
||||||
|
#linebreak // Zalomí (ukončí) řádek, je možné také udělat jeden prázdný řádek v kódu
|
||||||
|
```
|
||||||
|
Některé funkce berou parametry ve skriptovací podobě.
|
||||||
|
```typst
|
||||||
|
#profile("debug") // Zapne ladící profil (todo funkce nehází chyby, o tom více později)
|
||||||
|
```
|
||||||
|
A některé funkce berou klasický obsah -- v těch je možné psát obsah jako kdyby byl mimo funkci.
|
||||||
|
```typst
|
||||||
|
#highlight[
|
||||||
|
= Nadpis
|
||||||
|
|
||||||
|
Text. *Tučný text*
|
||||||
|
]
|
||||||
|
```
|
||||||
|
#highlight[
|
||||||
|
Sledujte nápovědy editoru. Když napíšete \#, tak vám editor nabídne kupu funkcí.
|
||||||
|
V on-line editoru se dá hledat ve vyskakovací nabídce. Vestavěné funkce jsou pojmenovány
|
||||||
|
srozumitelně a očekávatelně.
|
||||||
|
]
|
||||||
|
42
template/prototyping.typ
Normal file
42
template/prototyping.typ
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#let todos = state("todos", "0");
|
||||||
|
#let is_prod = state("is_prod", "false");
|
||||||
|
|
||||||
|
#let profile(profile) = {
|
||||||
|
let profiles = ("debug", "release");
|
||||||
|
if profile not in profiles {
|
||||||
|
panic(
|
||||||
|
"unknown profile '" + profile +
|
||||||
|
"', expected one of: " + profiles.map((v) => { "'" + v + "'" }).join(", ")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
context {
|
||||||
|
is_prod.update(is_prod => "true");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#let assert_release_ready() = {
|
||||||
|
context {
|
||||||
|
if not eval(is_prod.final()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let todos = eval(todos.final());
|
||||||
|
if todos > 0 {
|
||||||
|
let panic_message = ("refusing to build for release - " + str(todos) + " " +
|
||||||
|
if todos == 1 { "todo" } else { "todos" } + " remaining");
|
||||||
|
panic(panic_message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#let todo(content, do_highlight: true) = {
|
||||||
|
context {
|
||||||
|
todos.update(todos => {
|
||||||
|
str(eval(todos) + 1)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if do_highlight {
|
||||||
|
highlight(text(content, fill: white), fill: red, radius: .25em, extent: .25em);
|
||||||
|
} else {
|
||||||
|
text(content);
|
||||||
|
}
|
||||||
|
}
|
@@ -1,3 +1,5 @@
|
|||||||
|
#import "prototyping.typ": todo, profile
|
||||||
|
|
||||||
#let tultemplate(
|
#let tultemplate(
|
||||||
template_id,
|
template_id,
|
||||||
faculty_abbreviation,
|
faculty_abbreviation,
|
||||||
@@ -13,11 +15,18 @@
|
|||||||
);
|
);
|
||||||
assert_in_dict(template_id, templates, "template name");
|
assert_in_dict(template_id, templates, "template name");
|
||||||
|
|
||||||
|
// global set-up
|
||||||
|
import "lang.typ": lang_ids
|
||||||
|
assert_in_dict(language, lang_ids, "language abbreviation");
|
||||||
|
set text(lang: language);
|
||||||
templates.at(template_id)(
|
templates.at(template_id)(
|
||||||
faculty_abbreviation, language, document_type,
|
faculty_abbreviation, language, document_type,
|
||||||
title, author, supervisor, study_programme,
|
title, author, supervisor, study_programme,
|
||||||
content
|
content
|
||||||
);
|
);
|
||||||
|
|
||||||
|
import "prototyping.typ": assert_release_ready
|
||||||
|
assert_release_ready();
|
||||||
}
|
}
|
||||||
|
|
||||||
#let abbr(abbreviation, ..text) = {
|
#let abbr(abbreviation, ..text) = {
|
||||||
|
@@ -108,7 +108,6 @@
|
|||||||
// styling
|
// styling
|
||||||
let faculty_color = faculty_color(faculty_id);
|
let faculty_color = faculty_color(faculty_id);
|
||||||
set par(justify: true);
|
set par(justify: true);
|
||||||
set text(lang: "cs");
|
|
||||||
set heading(numbering: "1.1.1 ");
|
set heading(numbering: "1.1.1 ");
|
||||||
set page(margin: (outside: 4cm, top: 3cm, bottom: 3cm), numbering: "1", footer: {
|
set page(margin: (outside: 4cm, top: 3cm, bottom: 3cm), numbering: "1", footer: {
|
||||||
context {
|
context {
|
||||||
@@ -117,6 +116,7 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
show heading: it => {
|
show heading: it => {
|
||||||
|
set par(justify: false);
|
||||||
block(
|
block(
|
||||||
above: 2em,
|
above: 2em,
|
||||||
below: 2em,
|
below: 2em,
|
||||||
@@ -128,6 +128,9 @@
|
|||||||
v(2cm);
|
v(2cm);
|
||||||
it
|
it
|
||||||
};
|
};
|
||||||
|
show raw.where(block: true): it => {
|
||||||
|
block(it, fill: rgb("#eee"), inset: 1em)
|
||||||
|
}
|
||||||
|
|
||||||
let language = lang_id(language);
|
let language = lang_id(language);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user