From e9b181be6e53a1d58740f99d43511645f25be6e9 Mon Sep 17 00:00:00 2001 From: Danny Seidel <69514484+DannySeidel@users.noreply.github.com> Date: Mon, 3 Feb 2025 10:37:42 +0100 Subject: [PATCH] supercharged-dhbw:3.4.1 (#1506) --- .../supercharged-dhbw/3.4.1/CHANGELOG.md | 142 +++++ .../preview/supercharged-dhbw/3.4.1/LICENSE | 21 + .../preview/supercharged-dhbw/3.4.1/README.md | 248 +++++++++ .../supercharged-dhbw/3.4.1/acronym-lib.typ | 126 +++++ .../3.4.1/check-attributes.typ | 265 +++++++++ .../3.4.1/confidentiality-statement.typ | 75 +++ .../3.4.1/declaration-of-authorship.typ | 69 +++ .../preview/supercharged-dhbw/3.4.1/dhbw.svg | 2 + .../3.4.1/examples/example-acronyms.typ | 5 + .../3.4.1/examples/example-glossary.typ | 5 + .../3.4.1/examples/example-sources.bib | 6 + .../3.4.1/examples/example-sources.yml | 13 + .../3.4.1/examples/example.typ | 34 ++ .../supercharged-dhbw/3.4.1/glossary-lib.typ | 43 ++ .../preview/supercharged-dhbw/3.4.1/lib.typ | 512 ++++++++++++++++++ .../supercharged-dhbw/3.4.1/locale.typ | 143 +++++ .../supercharged-dhbw/3.4.1/shared-lib.typ | 25 + .../3.4.1/template/acronyms.typ | 5 + .../3.4.1/template/assets/ts.svg | 1 + .../3.4.1/template/glossary.typ | 5 + .../supercharged-dhbw/3.4.1/template/main.typ | 138 +++++ .../3.4.1/template/sources.bib | 6 + .../supercharged-dhbw/3.4.1/thumbnail.png | Bin 0 -> 113208 bytes .../supercharged-dhbw/3.4.1/titlepage.typ | 297 ++++++++++ .../supercharged-dhbw/3.4.1/typst.toml | 16 + 25 files changed, 2202 insertions(+) create mode 100644 packages/preview/supercharged-dhbw/3.4.1/CHANGELOG.md create mode 100644 packages/preview/supercharged-dhbw/3.4.1/LICENSE create mode 100644 packages/preview/supercharged-dhbw/3.4.1/README.md create mode 100644 packages/preview/supercharged-dhbw/3.4.1/acronym-lib.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/check-attributes.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/confidentiality-statement.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/declaration-of-authorship.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/dhbw.svg create mode 100644 packages/preview/supercharged-dhbw/3.4.1/examples/example-acronyms.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/examples/example-glossary.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/examples/example-sources.bib create mode 100644 packages/preview/supercharged-dhbw/3.4.1/examples/example-sources.yml create mode 100644 packages/preview/supercharged-dhbw/3.4.1/examples/example.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/glossary-lib.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/lib.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/locale.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/shared-lib.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/template/acronyms.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/template/assets/ts.svg create mode 100644 packages/preview/supercharged-dhbw/3.4.1/template/glossary.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/template/main.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/template/sources.bib create mode 100644 packages/preview/supercharged-dhbw/3.4.1/thumbnail.png create mode 100644 packages/preview/supercharged-dhbw/3.4.1/titlepage.typ create mode 100644 packages/preview/supercharged-dhbw/3.4.1/typst.toml diff --git a/packages/preview/supercharged-dhbw/3.4.1/CHANGELOG.md b/packages/preview/supercharged-dhbw/3.4.1/CHANGELOG.md new file mode 100644 index 000000000..870916cdc --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/CHANGELOG.md @@ -0,0 +1,142 @@ +# Supercharged-DHBW Changelog + +## [v3.4.1] - 2025-01-07 + +- Fix error that page numbering style is not applied to the table of contents +- Improve docs + +## [v3.4.0] - 2024-12-08 + +- Fix inconsistency in the header spacing +- Add option to provide the page numbering style +- Update some descriptions in the documentation + +## [v3.3.2] - 2024-11-02 + +- Fix typo in declaration of authorship + +## [v3.3.1] - 2024-10-03 + +- Fix expect company attribute in author if `at-university` is true + +## [v3.3.0] - 2024-09-20 + +- Display current chapter in the header instead of the title + +## [v3.2.0] - 2024-09-16 + +- Remove double space in confidentiality statement +- Add argument to provide keys that are ignored when highlighting links +- Remove unnecessary argument `show-appendix` + +## [v3.1.1] - 2024-08-26 + +- Update declaration of authorship text to match the new DHBW requirements + +## [v3.1.0] - 2024-08-20 + +- Fix typo in readme and improve contents +- Add attribute `titlepage-content` to create a custom titlepage +- Add attribute `math-numbering` to change the numbering style of math equations +- Fix typo in german confidentiality statement +- Reorder outlines and abstract +- Add glossary support +- Improve code and language handling +- Fix error when no acronyms are provided +- Add more examples to the documentation + +## [v3.0.0] - 2024-08-08 + +- Combine header settings in a dictionary (breaking change) +- Move abstract in front of the outlines +- Refactor language handling +- Smaller improvements to the code readability +- Provide more examples +- Attribute to provide a custom declaration of authorship + +## [v2.2.0] - 2024-07-29 + +- Change default heading numbering to `1.1` +- Add attribute to provide a heading numbering +- Add attribute `university-short` to allow other universities except DHBW +- Add attribute to provide a custom header + +## [v2.1.0] - 2024-07-19 + +- Add confidentiality marker attribute +- Add header configuration options +-> Show title in header +-> Show left logo in header +-> Show right logo in header +-> Show header divider + +## [v2.0.2] - 2024-07-04 + +- Display plural text in the declaration of authorship if the document has multiple authors + +## [v2.0.1] - 2024-07-04 + +- Update and fix errors in docs +- Remove english version of the declaration of authorship as a german one is mandatory even for english projects + +## [v2.0.0] - 2024-07-02 + +- Rename argument `at-dhbw` to `at-university` +- Add argument `city` to provide a city when no company is provided +- Add the option to provide a supervisor for the company and university +- Add `bib-style` argument +- Add an argument to provide custom confidentiality statement content +- Fix acronym linebreak bug + +## [v1.5.0] - 2024-06-24 + +- Highlight links in blue +- Link acronyms to definitions +- Add option to define space between acronyms and there long versions +- Improve user feedback with error messages +- Remove optional arguments from main.typ template file +- Improve docs +- Improve spacing for many authors +- Change naming of `studiengang` to `kurs` +- Add `type-of-thesis` attribute +- Add `type-of-degree` attribute +- Make `acronyms` attribute optional +- Add acronym usage docs +- Add option to provide date range instead of one date +- Add attribute to specify the date format + +## [v1.4.0] - 2024-06-10 + +- Fix typo on titlepage +- Improve header spacing +- Use alphabetical numbering for references and appendix pages +- Remove the numbering style option from the template +- Add option to change the toc depth + +## [v1.3.1] - 2024-05-27 + +- Don't display list of tables when empty +- Don't display code snippets list when empty +- Improve spacing for many authors (>4) +- Improve paragraph spacing + +## [v1.3.0] - 2024-05-23 + +- Fix `supervisor` on titlepage is missing when `at-dhbw` option is true +- Fix confidentiality statement page is empty instead of hidden when at-dhbw option is true +- Fix a bug the prevented the appendix content to update +- Fix and refactor acronym usage +- Fix missing translation and typo in declaration of authorship +- Refactor usage of abstract and appendix + +## [v1.2.0] - 2024-05-16 + +- Fix bug that `course-of-studies` is displayed twice even if similar +- Fix bug where title text is not semibold +- Add option to hide page headder +- Add option to provide numbering style +- Add option to change numbering alignment + +## [v1.0.0] - 2024-05-14 + +- Initial release diff --git a/packages/preview/supercharged-dhbw/3.4.1/LICENSE b/packages/preview/supercharged-dhbw/3.4.1/LICENSE new file mode 100644 index 000000000..666b7f0ee --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Danny Seidel + +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. diff --git a/packages/preview/supercharged-dhbw/3.4.1/README.md b/packages/preview/supercharged-dhbw/3.4.1/README.md new file mode 100644 index 000000000..414c4c51c --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/README.md @@ -0,0 +1,248 @@ +# Supercharged DHBW + +Unofficial [Typst](https://typst.app/) template for DHBW students. + +You can see an example PDF of how the template looks [here](https://github.com/DannySeidel/typst-dhbw-template/blob/main/examples/example.pdf). + +To see an example of how you can use this template, check out the `main.typ` file. +More examples can be found in the [examples directory](https://github.com/DannySeidel/typst-dhbw-template/blob/main/examples) of the GitHub repository. + +## Usage + +You can use this template in the Typst web app by clicking "Start from template" on the dashboard and searching for `supercharged-dhbw`. + +Alternatively, you can use the CLI to kick this project off using the command + +```shell +typst init @preview/supercharged-dhbw +``` + +Typst will create a new directory with all the files needed to get you started. + +## Fonts + +This template uses the following fonts: + +- [Montserrat](https://fonts.google.com/specimen/Montserrat) +- [Open Sans](https://fonts.google.com/specimen/Open+Sans) + +If you want to use typst locally, you can download the fonts from the links above and install them on your system. +Otherwise, when using the web version add the fonts to your project. + +For further information on how to add fonts to your project, please refer to the [Typst documentation](https://typst.app/docs/reference/text/text/#parameters-font). + +## Used Packages + +This template uses the following packages: + +- [codelst](https://typst.app/universe/package/codelst): To create code snippets + +Insert code snippets using the following syntax: + +```typ +#figure(caption: "Codeblock Example", sourcecode[```ts +const ReactComponent = () => { + return ( +
+

Hello World

+
+ ); +}; + +export default ReactComponent; +```]) +``` + +## Configuration + +This template exports the `supercharged-dhbw` function with the following named arguments: + +`title (str*)`: Title of the document + +`authors (dictionary*)`: List of authors with the following named arguments (max. 6 authors when in the company or 8 authors when at university): + +- name (str*): Name of the author +- student-id (str*): Student ID of the author +- course (str*): Course of the author +- course-of-studies (str*): Course of studies of the author +- company (dictionary): Company of the author (only needed when `at-university` is `false`) with the following named arguments: + - name (str*): Name of the company + - post-code (str): Post code of the company + - city (str*): City of the company + - country (str): Country of the company + +`abstract (content)`: Content of the abstract, it is recommended that you pass a variable containing the content or a function that returns the content + +`acronym-spacing (length)`: Spacing between the acronym and its long form (check the [Typst documentation](https://typst.app/docs/reference/layout/length/) for examples on how to provide parameters of type length), default is `5em` + +`acronyms (dictionary)`: Pass a dictionary containing the acronyms and their long forms (See the example in the `acronyms.typ` file) + +`appendix (content)`: Content of the appendix, it is recommended that you pass a variable containing the content or a function that returns the content + +`at-university (bool*)`: Whether the document is written at university or not, default is `false` + +`bibliography (content)`: The bibliography function containing a path to the bibliography file (e.g. `bibliography("path/to/bibliography.bib")`) + +`bib-style (str)`: Style of the bibliography, default is `ieee` + +`city (str)`: City of the author (only needed when `at-university` is `true`) + +`confidentiality-marker: (dictionary)`: Configure the confidentially marker (red or green circle) on the title page (using this option reduces the maximum number of authors by 2 to 4 authors when in the company or 6 authors when at university) + +- display (bool*): Whether the confidentiality marker should be shown, default is `false` +- offset-x (length): Horizontal offset of the confidentiality marker, default is `0pt` +- offset-y (length): Vertical offset of the confidentiality marker, default is `0pt` +- size (length): Size of the confidentiality marker, default is `7em` +- title-spacing (length): Adds space below the title to make room for the confidentiality marker, default is `2em` + +`confidentiality-statement-content (content)`: Provide a custom confidentiality statement + +`date (datetime* | array*)`: Provide a datetime object to display one date (e.g. submission date) or a array containing two datetime objects to display a date range (e.g. start and end date of the project), default is `datetime.today()` + +`date-format (str)`: Format of the displayed dates, default is `"[day].[month].[year]"` (for more information on possible formats check the [Typst documentation](https://typst.app/docs/reference/foundations/datetime/#format)) + +`declaration-of-authorship-content (content)`: Provide a custom declaration of authorship + +`glossary (dictionary)`: Pass a dictionary containing the glossary terms and their definitions (See the example in the `glossary.typ` file) + +`glossary-spacing (length)`: Spacing between the glossary term and its definition (check the [Typst documentation](https://typst.app/docs/reference/layout/length/) for examples on how to provide parameters of type length), default is `1.5em` + +`header (dictionary)`: Configure the header of the document + +- display (bool): Whether the header should be shown, default is `true` +- show-chapter (bool): Whether the current chapter should be shown in the header, default is `true` +- show-left-logo (bool): Whether the left logo should be shown in the header, default is `true` +- show-right-logo (bool): Whether the right logo should be shown in the header, default is `true` +- show-divider (bool): Whether the header divider should be shown, default is `true` +- content (content): Content for a custom header, it is recommended that you pass a variable containing the content or a function that returns the content + +`heading-numering (str)`: Numbering style of the headings, default is `"1.1"` (for more information on possible numbering formats check the [Typst documentation](https://typst.app/docs/reference/model/numbering)) + +`ignored-link-label-keys-for-highlighting (array)`: List of keys of labels that should be ignored when highlighting links in the document, default is `()` + +`language (str*)`: Language of the document which is either `en` or `de`, default is `en` + +`logo-left (content)`: Path to the logo on the left side of the title page (usage: image("path/to/image.png")), default is the `DHBW logo` + +`logo-right (content)`: Path to the logo on the right side of the title page (usage: image("path/to/image.png")), default is `no logo` + +`logo-size-ratio (str)`: Ratio between the right logo and the left logo height (left-logo:right-logo), default is `"1:1"` + +`math-numbering (str)`: Numbering style of the math equations, set to `none` to turn off equation numbering, default is `"(1)"` (for more information on possible numbering formats check the [Typst documentation](https://typst.app/docs/reference/model/numbering)) + +`numbering-alignment (alignment)`: Alignment of the page numbering (for possible options check the [Typst documentation](https://typst.app/docs/reference/layout/alignment/)), default is `center` + +`page-numbering (dictionary)`: Configure the page numbering for the three sections (e.g. `page-numbering: (preface: "I", main: "1 / 1", appendix: "a")`) + +- preface (str): Page numbering for the preface, default is `I` +- main (str): Page numbering for the main part, default is `1 / 1` +- appendix (str): Page numbering for the appendix, default is `a` + +`show-abstract (bool)`: Whether the abstract should be shown, default is `true` + +`show-acronyms (bool)`: Whether the list of acronyms should be shown, default is `true` + +`show-code-snippets (bool)`: Whether the code snippets should be shown, default is `true` + +`show-confidentiality-statement (bool)`: Whether the confidentiality statement should be shown, default is `true` + +`show-declaration-of-authorship (bool)`: Whether the declaration of authorship should be shown, default is `true` + +`show-list-of-figures (bool)`: Whether the list of figures should be shown, default is `true` + +`show-list-of-tables (bool)`: Whether the list of tables should be shown, default is `true` + +`show-table-of-contents (bool)`: Whether the table of contents should be shown, default is `true` + +`supervisor (dictionary*)`: Name of the supervisor at the university and/or company (e.g. `supervisor: (company: "John Doe", university: "Jane Doe")`) + +- company (str): Name of the supervisor at the company (note while the argument is optional at least one of the two arguments must be provided) +- university (str): Name of the supervisor at the university (note while the argument is optional at least one of the two arguments must be provided) + +`titlepage-content (content)`: Provide a custom title page + +`toc-depth (int)`: Depth of the table of contents, default is `3` + +`type-of-thesis (str)`: Type of the thesis, default is `none` (using this option reduces the maximum number of authors by 2 to 4 authors when in the company or 6 authors when at university) + +`type-of-degree (str)`: Type of the degree, default is `none` (using this option reduces the maximum number of authors by 2 to 4 authors when in the company or 6 authors when at university) + +`university (str*)`: Name of the university + +`university-location (str*)`: Campus or city of the university + +`university-short (str*)`: Short name of the university (e.g. `DHBW`), displayed for the university supervisor + +Behind the arguments the type of the value is given in parentheses. All arguments marked with `*` are required. + +## Acronyms + +This template provides functions to reference acronyms in the text. To use these functions, you need to define the acronyms in the `acronyms` attribute of the template. +The acronyms referenced with the functions below will be linked to their definition in the list of acronyms. + +### Functions + +This template provides the following functions to reference acronyms: + +`acr`: Reference an acronym in the text (e.g. `acr("API")` -> `Application Programming Interface (API)` or `API`) + +`acrpl`: Reference an acronym in the text in plural form (e.g. `acrpl("API")` -> `Application Programming Interfaces (API)` or `APIs`) + +`acrs`: Reference an acronym in the text in short form (e.g. `acrs("API")` -> `API`) + +`acrspl`: Reference an acronym in the text in short form in plural form (e.g. `acrpl("API")` -> `APIs`) + +`acrl`: Reference an acronym in the text in long form (e.g. `acrl("API")` -> `Application Programming Interface`) + +`acrlpl`: Reference an acronym in the text in long form in plural form (e.g. `acrlpl("API")` -> `Application Programming Interfaces`) + +`acrf`: Reference an acronym in the text in full form (e.g. `acrf("API")` -> `Application Programming Interface (API)`) + +`acrfpl`: Reference an acronym in the text in full form in plural form (e.g. `acrfpl("API")` -> `Application Programming Interfaces (API)`) + +### Definition + +To define acronyms use a dictionary and pass it to the acronyms attribute of the template. +The dictionary should contain the acronyms as keys and their long forms as values. + +```typst +#let acronyms = ( + API: "Application Programming Interface", + HTTP: "Hypertext Transfer Protocol", + REST: "Representational State Transfer", +) +``` + +To define the plural form of an acronym use a array as value with the first element being the singular form and the second element being the plural form. +If you don't define the plural form, the template will automatically add an "s" to the singular form. + +```typst +#let acronyms = ( + API: ("Application Programming Interface", "Application Programming Interfaces"), + HTTP: ("Hypertext Transfer Protocol", "Hypertext Transfer Protocols"), + REST: ("Representational State Transfer", "Representational State Transfers"), +) +``` + +## Glossary + +Similar to the acronyms, this template provides a function to reference glossary terms in the text. To use the function, you need to define the glossary terms in the `glossary` attribute of the template. +The glossary terms referenced with the function below will be linked to their definition in the list of glossary terms. + +### Reference + +`gls`: Reference a glossary term in the text (e.g. `gls("Vulnerability")` -> link to the definition of "Vulnerability" in the glossary) + +### Definition + +The definition works analogously to the acronyms. +Define the glossary terms in a dictionary and pass it to the glossary attribute of the template. +The dictionary should contain the glossary terms as keys and their definitions as values. + +```typst +#let glossary = ( + Vulnerability: "A Vulnerability is a flaw in a computer system that weakens the overall security of the system.", + Patch: "A patch is data that is intended to be used to modify an existing software resource such as a program or a file, often to fix bugs and security vulnerabilities.", + Exploit: "An exploit is a method or piece of code that takes advantage of vulnerabilities in software, applications, networks, operating systems, or hardware, typically for malicious purposes.", +) +``` diff --git a/packages/preview/supercharged-dhbw/3.4.1/acronym-lib.typ b/packages/preview/supercharged-dhbw/3.4.1/acronym-lib.typ new file mode 100644 index 000000000..ee2274710 --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/acronym-lib.typ @@ -0,0 +1,126 @@ +#import "locale.typ": ACRONYMS +#import "shared-lib.typ": display, display-link, is-in-dict + +#let prefix = "acronym-state-" +#let acros = state("acronyms", none) + +#let init-acronyms(acronyms) = { + acros.update(acronyms) +} + + +#let acrs(acr, plural: false, link: true) = { + if plural { + display("acronyms", acros, acr, acr + "s", link: link) + } else { + display("acronyms", acros, acr, acr, link: link) + } +} + +#let acrspl(acr, link: true) = { + acrs(acr, plural: true, link: link) +} + + +#let acrl(acr, plural: false, link: true) = { + context { + let acronyms = acros.get() + + if is-in-dict("acronyms", acros, acr) { + let defs = acronyms.at(acr) + if type(defs) == "string" { + if plural { + display("acronyms", acros, acr, defs + "s", link: link) + } else { + display("acronyms", acros, acr, defs, link: link) + } + } else if type(defs) == "array" { + if defs.len() == 0 { + panic("No definitions found for acronym " + acr + ". Make sure it is defined in the dictionary passed to #init-acronyms(dict)") + } + if plural { + if defs.len() == 1 { + display("acronyms", acros, acr, defs.at(0) + "s", link: link) + } else if defs.len() == 2 { + display("acronyms", acros, acr, defs.at(1), link: link) + } else { + panic("Definitions should be arrays of one or two strings. Definition of " + acr + " is: " + type(defs)) + } + } else { + display("acronyms", acros, acr, defs.at(0), link: link) + } + } else { + panic("Definitions should be arrays of one or two strings. Definition of " + acr + " is: " + type(defs)) + } + } + } +} + +#let acrlpl(acr, link: true) = { + acrl(acr, plural: true, link: link) +} + +#let acrf(acr, plural: false, link: true) = { + if plural { + display("acronyms", acros, acr, [#acrlpl(acr) (#acr\s)], link: link) + } else { + display("acronyms", acros, acr, [#acrl(acr) (#acr)], link: link) + } + state(prefix + acr, false).update(true) +} + +#let acrfpl(acr, link: true) = { + acrf(acr, plural: true, link: link) +} + +#let acr(acr, plural: false, link: true) = { + context { + let seen = state(prefix + acr, false).get() + + if seen { + if plural { + acrspl(acr, link: link) + } else { + acrs(acr, link: link) + } + } else { + if plural { + acrfpl(acr, link: link) + } else { + acrf(acr, link: link) + } + } + } +} + +#let acrpl(acronym, link: true) = { + acr(acronym, plural: true, link: link) +} + +#let print-acronyms(language, acronym-spacing) = { + heading(level: 1, outlined: false, numbering: none)[#ACRONYMS.at(language)] + + context { + let acronyms = acros.get() + let acronym-keys = acronyms.keys() + + let max-width = 0pt + for acr in acronym-keys { + let result = measure(acr).width + + if (result > max-width) { + max-width = result + } + } + + let acr-list = acronym-keys.sorted() + + for acr in acr-list { + grid( + columns: (max-width + 0.5em, auto), + gutter: acronym-spacing, + [*#acr#label("acronyms-" + acr)*], [#acrl(acr, link: false)], + ) + } + } +} \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/check-attributes.typ b/packages/preview/supercharged-dhbw/3.4.1/check-attributes.typ new file mode 100644 index 000000000..d277150c0 --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/check-attributes.typ @@ -0,0 +1,265 @@ +#let check-attributes( + title, + authors, + language, + at-university, + confidentiality-marker, + type-of-thesis, + type-of-degree, + show-confidentiality-statement, + show-declaration-of-authorship, + show-table-of-contents, + show-acronyms, + show-list-of-figures, + show-list-of-tables, + show-code-snippets, + show-abstract, + header, + numbering-alignment, + toc-depth, + acronym-spacing, + glossary-spacing, + abstract, + appendix, + acronyms, + university, + university-location, + supervisor, + date, + city, + bibliography, + bib-style, + logo-left, + logo-right, + logo-size-ratio, + university-short, + heading-numbering, + math-numbering, + ignored-link-label-keys-for-highlighting, + page-numbering, +) = { + if (title == none or title == "") { + panic("Title is missing. Specify a title in the 'title' attribute of the template.") + } + + if (header != none and type(header) != dictionary) { + panic("Header is invalid. Specify a dictionary in the 'header' attribute of the template. The following attributes can be set: 'display', 'show-chapter', 'show-left-logo', 'show-right-logo', 'show-divider', 'content'.") + } + + let boolean-attributes = ( + at-university: at-university, + show-confidentiality-statement: show-confidentiality-statement, + show-table-of-contents: show-table-of-contents, + show-acronyms: show-acronyms, + show-declaration-of-authorship: show-declaration-of-authorship, + show-list-of-figures: show-list-of-figures, + show-list-of-tables: show-list-of-tables, + show-code-snippets: show-code-snippets, + show-abstract: show-abstract, + ) + + for (key, attribute) in boolean-attributes { + if (type(attribute) != bool) { + panic("Attribute '" + key + "' is invalid. Specify 'true' or 'false' in the '" + key + "' attribute of the template.") + } + } + + let string-attributes = ( + university: university, + university-location: university-location, + university-short: university-short, + ) + + for (key, attribute) in string-attributes { + if (type(attribute) != str or attribute.len() == 0) { + panic("Attribute '" + key + "' is missing. Specify a " + key + " in the '" + key + "' attribute of the template.") + } + } + + let optional-string-attributes = ( + type-of-thesis: type-of-thesis, + type-of-degree: type-of-degree, + bib-style: bib-style, + heading-numbering: heading-numbering, + math-numbering: math-numbering, + ) + + if (page-numbering != none and type(page-numbering) != dictionary) { + panic("Page numbering is invalid. Specify a dictionary in the 'page-numbering' attribute of the template.") + } + + if ("preface" in page-numbering) { + optional-string-attributes.insert("preface (page-numbering)", page-numbering.preface) + } + + if ("main" in page-numbering) { + optional-string-attributes.insert("main (page-numbering)", page-numbering.main) + } + + if ("appendix" in page-numbering) { + optional-string-attributes.insert("appendix (page-numbering)", page-numbering.appendix) + } + + for (key, attribute) in optional-string-attributes { + if (attribute != none and (type(attribute) != str or attribute.len() == 0)) { + panic("Attribute '" + key + "' is invalid. Specify a string in the '" + key + "' attribute of the template.") + } + } + + if (type(confidentiality-marker) != none) { + if ( + type(confidentiality-marker) != dictionary or "display" not in confidentiality-marker or type(confidentiality-marker.display) != bool + ) { + panic("Confidentiality marker is invalid. Specify a dictionary in the 'confidentiality-marker' attribute of the template containing a 'display' attribute with a boolean value.") + } + } + + let length-attributes = ( + acronym-spacing: acronym-spacing, + glossary-spacing: glossary-spacing, + ) + + if ("offset-x" in confidentiality-marker) { + length-attributes.insert("offset-x (confidentiality-marker)", confidentiality-marker.offset-x) + } + if ("offset-y" in confidentiality-marker) { + length-attributes.insert("offset-y (confidentiality-marker)", confidentiality-marker.offset-y) + } + if ("size" in confidentiality-marker) { + length-attributes.insert("size (confidentiality-marker)", confidentiality-marker.size) + } + if ("title-spacing" in confidentiality-marker) { + length-attributes.insert("title-spacing (confidentiality-marker)", confidentiality-marker.title-spacing) + } + + for (key, attribute) in length-attributes { + if (type(attribute) != length) { + panic("Attribute '" + key + "' is invalid. Specify a length in the '" + key + "' attribute of the template.") + } + } + + if (authors == none or authors == ()) { + panic("Author is missing. Specify authors in the 'authors' attribute of the template.") + } + + let max-authors = if at-university { + 8 + } else { + 6 + } + + if ( + (type-of-thesis != none and type-of-thesis != "") or (type-of-degree != none and type-of-degree != "") or ( + confidentiality-marker.display == true + ) + ) { + max-authors -= 2 + } + + if (authors.len() > max-authors) { + panic("Too many authors. Specify a maximum of " + str(max-authors) + " authors in the 'authors' attribute of the template. To increase the maximum number of authors (max. 8), change one of the following attributes: 'at-university', 'type-of-thesis', 'type-of-degree'. (See the package documentation for more information.)") + } + + for author in authors { + if ("name" not in author or author.name == none or author.name == "") { + panic("Author name is missing. Specify a name for each author in the 'authors' attribute of the template.") + } + + if ("student-id" not in author or author.student-id == none or author.student-id == "") { + panic("Student ID of '" + author.name + "' is missing. Specify a student ID for each author in the 'authors' attribute of the template.") + } + + if ("course" not in author or author.course == none or author.course == "") { + panic("Course of '" + author.name + "' is missing. Specify a course for each author in the 'authors' attribute of the template.") + } + + if ("course-of-studies" not in author or author.course-of-studies == none or author.course-of-studies == "") { + panic("Course of studies of '" + author.name + "' is missing. Specify a course of studies for each author in the 'authors' attribute of the template.") + } + + if (at-university) { + if ("company" in author) { + panic("Company of '" + author.name + "' is not allowed. Remove the 'company' object from the author.") + } + + if (type(city) != str or city == "") { + panic("City is invalid. Specify a string containing a city in the 'city' attribute.") + } + } else { + if (type(city) == str) { + panic("Remove the City attribute. When 'at-university' is true the city inside the company object is used.") + } + + if ("company" not in author) { + panic("Author '" + author.name + "' is missing a company. Add the 'company' object to the author.") + } + } + } + + if (language != "en" and language != "de") { + panic("Language is invalid. Specify 'en' for English or 'de' for German in the 'language' attribute of the template.") + } + + if (type(numbering-alignment) != alignment) { + panic("Numbering alignment is invalid. Specify a alignment in the 'numbering-alignment' attribute of the template.") + } + + if (type(toc-depth) != int) { + panic("TOC depth is invalid. Specify an integer in the 'toc-depth' attribute of the template.") + } + + if ( + type(date) != datetime and ( + type(date) != array or date.len() != 2 or type(date.at(0)) != datetime or type(date.at(1)) != datetime + ) + ) { + panic("Date is invalid. Specify a datetime in the 'date' attribute of the template to display a specific date or use a array containing two datetime elements to display a date range.") + } + + let image-attributes = ( + logo-left: logo-left, + logo-right: logo-right, + ) + + for (key, attribute) in image-attributes { + if (type(attribute) != content and attribute != none) { + panic("Attribute '" + key + "' is invalid. Specify an image in the '" + key + "' attribute of the template.") + } + } + + if (type(logo-size-ratio) != str or logo-size-ratio.len() == 0) { + panic("Logo size ratio is missing. Specify a ratio in the 'logo-size-ratio' attribute of the template.") + } + + let ratio = logo-size-ratio.split(":") + + if (ratio.len() != 2) { + panic("Invalid ratio. Specify a ratio in the format 'x:y' in the 'logo-size-ratio' attribute of the template.") + } + + if (type(bibliography) != content and bibliography != none) { + panic("Bibliography is invalid. Specify a bibliography in the 'bibliography' attribute of the template.") + } + + if ( + type(supervisor) != dictionary or ( + "company" not in supervisor or supervisor.company == none or supervisor.company == "" + ) and ("university" not in supervisor or supervisor.university == none or supervisor.university == "") + ) { + panic("Supervisor(s) is/are invalid. Specify a supervisor either for the company and/or the university in the 'supervisor' attribute of the template.") + } + + let string-array-attributes = ( + ignored-link-label-keys-for-highlighting: ignored-link-label-keys-for-highlighting, + ) + + for (key, attribute) in string-array-attributes { + if (type(attribute) != array) { + panic("Attribute '" + key + "' is invalid. Specify an array of strings in the '" + key + "' attribute of the template.") + } else if (attribute.len() > 0) { + if (type(attribute.at(0)) != str) { + panic("Attribute '" + key + "' is invalid. Specify an array of strings in the '" + key + "' attribute of the template.") + } + } + } +} \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/confidentiality-statement.typ b/packages/preview/supercharged-dhbw/3.4.1/confidentiality-statement.typ new file mode 100644 index 000000000..b30a321c5 --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/confidentiality-statement.typ @@ -0,0 +1,75 @@ +#import "locale.typ": * + +#let confidentiality-statement( + authors, + title, + confidentiality-statement-content, + university, + university-location, + date, + language, + many-authors, + date-format, +) = { + let authors-by-city = authors.map(author => author.company.city).dedup() + + v(2em) + text(size: 20pt, weight: "bold", CONFIDENTIALITY_STATEMENT_TITLE.at(language)) + v(1em) + + if (confidentiality-statement-content != none) { + confidentiality-statement-content + } else { + let authors-by-company = authors.map(author => author.company.name).dedup() + let authors-by-study = authors.map(author => author.course-of-studies).dedup() + let companies = authors-by-company.join(", ", last: AND.at(language)) + + let institution = if (authors-by-company.len() == 1) { + INSTITUTION_SINGLE.at(language) + } else { + INSTITUTION_PLURAL.at(language) + } + + text(CONFIDENTIALITY_STATEMENT_SECTION_A.at(language)) + v(1em) + align( + center, + text(weight: "bold", title), + ) + + v(1em) + + par( + justify: true, + CONFIDENTIALITY_STATEMENT_SECTION_B.at(language) + [ ] + companies + CONFIDENTIALITY_STATEMENT_SECTION_C.at(language) + [ ] + authors-by-study.join(" | ") + CONFIDENTIALITY_STATEMENT_SECTION_D.at(language) + university + [ ] + university-location + CONFIDENTIALITY_STATEMENT_SECTION_E.at(language) + institution + [ (#companies)] + CONFIDENTIALITY_STATEMENT_SECTION_F.at(language), + ) + } + + let end-date = if (type(date) == datetime) { + date + } else { + date.at(1) + } + + v(2em) + text(authors-by-city.dedup().join(", ", last: AND.at(language)) + [ ] + end-date.display(date-format)) + + v(0.5em) + if (many-authors) { + grid( + columns: (1fr, 1fr), + gutter: 20pt, + ..authors.map(author => { + v(3.5em) + line(length: 80%) + author.name + }) + ) + } else { + for author in authors { + v(4em) + line(length: 40%) + author.name + } + } +} diff --git a/packages/preview/supercharged-dhbw/3.4.1/declaration-of-authorship.typ b/packages/preview/supercharged-dhbw/3.4.1/declaration-of-authorship.typ new file mode 100644 index 000000000..ae02e1221 --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/declaration-of-authorship.typ @@ -0,0 +1,69 @@ +#import "locale.typ": * + +#let declaration-of-authorship( + authors, + title, + declaration-of-authorship-content, + date, + language, + many-authors, + at-university, + city, + date-format, +) = { + v(2em) + text(size: 20pt, weight: "bold", DECLARATION_OF_AUTHORSHIP_TITLE.at(language)) + v(1em) + + if (declaration-of-authorship-content != none) { + declaration-of-authorship-content + } else { + if (authors.len() == 1) { + par(justify: true, DECLARATION_OF_AUTHORSHIP_SECTION_A_SINGLE) + v(1em) + align(center, text(weight: "bold", title)) + v(1em) + par(justify: true, DECLARATION_OF_AUTHORSHIP_SECTION_B_SINGLE) + } else { + par(justify: true, DECLARATION_OF_AUTHORSHIP_SECTION_A_PLURAL) + v(1em) + align(center, text(weight: "bold", title)) + v(1em) + par(justify: true, DECLARATION_OF_AUTHORSHIP_SECTION_B_PLURAL) + } + } + + let end-date = if (type(date) == datetime) { + date + } else { + date.at(1) + } + + v(2em) + if (at-university) { + text(city + [, ] + end-date.display(date-format)) + } else { + let authors-by-city = authors.map(author => author.company.city).dedup() + + text(authors-by-city.join(", ", last: AND.at(language)) + [ ] + end-date.display(date-format)) + } + + v(1em) + if (many-authors) { + grid( + columns: (1fr, 1fr), + gutter: 20pt, + ..authors.map(author => { + v(3.5em) + line(length: 80%) + author.name + }) + ) + } else { + for author in authors { + v(4em) + line(length: 40%) + author.name + } + } +} diff --git a/packages/preview/supercharged-dhbw/3.4.1/dhbw.svg b/packages/preview/supercharged-dhbw/3.4.1/dhbw.svg new file mode 100644 index 000000000..4a9598b7a --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/dhbw.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/examples/example-acronyms.typ b/packages/preview/supercharged-dhbw/3.4.1/examples/example-acronyms.typ new file mode 100644 index 000000000..f7c4ab14a --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/examples/example-acronyms.typ @@ -0,0 +1,5 @@ +#let acronyms = ( + API: "Application Programming Interface", + HTTP: "Hypertext Transfer Protocol", + REST: "Representational State Transfer", +) \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/examples/example-glossary.typ b/packages/preview/supercharged-dhbw/3.4.1/examples/example-glossary.typ new file mode 100644 index 000000000..432b6f098 --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/examples/example-glossary.typ @@ -0,0 +1,5 @@ +#let glossary = ( + Vulnerability: "A Vulnerability is a flaw in a computer system that weakens the overall security of the system.", + Patch: "A patch is data that is intended to be used to modify an existing software resource such as a program or a file, often to fix bugs and security vulnerabilities.", + Exploit: "An exploit is a method or piece of code that takes advantage of vulnerabilities in software, applications, networks, operating systems, or hardware, typically for malicious purposes.", +) \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/examples/example-sources.bib b/packages/preview/supercharged-dhbw/3.4.1/examples/example-sources.bib new file mode 100644 index 000000000..ec119dedd --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/examples/example-sources.bib @@ -0,0 +1,6 @@ +@inproceedings{iso18004, + title = {{ISO/IEC 18004: Information technology -- Automatic identification and data capture techniques -- QR code bar code symbology specification}}, + booktitle = {ISO/IEC 18004:2015}, + author = {{International Organization for Standardization}}, + year = {2015} +} \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/examples/example-sources.yml b/packages/preview/supercharged-dhbw/3.4.1/examples/example-sources.yml new file mode 100644 index 000000000..5da2c816c --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/examples/example-sources.yml @@ -0,0 +1,13 @@ +examplesource: + type: article + title: "Example article about an important topic" + authors: + - name: Seidel, Danny + - name: Gingele, Thomas + volume: 5 + page-range: 123-456 + date: 2024-08-01 + serial-number: + doi: IMPORTANT/10.123456789 + parent: + title: "Very important internation conference" \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/examples/example.typ b/packages/preview/supercharged-dhbw/3.4.1/examples/example.typ new file mode 100644 index 000000000..f46f96cc7 --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/examples/example.typ @@ -0,0 +1,34 @@ +#import "@preview/supercharged-dhbw:3.4.1": * + +#let acronyms = ( + "VIP": "Very important person", +) + +#show: supercharged-dhbw.with( + title: "Exploration of Typst for the Composition of a University Thesis", + authors: ( + (name: "Max Mustermann", student-id: "7654321", course: "TIS21", course-of-studies: "IT-Security", company: ( + (name: "YXZ GmbH", post-code: "70435", city: "Stuttgart") + )), + (name: "Juan Pérez", student-id: "1234567", course: "TIM21", course-of-studies: "Mobile Computer Science", company: ( + (name: "ABC S.L.", post-code: "08005", city: "Barcelona", country: "Spain") + )), + ), + acronyms: acronyms, // displays the acronyms defined in the acronyms dictionary + at-university: false, // if true the company name on the title page and the confidentiality statement are hidden + confidentiality-marker: (display: true), + bibliography: bibliography("example-sources.yml"), + date: datetime.today(), + language: "en", // en, de + supervisor: (company: "John Appleseed"), + university: "Cooperative State University Baden-Württemberg", + university-location: "Ravensburg Campus Friedrichshafen", + university-short: "DHBW", + // for more options check the package documentation (https://typst.app/universe/package/supercharged-dhbw) +) + += Section A + +A #acr("VIP") once said this: + +#lorem(250) @examplesource \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/glossary-lib.typ b/packages/preview/supercharged-dhbw/3.4.1/glossary-lib.typ new file mode 100644 index 000000000..181173a32 --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/glossary-lib.typ @@ -0,0 +1,43 @@ +#import "locale.typ": GLOSSARY +#import "shared-lib.typ": display, display-link + +#let prefix = "glossary-state-" +#let glossary-state = state("glossary", none) + +#let init-glossary(glossary) = { + glossary-state.update(glossary) +} + +// Display acronym. Expands it if used for the first time +#let gls(element, link: true) = { + display("glossary", glossary-state, element, element, link: link) +} + +// Print an index of all the acronyms and their definitions. +#let print-glossary(language, glossary-spacing) = { + heading(level: 1, outlined: false, numbering: none)[#GLOSSARY.at(language)] + + context { + let glossary = glossary-state.get() + let glossary-keys = glossary.keys() + + let max-width = 0pt + for key in glossary-keys { + let result = measure(key).width + + if (result > max-width) { + max-width = result + } + } + + let glossary-list = glossary-keys.sorted() + + for element in glossary-list { + grid( + columns: (max-width + 1em, auto), + gutter: glossary-spacing, + [*#element#label("glossary-" + element)*], [#glossary.at(element)], + ) + } + } +} \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/lib.typ b/packages/preview/supercharged-dhbw/3.4.1/lib.typ new file mode 100644 index 000000000..509ef634d --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/lib.typ @@ -0,0 +1,512 @@ +#import "@preview/codelst:2.0.2": * +#import "acronym-lib.typ": init-acronyms, print-acronyms, acr, acrpl, acrs, acrspl, acrl, acrlpl, acrf, acrfpl +#import "glossary-lib.typ": init-glossary, print-glossary, gls +#import "locale.typ": TABLE_OF_CONTENTS, LIST_OF_FIGURES, LIST_OF_TABLES, CODE_SNIPPETS, APPENDIX, REFERENCES +#import "titlepage.typ": * +#import "confidentiality-statement.typ": * +#import "declaration-of-authorship.typ": * +#import "check-attributes.typ": * + +// Workaround for the lack of an `std` scope. +#let std-bibliography = bibliography + +#let page-numbering-symbols = ( + "1", + "a", + "A", + "i", + "I", + "α", + "Α", + "*", + "א", + "一", + "壹", + "あ", + "い", + "ア", + "イ", + "ㄱ", + "가", + "\u{0661}", + "\u{06F1}", + "\u{0967}", + "\u{09E7}", + "\u{0995}", + "①", + "⓵", +) + +#let supercharged-dhbw( + title: none, + authors: (:), + language: none, + at-university: none, + confidentiality-marker: (display: false), + type-of-thesis: none, + type-of-degree: none, + show-confidentiality-statement: true, + show-declaration-of-authorship: true, + show-table-of-contents: true, + show-acronyms: true, + show-list-of-figures: true, + show-list-of-tables: true, + show-code-snippets: true, + show-abstract: true, + numbering-alignment: center, + toc-depth: 3, + acronym-spacing: 5em, + glossary-spacing: 1.5em, + abstract: none, + appendix: none, + acronyms: none, + glossary: none, + header: none, + confidentiality-statement-content: none, + declaration-of-authorship-content: none, + titlepage-content: none, + university: none, + university-location: none, + university-short: none, + city: none, + supervisor: (:), + date: none, + date-format: "[day].[month].[year]", + bibliography: none, + bib-style: "ieee", + heading-numbering: "1.1", + math-numbering: "(1)", + page-numbering: (preface: "I", main: "1 / 1", appendix: "a"), + logo-left: image("dhbw.svg"), + logo-right: none, + logo-size-ratio: "1:1", + ignored-link-label-keys-for-highlighting: (), + body, +) = { + // check required attributes + check-attributes( + title, + authors, + language, + at-university, + confidentiality-marker, + type-of-thesis, + type-of-degree, + show-confidentiality-statement, + show-declaration-of-authorship, + show-table-of-contents, + show-acronyms, + show-list-of-figures, + show-list-of-tables, + show-code-snippets, + show-abstract, + header, + numbering-alignment, + toc-depth, + acronym-spacing, + glossary-spacing, + abstract, + appendix, + acronyms, + university, + university-location, + supervisor, + date, + city, + bibliography, + bib-style, + logo-left, + logo-right, + logo-size-ratio, + university-short, + heading-numbering, + math-numbering, + ignored-link-label-keys-for-highlighting, + page-numbering, + ) + + // set the document's basic properties + set document(title: title, author: authors.map(author => author.name)) + let many-authors = authors.len() > 3 + + init-acronyms(acronyms) + init-glossary(glossary) + + // define logo size with given ration + let left-logo-height = 2.4cm // left logo is always 2.4cm high + let right-logo-height = 2.4cm // right logo defaults to 2.4cm but is adjusted below + let logo-ratio = logo-size-ratio.split(":") + if (logo-ratio.len() == 2) { + right-logo-height = right-logo-height * (float(logo-ratio.at(1)) / float(logo-ratio.at(0))) + } + + // save heading and body font families in variables + let body-font = "Open Sans" + let heading-font = "Montserrat" + + // customize look of figure + set figure.caption(separator: [ --- ], position: bottom) + + // set body font family + set text(font: body-font, lang: language, 12pt) + show heading: set text(weight: "semibold", font: heading-font) + + // heading numbering + set heading(numbering: heading-numbering) + + // math numbering + set math.equation(numbering: math-numbering) + + // set link style for links that are not acronyms + let acronym-keys = if (acronyms != none) { + acronyms.keys().map(acr => ("acronyms-" + acr)) + } else { + () + } + let glossary-keys = if (glossary != none) { + glossary.keys().map(gls => ("glossary-" + gls)) + } else { + () + } + show link: it => if (str(it.dest) not in (acronym-keys + glossary-keys + ignored-link-label-keys-for-highlighting)) { + text(fill: blue, it) + } else { + it + } + + show heading.where(level: 1): it => { + pagebreak() + v(2em) + it + v(1em) + } + show heading.where(level: 2): it => v(1em) + it + v(0.5em) + show heading.where(level: 3): it => v(0.5em) + it + v(0.25em) + + if (titlepage-content != none) { + titlepage-content + } else { + titlepage( + authors, + date, + heading-font, + language, + left-logo-height, + logo-left, + logo-right, + many-authors, + right-logo-height, + supervisor, + title, + type-of-degree, + type-of-thesis, + university, + university-location, + at-university, + date-format, + show-confidentiality-statement, + confidentiality-marker, + university-short, + ) + } + + // set header properties + let display-header = if (header != none and ("display" in header)) { + header.display + } else { + true + } + + let header-content = if (header != none and ("content" in header)) { + header.content + } else { + none + } + + let show-header-chapter = if (header != none and ("show-chapter" in header)) { + header.show-chapter + } else { + true + } + + let show-header-left-logo = if (header != none and ("show-left-logo" in header)) { + header.show-left-logo + } else { + true + } + + let show-header-right-logo = if (header != none and ("show-right-logo" in header)) { + header.show-right-logo + } else { + true + } + + let show-header-divider = if (header != none and ("show-divider" in header)) { + header.show-divider + } else { + true + } + + set page( + margin: (top: 8em, bottom: 8em), + header: [ + #set block(spacing: 0.75em) + #context { + if (display-header) { + if (header-content != none) { + header.content + } else { + grid( + columns: (1fr, auto), + align: (left, right), + gutter: 2em, + if (show-header-chapter) { + align(left + bottom)[ + #let headings = query(heading.where(level: 1)) + #if headings.len() > 0 and not headings.any(it => (it.location().page() == here().page())) { + let elems = query(selector(heading.where(level: 1)).before(here())) + + if (elems.len() > 0) { + let current-heading = elems.last() + let heading-counter = if current-heading.numbering == none { + none + } else { + counter(heading).get().first() + } + + [#heading-counter #current-heading.body] + } + } else { + let elems = query(selector(heading.where(level: 1)).after(here())) + + if (elems.len() > 0) { + let current-heading = elems.first() + let heading-counter = if current-heading.numbering == none { + none + } else { + counter(heading).get().first() + 1 + } + + [#heading-counter #current-heading.body] + } + } + ] + }, + stack( + dir: ltr, + spacing: 1em, + if (show-header-left-logo and logo-left != none) { + set image(height: left-logo-height / 2) + logo-left + }, + if (show-header-right-logo and logo-right != none) { + set image(height: right-logo-height / 2) + logo-right + }, + ), + ) + if (show-header-divider) { + line(length: 100%) + } + } + } + } + ], + ) + + // set page numbering for preface + let preface-numbering = "I" + if ("preface" in page-numbering) { + preface-numbering = page-numbering.preface + } + + set page( + // necessary to apply numbering in the table of contents + numbering: preface-numbering, + footer: context { + let display-total-page-number = preface-numbering.clusters().filter(c => c in page-numbering-symbols).len() >= 2 + + align( + numbering-alignment, + numbering( + preface-numbering, + ..counter(page).get(), + ..if display-total-page-number { + counter(page).at() + }, + ), + ) + }, + ) + counter(page).update(1) + + if (not at-university and show-confidentiality-statement) { + pagebreak() + confidentiality-statement( + authors, + title, + confidentiality-statement-content, + university, + university-location, + date, + language, + many-authors, + date-format, + ) + } + + if (show-declaration-of-authorship) { + pagebreak() + declaration-of-authorship( + authors, + title, + declaration-of-authorship-content, + date, + language, + many-authors, + at-university, + city, + date-format, + ) + } + + show outline.entry.where(level: 1): it => { + v(18pt, weak: true) + strong(it) + } + + set par(justify: true, leading: 1em) + + if (show-abstract and abstract != none) { + align(center + horizon, heading(level: 1, numbering: none, outlined: false)[Abstract]) + text(abstract) + } + + set par(leading: 0.65em) + + if (show-table-of-contents) { + outline( + title: TABLE_OF_CONTENTS.at(language), + indent: auto, + depth: toc-depth, + ) + } + + context { + let elems = query(figure.where(kind: image)) + let count = elems.len() + + if (show-list-of-figures and count > 0) { + outline( + title: LIST_OF_FIGURES.at(language), + target: figure.where(kind: image), + ) + } + } + + context { + let elems = query(figure.where(kind: table)) + let count = elems.len() + + if (show-list-of-tables and count > 0) { + outline( + title: LIST_OF_TABLES.at(language), + target: figure.where(kind: table), + ) + } + } + + context { + let elems = query(figure.where(kind: raw)) + let count = elems.len() + + if (show-code-snippets and count > 0) { + outline( + title: CODE_SNIPPETS.at(language), + target: figure.where(kind: raw), + ) + } + } + + if (show-acronyms and acronyms != none and acronyms.len() > 0) { + print-acronyms(language, acronym-spacing) + } + + if (glossary != none and glossary.len() > 0) { + print-glossary(language, glossary-spacing) + } + + [#metadata(none)] + + set par(leading: 1em, spacing: 2em) + set block(spacing: 2em) + + // reset page numbering and set to main page numbering + let main-numbering = "1 / 1" + if ("main" in page-numbering) { + main-numbering = page-numbering.main + } + + set page( + // necessary to apply numbering in the table of contents + numbering: main-numbering, + footer: context { + let display-total-page-number = main-numbering.clusters().filter(c => c in page-numbering-symbols).len() >= 2 + + align( + numbering-alignment, + numbering( + main-numbering, + ..counter(page).get(), + ..if display-total-page-number { + counter(page).at() + }, + ), + ) + }, + ) + counter(page).update(1) + + body + + [#metadata(none)] + // reset page numbering and set to appendix page numbering + let appendix-numbering = "a" + if ("appendix" in page-numbering) { + appendix-numbering = page-numbering.appendix + } + + set page( + // necessary to apply numbering in the table of contents + numbering: appendix-numbering, + footer: context { + let display-total-page-number = appendix-numbering.clusters().filter(c => c in page-numbering-symbols).len() >= 2 + + align( + numbering-alignment, + numbering( + appendix-numbering, + ..counter(page).get(), + ..if display-total-page-number { + counter(page).at() + }, + ), + ) + }, + ) + counter(page).update(1) + + // Display bibliography. + if bibliography != none { + set std-bibliography( + title: REFERENCES.at(language), + style: bib-style, + ) + bibliography + } + + if (appendix != none) { + heading(level: 1, numbering: none)[#APPENDIX.at(language)] + appendix + } + + [#metadata(none)] +} diff --git a/packages/preview/supercharged-dhbw/3.4.1/locale.typ b/packages/preview/supercharged-dhbw/3.4.1/locale.typ new file mode 100644 index 000000000..91f817373 --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/locale.typ @@ -0,0 +1,143 @@ +#let TITLEPAGE_SECTION_A = ( + "de": "für den Erwerb des", + "en": "for the", +) + +#let TITLEPAGE_SECTION_B = ( + "de": "aus dem Studiengang ", + "en": "from the course of studies ", +) + +#let TITLEPAGE_SECTION_C = ( + "de": "an der ", + "en": "at the ", +) + +#let TITLEPAGE_STUDENT_ID = ( + "de": "Matrikelnummer, Kurs:", + "en": "Student ID, Course:", +) + +#let TITLEPAGE_COMPANY = ( + "de": "Unternehmen:", + "en": "Company:", +) + +#let TITLEPAGE_COMPANY_SUPERVISOR = ( + "de": "Betreuer im Unternehmen:", + "en": "Supervisor in the Company:", +) + +#let TITLEPAGE_SUPERVISOR = ( + "de": "Betreuer an der ", + "en": "Supervisor at ", +) + +#let DECLARATION_OF_AUTHORSHIP_TITLE = ( + "de": "Selbstständigkeitserklärung", + "en": "Declaration of Authorship", +) + +#let DECLARATION_OF_AUTHORSHIP_SECTION_A_SINGLE = "Gemäß Ziffer 1.1.13 der Anlage 1 zu §§ 3, 4 und 5 der Studien- und Prüfungsordnung für die Bachelorstudiengänge im Studienbereich Technik der Dualen Hochschule Baden- Württemberg vom 29.09.2017. Ich versichere hiermit, dass ich meine Arbeit mit dem Thema:" + +#let DECLARATION_OF_AUTHORSHIP_SECTION_A_PLURAL = "Gemäß Ziffer 1.1.13 der Anlage 1 zu §§ 3, 4 und 5 der Studien- und Prüfungsordnung für die Bachelorstudiengänge im Studienbereich Technik der Dualen Hochschule Baden- Württemberg vom 29.09.2017. Wir versichern hiermit, dass wir unsere Arbeit mit dem Thema:" + +#let DECLARATION_OF_AUTHORSHIP_SECTION_B_SINGLE = "selbstständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt habe. Ich versichere zudem, dass alle eingereichten Fassungen übereinstimmen." + +#let DECLARATION_OF_AUTHORSHIP_SECTION_B_PLURAL = "selbstständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt haben. Wir versichern zudem, dass alle eingereichten Fassungen übereinstimmen." + +#let CONFIDENTIALITY_STATEMENT_TITLE = ( + "de": "Sperrvermerk", + "en": "Confidentiality Statement", +) + +#let CONFIDENTIALITY_STATEMENT_SECTION_A = ( + "de": "Die vorliegende Arbeit mit dem Titel", + "en": "The Thesis on hand", +) + +#let CONFIDENTIALITY_STATEMENT_SECTION_B = ( + "de": "enthält unternehmensinterne bzw. vertrauliche Informationen der", + "en": "contains internal respective confidential data of", +) +#let CONFIDENTIALITY_STATEMENT_SECTION_C = ( + "de": ", ist deshalb mit einem Sperrvermerk versehen und wird ausschließlich zu Prüfungszwecken im Studiengang", + "en": ". It is intended solely for inspection by the assigned examiner, the head of the", +) +#let CONFIDENTIALITY_STATEMENT_SECTION_D = ( + "de": " der ", + "en": " department and, if necessary, the Audit Committee at the ", +) +#let CONFIDENTIALITY_STATEMENT_SECTION_E = ( + "de": " vorgelegt. + +Der Inhalt dieser Arbeit darf weder als Ganzes noch in Auszügen Personen außerhalb des Prüfungsprozesses und des Evaluationsverfahrens zugänglich gemacht werden, sofern keine anders lautende Genehmigung der ", + "en": ". + +The content of this thesis may not be made available, either in its entirety or in excerpts, to persons outside of the examination process and the evaluation process, unless otherwise authorized by the training ", +) + +#let CONFIDENTIALITY_STATEMENT_SECTION_F = ( + "de": " vorliegt.", + "en": ".", +) + +#let INSTITUTION_SINGLE = ( + "de": "Ausbildungsstätte", + "en": "institution", +) + +#let INSTITUTION_PLURAL = ( + "de": "Ausbildungsstätten", + "en": "institutions", +) + +#let AND = ( + "de": " und ", + "en": " and ", +) + +#let BY = ( + "de": "von", + "en": "by", +) + +#let TABLE_OF_CONTENTS = ( + "de": "Inhaltsverzeichnis", + "en": "Table of Contents", +) + +#let LIST_OF_FIGURES = ( + "de": "Abbildungsverzeichnis", + "en": "List of Figures", +) + +#let LIST_OF_TABLES = ( + "de": "Tabellenverzeichnis", + "en": "List of Tables", +) + +#let CODE_SNIPPETS = ( + "de": "Codeverzeichnis", + "en": "Code Snippets", +) + +#let ACRONYMS = ( + "de": "Abkürzungsverzeichnis", + "en": "List of Acronyms", +) + +#let GLOSSARY = ( + "de": "Glossar", + "en": "Glossary", +) + +#let REFERENCES = ( + "de": "Literatur", + "en": "References", +) + +#let APPENDIX = ( + "de": "Anhang", + "en": "Appendix", +) diff --git a/packages/preview/supercharged-dhbw/3.4.1/shared-lib.typ b/packages/preview/supercharged-dhbw/3.4.1/shared-lib.typ new file mode 100644 index 000000000..54811df3d --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/shared-lib.typ @@ -0,0 +1,25 @@ +#let is-in-dict(dict-type, state, element) = { + context { + let list = state.get() + if element not in list { + panic(element + " is not a key in the " + dict-type + " dictionary.") + return false + } + } + + return true +} + +#let display-link(dict-type, state, element, text) = { + if is-in-dict(dict-type, state, element) { + link(label(dict-type + "-" + element), text) + } +} + +#let display(dict-type, state, element, text, link: true) = { + if link { + display-link(dict-type, state, element, text) + } else { + text + } +} diff --git a/packages/preview/supercharged-dhbw/3.4.1/template/acronyms.typ b/packages/preview/supercharged-dhbw/3.4.1/template/acronyms.typ new file mode 100644 index 000000000..f7c4ab14a --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/template/acronyms.typ @@ -0,0 +1,5 @@ +#let acronyms = ( + API: "Application Programming Interface", + HTTP: "Hypertext Transfer Protocol", + REST: "Representational State Transfer", +) \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/template/assets/ts.svg b/packages/preview/supercharged-dhbw/3.4.1/template/assets/ts.svg new file mode 100644 index 000000000..f5acd4ea8 --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/template/assets/ts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/template/glossary.typ b/packages/preview/supercharged-dhbw/3.4.1/template/glossary.typ new file mode 100644 index 000000000..432b6f098 --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/template/glossary.typ @@ -0,0 +1,5 @@ +#let glossary = ( + Vulnerability: "A Vulnerability is a flaw in a computer system that weakens the overall security of the system.", + Patch: "A patch is data that is intended to be used to modify an existing software resource such as a program or a file, often to fix bugs and security vulnerabilities.", + Exploit: "An exploit is a method or piece of code that takes advantage of vulnerabilities in software, applications, networks, operating systems, or hardware, typically for malicious purposes.", +) \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/template/main.typ b/packages/preview/supercharged-dhbw/3.4.1/template/main.typ new file mode 100644 index 000000000..ccd9be16e --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/template/main.typ @@ -0,0 +1,138 @@ +#import "@preview/supercharged-dhbw:3.4.1": * +#import "acronyms.typ": acronyms +#import "glossary.typ": glossary + +#show: supercharged-dhbw.with( + title: "Exploration of Typst for the Composition of a University Thesis", + authors: ( + (name: "Max Mustermann", student-id: "7654321", course: "TIS21", course-of-studies: "IT-Security", company: ( + (name: "YXZ GmbH", post-code: "70435", city: "Stuttgart") + )), + (name: "Juan Pérez", student-id: "1234567", course: "TIM21", course-of-studies: "Mobile Computer Science", company: ( + (name: "ABC S.L.", post-code: "08005", city: "Barcelona", country: "Spain") + )), + ), + acronyms: acronyms, // displays the acronyms defined in the acronyms dictionary + at-university: false, // if true the company name on the title page and the confidentiality statement are hidden + bibliography: bibliography("sources.bib"), + date: datetime.today(), + glossary: glossary, // displays the glossary terms defined in the glossary dictionary + language: "en", // en, de + supervisor: (company: "John Appleseed"), + university: "Cooperative State University Baden-Württemberg", + university-location: "Ravensburg Campus Friedrichshafen", + university-short: "DHBW", + // for more options check the package documentation (https://typst.app/universe/package/supercharged-dhbw) +) + +// Edit this content to your liking + += Introduction + +#lorem(100) + +#lorem(100) + +#lorem(100) + += Examples + +#lorem(30) + +== Acronyms + +Use the `acr` function to insert acronyms, which looks like this #acr("HTTP"). + +#acrlpl("API") are used to define the interaction between different software systems. + +#acrs("REST") is an architectural style for networked applications. + +== Glossary + +Use the `gls` function to insert glossary terms, which looks like this: + +A #gls("Vulnerability") is a weakness in a system that can be exploited. + +== Lists + +Create bullet lists or numbered lists. + +- This +- is a +- bullet list + ++ It also ++ works with ++ numbered lists! + +== Figures and Tables + +Create figures or tables like this: + +=== Figures + +#figure(caption: "Image Example", image(width: 4cm, "assets/ts.svg")) + +=== Tables + +#figure( + caption: "Table Example", + table( + columns: (1fr, 50%, auto), + inset: 10pt, + align: horizon, + table.header( + [], + [*Area*], + [*Parameters*], + ), + + text("cylinder.svg"), + $ pi h (D^2 - d^2) / 4 $, + [ + $h$: height \ + $D$: outer radius \ + $d$: inner radius + ], + + text("tetrahedron.svg"), $ sqrt(2) / 12 a^3 $, [$a$: edge length], + ), +) + +== Code Snippets + +Insert code snippets like this: + +#figure( + caption: "Codeblock Example", + sourcecode[```ts + const ReactComponent = () => { + return ( +
+

