Listy obecności (w LATEXu)

Listy obecmości

Byliśmy niegrzeczni i nas pokarało. Jak już pisałem obecnosć na wykłądach dla studentów pierwszego roku jest obowiązkowa. Na całe szczęście mam ich (tym razem) niewiele. Jeżeli obecność jest obowiązkowa — trzeba przygotować sobie listę obecności. Można, co prawda, w systemie Edukacja wygenerować listę obecnosci, ale:

  • po pierwsze jest generowana bardzo „rzadko” (to znaczy zajmuje dużo miejsca);

  • pdf generowany przez system Edukacja jest, po prostu, ułomny: literki włażą na siebie, trudno cokolwiek odczytać.

Na całę szczęście, można z systemu dostać listę studentów w formacie CSV. Wykorzystam go do wygenerowania listy obecności

Potrzebne będą nam następujące pakiety:

  1. longtable,

  2. datatool,

  3. xstring,

  4. geometry.

Oraz standardowe (polski ze względu na polskie litery i inputenc ze względu na kodowanie znaków).

Najciekawszym z pakietów jest pakiet datatool pozwala on czytać dane z plików csv, i robić różne rzeczy z polami każdego rekordu. Dokumentacja jest bardzo obszerna i gwarantuję, ze zapoznanie się z nią daje ogromne szanse na zwrot z inwestycji.

Przeambułą dokumentu wyglądać będzie tak:

Użyłem kodowania cp1250, bo plik csv jest tak zakodowany. Zakładam, że w pliku źródłowym nie pojawią się już inne znaki z rozszerzonego zestawu ASCII (Linux standardowo wszystko koduje jako utf8 i mógłby to być jakiś problem, edytor TeXworks pozwala zdefiniować używane w pliku kodowanie i problemu nie będzie. Inne edytory nie muszą mieć tej sympatycznej właściwości.)

Lista będzie drukowana na kartkach a4, poziomo (landscape) maksymalnie wykorzystując (scale=0.95) powierzchnię kartki.

Pakiet longtable użyty jest żeby wygenerować wielostronicową tabelkę.

Dalsza część dokumentu:

Pierwsze polecenie \DTLseparator definiuje średnik jako znak oddzielający kolumny (to jest taki polski wariant przecinka z CSV). drugie otwiera bazę danych zapisaną w pliku (listaSluchaczy_K00-33f.csv) i nazywa ją „lista”. Zakładamy, że plik nie ma nagłówka — będziemy pomijali wszystkie informacje organizacyjne (policzyłem, jest ich jedenaście linii) zawarte w pliku razem z obecnym tam nagłówkiem). Nadajemy własne nazwy poszczególnym polom: Lp, Album, Nazwisko, Imię (i tylko z nich będziemy korzystali). Pozostałe kolumny zignorujemy.

Teraz wystarczy zbudować tablicę longtable. Wygląda to jakoś tak (jest rozliczona na osiem zajęć plus uwagi)

Powyższy nagłówek będzie powtarzany na każdej stronie.

A teraz magia, czyli pakiet datatool w działaniu:

Dla każdego rekordu doczytujemy wartość czterech pól w takiej kolejności w jakiej są w pliku i przypisujemy ich zawartość do poleceń (\Lp, \Nazwisko,…) i budujemy kolejny wiersz tabelki wstawiając odpowiednią wartość w odpowiednią kolumnę.

Teraz pozostaje zakończyć tabelkę i dokument:

Na samym końcu tabeli dodałem dodatkowy wiersz (może być ich więcej, dane w systemie edukacja na początku roku nie są kompletne). W każdej komórce umieściłem obiekt o wymiarach 0pt wysokości i 7,5mm szerokości — zadba on o to, żeby było wystarczająco dużo miejsca na podpisy. Szerokość trzeba dobrać doświadczalnie, żeby wszystko mieściło się na stronie.

I tyle. Happy TeXing|