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

## easyeqn

Pakiet udostępnia środowiska `EQ` i `EQA` służące do prezentacji wzorów matematycznych (jest zgodny z pakietem `showkeys`). Główną różnicą w stosunku do środowisk `equation` i `eqnarray` jest to, że wzory są numerowane tylko wtedy, gdy w tekście występuje do nich odwołanie (oczywiście przez etykietę).

Pakiet posiada następujące opcje:

`allnumber` | numerowane są wszystkie wzory (definiowane środowiskami `EQ` lub `EQA`) -- nie tylko te do których są odwołania
`warning` | podawane są komunikaty o wzorach etykietowanych, do których nie ma odwołań
`easyold` | definiowane są środowiska występujące w starszych wersjach pakietu: `EQS`, `EQS*`, `EQ*`, `EQA*`
`fleqn` | wzory są dosunięte do lewego marginesu; lewy margines można ustalić poleceniem `\eqleftmargin{długosć}`; jeśli równocześnie jest użyta opcja `leqno` to wielkość marginesu musi uwzględnić miejsce na oznaczenie wzoru
`leqno` | oznaczenia wzorów są wstawiane z lewej strony
`math` | powoduje definiowanie dodatkowych makroinstrukcji przydatnych przy składzie wzorów

Prosty przykład

    \begin{EQ}\label{eq:1}
        \frac{x}{y} = z
    \end{EQ}
    \begin{EQ}\label{eq:2}
        \frac{x}{y} = z
    \end{EQ}
    I will refer only to \eqref{eq:1} or,
    in the old style, \refeq{eq:1}.

ilustruje działanie i przy okazji pokazuje, że zostały zdefiniowane dwie makroinstrukcje służące do powołania się na dany wzór (makroinstrukcja `ref` nie włącza mechanizmu oznaczania wzoru i generowania etykiet), różnice w działaniu widać na ilustracji; uzgodnienie połączeń wymaga trzykrotnej kompilacji.

Zarówno środowisko `EQ` jak i `EQA` może służyć do budowy tabel, różnica polega na tym, że w przypadku `EQ` cały wzór jest opatrzony jednym numerem, a w przypadku `EQA` numerem jest opatrzony każdy wiersz tabeli (o ile jest on zaetykietowany i jest do niego odwołanie lub zostało użyte polecenie `\yesnumber`).

    \begin{EQ}[rcll]
       \nabla\cdot(\rho\nabla u)&=&f \qquad
          &\mbox{on $\Omega$} \\
       u&=&u_{0}&\mbox{on $A\subset\partial\Omega$} \\
       (\rho\nabla u)\cdot n&=&u_{1}
          &\mbox{on $B\subset\partial\Omega$}\label{eq2}
    \end{EQ}
    in \eqref{eq2} ....
    \begin{EQA}[rcll]
       \nabla\cdot(\rho\nabla u)&=&f \qquad
          &\mbox{on $\Omega$} \\
       u&=&u_{0}&\mbox{on $A\subset\partial\Omega$}
    		   \label{eq3}\\
       (\rho\nabla u)\cdot n&=&u_{1}
          &\mbox{on $B\subset\partial\Omega$}\label{eq4}
    \end{EQA}
    in \eqref{eq3} and \eqref{eq4} ....

W obu środowiskach parametr opcjonalny określa sposób pozycjonowania poszczególnych kolumn:

`l` | -- | do lewej krawędzi
`c` | -- | centralnie
`r` | -- | do prawej krawędzi
`.` | -- | powoduje skasowanie odległości między kolumnami (odpowiada międzykolumnowej specyfikacji `@{}`)

polecenia przejścia do nowego wiersza (`//`) można używać nawet wtedy, gdy parametr opcjonalny nie jest zdefiniowany -- domyślnie zdefiniowana jest jedna wycentrowana kolumna (ale nie jest przewidziane miejsce na oznaczenie wzoru).