Hello World

+
+ ); + }; + + export default ReactComponent; + ```], +) + +#pagebreak() + +== References + +Cite like this #cite(form: "prose", ). +Or like this @iso18004. + +You can also reference by adding `` with the desired name after figures or headings. + +For example this @table references the table on the previous page. + += Conclusion + +#lorem(100) + +#lorem(120) + +#lorem(80) \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/template/sources.bib b/packages/preview/supercharged-dhbw/3.4.1/template/sources.bib new file mode 100644 index 000000000..4ca70ed06 --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/template/sources.bib @@ -0,0 +1,6 @@ +@inproceedings{iso18004, + title = {{ISO/IEC 18004: Information technology -- Automatic identification and data capture techniques -- QR code bar code symbology specification}}, + booktitle = {ISO/IEC 18004:2015}, + author = {{International Organization for Standardization}}, + year = {2015}, +} diff --git a/packages/preview/supercharged-dhbw/3.4.1/thumbnail.png b/packages/preview/supercharged-dhbw/3.4.1/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..52b836b43d5cb831ed56c48fec4373c4812d1ade GIT binary patch literal 113208 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 0) { + align(center, text(weight: "semibold", 1.25em, type-of-thesis)) + v(0.5em) + } + + // type of degree (optional) + if (type-of-degree != none and type-of-degree.len() > 0) { + align(center, text(1em, TITLEPAGE_SECTION_A.at(language))) + v(-0.25em) + align(center, text(weight: "semibold", 1.25em, type-of-degree)) + } + + v(1.5em) + + // course of studies + align( + center, + text( + 1.2em, + TITLEPAGE_SECTION_B.at(language) + authors.map(author => author.course-of-studies).dedup().join(" | "), + ), + ) + + if (many-authors) { + v(0.75em) + } else { + v(1em) + } + + // university + align( + center, + text( + 1.2em, + TITLEPAGE_SECTION_C.at(language) + university + [ ] + university-location, + ), + ) + + if (many-authors) { + v(0.8em) + } else { + v(3em) + } + + align(center, text(1em, BY.at(language))) + + if (many-authors) { + v(0.8em) + } else { + v(2em) + } + + // authors + grid( + columns: 100%, + gutter: if (many-authors) { + 14pt + } else { + 18pt + }, + ..authors.map(author => align( + center, + { + text(weight: "medium", 1.25em, author.name) + }, + )) + ) + + if (many-authors) { + v(0.8em) + } else { + v(2em) + } + + // date + align( + center, + text( + 1.2em, + if (type(date) == datetime) { + date.display(date-format) + } else { + date.at(0).display(date-format) + [ -- ] + date.at(1).display(date-format) + }, + ), + ) + + v(1fr) + + // author information + grid( + columns: (auto, auto), + row-gutter: 11pt, + column-gutter: 2.5em, + + // students + text(weight: "semibold", TITLEPAGE_STUDENT_ID.at(language)), + stack( + dir: ttb, + for author in authors { + text([#author.student-id, #author.course]) + linebreak() + } + ), + + // company + if (not at-university) { + text(weight: "semibold", TITLEPAGE_COMPANY.at(language)) + }, + if (not at-university) { + stack( + dir: ttb, + for author in authors { + let company-address = "" + + // company name + if ( + "name" in author.company and + author.company.name != none and + author.company.name != "" + ) { + company-address+= author.company.name + } else { + panic("Author '" + author.name + "' is missing a company name. Add the 'name' attribute to the company object.") + } + + // company address (optional) + if ( + "post-code" in author.company and + author.company.post-code != none and + author.company.post-code != "" + ) { + company-address+= text([, #author.company.post-code]) + } + + // company city + if ( + "city" in author.company and + author.company.city != none and + author.company.city != "" + ) { + company-address+= text([, #author.company.city]) + } else { + panic("Author '" + author.name + "' is missing the city of the company. Add the 'city' attribute to the company object.") + } + + // company country (optional) + if ( + "country" in author.company and + author.company.country != none and + author.company.country != "" + ) { + company-address+= text([, #author.company.country]) + } + + company-address + linebreak() + } + ) + }, + + // company supervisor + if ("company" in supervisor) { + text(weight: "semibold", TITLEPAGE_COMPANY_SUPERVISOR.at(language)) + }, + if ("company" in supervisor and type(supervisor.company) == str) { + text(supervisor.company) + }, + + // university supervisor + if ("university" in supervisor) { + text( + weight: "semibold", + TITLEPAGE_SUPERVISOR.at(language) + + university-short + + [:] + ) + }, + if ("university" in supervisor and type(supervisor.university) == str) { + text(supervisor.university) + } + ) +} \ No newline at end of file diff --git a/packages/preview/supercharged-dhbw/3.4.1/typst.toml b/packages/preview/supercharged-dhbw/3.4.1/typst.toml new file mode 100644 index 000000000..34744e9eb --- /dev/null +++ b/packages/preview/supercharged-dhbw/3.4.1/typst.toml @@ -0,0 +1,16 @@ +[package] +name = "supercharged-dhbw" +version = "3.4.1" +entrypoint = "lib.typ" +authors = ["Danny Seidel <@DannySeidel>"] +license = "MIT" +description = "Unofficial Template for DHBW" +repository = "https://github.com/DannySeidel/typst-dhbw-template" +keywords = ["dhbw", "thesis"] +categories = ["paper", "thesis", "report"] +exclude = ["examples/**", "CHANGELOG.md"] + +[template] +path = "template" +entrypoint = "main.typ" +thumbnail = "thumbnail.png" \ No newline at end of file