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.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.