LaTeX/Običan TeH
Dok se igrate LaTeH makroom, primetićete da je prilično ograničen. Možda se pitate kako svi su ovi paketi koje koristite svaki dan sprovedeni sa tako malo. U stvari, LaTeH je skup makroa Običnog TeH-a i većina paketa koristi Običan TeH kod. Običan TeH je mnogo niskog nivoa, ima mnogo više mogućnosti po ceni strme krive učenja i složenog programiranja.
Do nekoliko izuzetaka, možete koristiti pun jezik Običnog TeH-a okviru važećeg dokumenta LaTeH dok je suprotno netačno.
Vokabular
[uredi]Da bi se izbegla konfuzija, neophodno je objasniti neke termine.
- Grupa je sve nakon otvaranja brejsa i posle poređenja zatvaranja brejsa.
- Token je karakter, kontrolna sekvenca, ili grupa.
- Kontrolna sekvenca je nešto što počinje sa
\
. Ne štampa se kao što jeste, ona se proširila po TeHu motora prema svojoj vrsti. - Komanda (ili funkcija ili makro ) je kontrolna sekvenca koja se može proširiti i na teksta, (ponovno) definisanje kontrolnih sekvenci, itd.
- Primitiva je komanda koja je teško kodirana u TeH motoru, odnosno nije zapisana u Običnom TeH-u.
- Registar je TeH način da se rukuje promenljivama. Oni su ograničeni u brojkama (256 za svaku vrstu registra u klasičnom TeHu, 32767 u e-TeHu).
- Dužina je kontrolna sekvenca koja sadrži dužinu (broj zatim sledi jedinica). Pogledajte Dužina.
- Font je kontrolna sekvenca koji se odnosi na font fajl. Pogledajte Fontovi.
- Kutija je objekat koji je napravljen za štampanje. Sve što se završava na papiru je kutija: pisma, stavovi, stranice ... Pogledajte Kutije.
- Lepak je određena količina prostora koji se stavlja između kutija kada su spojene.
- Brojač je registar koji sadrži broj. Pogledajte Brojači.
Može postojati više termina, ali se nadamo da će ovo biti dovoljno za sada.
Ketkodovi
[uredi]U TeHu neki karakteri imaju posebno značenje koje nije za štampanje povezano sa glifom.
Na primer, \
se koristi za uvođenje kontrolne sekvence, a neće štampati kosu crtu podrazumevano.
Za razliku između različitih značenja karaktera, TeH će ih podeliti u kategorije kodova , ili ketkodove za kratko. Postoji 16 kategorija kodova u TeHu.
Snažna karakteristika TeHa je njegova sposobnost da redefiniše svoj jezik, jer postoji \catcode
funkcija koja će vam omogućiti da promenite kategorijski kod bilo kog znaka.
Međutim, to se ne preporučuje, jer može učiniti da se kod teško čita. Ukoliko redefinišete bilo koji ketkod u klasi ili u stil datoteci, uverite se da je vratiti na kraju fajla.
Ako redefinišete ketkodove u dokumentu, uverite se da to uradite posle preambule da sprečite sukobe sa učitavanjem paketa.
Kod | Opis | Uobičajeni kod |
---|---|---|
0 | Izlazak karaktera i kontrolne sekvence | \
|
1 | Početak grupe | {
|
2 | Kraj grupe | }
|
3 | Matematička smena | $
|
4 | Kartica poravnanja | &
|
5 | Kraj linije | ^^M (ASCII vrati)
|
6 | Makro parametar | #
|
7 | Eksponent | ^ i ^^K
|
8 | Potpisan znak | _ i ^^A
|
9 | Ignorisan karakter | ^^@ (ASCII nula)
|
10 | Razmak | ␣ i ^^I (ASCII horizontalni tab)
|
11 | Slovo | A...Z i a...z
|
12 | Drugi karakteri | sve što nije navedeno u drugim ketkodovima. Najčešće, @. |
13 | Aktivni karakter | ~ i ^^L (ASCII oblik izvora)
|
14 | Komentar karakter | %
|
15 | Nevažeći karakter | ^^? (ASCII brisanje)
|
Aktivni znakovi
[uredi]Aktivni znakovi liče na makroe: oni su samohrani karakteri koji će se proširiti pre bilo koje druge komande.
\catcode`| = 13
\def|{\TeX}
...
Ово је глуп пример |.
|
Ovo je glup primer TeHa. |
Imajte na umu da aktivni karakter treba da bude direktno sleđen od strane definicije, u suprotnom kompilacija neće uspeti.
Primeri
[uredi]- Tehinfo
Tehinfo koristi sintaksu sličnu TeH-u sa jednom glavnom razlikom: sve funkcije se uvode sa @ umesto sa \
. Ovo nije slučajno: zapravo koristi TeH za štampanje PDF verzije datoteke. Šta u osnovi radi je unos texinfo.tex koji redefiniše karakter kontrolne sekvence. Moguća implementacija:
\catcode`\@=0
@def@@{@char64} % За писање '@' знака.
\catcode`\\=13 @def\{{@tt @char92}}
@ТеХ команда је претходно написана '\ТеХ'. Сада је написана као '@@ТеХ'.
|
TeH komanda je prethodno napisana kao '\TeH'. Sada je napisana kao '@TeH'. |
Ovim redefinisanjem, '@' bi trebalo da uvede svaku komandu, dok '\' will zapravo štampa obrnutu kosu crtu karaktera.
- Nabrojavanje
Nekima se može učiniti LaTeH sintaksa liste okruženja malo glomaznom. Ovde je brz način da se definiše viki nalik nabrojavanje:
\catcode`| = 13
\def|{\item {--}}
\def\itemize#1{{\leftskip = 40 pt #1 \par}}
\itemize{
| Прва ставка
| Друга ставка
}
|
- Dolar i matematika
Ako imate mnogo dolar simbola za štampanje, možda bolje da promenite matematički znak za promenu.
\catcode`$ = 11
\catcode`| = 3
It costs $100.
Хајде да радимо математику: |50+50=100|. Хајде да ово истакнемо:
||50+50=100||
|
\makeatletter i \makeatother
[uredi]Ako ste uradili malo LaTeH hakovanja, mora da ste se susreli sa ove dve komande,
\makeatletter
i \makeatother
.
U TeHu '@' znakovi pripadaju ketkod 11 slovima podazumevano. To znači da možete da ga koristite za makro imena. LaTeHu čini upotrebu ketkoda tako da navedete pravilo: sve ne za javnost, unutrašnje makroe kojima ne bi trebalo da pristupe krajnji korisnici koji sadrže najmanje jedan '@' znak u svom imenu. U dokumentu, LaTeH menja ketkod od '@'do 12, drugih.
Zato, kada vam je potreban pristup LaTeH unutrašnjosti, morate priložiti sve komande pristupajući privatnim funkcijama sa \makeatletter
i \makeatother
. Sve što one rade je samo menjaju ketkod:
\def\makeatletter{\catcode`@ = 11}
\def\makeatother{\catcode`@ = 12}
|
Makroi Običnog TeH-a
[uredi]\newcommand
i \renewcommand
su specifične kontrolne sekvence LaTeHa. Oni proveravaju da nijedna od postojećih komandi ne bude u senci nove definicije
U Običnom TeH-u, primitive za makro definiciju ne proveravaju moguće senčenje. To je do vas da se uverite da se ne razbije ništa.
Sintaksa je
\def<macroname>#1<sep1>#2<sep2>{макро садржај, коришћење аргумената #1, бла, #2 ...}
|
Možete koristiti (skoro) sve sekvence karaktera između argumenata. Na primer hajde da napišemo jednostavni makro koji će pretvoriti decimalni separator od tačke do zareza. Prvi pokušaj:
\def\pointtocomma #1.#2{(#1,#2)}
%%...
\pointtocomma 123.456
|
Ovo će štampati (123,4)56. Dodali smo zagrade samo da bismo istakli problem. Svaki parametar je najkraći mogući ulaz sekvence koja odgovara makro definiciji, uključujući i separatore. Tako #1
odgovara svim karakterima do prve tačke, i#2
odgovara jedino prvom žetonu, tj je prvi karakter, jer nema separatora nakon toga.
Rešenje: Dodati drugi separator. Razmak može delovati ubedljivo:
\def\pointtocomma #1.#2 {(#1,#2)}
|
Po pravilu, svaki put kada očekujete nekoliko parametara sa posebnim separatorima, smislite poslednji separator. Ako ne želite da se igrate sa separatorima, onda se makroi Običnog TeH-a koriste kao LaTeH makroi (bez podrazumevanog parametra):
\def\mymacro#1#2#3{{\bf #1}#2{\bf #3}}
%% ...
\mymacro{реч1}{реч2 реч3}{!!!}
|
Proširene definicije
[uredi]TeH ima još jednu komandu definicije: \edef
, koja važi za expanded def. Sintaksa ostaje ista:
\edef<macroname><argumentslist>{<проширени садржај>}
|
Sadržaj biva proširen (ali ne i izvršen, tj štampan) na mestu gde je \edef
korišćen, umesto gde je korišćen definisan makro. Makro ekspanzija nije uvek očigledna ...
Primer:
\def\intro{Пример}
\edef\example#1{\intro~---~#1}
\def\intro{Вежба}
\example{Ово је пример}
|
Ovde redefinisanje \intro
neće uticati na \example
.
Globalne definicije
[uredi]Definicije su ograničene svojim opsegom. Međutim, bilo bi zgodno ponekad da se definiše makro unutar grupe koja ostaje na snazi izvan grupe, a do kraja dokumenta. To je ono što mi zovemo globalna definicija .
{
\def\LocalTeX{Локално\TeX}
\global\def\GlobalTeX{Глобално\TeX}
}
Још увек можемо приступити \GlobalTeX{} макроу овде.
|
Takođe možete koristiti i \global
komandu sa \edef
.
Obe komande imaju skraćenicu:
\gdef
za\global\def
\xdef
za\global\edef
Duge definicije
[uredi]Komande prethodne definicije neće dozvoliti da ih koristite tokom više stavova, tj tekst sadrži \par
komandu -- ili dvostruki prelom reda.
Možete ubaciti ispred definicije \long
komandu da biste dozvolili više argumenata.
Primer:
\long\def\dummy#1{#1}
\dummy{Први параграф\par Други параграф}
|
Spoljašnje definicije
[uredi]Ovaj makro prefiks sprečava definicije iz koje se koriste u nekom kontekstu. To je korisno da se konsoliduju makroi i čini ih manje sklonim greškama zbog loših konteksta. Spoljašnji makroi su namenjeni da se koriste van bilo kog konteksta, otuda njihovo ime.
Na primer sledeći kod neće raditi:
\outer\def\test{тест}
\def\failure{\test}
|
Spoljšnji makroi se ne smeju pojaviti u:
- makro parametri
- preskočeni uslov
- ...
let i futurelet
[uredi]\let<csname><token>
je isti kao \expandafter\def\expandafter<csname>\expandafter{<content>}
. Definiše ime nove kontrolne sekvence koja je ekvivalentna navedenoj token. token je obično druga kontrolna sekvenca.
Primetimo da će \let
proširiti token samo jednom, nasuprot \edef
koja će rekursivnoširiti dok je to moguće.
Primer[1]:
Коришћење let:\par
\def\txt{a}
\def\foo{\txt}
\let\bar\foo
\bar % Штампа а
\def\txt{b}
\bar % Штампа б
Коришћење edef:\par
\def\txt{a}
\def\foo{\txt}
\edef\bar{\foo}
\bar % Штампа а
\def\txt{b}
\bar % Штампа а
|
\futurelet<csname><token1><token2>...
radi malo drugačije. token2 je dodeljen csname; nakon toga TeH procesira <token1><token2>...
sekvencu. Tako vam \futurelet
omogućava da dodelite znak dok ga koristite odmah posle.
Ime specijalne kontrolne sekvence
[uredi]Neki makroi mogu imati ime koje nije moguće napisati kakav jeste. Ovo je slučaj makroa čije ime se sastoji od makro imena.
Primer:
\def\status{пуно}
\def\varempty{Ово је празно}
\def\varfull{Ово је пуно}
\csname var\status \endcsname
|
Poslednja linija će štampati rečenicu u zavisnosti od \status
.
Komanda zapravo radi suprotno od \string
koji štampa ime kontrolne sekvence bez proširivanja:
{\tt \string\TeX}
|
\TeX |
Kontrolna ekspanzija
[uredi]\expandafter{token1}{token2}
će proširiti token2 pre token1. To je nekad potrebno kada proširenje token2 željeno, ali nije moguće zbog token1.
{\tt \expandafter\string\csname ТеХ\endcsname}
|
\TeH |
\noexpand
korisno je imati malo kontrole nad onim što se proširilo u \edef
. Primer:
\def\intro{Пример}
\def\separator{~---~}
\edef\example#1{\intro\noexpand\separator#1}
\example{непроширивање чини сепаратор динамичним у {\tt \string\edef}.}
\def\intro{На пример}
\def\separator{~:~}
\example{сепаратор се променио, али није прва реч.}
|
\the
kontrola sekvence će vam omogućiti da vidite sadržaj raznih vrsta TeHa:
- ketkodovi
- čardef
- parametri fonta
- unutrašnji parametri
- dužine
- registri
- ...
Primer:
Димензије текста: $ \the\hsize \times \the\vsize $
|
Registri
[uredi]Registri su vrsta otkucanih variabli. Oni u ograničeni brjevima, od 0 do 255. Postoji 6 različitih vrsta:
Vrsta | Opis |
---|---|
kutija | jedna kutija |
račun | celi brojevi |
dimen | dužina |
muskip | glu (u mu jedinici) |
skip | glu |
toks | niz tokena |
TeH koristi neke registre interno, tako da bi bilo bolje da ih ne koristite.
Lista rezervisanih registrara:
- \box255 se koristi za sadržaj stranice
- \count0-\count9 se koriste za numerisanje stranica
Streč registar (besplatni):
- \box0-\box254
- \count255
- \dimen0-\dimen9
- \muskip0-\muskip9
- \skip0-\skip9
Dodeljeni registar korišćenjem '=' kontrolnog karatkera.Za kutije registre, koristi se \setbox
komanda.
\count255=17
\setbox\mybox=\hbox{бла}
|
Možete koristiti jedan od sledećih rezervisanih makroa da sprečite sukob:
\newbox
\newcount
\newdimen
\newmuskip
\newskip
\newtoks
|
Ovi makroi koriste sledeću sintaksu: \new*<csname>
.
Primer:
\newbox\mybox
\setbox\mybox=\hbox{бла}
|
Ove komande se ne mogu koristiti unutar makroa, inače svaki poziv makroa će rezervisati drugi registar.
Možete štampati registar koristeći \the
komandu. Za račun koristite \number
komandu. Za kutije koristite \box
komandu.
\the\hsize
\number\count255
\box\mybox
|
Aritmetika
[uredi]Aritmetičke mogućnosti TeHa su veoma ograničene, mada ova baza može dovoljno da se proširi do nekih zanimljivih funkcija. Tri glavne funkcije:
\advance <регистар> <број>
\multiply <регистар> <број>
\divide <регистар> <број>
|
register može biti tip račun, dimen, muskip ili skip. Ali nema smisla za kutiju ili toks.
Uslovi
[uredi]Osnovna sintaksa je:
\if* <тест><тачна акција>\fi
\if* <тест><тачна акција>\else<нетачна акција>\fi
|
gde je \if*
jedna naredba od sledećih.
Kontrolna sekvenca | Opis |
---|---|
\if <a><b>
|
Tačno ako su dva karaktera koda jednaka. |
\ifcat <a><b>
|
Tačno ako su dve kategorija koda jednake. |
\ifdim <a><rel><b>
|
Dimenzija veze, bilo <, > ili =. |
\ifeof
|
Tačno ako je kraj fajla ili ne postoji fajl. |
\iffalse
|
Uvek netačno. |
\ifhbox <reg>
|
Tačno ako registar kutija sadrži horizontalnu kutiju. |
\ifhmode
|
Tačno u horizontalnom režimu. |
\ifinner
|
Tačno u unutrašnjem režimu. |
\ifmmode
|
Tačno ako je u matematičkom režimu. |
\ifnum <a><rel><b>
|
Broj veze, bilo <, > ili =. |
\ifodd <num>
|
Tačno ako je broj neparan. |
\iftrue
|
Uvek tačno. |
\ifvbox <reg>
|
Tačno ako registar kutija sadrži vertikalnu kutiju. |
\ifvmode
|
Tačno u vertikalnom režimu. |
\ifvoid <reg>
|
Tačno ako je registar kutija prazan. |
\ifx <a><b>
|
Tačno ako se dva makroa šire u jedan isti, ili ako su dva koda jednaka, ili ako su dve kategorije kodova jednake. |
Primer:
\ifnum 5>6
Ово је тачно
\else
Ово је нетачно
\fi
|
Ovo je netačno |
Samodefinisani uslovi
[uredi]Možete stvoriti nove uslove (kao vrsta bulean varijabli) pomoću \newif
komande. Pomoću ovog samodefinisanja uslova, možete kontrolisate izlaz vašeg koda na elegantan način.
Najbolji načn ilustracije korišćenja uslova je smisliti primer.
Dve verzije dokumenta moraju biti generisane. Jedna verzija za grupu A, druga za ostatak ljudi (tj. one koji ne pripadaju grupi A):
1. Koristimo \newif
da definišemo naš uslov (tj. bulean varijablu).
\newif\ifgroupA
|
2. Na sledeći način dodeljujemo vrednost (tačno ili netačno) za naš uslov
\groupAtrue % or
\groupAfalse
|
to je:
\<conditionalsname>true
\<conditionalsname>false
|
u zavisnosti od toga koju vrednost želimo da postavimo u naš uslov.
3. Sada možemo da koristimo uslov bilo gde nakon u ako kontrolna stuktura.
\ifgroupA
% Овде пишемо код документа који је
% намењен за групу А
\else
% Овде пишемо код документа који је
% намењен за остале људе
\fi
|
Ceo primer je:
\newif\ifdirector
% Постављамо да је услов нетачан
\directorfalse
\ifdirector
Пишемо нешто за директоријум.
\else
Пишемо нешто за људе.
\fi
|
Pišemo nešto za ljude |
Izjava slučaja
[uredi]Sintaksa je \ifcase <number><case0>\or<case1>\or...\else<defaultcase>\fi
. Ako je number jednak broju slučaja, njegov sadržaj će biti štampan. Primetimo da počinje od 0.
\ifcase 2 a\or b\or c\or d\else e\fi
|
c |
\else
se koristi da odredi podrazumevani slučaj (kadgod se nijedan od prethodnih slučajeva nije poklopio).
Petlje
[uredi]Osnovna sintaksa je
\loop <садржај> \if*<услов><тачна акција>\repeat
|
Kao uvek, content i true action su proizvoljni TeH sadržaji. \if*
se odnosi na bilo koji od uslovi. Primetimo da nema false action, ne možete staviti \else
između \if*
i \repeat
. U nekim slučajevima ovo će biti suprotno od onoga što želite; morate da promenite uslov ili da definišete nosi uslov koristeći \newif
.
Primer:
\count255 = 1
\loop
\ТеХ
\ifnum\count255 < 10
\advance\count255 by 1
\repeat
|
Ovaj kod će štampati TeH 10 puta.
Ne radeći ništa
[uredi]Nekad može biti koristno reći TeHu da želite da ne radi ništa.
Postove dve komande za to: \relax
i \empty
.
Klasičan primer:
\def\myspace{\hskip 25pt\relax}
\myspace{} plus 10pt
|
\relax
sprečava neželjeno ponašanje ako je plus
ili minus
iza komande.
Razlika između \empty
i \relax
leži u ekspanziji: \empty
nestaje nakon makro ekspanzije.
TeH karakteri
[uredi]čar
[uredi]Možemo štampati sve znakove koristeći \char {charcode}
komandu. Čarkod je zapravo bajt vrednost.
Na primer
\char65 = \char `A = \char `\A
|
Većina znakova odgovara ASCII vrednosti (npr. A-Ša-Š), neki menjaju znakove koji ne mogu da se štampaju iz ASCII.
chardef and mathchardef
[uredi]Možete definisati kontrolnu sekvencu da proširite određeni čar.Sintaksa je \chardef<control sequence>=<charcode>
.
Sledeće sekvence rade istu stvar.
\chardef\myA=65
\chardef\myA=`A
\chardef\myA=`\A
|
Primer:
\mathchardef\alphachar = "010B
$\alphachar$
|
Mapa font kodiranja
[uredi]Možemo koristiti gornji kod da odštampamo mapu fonta kodiranja.
\count255 = 0
\loop
[\number\count255 =\char\number\count255]
\ifnum\count255 < 127
\advance\count255 by 1
\repeat
|
Druga verzija, sa različitim fontovima, jedan unos po liniji:
\count255 = 0
\loop
[\number\count255 =
\char\number\count255 \
{\tt \char\number\count255}
{\it \char\number\count255}
]
\hfil\break
\ifnum\count255 < 127
\advance\count255 by 1
\repeat
|
Verbatim linije i razmaci
[uredi]Prilično je zbunjujuće otkriti kako (La)TeH tretira sve praznina kao isti tip razmaka glua. Običan TeH daje neke komande da se sačuva razmak i nove linije kao kada napišete:
\begingroup
\obeylines
\obeyspaces
Релевантни текст овде
\endgroup
|
što znači da ćete verovatno morati da kombinete svoje okruženje i svoju komandu:
\newenvironment{мојеокружење}{\begingroup \obeylines \obeyspaces}{\endgroup}
\newcommand{\mycommand}[n]{уради нешто са #1 .. #n}
|
a onda u svom teh fajlu:
\begin{мојеокружење}
\mycommand{
који год текст да је важно је
да сачувате размаке и нове линије
јер, као када желите да генерира
вербатим блок касније.
}
\end{мојеокружење}
|
Makroi definišu makroe
[uredi]Ovo je korisno u nekim slučajevima, na primer za defnisanje komandi jezika kao što je objašnjeno na Multilingual versions, gde krajnji korisnik može da napiše
\en{неки енглески текст}
\de{неки немачки текст}
|
i da bude siguran da je zamenjn u odgovarajući babel jezik.
Hajde da definišemo makroe koji će definisati komandu jezike na primer. Ove komande su jednostavne: ako je argument u vrednosti \locale
varijable, onda odgovarajući makro štampa njegov sadržaj direktno. U suprotnom, ne radi ništa.
U suštini, ono što mi želimo da uradimo je krajnje jednostavno: definisanje gomile makroa ovako:
\newcommand{\de}[1]{#1}
\newcommand{\en}[1]{}
\newcommand{\fr}[1]{}
|
U prethodnom fragment kodu, samo \de
komanda ide ka izlazu svog sadržaja, \en
i \fr
neće ništa štampati.. To je ono što želimo. Problem nastaje kada želite da automatizujete zadatak, ili ako imate puno jezika, a želite da promenite izbor jezika. Potrebno je samo da premestite #1
, ali to nije zgodno i čini nemogućim da izaberete babel jezik iz komandne linije. Razmislite o ovome ...
Ono što ćemo da uradimo je da definišemo komandu jezika sledeći vrednost \locale
varijable (ili neke varijable po vašem izboru). Otuda upotreba \equal
komande iz ifthen paketa.
Pošto je skoro nemoguće napisati to u LaTeHu, koristićemo Običan TeH.
\def\locale{de}
\def\localedef#1{
\ifthenelse{ \equal{\locale}{#1} }{
%% Поставља бабел језик.
%% Дефинише команду за штампање садржаја.
}{
%% Дефинише команду да не штампа ништа.
}
}
|
Pojavljuje se drugi problem: kako definisati komandu čije je ime varijabla? U mnogim programskim jezicima to nije moguće. Ono što bismo bili u iskušenju da napišemo je:
\def\#1 #1{#1}
|
Ovo neće raditi iz dva razloga.
- Dva poslednja '#1' treba da se odnose na argumente novog makroa, ali oni bivaju prošireni do
\localedef
makroa prvog argumenta jer su u telu tog makroa. \#1
biva proširen na dva tokena: '#' i '1', a\def
komanda neće raditi jer zahteva validno ime kontrolne sekvence.
Rešenje za problem 1 je jednostavno: koristite '##1', što će proširiti do '#1' kada je makro izvršen.
Za probmel 2, postoji trik. Moguće je reći tex da je određeni token kontrolna sekvenca. To je namena \csname...\endcsname
Bilo kako bilo
\def\csname#1\endcsname ##1{##1}
|
neće raditi jer će redefinisati \csname
u '#1', što mi ne želimo, onda će tex sresti \endcsname
, što će biti greška.
Moramo odložiti ekspanziju \def
, tj. da kažemo tex da proširi \csname
prvo, a onda da primeni \def
na to. Postoji komanda za to: \expandafter{token1}{token2}
. To će proširiti {token2} pre {token1}.
Konačno, ako želimo da postavimo jezik iz komandne linije, moramo biti u mogućnosti da postavimo \locale
varijablu tako da je ona u izvornom kodu podrazumevane vrednosti koja se može prevatići onom u komandnoj liniji. Ovo se može izvršiti pomoću \provdecommand
:
\providecommand\locale{fr}
|
Konačan kod je
%% Required package.
\usepackage{ifthen}
%% ТеХ функција која генерише команду језика.
\def\localedef#1#2{
\ifthenelse{ \equal{\locale}{#1} }{
\selectlanguage{#2}
\expandafter\def\csname#1\endcsname ##1{##1}
}{
\expandafter\def\csname#1\endcsname ##1{}
}
}
%% Одабрани језик. Може бити постављен било где пре команде језика.
\providecommand\locale{fr}
%% Команде језика.
\localedef{de}{немачки}
\localedef{en}{енглески}
\localedef{fr}{француски}
%% ...
|
I vi možete sastaviti sa
latex '\providecommand\locale{en}\input{mydocument.tex}'
Beleške i reference
[uredi]- ↑ From tex.stackexchange.com: What is the difference between \let and \edef?
- Dodatna literatura
- The TeXbook, Donald Knuth
- TeX by Topic, Victor Eijkhout
- TeX for the Impatient, Paul W. Abrahams, Karl Berry and Kathryn A. Hargreaves