{"id":21099,"date":"2015-10-06T16:30:44","date_gmt":"2015-10-06T14:30:44","guid":{"rendered":"http:\/\/kmim.wm.pwr.edu.pl\/myszka\/?p=21099"},"modified":"2015-10-06T16:30:44","modified_gmt":"2015-10-06T14:30:44","slug":"listy-obecnosci-w-latexu","status":"publish","type":"post","link":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/2015\/10\/06\/listy-obecnosci-w-latexu\/","title":{"rendered":"Listy obecno\u015bci (w L<sup>A<\/sup>T<sub>E<\/sub>Xu)"},"content":{"rendered":"<h1 id=\"listy-obecmo\u015bci\">Listy obecmo\u015bci<\/h1>\n<p>Byli\u015bmy niegrzeczni i nas pokara\u0142o. Jak <a href=\"http:\/\/kmim.wm.pwr.edu.pl\/myszka\/2015\/09\/21\/obowiazkowa-obecnosc-na-wykladach\/\">ju\u017c pisa\u0142em<\/a> obecnos\u0107 na wyk\u0142\u0105dach dla student\u00f3w pierwszego roku jest obowi\u0105zkowa. Na ca\u0142e szcz\u0119\u015bcie mam ich (tym razem) niewiele. Je\u017celi obecno\u015b\u0107 jest obowi\u0105zkowa \u2014 trzeba przygotowa\u0107 sobie list\u0119 obecno\u015bci. Mo\u017cna, co prawda, w systemie Edukacja wygenerowa\u0107 list\u0119 obecnosci, ale:<\/p>\n<ul>\n<li>\n<p>po pierwsze jest generowana bardzo \u201erzadko\u201d (to znaczy zajmuje du\u017co miejsca);<\/p>\n<\/li>\n<li>\n<p>pdf generowany przez system Edukacja jest, po prostu, u\u0142omny: literki w\u0142a\u017c\u0105 na siebie, trudno cokolwiek odczyta\u0107.<\/p>\n<\/li>\n<\/ul>\n<p>Na ca\u0142\u0119 szcz\u0119\u015bcie, mo\u017cna z systemu dosta\u0107 list\u0119 student\u00f3w w formacie CSV. Wykorzystam go do wygenerowania listy obecno\u015bci<\/p>\n<p>Potrzebne b\u0119d\u0105 nam nast\u0119puj\u0105ce pakiety:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/www.ctan.org\/pkg\/longtable\">longtable<\/a>,<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.ctan.org\/pkg\/datatool\">datatool<\/a>,<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.ctan.org\/pkg\/xstring\">xstring<\/a>,<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.ctan.org\/pkg\/geometry\">geometry<\/a>.<\/p>\n<\/li>\n<\/ol>\n<p>Oraz standardowe (<strong>polski<\/strong> ze wzgl\u0119du na polskie litery i <strong>inputenc<\/strong> ze wzgl\u0119du na kodowanie znak\u00f3w).<\/p>\n<p>Najciekawszym z pakiet\u00f3w jest pakiet <strong>datatool<\/strong> pozwala on czyta\u0107 dane z plik\u00f3w csv, i robi\u0107 r\u00f3\u017cne rzeczy z polami ka\u017cdego rekordu. Dokumentacja jest bardzo obszerna i gwarantuj\u0119, ze zapoznanie si\u0119 z ni\u0105 daje ogromne szanse na zwrot z inwestycji.<\/p>\n<p>Przeambu\u0142\u0105 dokumentu wygl\u0105da\u0107 b\u0119dzie tak:<\/p>\n<pre><code>\\documentclass{article}\r\n\\usepackage[T1]{polski}\r\n\\usepackage[cp1250]{inputenc}\r\n\\usepackage{datatool}\r\n\\usepackage{xstring}\r\n\\usepackage[a4paper,landscape,scale=0.95]{geometry}\r\n\\usepackage{longtable}<\/code><\/pre>\n<p>U\u017cy\u0142em kodowania cp1250, bo plik csv jest tak zakodowany. Zak\u0142adam, \u017ce w pliku \u017ar\u00f3d\u0142owym nie pojawi\u0105 si\u0119 ju\u017c inne znaki z rozszerzonego zestawu ASCII (Linux standardowo wszystko koduje jako utf8 i m\u00f3g\u0142by to by\u0107 jaki\u015b problem, edytor TeXworks pozwala zdefiniowa\u0107 u\u017cywane w pliku kodowanie i problemu nie b\u0119dzie. Inne edytory nie musz\u0105 mie\u0107 tej sympatycznej w\u0142a\u015bciwo\u015bci.)<\/p>\n<p>Lista b\u0119dzie drukowana na kartkach a4, poziomo (landscape) maksymalnie wykorzystuj\u0105c (scale=0.95) powierzchni\u0119 kartki.<\/p>\n<p>Pakiet longtable u\u017cyty jest \u017ceby wygenerowa\u0107 wielostronicow\u0105 tabelk\u0119.<\/p>\n<p>Dalsza cz\u0119\u015b\u0107 dokumentu:<\/p>\n<pre><code>\\begin{document}\r\n\\DTLsetseparator{;}\r\n\\DTLloaddb[noheader,\r\n           keys={Lp,Album,Nazwisko,Imie},\r\n           omitlines=11]\r\n{lista}{listaSluchaczy_K00-33f.csv}<\/code><\/pre>\n<p>Pierwsze polecenie <code>\\DTLseparator<\/code> definiuje \u015brednik jako znak oddzielaj\u0105cy kolumny (to jest taki polski wariant przecinka z <strong>C<\/strong>SV). drugie otwiera baz\u0119 danych zapisan\u0105 w pliku (listaSluchaczy_K00-33f.csv) i nazywa j\u0105 \u201elista\u201d. Zak\u0142adamy, \u017ce plik nie ma nag\u0142\u00f3wka \u2014 b\u0119dziemy pomijali wszystkie informacje organizacyjne (policzy\u0142em, jest ich jedena\u015bcie linii) zawarte w pliku razem z obecnym tam nag\u0142\u00f3wkiem). Nadajemy w\u0142asne nazwy poszczeg\u00f3lnym polom: Lp, Album, Nazwisko, Imi\u0119 (i tylko z nich b\u0119dziemy korzystali). Pozosta\u0142e kolumny zignorujemy.<\/p>\n<p>Teraz wystarczy zbudowa\u0107 tablic\u0119 longtable. Wygl\u0105da to jako\u015b tak (jest rozliczona na osiem zaj\u0119\u0107 plus uwagi)<\/p>\n<pre><code>\\noindent\r\n\\begin{longtable}{|r|r|l|l|l|l|l|l|l|l|l|l|l|l|}\r\n\\multicolumn{13}{c}{MTR, sroda TN 9:15}\\\\\r\n\\hline\r\n\\multicolumn{1}{|l|}{Lp.} &amp; \r\n\\multicolumn{1}{l|}{Nr albumu} &amp; \r\nNazwisko &amp; \r\nImiona &amp; \r\n\\multicolumn{1}{r|}{1} &amp; \r\n\\multicolumn{1}{r|}{2} &amp; \r\n\\multicolumn{1}{r|}{3} &amp; \r\n\\multicolumn{1}{r|}{4} &amp; \r\n\\multicolumn{1}{r|}{5} &amp; \r\n\\multicolumn{1}{r|}{6} &amp; \r\n\\multicolumn{1}{r|}{7} &amp; \r\n\\multicolumn{1}{r|}{8} &amp; \r\nUwagi \\\\ \\hline\r\n\\endhead<\/code><\/pre>\n<p>Powy\u017cszy nag\u0142\u00f3wek b\u0119dzie powtarzany na ka\u017cdej stronie.<\/p>\n<p>A teraz magia, czyli pakiet datatool w dzia\u0142aniu:<\/p>\n<pre><code>\\DTLforeach{lista}{\\Lp=Lp,\\Nazwisko=Nazwisko,\\Imie=Imie,\\Album=Album}{\r\n \\Lp&amp; \\StrGobbleLeft{\\Album}{4} &amp;  \\Nazwisko &amp; \\Imie \r\n &amp;  &amp;  &amp;  &amp;  &amp;  &amp;  &amp;  &amp;   &amp;   \\\\ \\hline\r\n}<\/code><\/pre>\n<p>Dla ka\u017cdego rekordu doczytujemy warto\u015b\u0107 czterech p\u00f3l w takiej kolejno\u015bci w jakiej s\u0105 w pliku i przypisujemy ich zawarto\u015b\u0107 do polece\u0144 (<code>\\Lp<\/code>, <code>\\Nazwisko<\/code>,\u2026) i budujemy kolejny wiersz tabelki wstawiaj\u0105c odpowiedni\u0105 warto\u015b\u0107 w odpowiedni\u0105 kolumn\u0119.<\/p>\n<p>Teraz pozostaje zako\u0144czy\u0107 tabelk\u0119 i dokument:<\/p>\n<pre><code> &amp;  &amp;  &amp;  &amp; \r\n\\rule{7.5mm}{0pt} &amp; \r\n\\rule{7.5mm}{0pt} &amp; \r\n\\rule{7.5mm}{0pt} &amp; \r\n\\rule{7.5mm}{0pt} &amp; \r\n\\rule{7.5mm}{0pt} &amp; \r\n\\rule{7.5mm}{0pt} &amp; \r\n\\rule{7.5mm}{0pt} &amp; \r\n\\rule{7.5mm}{0pt} &amp;  \\\\ \\hline\r\n\\end{longtable}\r\n\\end{document}<\/code><\/pre>\n<p>Na samym ko\u0144cu tabeli doda\u0142em dodatkowy wiersz (mo\u017ce by\u0107 ich wi\u0119cej, dane w systemie edukacja na pocz\u0105tku roku nie s\u0105 kompletne). W ka\u017cdej kom\u00f3rce umie\u015bci\u0142em obiekt o wymiarach 0pt wysoko\u015bci i 7,5mm szeroko\u015bci \u2014 zadba on o to, \u017ceby by\u0142o wystarczaj\u0105co du\u017co miejsca na podpisy. Szeroko\u015b\u0107 trzeba dobra\u0107 do\u015bwiadczalnie, \u017ceby wszystko mie\u015bci\u0142o si\u0119 na stronie.<\/p>\n<p>I tyle. Happy TeXing|<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Listy obecmo\u015bci Byli\u015bmy niegrzeczni i nas pokara\u0142o. Jak ju\u017c pisa\u0142em obecnos\u0107 na wyk\u0142\u0105dach dla student\u00f3w pierwszego roku jest obowi\u0105zkowa. Na ca\u0142e szcz\u0119\u015bcie mam ich (tym razem) niewiele. Je\u017celi obecno\u015b\u0107 jest obowi\u0105zkowa \u2014 trzeba przygotowa\u0107 sobie list\u0119 obecno\u015bci. Mo\u017cna, co prawda, w systemie Edukacja wygenerowa\u0107 list\u0119 obecnosci, ale: po pierwsze jest generowana bardzo \u201erzadko\u201d (to znaczy &hellip; <a href=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/2015\/10\/06\/listy-obecnosci-w-latexu\/\" class=\"more-link\">Czytaj dalej <span class=\"screen-reader-text\">Listy obecno\u015bci (w L<sup>A<\/sup>T<sub>E<\/sub>Xu)<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1547,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[92],"tags":[57],"class_list":["post-21099","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dydaktyka","tag-latex"],"publishpress_future_action":{"enabled":false,"date":"2026-04-17 01:53:03","action":"change-status","newStatus":"draft","terms":[],"taxonomy":"category","extraData":[]},"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/posts\/21099","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/comments?post=21099"}],"version-history":[{"count":3,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/posts\/21099\/revisions"}],"predecessor-version":[{"id":21102,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/posts\/21099\/revisions\/21102"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/media\/1547"}],"wp:attachment":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/media?parent=21099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/categories?post=21099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/tags?post=21099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}