blkarray

Pakiet zawiera makroinstrukcje ułatwiające skład tabel; zawiera w sobie polecenia analogiczne jak pakiety hhline (rozszerzone), array i multirow.

Pakiet definiuje środowisko blockarray zastępujące środowiska tabular i array (wewnątrz trybu matematycznego zachowuje się jak array, a w trybie tekstowym jak tabular). Postać wywołania jest podobna jak w przypadku ww. konstrukcji.
\begin{blockarray}{preambuła}
zawartość tabeli
\end{blockarray}

lub
\begin{blockarray}[s]{preambuła}
zawartość tabeli
\end{blockarray}

gdzie s określa sposób pozycjonowania tabeli względem sąsiedztwa; może przyjmować wartości: c -- center (wartość domyślna), b -- dół tabeli równo z linią sąsiednią, t -- góra tabeli równo z linią sąsiednią

preambuła definiuje sposób prezentacji (składu) poszczególnych kolumn tabeli oraz określa separatory kolumn; mogą się w niej znaleźć następujące oznaczenia:
l dosunięcie tekstu do lewej
r dosunięcie tekstu do prawej
c centrowanie
m{width} Definiuje kolumnę o szerokości width . Środek celi w tej kolumnie (połowa jej wysokości) pokrywa się ze środkiem celi kolumny sąsiedniej. Odpowiednik: \parbox{width}; tekst jest łamany na szerokości width .
p{width} Równoważna: \parbox[t]{width}. Pozycjonowanie w/g szczytu celi.
b{width} Równoważna \parbox[b]{width}. Pozycjonowanie w/g dołu celi.
>{macro} Może być użyte przed jednym z następujących typów: l, r, c, p, m lub b. Polecenie macro  będzie wykonywane zawsze przed rozpoczęciem analizy materiału celi w tak określonej kolumnie.
<{macro} Może być użyte po jednym z następujących typów: l, r, c, p, m lub b. Polecenie macro  będzie wykonywane zawsze na końcu materiału celi w tak określonej kolumnie.
| Wstawienie linii pionowej jako separatora kolumn; odległość między kolumnami zostanie zwiększona o szerokość linii (w odróżnieniu od oryginalnej definicji tabeli). Można wstawić dwa znaki | -- separatorem będzie linia podwójna (odległość między liniami określa parametr \BAdoublerulesep).
@{macro} Może być użyte w dowolnym miejscu preambuły zamiast separatora (np.: |). Polecenie macro  zostanie wywołane między kolumnami (kasowana jest normalna odległość między kolumnami).
!{macro} Może być użyte w dowolnym miejscu preambuły zamiast separatora (np.: |). Polecenie macro zostanie wywołane między kolumnami (w odróżnieniu od @{...} nie jest kasowana normalna odległość między kolumnami).
& Znak umieszczony przed symbolem separatora kolumny (|) powoduje, że w przypadku użycia polecenia \BAmulticolumn nie trzeba w nim powtarzać definicji obramowania celi (w przypadku użycia makra \BAmulticolumn w pierwszej kolumnie obramowanie z lewej strony musi być redefiniowane). W przypadku podwójnego obramowania (||) znak & należy umieścić tylko przed pierwszym znakiem |.
) dodatkowa kolumna obejmująca nawiasem całą wysokość tabeli (p. środowisko block)
\} dodatkowa kolumna obejmująca nawiasem całą wysokość tabeli (p. środowisko block)
] dodatkowa kolumna obejmująca nawiasem całą wysokość tabeli (p. środowisko block)
( dodatkowa kolumna obejmująca nawiasem całą wysokość tabeli (p. środowisko block)
\{ dodatkowa kolumna obejmująca nawiasem całą wysokość tabeli (p. środowisko block)
[ dodatkowa kolumna obejmująca nawiasem całą wysokość tabeli (p. środowisko block)
\Left{tekst}{delimiter} tekst i delimiter stanowi kolumnę o zerowej szerokości; konstrukcja służy do wstawienia dodatkowego opisu (składanego antykwą) umieszczonego przed delimiterem (może nim być jeden z nawiasów ([{}])); delimiter obejmuje całą wysokość tabeli (p. block).
\Right{delimiter}{tekst} tekst i delimiter stanowi kolumnę o zerowej szerokości; konstrukcja służy do wstawienia dodatkowego opisu (składanego antykwą) umieszczonego po delimiterze (może nim być jeden z nawiasów ([{}])); delimiter obejmuje całą wysokość tabeli (p. block).
\BAenum dodatkowa kolumna zawierająca numer kolejny wiersza (szerokość kolumny jest ustalona na 2em bez względu czy się to komuś podoba czy nie)
*{n}{parametry} n-krotne powtórzenie specyfikacji kolumny np: *{3}{|c} jest równoważne |c|c|c

Parametry którymi można regulować sposób budowania tabeli:
Polecenie opis
\tabcolsep połowa szerokości odstępu między kolumnami tablicy (domyślnie 6pt)
\BAarrayrulewidth szerokość pionowej linii separującej kolumny (o ile jest używana -- domyślnie 0.4pt)
\BAdoublerulesep odległość między dwoma liniami pionowymi stanowiącymi separator kolumn (domyślnie 2pt)
\arraystretch ,,mnożnik'' odstępu między wierszami tablicy (np. \renewcommand{\arraystretch}{1.5} zwiększa odstęp o 50%)
\BAextrarowheight dodatkowy odstęp między liniami (domyślnie 0pt)
\BAextraheightafterhline dodatkowy odstęp po poziomej linii oddzielającej

Uwaga:
W związku z realizacją tabeli występuje efekt uboczny --- blokowane jest przenoszenie wyrazów (hyphenation) dla pierwszego wyrazu w celi. Efekt możemy wyeliminować wstawiając pustą przestrzeń o długości 0pt na początku celi (wykorzystując możliwości formowania preambuły tabeli) np.
>{\hspace{0pt}}p{20mm}

Obramowania tabeli

W pakiecie jest zdefiniowane polecenie \BAhhline umożliwiające uzyskanie ładniejszych wykończeń tabeli:
Wywołanie:
\BAhhline{parametry}
na liście parametrów mogą występować następujące symbole:
= podwójna linia o szerokości danej kolumny
" podwójna linia przerywana o szerokości danej kolumny
- pojedyncza linia o szerokości danej kolumny
. pojedyncza linia przerywana o szerokości danej kolumny
~ brak linii w danej kolumnie (pozwala zastąpić dyrektywą \BAhhline dyrektywę \cline)
| linia pionowa przecina (ma priorytet) konstrukcję poziomą
: linia pionowa styka się z podwójną poziomą
# skrzyżowanie podwójnych linii
t górne wykończenie rogu (lewe lub prawe w zależności od sąsiedztwa)
b dolne wykończenie rogu
* powtórzenie sekwencji; np. *{3}{==#} jest równoważne ==#==#==#

Przykład ilustruje różne zestawienia połączeń linii poziomych i pionowych (niekoniecznie poprawnych)
\begin{blockarray}{||cc||c|c||}
 \BAhhline{|t:==:t:==:t|}
 a & b & c & d\\
 \BAhhline{|:==:|~|~||}
 1 & 2 & 3 & 4\\
 \BAhhline{#==#~|=#}
 i & j & k & l\\
 \BAhhline{||--||--||}
 w & x & y & z\\
 \BAhhline{|:==|:==:|}
 1 & 2 & 3 & 4 \\
 \BAhhline{|:==::=|=:|}
 5 & 6 & 7 & 8 \\
 \BAhhline{|:="::"|=:|}
 9 & 10 & 11 & 12 \\
 \BAhhline{||-|.||.|-||}
 13 & 14 & 15 & 16\\
 \BAhhline{|b:==:b:==:b|}
 \end{blockarray}
 

Wstawienie materiału o innej specyfikacji kolumn i delimiterów (( , {, [ i ], }, ))

Pakiet udostępnia środowisko block (i block*) o następującej postaci wywołania:
\begin{block}{preambuła}
.
.
.
\end{block}

lub
\begin{block*}{preambuła}
.
.
.
\end{block*}

może być ono użyte wyłącznie wewnątrz środowiska blockarray (może być wielokrotnie zagnieżdżany) preambuła powinna być zgodna co do liczby kolumn ze specyfikacją kolumn umieszczoną w środowisku blockarray (oprócz dostępnych w niej parametrów, dodatkowo mogą wystąpić polecenia \BAmulticolumn, obejmujące kilka kolumn tabeli oraz \BAmultirow obejmujące wszystkie wiersze zawarte w środowisku block). Środowisko umożliwia wstawienie kolumn, które będą inaczej prezentowane niż określa to specyfikacja środowiska blockarray. Wszystkie separatory kolumn i kolumny tabeli muszą być redefiniowane. W przypadku użycia konstrukcji nawiasowych w specyfikacji tabeli wersja ,,bezgwiazdkowa'' środowiska umożliwia zdefiniowanie innych konstrukcji nawiasowych (lub rezygnację z nich). W wersji ,,gwiazdkowej'' specyfikacja konstrukcji nawiasowych jest ignorowana (pozostają w mocy specyfikacje środowiska blockarray; różnice najlepiej zilustruje przykład:
\begin{blockarray}{[c|c]c\}}
1111111 & 222222 & 333333 \\
1 & 2 & 3 \\
\begin{block*}{(ll)l\}}
1111 & 2222 & 3333 \\
11 & 22 & 33 \\
\end{block*}
1 & 2 & 3 \\
\end{blockarray}
\begin{blockarray}{[c|c]c\}}
1111111 & 222222 & 333333 \\
1 & 2 & 3 \\
\begin{block}{(ll)l\}}
1111 & 2222 & 3333 \\
11 & 22 & 33 \\
\end{block}
1 & 2 & 3 \\
\end{blockarray}
Przykład użycia polecenia \BAmulticolumn wewnątrz preambuły środowiska block
\begin{blockarray}{||l|c|c|t{1cm}|c|c||}
\BAhhline{|t:======:t|}
2s & ss &ss &ss &ss&ss\\
\BAhhline{||------||}
\begin{block}{||l|l|\BAmulticolumn{2}{r}|l|l||}
1 & 2 & 3 4 & 5 & 6\\
\end{block}
\BAhhline{||------||}
a & b & c & d & e & f\\
\BAhhline{|b:======:b|}
\end{blockarray}

Użycie konstrukcji \BAmultirow w preambule środowiska block wymaga dodatkowego komentarza. Materiał który ma być składany w bloku o wysokości wszystkich wierszy środowiska block może być wprowadzany w jednym lub kilku wierszach (w tak określonej kolumnie). Jeżeli jest on podany w kilku wierszach to jedynym efektem jest zachowanie podziału na wiersze (zapis ,,od nowej linii''), będzie on i tak stanowił całość, która będzie pozycjonowana względem środka wysokości wszystkich wierszy.

\begin{blockarray}{||l|c|c|t{1cm}|c|c||}
\BAhhline{|t:======:t|}
2s & ss &ss &ss &ss&ss\\
\BAhhline{||------||}
\begin{block}{||l|l|l|l|l|\BAmultirow{1in}||}
1 & 2 & 3 & 4 & 5 & \relax\\
1 & 2 & 3 & 4 & 5 & to jest multirow to jest multirow \\
1 & 2 & 3 & 4 & 5 & \relax\\
1 & 2 & 3 & 4 & 5 & \relax\\
1 & 2 & 3 & 4 & 5 & to jest multirow to jest multirow \\
1 & 2 & 3 & 4 & 5 & \relax\\
1 & 2 & 3 & 4 & 5 & \relax\\
\end{block}
\BAhhline{||------||}
a & b & c & d & e & f\\
\BAhhline{|b:======:b|}
\end{blockarray}

Uwaga! zawartość kolumn, które nie zawierają materiału wchodzącego w skład kolumny musi zawierać ,,coś'' np. materiał ,,pusty'' (\relax).

Jeśli wysokość składu materiału przekracza wysokość wszystkich wierszy nie wpływa to na wysokość delimiterów kolumn, pojawia się efekt widoczny w poniższym przykładzie
\begin{blockarray}{||l|c|c|t{1cm}|c|c||}
\BAhhline{|t:======:t|}
2s & ss &ss &ss &ss&ss\\
\BAhhline{||------||}
\begin{block}{||l|l|l|l|l|\BAmultirow{1in}||}
1 & 2 & 3 & 4 & 5 & \relax\\
1 & 2 & 3 & 4 & 5 & to jest multirow to jest multirow
to jest multirow to jest multirow to jest multirow \\
1 & 2 & 3 & 4 & 5 & \relax\\
1 & 2 & 3 & 4 & 5 & \relax\\
1 & 2 & 3 & 4 & 5 & to jest multirow to jest multirow \\
1 & 2 & 3 & 4 & 5 & \relax\\
1 & 2 & 3 & 4 & 5 & \relax\\
\end{block}
\BAhhline{||------||}
a & b & c & d & e & f\\
\BAhhline{|b:======:b|}
\end{blockarray}

Tworzenie nowych typów kolumn

Za pomocą polecenia \BAnewcolumntype można tworzyć nowe typy kolumn. Składnia polecenia jest następująca:
\BAnewcolumntype{nazwa}{definicja}
lub
\BAnewcolumntype[n]{nazwa}{definicja}
gdzie:
nazwa jest jednoliterowym określeniem nowego typu kolumny
definicja określa sposób składu zawartości celi w danej kolumnie np:
\BAnewcolumntype{c}{>{\hfil}<{\hfil}}
definiuje kolumnę, w której zawartość celi jest centrowana
n jest liczbą parametrów nowej specyfikacji kolumny np:
\BAnewcolumntype[1]{t}{>{\rightskip=0pt plus 1fil\vtop\BA@startpbox{#1}}<{\BA@endpbox}}
definiuje kolumnę analogiczną do p ale łamaną w ,,chorągiewkę'' -- parametr określa szerokość składu. Wersja ulepszona, w której również pierwszy wyraz podlega podziałowi wygląda następująco:
\BAnewcolumntype[1]{x}{>{\rightskip=0pt plus 1fil\vtop\BA@startpbox{#1}\hskip0pt}<{\BA@endpbox}}

Łączenie pól tabeli w kolumnie (w pionie)

Pakiet blkarray udostępnia polecenie \BAmultirow, umożliwiającą łączenie cel tabeli w pionie, podobnie jak pakiet multirow, składnia wywołania jest inna; wygląda ona następująco:
\BAmulticolumn{szerokość}{tekst}
Składany materiał obejmuje całą wysokość tabeli (jeżeli jest użyte środowisko block to materiał będzie powielony (sic!))
\begin{blockarray}{||l|c|c|t{1cm}|c|c||}
\BAhhline{|t:======:t|}
2s & ss &ss &ss &ss&ss\\
\BAhhline{||------||}
1 & 2 & 3 & 4 & 5 & \\
1 & 2 & 3 & 4 & 5 & \\
\BAmultirow{4cm}{to jest multirow to
jest multirow} \\
1 & 2 & 3 & 4 & 5 & \\
\begin{block}{||l|l|l|l|l|l||}
1 & 2 & 3 & 4 & 5 & 6\\
\end{block}
1 & 2 & 3 & 4 & 5 & \\
1 & 2 & 3 & 4 & 5 & \\
1 & 2 & 3 & 4 & 5 & \\
\BAhhline{||------||}
a & b & c & d & e & f\\
\BAhhline{|b:======:b|}
\end{blockarray}

Jeżeli chcemy, aby materiał obejmował jedynie określoną liczbę wierszy (a nie wszystkie wiersze) w danej kolumnie to należy użyć konstrukcji block łącząc ją z makroinstrukcją \BAmultirow (p. użycie konstrukcji \BAmultirow w preambule środowiska block).

Łączenie pól tabeli w wierszu (w poziomie)

Podobnie jak w środowisku tabular można uzyskać efekt połączenia kilku cel tabeli w jedną, obejmującą kilka kolumn; służy do tego makroinstrukcja \BAmulticolumn -- postać wywołania jest następująca:
\BAmulticolumn{n}{specyfikacja}{materiał}
n -- liczba kolumn, którą ma obejmować konstrukcja,
specyfikacja -- określenie składu kolumny, analogicznie jak w specyfikacji kolumn tabeli. Jeśli \BAmulticolumn obejmuje pierwszą kolumnę tabeli specyfikacja musi zawierać definicję obramowania z lewej strony. Specyfikację obramowania z prawej strony celi można pominąć, jeśli definicja obramowania kolumny zawarta w specyfikacji tabeli, jest poprzedzona znakiem &
materiał określa zawartość celi i będzie składany zgodnie ze specyfikacja

Przykład:
separator podwójnej celi z prawej strony jest zdefiniowany za pomocą znaku &
\begin{blockarray}{||l|c|c&|t{1cm}|c|c||}
\BAhhline{|t:======:t|}
2s & ss &ss &ss &ss&ss\\
\BAhhline{||------||}
& \BAmulticolumn{2}{c}{a b} & c & d & e\\
\BAhhline{||------||}
a & b & c & d & e & f\\
\BAhhline{|b:======:b|}
\end{blockarray}
W poniższej tabeli brak definicji separatora z prawej strony podwójnej celi
\begin{blockarray}{||l|c|c|t{1cm}|c|c||}
\BAhhline{|t:======:t|}
2s & ss &ss &ss &ss&ss\\
\BAhhline{||------||}
& \BAmulticolumn{2}{c}{a b} & c & d & e\\
\BAhhline{||------||}
a & b & c & d & e & f\\
\BAhhline{|b:======:b|}
\end{blockarray}
Makroinstrukcję \BAmulticolumn można używać wewnątrz preambuły środowiska block (oczywiście bez specyfikacji zawartości celi; p. przykład).

Wstawienie materiału nie podlegającego podziałowi na kolumny

W pakiecie jest zdefiniowane polecenie \BAnoalign umożliwiające wstawienie tekstu, który nie podlega podziałowi na kolumny -- zajmie on szerokość całej tabeli (może być ono użyte wewnątrz środowiska block). Składnia wywołania jest następująca:
\BAnoalign{tekst}
lub
\BAnoalign*{tekst}
Polecenie tworzy ,,dziurę'' w normalnej strukturze tabeli. Wersja ,,gwiazdkowa'' nie powoduje przerwania ciągłości nawiasów separujących (definiowanych konstrukcjami: (, {, [ i ], }, ), \Right i Left) -- niestety z powodu błędu wersja ta jest na ogół bezużyteczna. Ciągłość linii pionowych jest zawsze przerywana.
\begin{blockarray}{l|c|c|t{1cm}|c|c\}}
2s & ss &ss &ss &ss&ss\\
2s & ss &ss &ss &ss&ss\\
\BAnoalign{ala ma kota, a kot ma Ale
ala ma kota, a kot ma Ale
ala ma kota, a kot ma Ale}
a & b & c & d & e & f\\
a & b & c & d & e & f\\
\end{blockarray}

Przypisy w tabelach

W tabelach definiowanych za pomocą środowiska blockarray można definiować przypisy (za pomocą standardowego polecenie \footnote) Standardowo przypisy są umieszczane bezpośrednio pod tabelą i są one numerowane za pomocą polecenia \fnsymbol. Użycie polecenia \BAtablenotesfalse (zmiana wartości zmiennej logicznej) powoduje, że przypis będzie umieszczony na dole strony (tak jak wszystkie inne przypisy i z użyciem standardowego licznika przypisów). W typ wypadku, jeśli środowisko blockarray jest umieszczone wewnątrz środowiska table lub figure przypisy nie będą prezentowane!).

Wywołanie makroinstrukcji \BAparfootnotes powoduje, że przypisy będą składane jako jeden akapit (tylko w przypadku \BAtablenotestrue).


Włodzimierz Macewicz
Ostatnie zmiany: 05.05.2014.