Do łączenia kolumn służy makroinstrukcja `\eqmulticol` o następującej składni:
`\eqmulticol{ncol}{align}{zawartość}`
gdzie:

`ncol` | -- | liczba łączonych kolumn
`align` | -- | sposób pozycjonowania kolumny (tak jak w opcjonalnym parametrze środowisk)
`zawartość` | -- | zawartość kolumny

#### Dodatkowe polecenia:

`\yesnumber` -- wymusza numerowanie wzoru (lub wiersza tabeli w którym jest użyty)

`\begin{EQ}[rcl]\yesnumber a & = & \frac{1}{23} \\ b & = & \sqrt{\frac{1}{23}} \end{EQ}` |

`equationleft` -- powoduje, że wszystkie następne wzory będą dosunięte do lewego marginesu (p. opcja `fleqn`)
`equationcenter` -- powoduje, że wszystkie następne wzory będą centrowane
`numberleft` -- powoduje, że we wszystkich następnych wzorach oznaczenia będą po lewej stronie (p. opcja `lefteqno)`
`numberright` -- powoduje, że we wszystkich następnych wzorach oznaczenia będą po prawej stronie
`\eqspacing{odległość}` -- odległość przed i po wzorze
`\eqcolumnsep{odległość}` -- odległość między kolumnami
`\eqrowsep{odległość}` -- odległość między wierszami
`\eqlabeltop` -- oznaczenie wzoru na górze
`\eqlabelbot` -- oznaczenie wzoru na dole
`\eqlabelcenter` -- oznaczenie wzoru centralnie

    \eqlabeltop
    \begin{EQ}
       \nabla\cdot(\rho\nabla u) = 0 \\
       \nabla\cdot(\rho\nabla u) = 0 \\
       \nabla\cdot(\rho\nabla u) = 0 \label[TOP]
    \end{EQ}
    \eqlabelbot
    \begin{EQ}
       \nabla\cdot(\rho\nabla u) = 0 \\
       \nabla\cdot(\rho\nabla u) = 0 \\
       \nabla\cdot(\rho\nabla u) = 0 \label[BOT]
    \end{EQ}
    \eqlabelcenter
    \begin{EQ}
       \nabla\cdot(\rho\nabla u) = 0 \\
       \nabla\cdot(\rho\nabla u) = 0 \\
       \nabla\cdot(\rho\nabla u) = 0 \label[CENTER]
    \end{EQ}
zmiana pozycji oznaczenia wzoru jest możliwa jedynie we wzorach wieloliniowych.

makroinstrukcja `\label` ma dodatkowe własności:

`\label{nazwa_etykiety}` | -- | działanie standardowe
`\label[tekst]` | -- | wzór zostanie oznaczony podanym tekstem (nie jest definiowana etykieta, na którą można się powołać)
`\label[tekst]{nazwa_etykiety}` | -- | wzór zostanie oznaczony podanym tekstem, `nazwa_etykiety` jest etykietą, na którą można się powołać
`\label(tekst)` | -- | wzór zostanie oznaczony podanym tekstem, który zostanie ujęty w nawiasy `()` (nie jest definiowana etykieta, na którą można się powołać)
`\label(tekst){nazwa_etykiety}` | -- | wzór zostanie oznaczony podanym tekstem, który zostanie ujęty w nawiasy `()`, `nazwa_etykiety` jest etykietą, na którą można się powołać

Przykład:

    \begin{EQA}[c]
       \nabla\cdot(\rho\nabla u) = 0
           \label(eq.1){eq:custom:a} \\
       \nabla\cdot(\rho\nabla u) = 0
           \label[eq.2]{eq:custom:b} \\
       \nabla\cdot(\rho\nabla u) = 0
           \label[***1***]
    \end{EQA}
    I will refer to
    \eqref{eq:custom:a} and
    \eqref{eq:custom:b}

W parametrze makroinstrukcji `\label` można użyć znaku `~` -- oznacza on wstawienie polecenia `\theequation` z ostatnio użytą wartością licznika wzorów, bez jego inkrementacji. W ten sposób łatwo uzyskać efekt dodatkowego numerowania wzoru (p. także pakiety subeqn i subeqnarray)

    \begin{EQA}[c]\label{dqq}\yesnumber
       \nabla\cdot(\rho\nabla u) = 0 \label(~.a){aqq}\\
       \nabla\cdot(\rho\nabla u) = 0 \label(~.b){bqq}\\
       \nabla\cdot(\rho\nabla u) = 0\label(~.c){cqq}
    \end{EQA}
    \eqref{aqq} \eqref{bqq} \eqref{cqq}
konieczne jest zdefiniowanie etykiety na początku (`\label{dqq}\yesnumber`), tak aby została zwiększona wartość licznika, w przeciwnym razie kolejne linie byłyby oznaczane `(0.a)`, `(0.b)` i `(0.c)`

#### Dodatkowe polecenia aktywowane opcją `math`

`\frac[długość]{licznik}{mianownik}` | -- |  | parametr opcjonalny pozwala na zmianę grubości kreski ułamkowej (z powodu błędów definicji przed wywołaniem pakietu należy skasować standardową definicję makroinstrukcji poleceniem `\let\frac\relax`)
`\dfrac[długość]{licznik}{mianownik}` | -- |  | licznik i mianownik składany jest zawsze w ,,displaystyle''; parametr opcjonalny pozwala na zmianę grubości kreski ułamkowej
`\tfrac[długość]{licznik}{mianownik}` | -- |  | licznik i mianownik składany jest zawsze w ,,textstyle''; parametr opcjonalny pozwala na zmianę grubości kreski ułamkowej
`\eqbox{zawartość}`
`\eqbox(grubość,odległość){zawartość}` | -- |  | makroinstrukcja pozwala na ujęcie fragmentu wzoru w ramkę; parametr opcjonalny określa grubość ramki i jej odległość od zawartości
    \[
    \eqbox{\int_0^\infty dx}~~~~
    \eqbox(2pt,5pt){\int_0^\infty dx}
    \]
`\norm{zawartość}` | -- |  |
`\abs{zawartość}` | -- |  |
`\ParDer[definicja mianownika]{licznik}` | -- |  |
`\DIV{zawartość}` | -- |  |
`\GRAD{zawartość}` | -- |  |
`\LAPLA{zawartość}` | -- |  |
`\SUM{od}{do}`
`\SUM[indeks]{od}{do}` | -- |  |
`\PROD{od}{do}`
`\PROD[indeks]{od}{do}` | -- |  |

#### Dodatkowe środowiska aktywowane opcją `math`

`ARRAY` | -- | różnicę w stosunku do środowiska `array` ilustruje przykład (pola tablicy są składane w ,,displaystyle'')
      \[
        \left(\begin{array}{cc}
          1        & \frac{1}{2} \\
    	  \sqrt{3} & \frac{2}{\sqrt{3}}
        \end{array}\right), \qquad
        \left(\begin{ARRAY}{cc}
          1        & \frac{1}{2} \\
    	  \sqrt{3} & \frac{2}{\sqrt{3}}
        \end{ARRAY}\right),
      \]
`MATRIX` | -- | różnicę w stosunku do makroinstrukcji `matrix` ilustruje przykład (odległość między wierszami)
      \[
        \matrix{
          1        & \frac{1}{2} \cr
          \sqrt{3} & \frac{2}{\sqrt{3}}
        }, \qquad
        \begin{MATRIX}
          1        & \frac{1}{2} \\
          \sqrt{3} & \frac{2}{\sqrt{3}}
        \end{MATRIX}
      \]

Pakiet `easyeqn` wraz z pakietami pomocniczymi jest dostępny pod adresem:
ftp://ftp.gust.org.pl/TeX/macros/latex/contrib/easy/

Włodzimierz Macewicz

Ostatnie zmiany: 05.05.2014.