Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions packages/preview/vintage-fiit-thesis/1.1.0/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
MIT No Attribution

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.

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.

282 changes: 282 additions & 0 deletions packages/preview/vintage-fiit-thesis/1.1.0/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,282 @@

# Faculty of Informatics and Information Technologies (FIIT) Thesis Template

This is a Typst template for writing bachelor's and master's thesis at the
Faculty of Informatics and Information Technologies (FIIT) in Slovak Technical
University in Bratislava (STU). The template was crafted using the for the
[official requirements and conditions, as of December 2025] provided by the faculty,
with [this LaTeX template] being the basis for how the document looks.

[official requirements and conditions, as of May 2025]: https://www.fiit.stuba.sk/studium/bakalarsky-projekt/bp.html?page_id=1862
[this LaTeX template]: https://www.overleaf.com/latex/templates/stu-fiit-bachelor-thesis-template-slovak-university-of-technology/pppyykvvhqgq

**This template also supports the new format of Bachelor's thesis!**

The template is available in these languages: **Slovak** (sk), **English** (en)

Theses that already use this template:

- [Extending a RISC-V processor with bit instructions, Kirill Putiatin]
- [Development of an Adverse Media Screening System using Face Recognition via Existing APIs, Illia Chaban]

[Extending a RISC-V processor with bit instructions, Kirill Putiatin]: https://opac.crzp.sk/?fn=detailBiblioForm&sid=BBB70232DB8D19E5F026BDDCF3EF
[Development of an Adverse Media Screening System using Face Recognition via Existing APIs, Illia Chaban]: https://opac.crzp.sk/?fn=detailBiblioForm&sid=BBB70232DB8D19E5F027B5DCF3EF

# Showcase

Here's a quick look on different template **styles**. You can choose any one of
these styles, it's up to your personal preference. The previews are just for
visual clarity, they are going to be slightly different from the final
documents.

| `legacy` | `regular` | `compact` |
| ------------- | -------------- | -------------- |
| ![Legacy style of the template, resized to an A6 paper sheet.](/build/legacy1.png) ![Legacy style of the template, resized to an A6 paper sheet.](/build/legacy2.png) | ![Legacy style of the template, resized to an A6 paper sheet.](/build/regular1.png) ![Legacy style of the template, resized to an A6 paper sheet.](/build/regular2.png) | ![Legacy style of the template, resized to an A6 paper sheet.](/build/compact1.png) ![Legacy style of the template, resized to an A6 paper sheet.](/build/compact2.png) |

# Usage

