diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..fd1e3f3 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "Defensio/libs/awesome-beamer"] + path = Defensio/libs/awesome-beamer + url = https://codeberg.org/LukasPietzschmann/awesome-beamer +[submodule "Defensio/libs/smile"] + path = Defensio/libs/smile + url = https://codeberg.org/LukasPietzschmann/smile diff --git a/Defensio/00_preamble.tex b/Defensio/00_preamble.tex new file mode 100644 index 0000000..9ec0e42 --- /dev/null +++ b/Defensio/00_preamble.tex @@ -0,0 +1,77 @@ +\documentclass[aspectratio=169]{beamer} + +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} + +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{lmodern} +\usepackage{multimedia} +\usepackage{graphicx} + +\newcommand{\imagepath}{Images} + +\definecolor{orange}{HTML}{f87a01} +\usetheme[german, color, coloraccent=orange]{awesome} + +% \usepackage{firamath-otf} +\usepackage{pgfplots} +\usepackage{pgfplotstable} +% \usepackage{fontawesome} +\usepackage{tikzpingus} +\usepackage{tikzducks} +\usepackage{pdfpc} +\usepackage{amsmath} + +\usepgfplotslibrary{dateplot} +\usetikzlibrary{shapes,tikzmark} +\tikzset{pipelinestep/.style={lw,rnd,shape=signal,signal from=west,signal pointer angle=130,minimum width=3cm,minimum height=2cm,draw=black,fill=lightgray!30}} + +\def\info#1{\begingroup\color{gray}\scriptsize#1\endgroup} + +\newcommand<>{\talknote}[1]{\only#2{\pdfpcnote{- #1}\relax}} + +\makeatletter +\newlength\beamerleftmargin +\setlength\beamerleftmargin{\Gm@lmargin} +\makeatother + + +% \addbibresource{refs.bib} + +% \addtobeamertemplate{title page}{}{ +% \begin{tikzpicture}[overlay, remember picture] +% \node[anchor=south east,outer sep=0pt] at (current page.south east) {\fontsize{3}{3}\selectfont\color{white}This image was generated by AI}; +% \end{tikzpicture} +% } + +\pgfplotsset{ + every axis legend/.append style={style={roundednode,fill=accent!10,lcr}}, + every axis plot/.append style={lw,lcr}, +} + +\title[AlumniHub]{AlumniHub} +\subtitle{Web-Entwicklung für den Absolventenverein} +\author{Konstantin Hintermayer \\ Adam Gaiswinkler \\ Florian Edlmayer} +\email{} +\institute{Schulzentrum HTL HAK Ungargasse} +\uni{Schulzentrum HTL HAK Ungargasse} +\location{Wien} +\background{background.png} +\logo{\includegraphics[width=3cm]{\imagepath/images/logos/logo.png}} +\date\today + +\AtBeginSection[] +{ +\begin{frame}[noframenumbering,plain]{Agenda} + \tableofcontents[currentsection, hideothersubsections] +\end{frame} +} + +\begin{document} + +\maketitle + +$body$ + +\end{document} \ No newline at end of file diff --git a/Defensio/01_Praesentation_Allgemein.md b/Defensio/01_Praesentation_Allgemein.md new file mode 100644 index 0000000..1bcda3d --- /dev/null +++ b/Defensio/01_Praesentation_Allgemein.md @@ -0,0 +1,11 @@ +# Allgemein Alumnihub + +--- + +## {.plain} + +\begin{tikzpicture}[remember picture,overlay] + \node[anchor=center] at (current page.center) { + \movie[width=\paperwidth, height=\paperheight, poster, showcontrols=false, autostart]{}{\imagepath/video/introduction/sample-10s.mp4} + }; +\end{tikzpicture} diff --git a/Defensio/02_Praesentation_Konstantin_Hintermayer.md b/Defensio/02_Praesentation_Konstantin_Hintermayer.md new file mode 100644 index 0000000..38cc8ce --- /dev/null +++ b/Defensio/02_Praesentation_Konstantin_Hintermayer.md @@ -0,0 +1,41 @@ +# Konstantin Hintermayer + +## Rolle im Projekt + +## Infrastruktur & CI/CD + +Systemaufbau: + +- Debian Linux +- PostgreSQL +- NginX +- Asp.Net Core + +CI: + +- Gitea Actions +- Debian Packages (.deb) + +## Softwarearchitektur + +- Open-Closed Principle +- Dependency Injection + +## Technischer Vergleich + +- Typisierung +- Konsistenz + +## Teamleitung + +::: columns + +:::: column +left +:::: + +:::: column +right +:::: + +::: diff --git a/Praesentation_Adam_Gaiswinkler.md b/Defensio/03_Praesentation_Adam_Gaiswinkler.md similarity index 91% rename from Praesentation_Adam_Gaiswinkler.md rename to Defensio/03_Praesentation_Adam_Gaiswinkler.md index 2a46c16..8228463 100644 --- a/Praesentation_Adam_Gaiswinkler.md +++ b/Defensio/03_Praesentation_Adam_Gaiswinkler.md @@ -1,16 +1,11 @@ ---- -marp: true -theme: default -paginate: true ---- +# Adam Gaiswinkler -# Defensio Diplomarbeit: AlumniHub ## Individueller Teil: Adam Gaiswinkler **Entwicklung von CMS-Modulen & Frontend-Design** --- -# Ausgangslage & Motivation +## Ausgangslage & Motivation - **Ausgangssituation**: Bedarf an einer modernen Plattform für den Absolventenverein der HTL Ungargasse. - **Persönliche Motivation**: - Steigende Verantwortung durch Teamverkleinerung (von 6 auf 3 Personen). @@ -22,7 +17,7 @@ paginate: true --- -# Eingesetzte Technologien +## Eingesetzte Technologien - **Backend & Core**: C#, ASP.NET Core - **Frontend**: Blazor (für interaktive Weboberflächen direkt in C#) - **CMS**: Oqtane Framework @@ -32,7 +27,7 @@ paginate: true --- -# Umsetzung: Oqtane Theme +## Umsetzung: Oqtane Theme - **Ziel**: Modernes, schlichtes Design im Stil der HTL Ungargasse (szu.at). - **Technische Highlights**: - Vollständige Eigenentwicklung der Navigationslogik (über `PageState.Pages`). @@ -42,7 +37,7 @@ paginate: true --- -# Umsetzung: Hall of Fame (1) +## Umsetzung: Hall of Fame (1) - **Zweck**: Sichtbarmachung von erfolgreichen Absolventinnen und Absolventen. - **UI & UX**: - Responsive Kartenübersicht der Personen mit Such- und Sortierfunktion (Echtzeit). @@ -54,7 +49,7 @@ paginate: true --- -# Umsetzung: Hall of Fame (2) +## Umsetzung: Hall of Fame (2) - **PDF-Export**: Dynamische Generierung eines ansprechenden Profil-PDFs mittels *QuestPDF*. - **Moderation**: - Integriertes Meldesystem (Reporting) direkt über ein separates Interfaces-Paket angesteuert. @@ -63,7 +58,7 @@ paginate: true --- -# Umsetzung: Anmeldetool für Treffen +## Umsetzung: Anmeldetool für Treffen - **Zweck**: Vereinfachung der Planung und Teilnehmerverwaltung. - **Funktion**: - Klare, farblich getrennte Zusage- und Absage-Buttons. @@ -74,7 +69,7 @@ paginate: true --- -# Herausforderungen & Lösungen +## Herausforderungen & Lösungen - **Plattformwechsel (Windows zu macOS)**: Oqtane ist stark an Windows gekoppelt; gelöst durch Einsatz von JetBrains Rider. - **Zeitdruck & Infrastruktur-Ausfälle**: - Probleme mit Hosting (Hetzner). @@ -83,14 +78,14 @@ paginate: true --- -# Learnings +## Learnings - **Technisch**: Tieferes Verständnis von Version Control (Git), CSS/Flexbox (Responsiveness) und C#/Blazor-Tiefen. - **Methodisch**: Eine klare Aufgabenaufteilung sowie regelmäßige Team-Meetings sind unerlässlich für den Projekterfolg. - **Persönlich**: Bedeutsamkeit von Eigeninitiative und Verantwortungsübernahme, gerade in schwierigen Projektphasen. --- -# Fazit & Ausblick +## Fazit & Ausblick - **Erreichtes**: - Theme ist final in Oqtane integriert und mobil optimiert. - Hall of Fame und Anmeldetool sind voll funktionstüchtig. diff --git a/Praesentation_Florian_Edlmayer.md b/Defensio/04_Praesentation_Florian_Edlmayer.md similarity index 92% rename from Praesentation_Florian_Edlmayer.md rename to Defensio/04_Praesentation_Florian_Edlmayer.md index 6c2c6d4..264281a 100644 --- a/Praesentation_Florian_Edlmayer.md +++ b/Defensio/04_Praesentation_Florian_Edlmayer.md @@ -1,16 +1,11 @@ ---- -marp: true -theme: default -paginate: true ---- +# Florian Edlmayer -# Defensio Diplomarbeit: AlumniHub ## Individueller Teil: Florian Edlmayer **Datensicherheit, Backup-Systeme & Premium-Bereich** --- -# Ausgangslage & Zielsetzung +## Ausgangslage & Zielsetzung - **Ausgangssituation**: Fehlen einer sicheren, datenschutzkonformen digitalen Vernetzung der Absolventen der HTL Ungargasse. - **Mein Beitrag**: - DSGVO-konforme Datenschutzimplementierung. @@ -21,7 +16,7 @@ paginate: true --- -# Eingesetzte Technologien +## Eingesetzte Technologien - **Framework**: ASP.NET Core & .NET 8 - **Datenbanksystem**: PostgreSQL - **Authentifizierung**: OAuth 2.0 (LinkedIn) @@ -29,7 +24,7 @@ paginate: true --- -# DSGVO & Datenschutz +## DSGVO & Datenschutz - **Notwendigkeit**: Einhaltung gesetzlicher Rahmenbedingungen (DSGVO, DSG). - **Umsetzung**: - Erstellung und Einbindung einer rechtskonformen Datenschutzerklärung. @@ -39,7 +34,7 @@ paginate: true --- -# Backup- & Restore-Systeme (1) +## Backup- & Restore-Systeme (1) - **Problem**: Schutz der Daten vor Hardwareausfällen, Softwarefehlern oder Cyberangriffen. - **Lösung: Vollautomatisiertes Backup-Skript** - **Cronjob** führt Skript nachtschlafend (`02:30 Uhr`) aus. @@ -49,7 +44,7 @@ paginate: true --- -# Backup- & Restore-Systeme (2) +## Backup- & Restore-Systeme (2) - **Retention Management**: - Automatische Bereinigung alter Backups (Rotation). Nur die neuesten 30 Backups (`RETAIN=30`) bleiben vorhanden, um Speicherplatz zu sparen. - **Restore-Skript**: @@ -60,7 +55,7 @@ paginate: true --- -# Authentifizierung mit LinkedIn (OAuth 2.0) +## Authentifizierung mit LinkedIn (OAuth 2.0) - **Ziel**: Reduzierung von Registrierungshürden und Steigerung der Plattformsicherheit (keine Passwörter im eigenen System speichern). - **Ablauf**: - Nutzer klickt auf "Via LinkedIn Anmelden". @@ -70,7 +65,7 @@ paginate: true --- -# Der Premium-Bereich (1) +## Der Premium-Bereich (1) - **Zweck**: Anreiz für aktives Engagement im Absolventenverein. - **Ingenieur-Antrags-Workflow**: - Nutzer können *Ingenieur-Anträge* (PDF) via Oqtane FileManager hochladen (`Entity: EngineerApplication`). @@ -80,7 +75,7 @@ paginate: true --- -# Der Premium-Bereich (2) +## Der Premium-Bereich (2) - **Mitgliedersuche & Kontakt**: - Gezielte, datensparsame Suchfunktion nach anderen Absolventen. - Die Suche filtert sensible Daten serverseitig heraus, bevor es zum Client geschickt wird. @@ -91,7 +86,7 @@ paginate: true --- -# Fazit & Ausblick +## Fazit & Ausblick - **Erreichtes**: - Sensible Mitglieder-Daten sind DSGVO-konform geschützt. - Die Betriebssicherheit wird durch fehlerresistente Bash-Backups bewahrt. diff --git a/Defensio/Images/images/logos/logo-short.png b/Defensio/Images/images/logos/logo-short.png new file mode 100644 index 0000000..f7baaf2 Binary files /dev/null and b/Defensio/Images/images/logos/logo-short.png differ diff --git a/Defensio/Images/images/logos/logo.png b/Defensio/Images/images/logos/logo.png new file mode 100644 index 0000000..2b8872f Binary files /dev/null and b/Defensio/Images/images/logos/logo.png differ diff --git a/Defensio/Images/images/logos/szu.png b/Defensio/Images/images/logos/szu.png new file mode 100644 index 0000000..64fbc7c Binary files /dev/null and b/Defensio/Images/images/logos/szu.png differ diff --git a/Defensio/Images/video/introduction/sample-10s.mp4 b/Defensio/Images/video/introduction/sample-10s.mp4 new file mode 100644 index 0000000..e0be482 Binary files /dev/null and b/Defensio/Images/video/introduction/sample-10s.mp4 differ diff --git a/Defensio/background.png b/Defensio/background.png new file mode 100644 index 0000000..5151bdb Binary files /dev/null and b/Defensio/background.png differ diff --git a/Defensio/libs/awesome-beamer b/Defensio/libs/awesome-beamer new file mode 160000 index 0000000..c719f26 --- /dev/null +++ b/Defensio/libs/awesome-beamer @@ -0,0 +1 @@ +Subproject commit c719f2676f73ed5398c8da26111298a47fcdfb42 diff --git a/Defensio/libs/smile b/Defensio/libs/smile new file mode 160000 index 0000000..2388a3f --- /dev/null +++ b/Defensio/libs/smile @@ -0,0 +1 @@ +Subproject commit 2388a3f0b57619f33f83cd51e3148a91ca3c8fbc diff --git a/Defensio/pandoc.sh b/Defensio/pandoc.sh new file mode 100755 index 0000000..99bb455 --- /dev/null +++ b/Defensio/pandoc.sh @@ -0,0 +1,16 @@ +#!/bin/bash +export TEXINPUTS=".:./libs/awesome-beamer/:./libs/smile/:$TEXINPUTS" +pandoc \ + 01_Praesentation_Allgemein.md \ + 02_Praesentation_Konstantin_Hintermayer.md \ + 03_Praesentation_Adam_Gaiswinkler.md \ + 04_Praesentation_Florian_Edlmayer.md \ + -t beamer \ + --template 00_preamble.tex \ + --pdf-engine=pdflatex \ + --slide-level=2 \ + --number-sections \ + --lua-filter ../_extensions/diagram/diagram.lua \ + --syntax-definition ../_extensions/razor/razor.xml \ + --syntax-definition ../_extensions/nginx/nginx.xml \ + -o defensio.pdf \ No newline at end of file diff --git a/Defensio/texput.log b/Defensio/texput.log new file mode 100644 index 0000000..2c806cf --- /dev/null +++ b/Defensio/texput.log @@ -0,0 +1,20 @@ +This is LuaHBTeX, Version 1.24.0 (TeX Live 2026/Arch Linux) (format=lualatex 2026.4.6) 13 APR 2026 22:05 + restricted system commands enabled. +** + +! Emergency stop. +<*> + +End of file on the terminal! + + + +Here is how much of LuaTeX's memory you used: + 5 strings out of 476076 + 100000,460012 words of node,token memory allocated 270 words of node memory still in use: + 1 hlist, 39 glue_spec nodes + avail lists: 2:12,3:3,4:1,5:1 + 22567 multiletter control sequences out of 65536+600000 + 14 fonts using 591679 bytes + 0i,0n,0p,0b,6s stack positions out of 10000i,1000n,20000p,200000b,200000s +! ==> Fatal error occurred, no output PDF file produced! diff --git a/Defensio/ulem.sty b/Defensio/ulem.sty new file mode 100644 index 0000000..85ebb06 --- /dev/null +++ b/Defensio/ulem.sty @@ -0,0 +1,376 @@ +% +% U L E M . S T Y [2019-11-18] +% +% The ulem package provides various types of underlining that can stretch +% between words and be broken across lines in LaTeX or plain TeX. +% In LaTeX ulem replaces italics with underlining in \em-phasized text. +% It is most suitable for simple text such as {\em ibid.} or \emph{\LaTeX: +% A Document Preparation System} that may need to be underlined in a +% manuscript submitted for publication. A declaration of \normalem (or +% the \usepackage option "normalem") restores the normal \em behavior. +% +% Full instructions appear in ulem.ltx (ulem.pdf). In summary: +% +% \uline{important} underlined text +% \uuline{urgent} double-underlined text +% \uwave{boat} wavy underline +% \sout{wrong} line drawn through word +% \xout{removed} marked over with //////. +% \dashuline{dashing} dash underline +% \dotuline{dotty} dotted underline +% +% {\em phasized\/} | In LaTeX, by default, these are underlined; use +% \emph{asized} | \normalem or [normalem] to restore italics +% \useunder{\uwave}{\bf}{\textbf} +% use wavy underline in place of bold face +% Use \markoverwith for defining new types of underlining. +% +% Copyright (c) 1989-2011 by Donald Arseneau (Vancouver, Canada; asnd@triumf.ca) +% +% This software may be freely transmitted, reproduced, or modified for any +% purpose provided that this copyright notice is left intact. +% (Small excerpts may be taken and used without any restriction.) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Defend against multiple loading. +\expandafter \ifx \csname UL@box\endcsname \relax \else + \immediate\write16{ulem.sty refuses to load twice. }\endinput \fi + +% Set catcode of @ in case it isn't a "letter" already +\chardef\ULthickness\catcode\string`\@ % hold catcode temporarily +\catcode\string`\@=11 + +% \UL@protected = \protected, if available, else \relax + +\begingroup +\global\expandafter\let\expandafter\UL@protected\csname protected\endcsname +\endgroup + +\UL@protected\def\uline{\relax \ifmmode\expandafter\underline + \else \bgroup\expandafter\ULset\fi} + +\newbox\UL@box +\newbox\UL@hyphenbox +\newskip\UL@skip +\newtoks\UL@hook +\newdimen\UL@height \UL@height=\maxdimen % flags being unused +\newcount\UL@pe + +\UL@protected\def\UL@end *{\relax\relax}% something harmless but unique + +% For regular underlines, set the depth based on the font, or retain +% the preset value, then start underlining. +\def\ULset{\UL@setULdepth + \def\UL@leadtype{\leaders \hrule \@height\UL@height \@depth\ULdepth}% + \ifmmode \ULdepth-4\p@ \fi + \UL@height-\ULdepth \advance\UL@height\ULthickness \ULon} + +% Automatically set \ULdepth if it is to be automatic (flagged by \maxdimen) +\def\UL@setULdepth{\relax + \ifdim\ULdepth=\maxdimen % Set depth based on font, if not set already + \setbox\UL@box\hbox{{(j}}\ULdepth\dp\UL@box\advance\ULdepth.4\p@ + % use setbox to support plain TeX + \fi} + +% \ULon simply calls \UL@on (possibly \UL@on=\UL@onin) for text mode, but +% \UL@onmath if it is math mode. +\def\ULon{\ifmmode \expandafter\UL@onmath\else \expandafter\UL@on\fi} + +% \UL@on sets the engine of underline running, and tells it +% where to stop. #1 = the relevant text. +\long\def\UL@on#1{\leavevmode\UL@ender \let\UL@on\UL@onin + \everymath{\UL@hrest}\everyvbox{\UL@hrest}\let\hskip\UL@hskip + \let\\\UL@cr \let\-\UL@dischyp \let\newline\UL@newline \let\ \UL@space + \def\hfil{\hskip\z@ plus1fil\relax}\def\hfill{\hskip\z@ plus1fill\relax}% + \def\hss{\hskip\z@ plus1filminus1fil\relax}\let\penalty\UL@penalty + \the\UL@hook + \UL@word\@empty#1\xdef\UL@spfactor{\the\spacefactor} \UL@end * } + +% This is what \ULon does when it appears nested in an inner place. +\long\def\UL@onin#1{\leavevmode\UL@ender % when nested, do multiple underlining + \ifdim\ULdepth=\maxdimen\else + \UL@height\ULthickness \advance\ULdepth\thr@@\UL@height \advance\UL@height-\ULdepth + \fi + \setbox\UL@box\hbox{{#1}}% + \let\UL@start\relax\UL@putbox\egroup} +% \UL@putbox is disabled in inner mode, so re-enable it by changing \UL@start +% \UL@hrest is implicit due to \everyhbox. Double braces for \hbox are in +% lieu of \color@begin(end)group. + +% This is what \ULon does in math mode. +\def\UL@onmath#1{\UL@ender\mathord{\UL@hrest\mathop{\kern\z@#1}\limits\sb + {\UL@leadtype\LA@hskip\p@ plus1fill}}\egroup} + +\def\UL@unegroup{} +\gdef\UL@ender{} +% end-brace matching hack for when command is used as a font declaration: +\def\UL@swender{\ifnum`{=\z@\fi\aftergroup}\gdef\UL@ender{}} + +% must expand to nothing outside the ifs for syntactical spaces to work. +% the \expandafters get rid of the \@empty inserted at the beg. of word +\long\def\UL@word#1 {\expandafter\UL@start#1 % + \expandafter\ifx\expandafter\UL@end#1\egroup\egroup + \unskip \unskip \unskip % remove extra leader at end + \spacefactor\UL@spfactor \let\UL@word\egroup + \else % not finished + \ifmmode\else \ifdim\lastskip=\z@\else % allow syntactical spaces + \global\UL@skip\lastskip \unskip + \UL@stop \UL@leaders + \fi\fi + \fi \UL@word\@empty}% \@empty preserves braces in param + +% \UL@start: start of each chunk. It gives two levels of grouping. +% Each chunk is ended by \UL@stop. Local intermissions go like +% \UL@stop...\UL@start. +\def\UL@start{\setbox\UL@box\hbox\bgroup\everyhbox{\UL@hrest}% +% the following are to cope with stops (\ ,\- etc) within extra braces + \let\UL@start\@empty \def\UL@unegroup{\bgroup\bgroup}\let\UL@leadtype\@empty + \bgroup \kern-3sp\kern3sp % kerns so I can test for beginning of list + \if@ignore \global\@ignorefalse \ignorespaces \fi} + +\def\UL@stop{\global\UL@pe\lastpenalty \unpenalty % penalty in \UL@pe + \ifnum\lastkern=\thr@@ \egroup\egroup % Nothing in hbox...but make sure: + \ifdim\wd\UL@box=\z@ \else \UL@putbox \fi % something in box so print it + \else \egroup\egroup \UL@putbox % something in box so print it + \fi \ifnum\UL@pe=\z@ \else \LA@penalty\UL@pe \fi % use penalty from inside box + \UL@unegroup} +% notice that a box with only a penalty in it is discarded, but the penalty +% is still used! This is so a series of discardable glues and penalties +% behaves properly. + +\def\UL@putbox{\ifx\UL@start\@empty \else % not inner + \vrule\@width\z@ \LA@penalty\@M + {\UL@skip\wd\UL@box \UL@leaders \kern-\UL@skip}% + \box\UL@box + \fi} + +% With interword leaders, give some overlap to avoid gaps caused by +% round-off errors in the printing program. Needs \unskip \unskip \unskip +% above. This version overlaps 1/300 inch, which looks good at high +% resolution, and will still work down to ~150 dpi. Change the value +% of \UL@pixel if necessary. + +\newdimen\UL@pixel \UL@pixel=1in \divide\UL@pixel 300 + +\def\UL@leaders{{\LA@hskip-\UL@pixel \advance\UL@skip\tw@\UL@pixel + \UL@leadtype\LA@hskip\UL@skip \LA@hskip-\UL@pixel}} + +% restore some things for inside math or \mbox +\def\UL@hrest{\let\ \LA@space \let\-\@empty \let\penalty\LA@penalty} + +\let\LA@space\ % +\UL@protected\def\UL@space{\LA@space \global\UL@skip\lastskip \unskip \UL@reskip}% + +% Hyphenation is done by explicit \discretionary. The overlapping melds +% with the running overlap because it *is* part of the running overlap: +% The word fragment is extended by the width of the hyphenation which is +% then overlapped by leaders. The discretionary may occupy this space +% if a break occurs; otherwise the next syllable gets doubly-overlapped +% (in registration) for a distance of the hyphen's width. +\UL@protected\def\UL@dischyp{\global\setbox\UL@hyphenbox\hbox + {\ifnum \hyphenchar\font<\z@ \string-\else \char\hyphenchar\font \fi}% + \kern\wd\UL@hyphenbox \LA@penalty\@M + \UL@stop \kern-\wd\UL@hyphenbox + \discretionary{\box\UL@hyphenbox}{}{}\UL@start} + +\let\LA@penalty\penalty +\UL@protected\def\UL@penalty{\relax\ifhmode \afterassignment\UL@@penalty\count@ + \else\LA@penalty\fi} +\def\UL@@penalty{\LA@penalty \ifnum\count@=\z@ + \@ne \else \count@ \fi % zero penalty => no penalty, so use 1 instead. + \UL@stop \UL@start} + +% The test \ifx\ \LA@space \else means we are neither in math mode nor an +% \mbox, so it is safe to stop the current \UL@box. \ , \- , and \penalty +% (= \linebreak or \nolinebreak) are common enough that they are restored +% directly (by \UL@hrest); \\, \newline, \hskip (= \hspace) are rare enough +% that the test is incorporated in their UL versions. This adds processing +% when they're used, but saves processing in \UL@hrest called by \everymath +% \everyvbox and \everyhbox. + +\let\LA@hskip\hskip +\UL@protected\def\UL@hskip{\ifx\ \LA@space \LA@hskip \else + \afterassignment\UL@reskip \global\UL@skip \fi} + +\def\UL@reskip{\UL@stop \UL@leaders \UL@start} + +% Redefine \\ and \newline so the vertical space from \\[ ] is not lost +% and so the \hfil is not underlined! \\ and \newline do nothing if inside +% inner braces. + +\UL@protected\def\UL@cr{\unskip \ifx\ \LA@space \let\UL@vad\@gobble + \else \UL@stop \unskip\unskip\unskip \let\UL@vad\vadjust \fi + \@ifstar{\UL@vad{\LA@penalty\@M}\UL@cra}\UL@cra} +\def\UL@cra{\@ifnextchar[\UL@crb\UL@newline} +\def\UL@crb[#1]{\UL@vad{\vskip#1}\UL@newline} + +\UL@protected\def\UL@newline{\ifx\UL@start\@empty % (\UL@cr may have \UL@stop-ed already) + \unskip \ifx\ \LA@space \else \UL@stop \unskip\unskip\unskip \fi\fi + \LA@hskip \z@\@plus.0001fil\LA@penalty -\@M \UL@start} + +% That concludes the basic underlining. To put various other objects +% (characters) under (or over) text we need to define \markoverwith +% to set the overlay material in a box, and use leaders of that box for +% overlaying the text. Here, the meaning of \UL@pixel is changed so +% that `pixel' size = box size. Note that we generally need \leaders +% (not \cleaders) for text, because an underline will be a patchwork +% of small \leaders, and the characters must stay in registration. +% However, we "hook" the leaders command so specific applications can +% reassign it (\let\ULleaders\xleaders or \let\ULleaders\cleaders). +% +\newbox\ULC@box +\let\ULleaders\leaders + +\UL@protected\def\markoverwith#1{\leavevmode + \setbox\ULC@box\hbox{{#1}}\UL@pixel.5\wd\ULC@box + \ifmmode \setbox\ULC@box\hbox{\raise1.4ex\box\ULC@box}% + \dp\ULC@box-1.4ex\ht\ULC@box\z@ \def\UL@leadtype{\cleaders\copy\ULC@box}% + \else + \def\UL@leadtype{\ULleaders\copy\ULC@box}% + \fi} + +% Now define various special underlines. All the definitions go like +% \def \command {\bgroup \markoverwith{something} \ULon} + +% For drawing a wavey underline instead of a straight one the command +% is \uwave (under-wave) which uses the wiggle from 6-pt lasy font: + +\UL@protected\def\uwave{\leavevmode \bgroup + \ifdim \ULdepth=\maxdimen \ULdepth 3.5\p@ + \else \advance\ULdepth2\p@ + \fi \markoverwith{\lower\ULdepth\hbox{\sixly \char58}}\ULon} +\font\sixly=lasy6 % does not re-load if already loaded, so no memory drain. + +% To draw a double underline under text, use \uuline{text} + +\UL@protected\def\uuline{\leavevmode \bgroup + \UL@setULdepth + \ifx\UL@on\UL@onin \advance\ULdepth2.8\p@\fi + \markoverwith{\lower\ULdepth\hbox + {\kern-.03em\vbox{\hrule width.2em\kern1\p@\hrule}\kern-.03em}}% + \ULon} + +% To draw a line through text instead of under it (strike out) do +% `under'-line with negative depth. Note that this one uses a real +% line, not characters, so there is no \markoverwith. + +\UL@protected\def\sout{\leavevmode \bgroup \ULdepth=-.55ex \ULset} + +% To mark //// over text instead of underlining (x-out) +% +\UL@protected\def\xout{\leavevmode \bgroup + \markoverwith{\hbox to.35em{\hss/\hss}}\ULon} + +\UL@protected\def\dotuline{\leavevmode \bgroup + \UL@setULdepth + \ifx\UL@on\UL@onin \advance\ULdepth2\p@\fi + \markoverwith{\begingroup + %\advance\ULdepth0.08ex + \lower\ULdepth\hbox{\kern.06em .\kern.04em}% + \endgroup}% + \ULon} + +\UL@protected\def\dashuline{\leavevmode \bgroup + \UL@setULdepth + \ifx\UL@on\UL@onin \advance\ULdepth2\p@\fi + \markoverwith{\kern.13em + \vtop{\kern\ULdepth \hrule width .3em}% + \kern.13em}\ULon} + +% A command to declare that an underline command should be used in +% place of a particular font selection: +% \useunder {underline_command}{font_declaration}{font_command} +% e.g.: \useunder{\uuline}{\bfseries}{\textbf} +% \useunder{\uwave}{\bf}{} + +\UL@protected\def\useunder#1#2#3{\relax + \ifx\relax#2\relax\else % declaration command given + \UL@protected\def#2{\def\@tempa{#1}\global\let\UL@ender\UL@swender + \expandafter\@tempa\expandafter{\ifnum\z@=\string`}\fi}% + \fi + \ifx\relax#3\relax\else % argumentative command + \UL@protected\def#3{#1}% + \fi} + +\expandafter\ifx \csname @ifundefined\endcsname \relax + +% Allow plain TeX to use ulem.sty: + \def\@height{height} + \def\@depth{depth} + \def\@width{width} + \def\@empty{} + \long\def\@gobble#1{} + \long\def\@firstoftwo#1#2{#1}% + \long\def\@secondoftwo#1#2{#2}% +% Do non-outer \newif with no visible \if's or \fi's when skipping + \csname newif\expandafter\endcsname \csname if@ignore\endcsname + +\else + + \let\LA@em\em \let\LA@emph\emph + \expandafter\let\expandafter\LA@Pem \csname em \endcsname + \expandafter\let\expandafter\LA@Pemph \csname emph \endcsname + \def\ULforem{\useunder{\uline}{\em}{\emph}} + \def\normalem{\let\em\LA@em \let\emph\LA@emph + \expandafter\let\csname em \endcsname\LA@Pem + \expandafter\let\csname emph \endcsname\LA@Pemph} + \ULforem % default is to use underlining for \em, + +\fi + +% Process LaTeX \package options; plain TeX skips this section + +\expandafter\ifx\csname ProvidesPackage\endcsname \relax \else + \ProvidesPackage{ulem}[2019/11/18] + \DeclareOption{normalem}{\normalem} + \DeclareOption{ULforem}{\ULforem} + \DeclareOption{normalbf}{} + \DeclareOption{UWforbf}{\useunder{\uwave}{\bf}{\textbf}} + \ProcessOptions +% + \newcommand\UL@marpar[2][\ULmp@opt@arg]{\gdef\ULmp@opt@arg{#2}% + \ifx\ \LA@space \@latexerr{Marginpar lost}% + \else \UL@stop \LA@marginpar[#1]{#2}\UL@start \fi} +% + \AtBeginDocument{\let\LA@marginpar\marginpar}% +% + \addto@hook\UL@hook{\let\marginpar\UL@marpar} +\fi + +\catcode`@=\ULthickness % Scratch meaning: restore catcode of @ + +\def\ULthickness{.4pt}% can change this with \renewcommand +\newdimen\ULdepth \ULdepth=\maxdimen +% "maxdimen" depth causes the depth to be set according to the font. You +% can change \ULdepth for a permanent setting or a special effect (\sout). + +\endinput + + +% Previous bug-finders: Esther Hu (\hfill in plain); Lones Smith (\tt\-); +% Steve Anderson (\ooalign accents); Thanassi Protopapas ( { in tables). +% The bug finders' fee is now $0.00; it will double for each new bug found. +% Version (identified by year) +% 1994: +% Many changes! Notably: LaTeX2e options and \emph. Nesting works (somewhat). +% Behavior with inner braces is more consistent (not stripped). \useunder. +% Better underwave (using lasy6). Special underlines are not commented out. +% patch 1995: fix \UL@swender to work in {tabular}; make hyphenation join +% well; crude math support; eliminate \@clb +% 1996: use "\csname ProvidesPackage\endcsname", tidying. +% 1997: fix \\ when LaTeX changed; remove extra overlap in putbox. +% 2000: hook (and marginpar) +% 2004: Fix spacing in \uwave and \xout. \ULleaders hook. +% 2009: Accept \par in argument (\long) +% 2010: Include \dotuline and \dashuline, typeset documentation, add \UL@setULdepth +% 2011: Change \dimen@ to \UL@height +% 2012: Removed \let\par garbage +% 2017: Remove \makerobust +% 2019: Handle \ULdepth better. Some tweaks. +% +% Send problem reports to asnd@triumf.ca +% +% test integrity: +% brackets: round, square, curly, angle: () [] {} <> +% backslash, slash, vertical, at, dollar, and: \ / | @ $ & +% hat, grave, acute (apostrophe), quote, tilde, under: ^ ` ' " ~ _ diff --git a/defensio.md b/defensio.md new file mode 100644 index 0000000..30bb275 --- /dev/null +++ b/defensio.md @@ -0,0 +1,31 @@ +% Habits +% John Doe +% March 22, 2005 + +# In the morning + +## Getting up + +- Turn off alarm +- Get out of bed + +## Breakfast + +- Eat eggs +- Drink coffee + +# In the evening + +## Dinner + +- Eat spaghetti +- Drink wine + +------------------ + +![picture of spaghetti](images/spaghetti.jpg) + +## Going to sleep + +- Get in bed +- Count sheep \ No newline at end of file