## calc

Pakiet zawiera makroinstrukcje rozszerzające zakres działań na rejestrach. Mamy do dyspozycji następujące polecenia:

Polecenie | opis
--- | ---
`\newcounter{rejestr }` | definicja nowego rejestru; jest on inicjowany wartością 0
`\newcounter{rejestr }[inny rejestr ]` | definicja nowego rejestru; jest on inicjowany wartością 0 i staje się zależny od rejestru inny rejestr. Wykonanie polecenia `\stepcounter{inny rejestr }` lub `\refstepcounter{inny rejestr }` powoduje wyzerowanie rejestru rejestr
`\setcounter{rejestr }{wartość }` | ustawienie wartości rejestru
`\addtocounter{rejestr }{wartość }` | dodanie do rejestru rejestr wartości
`\stepcounter{rejestr }` | incrementacja rejestru rejestr
`\refstepcounter{rejestr }` | incrementacja rejestru rejestr; jeżeli oznaczymy etykietą miejsce (`label`), to wartością polecenia `\ref` będzie aktualna wartość rejestru

Napis reprezentujący wartość rejestru możemy uzyskać wywołując polecenie
`\the` rejestr
(zamiast określenia rejestr należy użyć nazwy właściwego rejestru). Definiując wartość rejestru (parametr wartość ) możemy używać liczb całkowitych, wartości innych rejestrów (możliwych do uzyskania poleceniem `\value{rejestr }`, lub `\therejestr` ) oraz operatorów `-`, `+`, `*`, `/`. Działania wykonywane są w kolejności zgodnej z przyjętymi zwyczajami. Możemy używać notacji nawiasowej (`()`) do wymuszenia kolejności wykonania działań.

Przykład

    \newcounter{x}
    \newcounter{y}
    \setcounter{x}{2}
    \setcounter{y}{3}
    \setcounter{y}{(\value{x} + 5) * \value{y}}

    Wartością rejestru y jest \they.

Powyższa sekwencja daje następujący efekt:

Oprócz działań na liczbach mamy możliwość dokonywania działań na długościach. Długość może być podawana w jednostkach przyjętych w TeX-u:

Polecenie | opis
--- | ---
sp | jednostka w której TeX prowadzi obliczenia (65536 sp = 1 pt)
pt | punkt typograficzny (1/72.27 in = 0.351 mm
bp | duży punkt (72 bp = 1 in); używany w postscripcie)
dd | didot (1/72 cala francuskiego, = 0.376 mm)
mm | milimetr (= 1.845 pt)
pc | pica (=12 pt = 4.218 mm)
cc | cicero (= 12 dd = 4.531 mm)
cm | centymetr (=10 mm = 2.371 pc)
in | cal (= 2.54 mm = 72.27 pt = 6.022 pc)
ex | miara względna; wynika z wysokości litery `x` w aktualnie używanym foncie)
em | miara względna; wynika z szerokości litery `m` w aktualnie używanym foncie)
mu | jednostka używana we wzorach matematycznych (18 mu = 1 em)

Polecenie | opis
--- | ---
`\newlength{\nazwa }` | definicja nowego rejestru długości
`\setlength{\nazwa }{długość }` | ustawienie wartości
`\addtolength{\nazwa }{długość }` | dodanie do aktualnej wartości rejestru
`\settowidth{\nazwa }{tekst }` | ustawienie wartości rejestru nazwa na wartość równą naturalnej szerokości tekstu tekst
`\settoheight{\nazwa }{tekst }` | ustawienie wartości rejestru nazwa na wartość równą naturalnej wysokości tekstu tekst

Parametr długość może być zdefiniowany za pomocą wyrażenia arytmetycznego. Proszę pamiętać o sensie fizycznym wykonywanych operacji (mają sens następujące operacje:
długość = długość + długość,
długość = długość * liczba,
liczba = `\ratio{długość}{długość}`,
długość = długość / liczba).
Operatorem dzielenia długości przez długość jest makroinstrukcja
`\ratio{długość }{długość }`
a wartość rzeczywistą możemy uzyskać używając makroinstrukcji
`\real{liczba rzeczywista }`
której parametrem jest tekst będący liczbą rzeczywistą (zapis z kropką dziesiętną). Do dzielenia długości przez liczbę możemy używać znaku `/`. Należy pamiętać że definicja wyrażenia powinna zaczynać się od elementu będącego długością, a w wyniku kolejnych obliczeń wartościami pośrednimi muszą być długości. Napis reprezentujący wartość rejestru możemy uzyskać poleceniem `\the\rejestr` 1

Przyklad:

    \newlength{\x}
    \newlength{\y}
    \setlength{\y}{5cm}
    \settowidth{\x}{ala ma kota}
    \setlength{\y}{3cm * \ratio{\y}{\x}}
    Rejestr y ma wartość: \the\y

Powyższa sekwencja daje następujący efekt:

Pakiet jest dostępny pod adresem:
ftp://ftp.gust.org.pl/TeX/macros/latex/contrib/required/tools/calc.dtx

1 Proszę zwrócić uwagę że parametr określający nazwę rejestru długości zaczyna się znakiem `\`

Włodzimierz Macewicz

Ostatnie zmiany: 05.05.2014.