You can use [Typst's online editor](https://typst.app/) to edit and display
your thesis. [Sign up](https://typst.app/signup), sign in and click "Start from
template". Search for "vintage-fiit-thesis" and start writing!

## Building your thesis locally

1. [Install Typst][typst].
If you're on Linux, it should be pretty easy.

[typst]: https://github.com/typst/typst?tab=readme-ov-file#installation

2. Next, initialize the template using:

```bash
typst init @preview/vintage-fiit-thesis
```

3. Start watching the changes of your thesis using:
```bash
typst watch main.typ --watch
```

4. Begin writing your thesis!

If you're new to Typst, we recommend to start reading the [Typst
tutorial][typst-tutorial].

[typst-tutorial]: https://typst.app/docs/tutorial/

Don't forget to intialize a Git repository and backup your work somewhere!

## Cheatsheet

| Option | Type | Example/Default | Description | Possible values |
| ------------- | -------------- | -------------- | -------------- | -------------- |
| title | `str` | `"Moja záverečná práca"` | thesis title | |
| thesis | enum (`str`) | `"bp2"` | type of your thesis | `"bp1"`, `"bp2"`, `"dp1"`, `"dp2"`, `"dp3"` |
| author | `str` | `"Jožko Mrkvička"` | your name | |
| supervisor | `str` or `dictionary` of `array` | `"prof. Jozef Mrkva, PhD."` | your supervisor | `str` if you have one supervisor, localized `dictionary` if many |
| abstract | `dict` | `( sk: lorem(150), en: lorem(150) )` | abstract in two languages | keys are the language, with `str` as values |
| id | `str` | `"FIIT-12345-123456"` | id from AIS | |
| lang | enum(`str`) | `"en"` | language of your thesis | `"sk"`, `"en"` |
| month | `int` | `5` | month of the hand-in | 1-12 |
| current-date | `datetime` | `datetime.today()` | declaration date and year of the work | |
| acknowledgment | `str` or `none` | `"Omitted"` | thanks at the start of the thesis | |
| assignment | `content` | `none` | see "How to insert the thesis assignment?" | |
| tables-outline | `bool` | `false` | enable tables outline | |
| figures-outline | `bool` | `false` | enable figures outline | |
| abbreviations-outline | `array` | `( ("SSL", "Secure socket layer"), ... )` | list of abbreviations, if you need one | |
| disable-cover | `bool` | `false` | disable cover page (the first one) | |
| style | enum (`str`) | `regular` | select style of the document | `"regular"`, `"legacy"`, `"compact"`, `"pagecount"`, `"legacy-noncompliant"` |

## Template

The template supports general customization options. First, you should choose
the language that you are writing this paper in using `lang` argument.
Currently supported languages are listed at the top of this page. If you choose
an unsupported language, the template will generate a compile error.

Next, you should insert general info for your thesis: `title`, `author`, `id`,
`supervisor`. They are pretty straight-forward, so just write the correct data
into them. `id` is your thesis ID number from the informational system.

`supervisor` supports two options: either one supervisor's name as a string,
or multiple supervisors with localization. The latter option is achieved using
a localized array of pairs. Example:

```typst
// ...
supervisor: (
sk: (
("Vedúci práce", "Ing. John Doe"),
("Fakultný vedúci", "prof. Jozef Mrkva, PhD."),
// ...
),
en: (
("Supervisor", "Ing. John Doe"),
("Faculty advisor", "prof. Jozef Mrkva, PhD."),
// ...
),
),
// ...
```

`thesis` selects the type of your work. The allowed values are: `bp1`, `bp2`,
`dp1`, `dp2`, `dp3`. These values control what text is displayed on the title
and cover pages. Sometimes, you might get an error while upgrading your thesis
to the final stage. Pay attention to those errors, as they tell you how exactly
your work should be structured.

`abstract` is a dictionary of the translated abstracts that you provide with
your work. The keys are the language identifiers, like the `lang` argument.
The values are the abstract text. `en` and `sk` keys are required for thesis
to compile. The template shows an example of how the dictionaries are created
in Typst.

`acknowledgment` sets the acknowledgment text. You can write anything you want
here.

`month` lets you select which month you hand in the thesis. For most people
it's May (5), but if you selected the new format with an article, you may need
to choose a different month. Just pick a number and it will automatically
insert the correct month for you.

`current-date` is Typst's `datetime` that tells when the declaration will be
signed, and which year the thesis is being written.

`assignment` sets the assignment content. This is the recommended way to
insert your AIS assignment, see "How to insert the thesis assignment?"

`table-outline` is a boolean, set it to true to enable list of tables.

`figures-outline` enables list of figures (pictures).

`abbreviations-outline` is an array of pairs, where each pair contains an
abbreviation and its explanation. If you leave this argument as default or
explicitly empty, the list of abbreviations will not show.

`disable-cover` lets you disable the first (cover) page of the thesis. That's
it.

`style` selects the style of the document. The style affects mostly cosmetic
parameters. Here are the possible options:

- `regular`: the default, inspired by the LaTeX template, embraces the digital format
- `legacy`: fully devoted to imitating the old LaTeX template, virtually no differences
- `compact`: tighter layout with less empty space wasted, useful if your thesis is long
- `pagecount`: apply this one to estimate how many pages of pure text you got
- `legacy-noncompliant`: **don't use this one.** It uses the same citation standard (IEEE) that the old LaTeX template used, but it is not approved by FIIT STU

## Appendices

To style the appendices correctly, you need to use a simple `show` rule with a
special function: `section-appendices`. Every heading you put after this will
be considered an appendix and numbered accordingly. You can add nested headings
as usual, they will be numbered and labeled correctly.

```typst
#show: section-appendices
```

To reference the appendix, just use regular Typst referencing. The word
"Appendix" will be inserted automatically with regard to your language of
choice.

## Resumé

The resumé chapter is a chapter that is needed only when you write your thesis
in a language other from Slovak. There is a special function for that:
`resume`. Here's how to use it:

```typst
#resume()[
#lorem(250) // any resume content should go here
]
```

## Assertions

This template has integrated a few useful assertions that will help you to
remember important points about your thesis. For example, if you forget to
write a resumé and your language is set to English, the assertion will refuse
all compilation attempts. This particular assertion is set only for BP2/DP3.

The assertion will give you a helpful error message. If for some reason, you
think an assertion is wrong, please open an issue in our GitHub repository.

## How to hand in the thesis?

To hand in the thesis, it needs to be separated into two parts, and your thesis
assignment needs to be inserted into the final PDF.

### How to separate the thesis?

The file needs to be separated into the main part, and the appendices part.
You can use external tools for that, or settle for Typst compiler arguments.
The `--pages` argument to the CLI compiler can be used to specify which pages
should be rendered for the output. In the examples, we use page 29 as the first
appendix page.

Here's an example how to split just your main part:

```bash
typst compile --pages=1-28 main.typ BP_JozkoMrkvicka.pdf
```

And your appendices part:

```bash
typst compile --pages=29- main.typ BP_prilohy_JozkoMrkvicka.pdf
```

If you're not using a local Typst setup, use external tools to separate the
thesis into multiple parts. We can recommend `pdfarrange` (GUI) and `pdftk`
(CLI).

### How to insert the thesis assignment?

You might notice the warning page in the thesis right after you load the
template. This page can be removed by specifying your thesis assignment. Typst
supports importing PDFs as images as of version `0.14.0`, including the
embedded text. Since version `1.1.0` of this template, you can use `assignment`
option to specify your assignment from AIS. You can download it from the
thesis' page, choose the print option. Assignment should be passed like this:
`assignment: image("topic.pdf")`. Ensure it is exactly one page! If you are
using an older Typst version, you'll have to use external tools to insert the
assignment.

# Developing

To develop the template, you should install [Task](https://taskfile.dev/). Here
are the tasks that you can run:

- `push`: run this before pushing
- `build`: compile the template example
- `watch`: watch the template example
- `open`: open the template example in your system default viewer
- `thumbnail`: compile the template thumbnail
- `install-local`: install the package into @local namespace
- `uninstall-local`: uninstall the package from @local namespace
- `install-preview`: install the package into @preview namespace
- `uninstall-preview`: uninstall the package from @preview namespace

If you want to help, you can take a look at the GitHub issues in the template
repository. If anything goes wrong, feel free to open a new issue or contact
me directly.

# Changelog

### v1.1.0

- replaced `muchpdf` assignment rendering with Typst's 0.14 PDF image rendering. Now it is the preferred way to include assignments
- the template now requires Typst 0.14
- added binding to all styles, as per the new requirements
- chapters now always start on new odd pages, as per the new requirements
- empty pages do not contain page number, as per the new requirements
- fixed annotation localization
- various formatting fixes and compliance improvements (thanks @Ddystopia)

# Contact

If you have any questions, feel free to contact me: [Sasetz][sasetz]

[sasetz]: https://github.com/sasetz/

2 changes: 2 additions & 0 deletions packages/preview/vintage-fiit-thesis/1.1.0/_pkgs.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#import "@preview/hydra:0.6.2"

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading