Skip to content
Open
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
16 changes: 16 additions & 0 deletions packages/preview/easy-internship/0.1.0/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
MIT No Attribution

Copyright (c) 2025-2026 Pierre Lapolla

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.
71 changes: 71 additions & 0 deletions packages/preview/easy-internship/0.1.0/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# easy-internship

A clean report template for school projects and internship reports: cover page, table of contents, school and company logos in the header, and a footer with author, page number and date. Works in English and French.

<p align="center">
<img src="https://raw.githubusercontent.com/PierreLapolla/easy-internship/v0.1.0/thumbnail.png" alt="Cover page" width="45%">
</p>

## Getting started

Create a new project from the template:

```sh
typst init @preview/easy-internship:0.1.0
```

Or use it in an existing document:

```typst
#import "@preview/easy-internship:0.1.0": report

#show: report.with(
title: [My report],
author: "Jane Doe",
)

= Introduction
Your report content here.
```

Logos and bibliography are passed as content, so their paths are resolved relative to *your* file:

```typst
#show: report.with(
title: [Internship Report],
author: "Jane Doe",
school-logo: image("school-logo.svg"),
company-logo: image("company-logo.svg"),
bibliography: bibliography("refs.bib"),
)
```

## Parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `title` | content | `[My report]` | Cover title and document metadata. |
| `author` | string | `"Student Name"` | Cover author, footer and metadata. |
| `subtitle` | content / `none` | `none` | Subtitle on the cover page. |
| `date` | datetime / content | `datetime.today()` | Shown on the cover and in the footer. |
| `language` | string | `"en"` | Text language (e.g. `"en"`, `"fr"`). |
| `font` | string | `"Libertinus Serif"` | Body font, falls back to Libertinus Serif. |
| `text-size` | length | `11pt` | Body text size. |
| `page-margin` | length / dictionary | `2.5cm` | Passed to `page(margin: ..)`. |
| `logo-size` | length | `1cm` | Logo height in the header (doubled on the cover). |
| `footer-font-size` | length | `0.8em` | Size of the footer side texts. |
| `cover-title-size` | length | `30pt` | Cover title size. |
| `cover-subtitle-size` | length | `18pt` | Cover subtitle size. |
| `cover-page` | bool | `true` | Render the cover page. |
| `outline-page` | bool | `true` | Render the table of contents. |
| `keywords` | array | `()` | Document metadata keywords. |
| `description` | content / `none` | `none` | Document metadata description. |
| `school-logo` | content / `none` | `none` | Left header logo, e.g. `image("logo.png")`. |
| `company-logo` | content / `none` | `none` | Right header logo. |
| `footer-content` | content / `none` | `none` | Left footer text, defaults to `author`. |
| `highlight-color` | color | `rgb("#00727A")` | Accent color for title, headings and highlights. |
| `bibliography` | content / `none` | `none` | e.g. `bibliography("refs.bib")`, rendered on a new page at the end. |

## License

[MIT-0](LICENSE): use, modify and share freely, no attribution required in your report.
97 changes: 97 additions & 0 deletions packages/preview/easy-internship/0.1.0/lib.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#let report(
body,
title: [My report],
author: "Student Name",
subtitle: none,
date: datetime.today(),
language: "en",
font: "Libertinus Serif",
text-size: 11pt,
page-margin: 2.5cm,
logo-size: 1cm,
footer-font-size: 0.8em,
cover-title-size: 30pt,
cover-subtitle-size: 18pt,
cover-page: true,
outline-page: true,
keywords: (),
description: none,
school-logo: none,
company-logo: none,
footer-content: none,
highlight-color: rgb("#00727A"),
bibliography: none,
) = {
let display-date = if type(date) == datetime {
date.display("[day] [month repr:long] [year]")
} else {
date
}

set page(paper: "a4", margin: page-margin)
set text(size: text-size, lang: language, font: (font, "Libertinus Serif"))
set par(justify: true, first-line-indent: (amount: 1.5em, all: true))
set heading(numbering: "1.")
set highlight(fill: highlight-color.lighten(75%))
show heading: set text(fill: highlight-color)

set document(
title: title,
author: author,
date: if type(date) == datetime { date } else { auto },
keywords: keywords,
description: description,
)

let header-content = {
set image(height: logo-size)
grid(
columns: (1fr, 1fr),
align(left, if school-logo != none { school-logo }),
align(right, if company-logo != none { company-logo }),
)
}
let footer-layout = grid(
columns: (1fr, auto, 1fr),
align(left, text(size: footer-font-size, if footer-content == none { author } else { footer-content })),
align(center, context counter(page).display()),
align(right, text(size: footer-font-size, display-date)),
)

if cover-page {
block(width: 100%, height: 100%)[
#{
set image(height: 2 * logo-size)
header-content
}
#v(1fr)
#align(center)[
#text(size: cover-title-size, weight: "bold", fill: highlight-color)[#title]
#if subtitle != none {
v(0.6em)
text(size: cover-subtitle-size, weight: "medium")[#subtitle]
}
#v(1.6em)
#text(size: 13pt, weight: "semibold")[#author]
#v(0.5em)
#text(size: 12pt)[#display-date]
]
#v(1fr)
]
pagebreak()
}

set page(header: header-content, footer: footer-layout)

if outline-page {
outline()
pagebreak()
}

body

if bibliography != none {
pagebreak()
bibliography
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
44 changes: 44 additions & 0 deletions packages/preview/easy-internship/0.1.0/template/main.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#import "@preview/easy-internship:0.1.0": report

#show: report.with(
title: [Internship Report],
subtitle: [Software Engineering Intern 路 Spring 2026],
author: "Jane Doe",
language: "en",
school-logo: image("school-logo.svg"),
company-logo: image("company-logo.svg"),
keywords: ("internship", "report"),
bibliography: bibliography("refs.bib"),
)

#heading(numbering: none)[Acknowledgments]
#lorem(60)

= Introduction
This report describes the internship context, the work carried out and the
lessons learned. @activities lists the main tasks.

= Activities <activities>
- Implemented internal tooling
- Wrote technical documentation
- Took part in code reviews

#figure(
table(
columns: (2fr, 1fr),
table.header[*Task*][*Hours*],
[Development], [120],
[Documentation], [24],
[Testing], [18],
),
caption: [Time spent per task.],
)

= Key Learnings
#highlight[Clear documentation] made the biggest difference. Literate
programming @knuth1984 is a good read on the topic.

$ sum_(i=1)^n i = (n(n+1)) / 2 $

= Conclusion
#lorem(40)
9 changes: 9 additions & 0 deletions packages/preview/easy-internship/0.1.0/template/refs.bib
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@article{knuth1984,
author = {Knuth, Donald E.},
title = {Literate Programming},
journal = {The Computer Journal},
year = {1984},
volume = {27},
number = {2},
pages = {97--111}
}
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.
17 changes: 17 additions & 0 deletions packages/preview/easy-internship/0.1.0/typst.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[package]
name = "easy-internship"
version = "0.1.0"
entrypoint = "lib.typ"
authors = ["Pierre Lapolla <@PierreLapolla>"]
license = "MIT-0"
description = "Internship and school reports with cover and logos."
repository = "https://github.com/PierreLapolla/easy-internship"
keywords = ["report", "internship", "school", "university", "french"]
categories = ["report"]
disciplines = []
compiler = "0.13.0"

[template]
path = "template"
entrypoint = "main.typ"
thumbnail = "thumbnail.png"
Loading