Listy obecności (w LaTeX-u)
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:
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:
\documentclass{article}
\usepackage[T1]{polski}
\usepackage[cp1250]{inputenc}
\usepackage{datatool}
\usepackage{xstring}
\usepackage[a4paper,landscape,scale=0.95]{geometry}
\usepackage{longtable}
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:
\begin{document}
\DTLsetseparator{;}
\DTLloaddb[noheader,
keys={Lp,Album,Nazwisko,Imie},
omitlines=11]
{lista}{listaSluchaczy_K00-33f.csv}
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)
\noindent
\begin{longtable}{|r|r|l|l|l|l|l|l|l|l|l|l|l|l|}
\multicolumn{13}{c}{MTR, sroda TN 9:15}\\
\hline
\multicolumn{1}{|l|}{Lp.} &
\multicolumn{1}{l|}{Nr albumu} &
Nazwisko &
Imiona &
\multicolumn{1}{r|}{1} &
\multicolumn{1}{r|}{2} &
\multicolumn{1}{r|}{3} &
\multicolumn{1}{r|}{4} &
\multicolumn{1}{r|}{5} &
\multicolumn{1}{r|}{6} &
\multicolumn{1}{r|}{7} &
\multicolumn{1}{r|}{8} &
Uwagi \\ \hline
\endhead
Powyższy nagłówek będzie powtarzany na każdej stronie.
A teraz magia, czyli pakiet datatool w działaniu:
\DTLforeach{lista}{\Lp=Lp,\Nazwisko=Nazwisko,\Imie=Imie,\Album=Album}{
\Lp& \StrGobbleLeft{\Album}{4} & \Nazwisko & \Imie
& & & & & & & & & \\ \hline
}
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:
& & & &
\rule{7.5mm}{0pt} &
\rule{7.5mm}{0pt} &
\rule{7.5mm}{0pt} &
\rule{7.5mm}{0pt} &
\rule{7.5mm}{0pt} &
\rule{7.5mm}{0pt} &
\rule{7.5mm}{0pt} &
\rule{7.5mm}{0pt} & \\ \hline
\end{longtable}
\end{document}
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|