├── 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 | 16 | 18 | 21 | 24 | 25 | 26 | 45 | 51 | 52 | 57 | 59 | 62 | 65 | 69 | 70 | 73 | 77 | 78 | 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /lib/logos/diqbm.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xmlQUÍMICA, BIOTECNOLOGÍ 587 | A 597 | Y MATERIALES 604 | FACULTAD DE CIENCIA 611 | S 621 | FÍSICAS Y MATEMÁ 628 | TICAS 638 | UNIVERSIDAD DE CHILE 645 | DEPARTAMENTO DE INGENIERÍ 652 | A 662 | -------------------------------------------------------------------------------- /lib/logos/dfi.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml --------------------------------------------------------------------------------