├── thumbnail.png
├── typst.toml
├── LICENSE
├── template
└── main.typ
├── lib
├── departamentos.typ
├── enunciado-facil-fcfm.typ
└── logos
│ ├── dcc2.svg
│ ├── diqbm.svg
│ └── dfi.svg
└── README.md
/thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bkorecic/enunciado-facil-fcfm/HEAD/thumbnail.png
--------------------------------------------------------------------------------
/typst.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "enunciado-facil-fcfm"
3 | version = "0.1.0"
4 | categories = ["report"]
5 | entrypoint = "lib/enunciado-facil-fcfm.typ"
6 | authors = ["Blaz Korecic <@bkorecic>"]
7 | license = "MIT"
8 | description = "Documentos de ejercicios (controles, auxiliares, tareas, pautas) para la FCFM, UChile"
9 | repository = "https://github.com/bkorecic/enunciado-facil-fcfm"
10 | keywords = ["fcfm", "problemset", "worksheet", "uchile", "Universidad de Chile", "enunciados", "problemas", "homework", "es", "español", "spanish"]
11 |
12 | [template]
13 | path = "template"
14 | entrypoint = "main.typ"
15 | thumbnail = "thumbnail.png"
16 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) [year] [fullname]
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/template/main.typ:
--------------------------------------------------------------------------------
1 | #import "@preview/enunciado-facil-fcfm:0.1.0" as template
2 |
3 | #show: template.conf.with(
4 | titulo: "Auxiliar 5",
5 | subtitulo: "Usando el template",
6 | titulo-extra: (
7 | [*Profesora*: Ada Lovelace],
8 | [*Auxiliares*: Grace Hopper y Alan Turing],
9 | ),
10 | departamento: template.departamentos.dcc,
11 | curso: "CC4034 - Composición de documentos",
12 | )
13 |
14 | = Sumatorias
15 |
16 | Resuelva:
17 | 1. $ sum_(k=1)^n k^3 $
18 | 2. $ sum_(k=1)^n k 2^k $
19 | 3. $ sum_(k=1)^n k 2^k $
20 |
21 | = Recurrencias
22 |
23 | 1. Resuelva la siguiente ecuación de recurrencia:
24 |
25 | $ T_n = 2T_(n-1) + n, #h(2cm) T_0 = c. $
26 |
27 | 2. Sean $a_n, b_n$ secuencias tal que $a_n != 0$ y $b_n != 0$ $forall n in NN$. Sea $T_n$ definida como:
28 | $ a_n T_n = b_n T_(n-1) + f_n, #h(2cm) T_0 = c. $
29 |
30 | Obtenga una fórmula no recursiva para $T_n$.
31 |
32 | 3. Usando el método visto en clases, resuelva:
33 |
34 | $ T_n = (T_(n-1)/T_(n-2))^4 dot 8^(n dot 2^n), #h(2cm) T_0 = 1, T_1 = 2. $
35 |
36 | = Funciones generadoras
37 |
38 | 1. Considere la recurrencia definida para $n <= 0$:
39 | $ a_(n+3) = 5a_(n+2) - 7a_(n+1) + 3a_n + 2^n, $
40 | con $a_0 = 0$, $a_1 = 2$ y $a_2 = 5$.
41 |
42 | Utilizando funciones generadoras, resuelva la recurrencia.
43 |
44 | 2. Cuente el número de palabras en ${0,1,2}^n$ tal que cada subpalabra maximal de ${0}^*$ tiene largo par.
45 |
--------------------------------------------------------------------------------
/lib/departamentos.typ:
--------------------------------------------------------------------------------
1 | #let adh = (
2 | nombre: "Área de Humanidades",
3 | logo: move(dy: 5pt, image("logos/adh.svg", height: 50pt)),
4 | )
5 |
6 | #let das = (
7 | nombre: "Departamento de Astronomía",
8 | logo: move(dy: 5pt, image("logos/das.svg", height: 50pt)),
9 | )
10 |
11 | #let dcc = (
12 | nombre: "Departamento de Ciencias de la Computación",
13 | logo: move(dy: 5pt, image("logos/dcc.svg", height: 50pt)),
14 | )
15 |
16 | #let dfi = (
17 | nombre: "Departamento de Física",
18 | logo: move(dy: 5pt, image("logos/dfi.svg", height: 50pt)),
19 | )
20 |
21 | #let dgf = (
22 | nombre: "Departamento de Geofísica",
23 | logo: move(dy: 5pt, image("logos/dgf.svg", height: 50pt)),
24 | )
25 |
26 | #let dic = (
27 | nombre: "Departamento de Ingeniería Civil",
28 | logo: move(dy: 5pt, image("logos/dic.svg", height: 50pt)),
29 | )
30 |
31 | #let die = (
32 | nombre: "Departamento de Ingeniería Eléctrica",
33 | logo: move(dy: 5pt, image("logos/die.svg", height: 50pt)),
34 | )
35 |
36 | #let dii = (
37 | nombre: "Departamento de Ingeniería Industrial",
38 | logo: move(dy: 5pt, image("logos/dii.svg", height: 50pt)),
39 | )
40 |
41 | #let dim = (
42 | nombre: "Departamento de Ingeniería Matemática",
43 | logo: move(dy: 5pt, image("logos/dim.svg", height: 50pt)),
44 | )
45 |
46 | #let dimec = (
47 | nombre: "Departamento de Ingeniería Mecánica",
48 | logo: move(dy: 5pt, image("logos/dimec.svg", height: 50pt)),
49 | )
50 |
51 | #let dimin = (
52 | nombre: "Departamento de Ingeniería de Minas",
53 | logo: move(dy: 5pt, image("logos/dimin.svg", height: 50pt)),
54 | )
55 |
56 | #let diqbm = (
57 | nombre: "Departamento de Ingeniería Química, Biotecnología y Materiales",
58 | logo: move(dy: 5pt, image("logos/diqbm.svg", height: 50pt)),
59 | )
60 |
61 | #let geo = (
62 | nombre: "Deparamento de Geología",
63 | logo: move(dy: 5pt, image("logos/geo.svg", height: 50pt)),
64 | )
65 |
--------------------------------------------------------------------------------
/lib/enunciado-facil-fcfm.typ:
--------------------------------------------------------------------------------
1 | #import "departamentos.typ" as departamentos
2 |
3 |
4 | // Función para aplicar el template a un documento
5 | //
6 | // - titulo (string): Título del documento
7 | // - subtitulo (string): Subtítulo del documento
8 | // - departamento (dictionary): Departamento asociado al documento
9 | // - titulo-extra (array): Arreglo de contenido para agregar después del subtítulo. Útil para poner el equipo docente.
10 | // - curso (string): Nombre del curso asociado al documento
11 | // - page-conf (dictionary): Configuracion adicional para pasar a la función page. Puede sobreescribir la del template
12 | // - doc (content): Documento para aplicar el template
13 | // -> content
14 | #let conf(
15 | titulo: none,
16 | subtitulo: none,
17 | titulo-extra: none,
18 | departamento: departamentos.dcc,
19 | curso: "",
20 | page-conf: (:),
21 | doc,
22 | ) = {
23 | set text(lang: "es")
24 | // Formato de headings. Por defecto P1, P2, etc
25 | set heading(numbering: "P1.")
26 | // Formato de enums. Por defecto a) b) c) etc
27 | set enum(numbering: "ai)")
28 |
29 | // Chequeo de tipos para departamento
30 | if type(departamento) != dictionary {
31 | panic("parámetro departamento debe ser un diccionario")
32 | }
33 | if not "nombre" in departamento {
34 | panic("parámetro departamento es diccionario pero no tiene llave 'nombre'")
35 | }
36 | if not "logo" in departamento {
37 | panic("parámetro departamento es diccionario pero no tiene llave 'logo'")
38 | }
39 |
40 | // Chequeo de tipos para titulo-extra
41 | if titulo-extra != none {
42 | if type(titulo-extra) != array {
43 | panic("parámetro titulo-extra debe ser una lista")
44 | }
45 | for elem in titulo-extra {
46 | if type(elem) != content {
47 | panic("titulo-extra debe ser una lista con elementos de tipo content")
48 | }
49 | }
50 | }
51 |
52 | let header = [
53 | #stack(dir: ltr,
54 | // El primer elemento del header es el texto, apilado usando un stack.
55 | align(bottom+left, stack(dir: ttb, spacing: 3pt, "Facultad de Ciencias Físicas y Matemáticas",
56 | departamento.nombre,
57 | curso
58 | )),
59 | // Acá va el logo.
60 | align(bottom+right, departamento.logo)
61 | )
62 | #v(-5pt)
63 | #line(length: 100%, stroke: 0.4pt)
64 | ]
65 |
66 | // Hay que ir pusheando los elementos de a uno
67 | // porque si son none se crea el espaciado del stack
68 | // igual (¿cómo mejorar esto?)
69 | let title = (text(22pt, titulo),)
70 | if subtitulo != none {
71 | title.push(text(14pt, subtitulo))
72 | }
73 | title = stack(spacing: 6pt, ..title)
74 |
75 | if titulo-extra != none {
76 | title = stack(spacing: 12pt,
77 | title,
78 | stack(spacing: 5pt, ..titulo-extra))
79 | }
80 | title = align(center, title)
81 |
82 | // Configuración del tamaño de página, márgenes y header
83 | let header-sep = 20pt // Separación entre header y contenido
84 | set page(
85 | paper: "us-letter",
86 | margin: (left: 1in,
87 | right: 1in,
88 | top: 1in+header-sep,
89 | bottom: 1in),
90 | header: header,
91 | header-ascent: header-sep,
92 | ..page-conf)
93 |
94 | // La función retorna el título generado seguido del resto
95 | // del documento
96 | title
97 | doc
98 | }
99 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # enunciado-facil-fcfm
2 |
3 | Template de Typst para documentos de la FCFM (auxiliares, controles, pautas)
4 |
5 | ## Ejemplo de uso
6 |
7 | ### En [typst.app](https://typst.app)
8 |
9 | Si utilizas la aplicación web oficial, puedes presionar "Start from template" y buscar "enunciado-facil-fcfm" para crear un proyecto ya inicializado con el template.
10 |
11 | ### En CLI
12 |
13 | Si usas Typst de manera local, puedes ejecutar:
14 | ```sh
15 | typst init @preview/enunciado-facil-fcfm:0.1.0
16 | ```
17 | lo cual inicializará un proyecto usando el template en el directorio actual.
18 |
19 | ### Manualmente
20 |
21 | Basta crear un archivo con el siguiente contenido para usar el template:
22 |
23 | ```typ
24 | #import "@preview/enunciado-facil-fcfm:0.1.0" as template
25 |
26 | #show: template.conf.with(
27 | titulo: "Auxiliar 1",
28 | subtitulo: "Typst",
29 | titulo-extra: (
30 | [*Profesora*: Ada Lovelace],
31 | [*Auxiliares*: Grace Hopper y Alan Turing],
32 | ),
33 | departamento: template.departamentos.dcc,
34 | curso: "CC4034 - Composición de documentos",
35 | )
36 |
37 | ...el resto del documento comienza acá
38 | ```
39 |
40 | Puedes ver un ejemplo más completo en [main.typ](template/main.typ). Para aprender la sintáxis de Typst existe la [documentación oficial](https://typst.app/docs). Si vienes desde LaTeX, te recomiendo la [guía para usuarios de LaTeX](https://typst.app/docs/guides/guide-for-latex-users/).
41 |
42 | ## Configuración
43 |
44 | La función `conf` importada desde el template recibe los siguientes parámetros:
45 |
46 | | Parámetro | Descripción |
47 | | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
48 | | `titulo` | Título del documento |
49 | | `subtitulo` | Subtítulo del documento |
50 | | `titulo-extra` | Arreglo con bloques de contenido adicionales a agregar después del título. Útil para mostrar los nombres del equipo docente. |
51 | | `departamento` | Diccionario que contiene el nombre (`string`) y el logo del departamento (`content`). El template viene con uno ya creado para cada departamento bajo `template.departamentos`. Valor por defecto: `template.departamentos.dcc`|
52 | | `curso` | Código y/o nombre del curso. |
53 | | `page-conf` | Diccionario con parámetros adicionales (tamaño de página, márgenes, etc) para pasarle a la función [page](https://typst.app/docs/reference/layout/page/).|
54 |
55 | ## FAQ
56 |
57 | ### Cómo cambiar el logo del departamento
58 |
59 | El parámetro `departamento` solamente es un diccionario de Typst con las llaves `nombre` y `logo`. Puedes crear un diccionario con un logo personalizado y pasárselo al template:
60 |
61 | ```typ
62 | #import "@preview/enunciado-facil-fcfm:0.1.0" as template
63 |
64 | #let mi-departamento = (
65 | nombre: "Mi súper departamento personalizado",
66 | logo: image("mi-super-logo.png"),
67 | )
68 |
69 | #show: template.conf.with(
70 | titulo: "Documento con logo personalizado",
71 | departamento: mi-departamento,
72 | curso: "CC4034 - Composición de documentos",
73 | )
74 | ```
75 |
76 | ### Cómo cambiar márgenes, tamaño de página, etcétera
77 |
78 | Para cambiar la configuración de la página hay que interceptar la [set rule](https://typst.app/docs/reference/styling/#set-rules) que se hace sobre `page`. Para ello, el template expone el parámetro `page-conf` que permit sobreescribir la configuración de página del template. Por ejemplo, para cambiar el tamaño del papel a A4:
79 |
80 | ```typ
81 | #import "@preview/enunciado-facil-fcfm:0.1.0" as template
82 |
83 | #show: template.conf.with(
84 | titulo: "Documento con tamaño A4",
85 | departamento: template.departamentos.dcc,
86 | curso: "CC4034 - Composición de documentos",
87 | page-conf: (paper: "a4")
88 | )
89 | ```
90 |
91 | ### Cómo cambiar la fuente, headings, etc
92 |
93 | Usando [show y set rules](https://typst.app/docs/reference/styling/) puedes personalizar mucho más el template. Por ejemplo, para cambiar la fuente:
94 |
95 | ```typ
96 | #import "@preview/enunciado-facil-fcfm:0.1.0" as template
97 |
98 | // En este caso hay que cambiar la fuente
99 | // antes de que se configure el template
100 | // para que se aplique en el título y encabezado
101 | #set text(font: "New Computer Modern")
102 |
103 | #show: template.conf.with(
104 | titulo: "Documento con la fuente de LaTeX",
105 | departamento: template.departamentos.dcc,
106 | curso: "CC4034 - Composición de documentos",
107 | )
108 | ```
109 |
--------------------------------------------------------------------------------
/lib/logos/dcc2.svg:
--------------------------------------------------------------------------------
1 | ?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 |
3 |
4 |
82 |
--------------------------------------------------------------------------------
/lib/logos/diqbm.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/lib/logos/dfi.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------