Zastaw ciekawych makroinstrukcji
Author: Włodzimierz Macewicz
Keywords: tex, latex, makroinstrukcje, pakiety makroinstrukcji, Wirtualna Akademia, dokumentacja pakietów

## framed

Pakiet definiuje środowiska `framed`, `shaded` i `leftbar`, które umożliwiają: ujęcie tekstu w ramkę, podłożenie kolorowego (lub szarego) tła (pakiet korzysta z pakietu color, ale należy go samemu dołączyć) oraz umieszczenie linii na brzegu (p. też changebar). Opisywane konstrukcje nie zaburzają procesu łamania na strony, ale wewnątrz nie można definiować obiektów ruchomych (rysunki, tabele, noty na marginesie -- sygnalizowany jest błąd, przypisy (footnote) -- pojawia się odsyłacz, ale nie pojawia się treść przypisu, inkrementowany jest numer; nie jest sygnalizowany błąd). Oprócz tego zawartość środowiska nie jest rozciągana w pionie w przypadku użycia poleceń wymuszających przejście do nowej strony.

### Opis środowisk

#### `leftbar`

Tekst zamknięty w środowisku będzie oznaczony linią pionową z lewej strony (w polu kolumny). Linia ma 3pt grubości i odległość między linią a tekstem wynosi 10pt (wartości te są ,,zaszyte'' w definicji środowiska, ale łatwo zdefiniować własne, inne na jego podstawie

    \newenvironment{leftbar}{%
      \def\FrameCommand{\vrule width 3pt \hspace{10pt}}%
      \MakeFramed {\advance\hsize-\width \FrameRestore}}%
     {\endMakeFramed}

np. definicja

    \renewenvironment{leftbar}{%
      \def\FrameCommand{{\color{red}\vrule width 6pt} \hspace{10pt}}%
      \MakeFramed {\advance\hsize-\width \FrameRestore}}%
     {\endMakeFramed}

da w efekcie linie o grubości 6pt w kolorze czerwonym (należy dołączyć pakiet `color`).

#### `framed`

Do konstrukcji ramki używane jest standardowo makro `fbox`, jeśli nie zostało zdefiniowane inaczej to grubość ramki ustala się na wartość `fboxrule`, a odległość tekstu od ramki na `3 x \fboxsep`. Powyższe parametry możemy określić nadając wartości rejestrom `\FrameRule` oraz `\Framesep` np. `\setlength{\FrameSep}{2pt}`

Można łatwo zmienić makro konstrukcyjne z `fbox` na inne i uzyskać dodatkowe efekty; np: efekt kolorowej ramki i tła; należy użyć makra `\fcolorbox` z pakietu color zamiast konstrukcji `\fbox` np:

    \def\FrameCommand{\fboxrule=\FrameRule \fboxsep=\FrameSep \fcolorbox{red}{green}}

w tym wypadku określiłem kolor tła na zielony, a kolor ramki na czerwony, możemy również przy okazji zmienić kolor czcionki:

    \def\FrameCommand{\fboxrule=\FrameRule \fboxsep=\FrameSep \color{blue}\fcolorbox{red}{green}}

niebieski w tym wypadu.

Przy realizacji tego środowiska używane jest ostatnio zdefiniowane makro `\FrameCommand`, które w powyższych przykładach było definiowane ,,na zewnątrz''. Można zdefiniować sobie kilka środowisk o różnych cechach (zachowując grubość linii i jej odległość od tekstu) np.:

    \newenvironment{myframed}{%
      \def\FrameCommand{\fboxrule=\FrameRule \fboxsep=\FrameSep \color{yellow}\fcolorbox{green}{red}}
      \MakeFramed{\advance\hsize-\width \FrameRestore}}%
      {\endMakeFramed}

#### `shaded`

Środowisko służy, w zamyśle, do podłożenia kolorowego tła pod tekst (powyżej efekt ten został osiągnięty dzięki modyfikacjom w definicji środowiska `framed`). Używanym kolorem tła jest `shadecolor`; musi on być wcześniej zdefiniowany poleceniem `\definecolor` (p. color) np:

    \definecolor{shadecolor}{rgb}{0.1,0.2,0.8}

#### `MakeFramed`

Wspominam o nim jedynie dla porządku -- jest ono używane do definiowania przedstawionych wcześniej środowisk -- wnikliwy TeX-owiec zapewne sam pozna jego tajniki, innym radzę jego użycie, analogicznie jak w podanych przykładach.

Włodzimierz Macewicz

Ostatnie zmiany: 05.05.2014.