From a81c7fceb62ab95af60b13877389ee21b739fc8f Mon Sep 17 00:00:00 2001 From: 0qln <0qln@proton.me> Date: Tue, 18 Nov 2025 02:09:44 +0100 Subject: [PATCH] add uebungen latex scaffolding --- .gitignore | 6 +- docs/.gitignore | 4 + docs/uebungen/.latexmkrc | 2 + ...5 - Facelets und PrimeFaces - Aufgaben.pdf | Bin 0 -> 39794 bytes docs/uebungen/uebung-5.tex | 20 +++ docs/uebungen/uebung.cls | 142 ++++++++++++++++++ flake.lock | 61 ++++++++ flake.nix | 110 ++++++++++++++ 8 files changed, 344 insertions(+), 1 deletion(-) create mode 100644 docs/.gitignore create mode 100644 docs/uebungen/.latexmkrc create mode 100644 docs/uebungen/resources/05 - Facelets und PrimeFaces - Aufgaben.pdf create mode 100644 docs/uebungen/uebung-5.tex create mode 100644 docs/uebungen/uebung.cls create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.gitignore b/.gitignore index 5ff6309..4a13688 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,8 @@ build/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store + +### nix / direnv +.direnv +result diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..e39aab5 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,4 @@ +out +latexout +latex.out +direnv diff --git a/docs/uebungen/.latexmkrc b/docs/uebungen/.latexmkrc new file mode 100644 index 0000000..80954ed --- /dev/null +++ b/docs/uebungen/.latexmkrc @@ -0,0 +1,2 @@ +$out_dir = "out"; +$pdf_mode = 4; # lualatex diff --git a/docs/uebungen/resources/05 - Facelets und PrimeFaces - Aufgaben.pdf b/docs/uebungen/resources/05 - Facelets und PrimeFaces - Aufgaben.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bc707d3c9ee03fed6c4500ab87d8bdb6e4c0457a GIT binary patch literal 39794 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 XxFoTt1e}wMEi8>qxl~nM{oS|#5OkXV literal 0 HcmV?d00001 diff --git a/docs/uebungen/uebung-5.tex b/docs/uebungen/uebung-5.tex new file mode 100644 index 0000000..643b676 --- /dev/null +++ b/docs/uebungen/uebung-5.tex @@ -0,0 +1,20 @@ +\documentclass{uebung} + +\author{Linus Nagel} +\chapter{5} + +\begin{document} + +\maketitle + +\begin{exercises} +\item Worum handelt es sich bei Facelets und welche Vorteile bietet die Verwendung von Facelets? +\item Wie können Templates mit Facelets erstellt bzw. verwendet werden? +\item Worum handelt es sich bei PrimeFaces? +\item Welcher Namespace wird für die Verwendung von PrimeFaces benutzt? +\item Wie kann per Ajax auf die Eingabe eines Tastenklicks reagiert werden? +\item Zählen Sie vier PrimeFaces-Komponenten auf und geben deren Funktion an. +\item Erstellen Sie eine JSF-Seite, die eine Klappliste anzeigt in der einer der Werte „Farben“, „Zahlen“ oder „Buchstaben“ ausgewählt werden kann. Darunter befindet sich eine Klappliste die zunächst nur den Inhalt „---“ hat. Nach einer Auswahl in der ersten Klappliste soll ein AJAX-Request generiert werden, der den Inhalt der zweiten Klappliste setzt (denken Sie sich zu den in Klappliste 1 auswählbaren Werten passende Werte aus). +\end{exercises} + +\end{document} diff --git a/docs/uebungen/uebung.cls b/docs/uebungen/uebung.cls new file mode 100644 index 0000000..448008b --- /dev/null +++ b/docs/uebungen/uebung.cls @@ -0,0 +1,142 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{uebung}[Sem3 Web Engineering Exercise Sheet Class] + +% Base class with options +\LoadClass[11pt,a4paper]{article} + +% Required packages +\RequirePackage[german]{babel} +\RequirePackage{geometry} +\RequirePackage{fancyhdr} +\RequirePackage{titlesec} +\RequirePackage{enumitem} +\RequirePackage{listings} +\RequirePackage{xcolor} +\RequirePackage{graphicx} +\RequirePackage{amsmath} +\RequirePackage{hyperref} + +% Define chapter counter for exercise sheets +\newcounter{chapter} +\renewcommand{\thechapter}{\arabic{chapter}} + +% Page geometry +\geometry{a4paper, left=2.5cm, right=2.5cm, top=2.5cm, bottom=2.5cm} + +% Colors for code listings +\definecolor{codegreen}{rgb}{0,0.6,0} +\definecolor{codegray}{rgb}{0.5,0.5,0.5} +\definecolor{codepurple}{rgb}{0.58,0,0.82} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} + +% Code listing style +\lstdefinestyle{mystyle}{ + backgroundcolor=\color{backcolour}, + commentstyle=\color{codegreen}, + keywordstyle=\color{magenta}, + numberstyle=\tiny\color{codegray}, + stringstyle=\color{codepurple}, + basicstyle=\ttfamily\footnotesize, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=2, + frame=single, + framesep=5pt +} + +\lstset{style=mystyle} + +% Header and footer setup +\pagestyle{fancy} +\fancyhf{} +\fancyhead[L]{\textbf{Übung Web-Engineering}} +\fancyhead[R]{\textbf{Aufgabenblatt zu Kapitel \thechapter}} +\fancyfoot[C]{\thepage} + +% Title format +\renewcommand{\maketitle}{ + \begin{center} + \LARGE\textbf{Übung Web-Engineering}\\ + \Large\textbf{Aufgabenblatt zu Kapitel \thechapter} + \vspace{1cm} + + \large\textbf{Aufgaben – \@author} + \end{center} + \vspace{0.5cm} +} + +% Section formatting +\titleformat{\section} + {\large\bfseries} + {} + {0em} + {} + [\titlerule] + +% Exercise item formatting +\newlist{exercises}{enumerate}{1} +\setlist[exercises]{ + label=\arabic*), + leftmargin=*, + itemsep=1em, + before=\vspace{1.0cm} +} + +% Java code environment +\lstnewenvironment{javaCode}[1][] + {\lstset{style=mystyle, language=Java, #1}} + {} + +% JSP/HTML code environment +\lstnewenvironment{htmlCode}[1][] + {\lstset{style=mystyle, language=HTML, #1}} + {} + +% XML code environment +\lstnewenvironment{xmlCode}[1][] + {\lstset{style=mystyle, language=XML, #1}} + {} + +% Subsection for code examples +\newcommand{\codeexample}[1]{ + \vspace{0.5em} + \noindent\textbf{Beispiel:} + \vspace{0.3em} + #1 +} + +% Environment for multi-page content +\newenvironment{multipagecontent} + {\par\vspace{1em}} + {\par\vspace{1em}} + +% Command for page breaks with continuation marker +\newcommand{\continuepage}{ + \vfill + \centerline{\textit{Fortsetzung auf nächster Seite...}} + \newpage + \centerline{\textit{Fortsetzung von vorheriger Seite...}} + \vspace{1em} +} + +% Hyperref setup +\hypersetup{ + colorlinks=true, + linkcolor=blue, + filecolor=magenta, + urlcolor=cyan, + pdftitle={Web Engineering Übungen}, + pdfauthor={Linus Nagel} +} + +% Chapter command for exercise sheets +\newcommand{\chapter}[1]{\setcounter{chapter}{#1}} + +\endinput diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..cdff3d7 --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1762980239, + "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1763283776, + "narHash": "sha256-Y7TDFPK4GlqrKrivOcsHG8xSGqQx3A6c+i7novT85Uk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "50a96edd8d0db6cc8db57dab6bb6d6ee1f3dc49a", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1761765539, + "narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "719359f4562934ae99f5443f20aa06c2ffff91fc", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..b6ac72c --- /dev/null +++ b/flake.nix @@ -0,0 +1,110 @@ +{ + description = "Description for the project"; + + inputs = { + flake-parts.url = "github:hercules-ci/flake-parts"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + }; + + outputs = inputs @ {flake-parts, ...}: + flake-parts.lib.mkFlake {inherit inputs;} { + imports = [ + # To import an internal flake module: ./other.nix + # To import an external flake module: + # 1. Add foo to inputs + # 2. Add foo as a parameter to the outputs function + # 3. Add here: foo.flakeModule + ]; + systems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin"]; + perSystem = { + config, + self', + inputs', + pkgs, + system, + ... + }: + with pkgs.lib; let + latexPackages = with pkgs; [ + latexrun + (texlive.withPackages + (ps: + with ps; [ + amsmath + biber + biblatex + changepage + csquotes + enumitem + fontaxes + latexmk + listings + minted + newtx + newtxsf + newtxtt + scheme-medium + textpos + times + titlesec + transparent + upquote + ])) + ]; + in { + # Per-system attributes can be defined here. The self' and inputs' + # module parameters provide easy access to attributes of the same + # system. + packages = with pkgs; let + fmtNum = strings.fixedWidthNumber 2; + fmtReleaseName = sem: author: chap: "${fmtNum sem} - ${fmtNum chap} - ${author.lastName}, ${author.firstName}.pdf"; + fmtRelease = fmtReleaseName 3 { + firstName = "Linus"; + lastName = "Nagel"; + }; + mkUebungPdf = n: args: + stdenvNoCC.mkDerivation rec { + name = fmtRelease n; + version = "1.0.0"; + src = ./.; + buildInputs = latexPackages; + buildPhase = + # sh + '' + cd docs/uebungen + + latexmk \ + -pdf \ + -l -dir-report -file-line-error -verbose \ + -interaction=nonstopmode \ + "uebung-${toString n}.tex" + ''; + installPhase = + # sh + '' + mkdir -p $out/share $out/log $out/artifacts + cp out/uebung-${toString n}.pdf "$out/share/${name}" + cp out/*.log $out/log/ + cp out/* $out/artifacts + ''; + } + // args; + in { + "uebung-5" = mkUebungPdf 5 {}; + }; + + devShells.default = with pkgs; + mkShell { + nativeBuildInputs = []; + packages = [mermaid-cli] ++ latexPackages; + shellHook = '' + ''; + }; + }; + flake = { + # The usual flake attributes can be defined here, including system- + # agnostic ones like nixosModule and system-enumerating ones, although + # those are more easily expressed in perSystem. + }; + }; +}