Richard Stallman dnes v Liberci přednáší o svobodném softwaru a svobodě v digitální společnosti. Od 16:30 v aule budovy G na Technické univerzitě v Liberci. V anglickém jazyce s automaticky generovanými českými titulky. Vstup je zdarma i pro širokou veřejnost.
sudo-rs, tj. sudo a su přepsáné do programovacího jazyka Rust, nahradí v Ubuntu 25.10 klasické sudo. V plánu je také přechod od klasických coreutils k uutils coreutils napsaných v Rustu.
Fedora se stala oficiální distribucí WSL (Windows Subsystem for Linux).
Společnost IBM představila server IBM LinuxONE Emperor 5 poháněný procesorem IBM Telum II.
Byla vydána verze 4.0 multiplatformního integrovaného vývojového prostředí (IDE) pro rychlý vývoj aplikaci (RAD) ve Free Pascalu Lazarus (Wikipedie). Přehled novinek v poznámkách k vydání. Využíván je Free Pascal Compiler (FPC) 3.2.2.
Podpora Windows 10 končí 14. října 2025. Připravovaná kampaň Konec desítek (End of 10) může uživatelům pomoci s přechodem na Linux.
Již tuto středu proběhne 50. Virtuální Bastlírna, tedy dle římského číslování L. Bude L značit velikost, tedy více diskutujících než obvykle, či délku, neboť díky svátku lze diskutovat dlouho do noci? Bude i příští Virtuální Bastlírna virtuální nebo reálná? Nejen to se dozvíte, když dorazíte na diskuzní večer o elektronice, softwaru, ale technice obecně, který si můžete představit jako virtuální posezení u piva spojené s učenou
… více »Český statistický úřad rozšiřuje Statistický geoportál o Datový portál GIS s otevřenými geografickými daty. Ten umožňuje stahování datových sad podle potřeb uživatelů i jejich prohlížení v mapě a přináší nové možnosti v oblasti analýzy a využití statistických dat.
Kevin Lin zkouší využívat chytré brýle Mentra při hraní na piano. Vytváří aplikaci AugmentedChords, pomocí které si do brýlí posílá notový zápis (YouTube). Uvnitř brýlí běží AugmentOS (GitHub), tj. open source operační systém pro chytré brýle.
Můj mladší syn Radek mě požádal, zda bych mu nepomohl vytvořit karetní hru Set. Dokázal by to sice udělat například v Inkscape, ale vzhledem k tomu, že kartičky opakují motivy podle přesně stanoveného pravidla, dospěl správně k závěru, že než by vytvořil všech 81 kartiček, že by se uklikal a uklonoval k uzoufání. Chtělo by to tedy nějaký programovací jazyk a kartičky naprogramovat. Původně ho napadlo, že když umím ten PostScript, že to napíšu v PostScriptu. Šlo by to, ale rozhodl jsem se pro TeX.
Na každé kartičce se nachází jeden ze tří tvarů:
Každý tvar může být plný, šrafovaný nebo prázdný:
Každý tvar (vždy stejný a se stejnou výplní) se na kartě může objevit jednou, dvakrát nebo třikrát:
Každá karta je vytvořena v barvě červené, modré nebo zelené:
Rozpoznáváme tedy čtyři charakteristiky na každé kartě a každá charakteristika může mít tři stavy. To je tedy dohromady 34 = 81 karet.
Tyto kartičky nyní naprogramujeme v TeXu. Kompletní příklad si můžete
stáhnout jako zdrojový soubor pro pdfTeX.
Můžete si jej vyzkoušet
zpracovat příkazem pdftex karty-set
nebo pdfcsplain karty-set
.
V následujícím textu vyberu vždy některé řádky z ukázky a podrobně
vysvětlím jejich smysl.
Zkusme si z příkladu vytáhnout jen následující řádky:
\def\tvary#1{\if^#1^\else \def\stvary{#1}\barva CZM{}\expandafter\tvary \fi} \def\barva#1{\if^#1^\else \def\sbarva{#1}\pocet 123{}\expandafter\barva \fi} \def\pocet#1{\if^#1^\else \def\spocet{#1}\plnost FSE{}\expandafter\pocet \fi} \def\plnost#1{\if^#1^\else \def\splnost{#1}\udelej \expandafter\plnost \fi} \def\udelej{\message{\stvary,\sbarva,\spocet,\splnost}} \tvary BOK{} \end
Tento kód zavolá postupně 81krát makro \udelej
, přitom při každém
volání jsou nějak (pokaždé jinak) natavena následující makra:
\stvary ... B (brambora), O (ovál), K (kosočtverec) \sbarva ... C (červená), Z (zelená), M (modrá) \spocet ... 1 (jednou), 2 (dvakrát), 3 (třikrát) \splnost .. F (plně), S (šrafovaně), E (obrys)
Podle hodnot těchto čtyř maker se tedy makro \udelej
dozví, jakou má
vytvořit kartu. Jak to udělá, si povíme za chvíli. Nyní se zaměříme na pochopení
uvedeného čtyřnásobného cyklu. Zaměříme se nejprve na první řádek:
\def\tvary#1{\if^#1^\else \def\stvary{#1}\barva CZM{}\expandafter\tvary \fi}
Zavoláme-li \tvary BOK{}
, vezme si makro \tvary
nejprve
první parametr B
(ten je v makru formálně označen #1
)
a provede:
\if^B^\else \def\stvary{B}\barva CZM{}\expandafter\tvary \fi
Test \if
sleduje shodnost prvních dvou tokenů, tj. ^
a B
nejsou shodné. Provede se tedy část kódu za \else
:
\def\stvary{B}\barva CZM{}\expandafter\tvary \fi
Zde je definováno \stvary
jako B a dále se provede
\barva CZM{}
. Symbol \fi
ukončuje text, který se vykonává
za \else
. Konstrukce \expandafter\tvary\fi
nejprve
pomocí \expandafter
odstraní ukončovací symbol \fi
a teprve poté spustí znovu makro \tvary
. Makro \tvary
tedy volá samo sebe (rekurze). Ve čtecí frontě parametrů nyní už čeká jen
OK{}
. Makro \tvary
tedy provede ještě to samé s písmenem
O a s písmenem K. Jakmile je makro \tvary
zavoláno počtvrté,
přečte prázdný parametr (ten se v TeXu zapisuje jako {}
)
a expanduje na:
\if^^\else \def\stvary{}\barva CZM{}\expandafter\tvary \fi
Nyní tedy je podmínka \if
splněna (znak ^
je roven znaku
^
) a makro vykoná to, co je psáno před \else
, tedy nic.
Tím je cyklus ukončen.
Je dobré si povšimnout, že v každém ze tří volání makra \tvary
bylo provedeno \barva CZM{}
, takže analogicky se třikrát vyvolá
makro \barva
. Toto makro v každém volání třikrát volá makro
\pocet
, to zas třikrát volá makro \plnost
a to třikrát
zavolá makro \udelej
. Máme tedy 81 volání makra \udelej
. Makro
\udelej
zatím v této fázi testování pouze vypíše pomocí
\message
na terminál a do logu hodnoty maker \stvary
,
\sbarva
, \spocet
, \splnost
.
Nyní přesvědčíme makro \udelej
, aby vykonalo svou práci:
\def\udelej{\message{\stvary,\sbarva,\spocet,\splnost}% \hbox{\vrule \vbox to8.7cm{\hrule\vss \tmpnum=0 \loop \kreslitvar \advance\tmpnum by1 \ifnum\tmpnum<\spocet \kern63bp \repeat \vss\hrule}% \vrule}\penalty0\kern-.4pt }
Makro vytvoří \hbox
, uvnitř kterého je tenká svislá linka
\vrule
, dále tam je \vbox
vysoký 8,7 cm a konečně znovu
svislá linka \vrule
. Výška \vbox
u určuje výšku kartičky
a obsahem tohoto \vbox
u (mezi {
až }
) je
nejprve \hrule
(nahoře se vytvoří tenká vodorovná linka), pod ní následuje pružná
mezera \vss
, pak se cyklem \loop
vykreslí jeden až tři tvary,
pak následuje druhá mezera stejné pružnosti \vss
, takže kresba bude
vertikálně uprostřed. Nakonec se uvnitř \vbox
u vykreslí spodní linka
\hrule
. Schématicky to vypadá takto:
/ | /----hrule----\ | \ : | : vss : | : : | : : | : hbox: vrule vbox: kreslitvary : vrule : penalty0 kern-.4pt : | : : | : : | : vss : | : \ | \----hrule----/ | /
Jednotlivé boxy \hbox
a \vbox
samy nevytvoří kolem sebe
mezery ani rámeček, pouze určují, zda sazba v nich má probíhat zleva doprava
(\hbox
) nebo shora dolů (\vbox
). Obrys kartičky je tedy
vykreslen natahovacími linkami \vrule
a \hrule
. Linky
\vrule
se natáhnou na výšku boxu, ve kterém se nacházejí a linky
\hrule
se natáhnou na šířku boxu, ve kterém se nacházejí. Šířka našeho
\vbox
u je určena šířkou sazby, kterou vykreslíme tvary (jak uvidíme za
chvíli, je to 5,7 cm). Příkaz \penalty0
za \hbox
em dovolí
TeXu za kartičkou zlomit řádek a konečně \kern-.4pt
je negativní
mezera, která je v šířce linky. Takže další karta vpravo, bude-li kladena bez
mezery, svou úvodní linkou překryje závěrečnou linku, takže celková linka mezi
kartami nezdvojnásobí svou šířku.
V cyklu \loop
je nejprve vykreslen požadovaný tvar pomocí makra
\kreslitvar
. Pak je zvětšeno pomocné \tmpnum
o jedničku
a je-li menší než požadovaný počet tvarů \spocet
, bude se cyklus
opakovat. V takovém případě je mezi tvary vložena vertikální mezera
\kern63bp
, tedy 63 bodů. Nakonec se tedy vykreslí jeden až tři tvary
podle hodnoty makra \spocet
.
Jeden tvar vykreslí makro \kreslitvar
, které je definováno takto:
\def\kreslitvar{\hbox to5.7cm{\kern.5cm\csname tvar\stvary\endcsname\hss}}
Vidíme, že tvar je schován v \hbox
u šířky 5,7 cm, což nakonec
udává šířku jedné kartičky. Zleva tohoto boxu je nejprve vodorovná mezera
0,5 cm a pak následuje vlastní vykreslení tvaru pomocí:
\csname tvar\stvary\endcsname
Box je po vykreslení tvaru až k pravému okraji vyplněn pružnou mezerou
\hss
. Výše uvedená konstrukce s \csname...\endcsname
expanduje na makro se jménem, které je mezi těmi příkazy napsáno. Protože
\stvary
je buď B nebo O nebo K, expanze vede na \tvarB
nebo \tvarO
nebo \tvarK
.
Podíváme se, jak je definováno třeba makro \tvarK
:
\def\tvarK{\pdfliteral{q \csname barva\sbarva\endcsname .9 0 0 .9 0 0 cm % transformační matice 4 w % šířka čáry 0 0 m 75 30 l 150 0 l 75 -30 l h % kosoštverec \uzavritvar Q }}
Toto makro udělá kresbu pomocí PDF kódu vymezeného příkazem \pdfliteral
.
Nejprve je zahájena lokální skupina v PDF kódu příkazem q
. Dále se
spustí nastavení barvy dvojicí \csname...\endcsname
, tedy expanduje se
\barvaC
nebo \barvaZ
nebo \barvaM
. Tyto barvy jsou
definovány jako odpovídající PDF kód na změnu barvy:
\def\barvaC{1 0 0 RG 1 0 0 rg } \def\barvaZ{0 1 0 RG 0 1 0 rg } \def\barvaM{0 0 1 RG 0 0 1 rg }
V makru \tvarK
pokračuje PDF kód na vykreslení kosočtverce:
.9 0 0 .9 0 0 cm
je nastavení velikosti, resp. transformační matice,
0 0 m 75 30 l 150 0 l 75 -30 l h
je příprava obrysu kosočtverce. Obrys je
uzavřen makrem \uzavritvar
a nakonec je ukončena lokální skupina
v PDF kódu příkazem Q
.
Makro \uzavritvar
řeší, zda připravený obrys obtáhne čarou, vyplní nebo
vyšrafuje:
\def\uzavritvar{% \if S\splnost W S 3.5 w \srafa||||||||||||||{} \else \if F\splnost f \else S \fi \fi }
Je-li \splnost
nastavena na S (šrafy), vloží se do PDF kódu
příkazy W S
, které vykreslí připravenou křivku a použijí ji jako
ořezovou. Dále je makrem \srafa
nakresleno šrafování. Je-li naopak
\splnost
nastavena na F (plný tvar), vykreslí se křivka PDF příkazem
f
, tj. výplň. V posledním případě se křivka vykreslí příkazem
S
, tedy obrys.
Makro \srafa
samotné je definováno takto:
\def\srafa#1{\if^#1^\else 1 0 0 1 10 0 cm 0 -30 m 0 80 l S \expandafter\srafa\fi}
Tuto smyčku s rekurzivním voláním sebe sama už známe. Makro \srafa
je voláno tolikrát, kolik je za ním svislých čar. Opakovaně tedy klade do argumentu
\pdfliteral
PDF kód ve tvaru:
1 0 0 1 10 0 cm 0 -30 m 0 80 l S
Tento kód posune aktuální kresbu pomocí transformační matice o 10 bodů doprava a následně vykreslí čáru z bodu (0, −30) do bodu (0, 80).
Ostatní tvary \tvarO
(ovál) a \tvarB
(brambora) jsou
udělány obdobně. Můžete se na ně podívat do
zdrojového kódu celého příkladu.
Dodám ještě, že souřadnice kosočtverce a oválu jsem napsal „z voleje“ přímo v textovém editoru. V případě té brambory by to šlo taky, ale rychlejší bylo vykreslit si bramboru v Inkscape, uložit výsledek jako EPS a z tohoto EPS vytáhnout odpovídající PDF kód. Proto tam vidíte desetinná čísla. Nedošlo by asi k příliš velkému zkreslení, kdyby byla tato čísla zaokrouhlena na čísla celá.
Pomocí \noindent
zahájíme odstavec bez odstavcové zarážky, pak se
pomocí \tvary BOK{}
vytiskne 81 kartiček, jakoby to byla písmena
v odstavci. Tento odstavec pak TeX zalomí do řádků (vejdou se mu tři kartičky
na řádek) a do stránek (vejdou se mu tři řádky na stránku). Vytvoří
tedy 9 stránek, které lze pak rozstříhat a získat požadované kartičky.
Aby nebyla zdvojena šířka vodorovných linek mezi kartičkami, je nastaveno
\lineskip=-.4pt
, tedy mezera mezi řádky je záporná v šířce linky. Dále
je nastaveno
\rightskip=0pt plus1fil
Příkaz způsobí, že do každého řádku je zprava vložena pružná mezera, bez které by TeX měl potíže s vyrovnáním řádku a dal by to najevo varovnými hlášeními.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
I kdybych měl napsat párřádkový skript v pythonu, který mi vygeneruje TeXový zdroják už jen s makry \udelej.Přesně tak bych to řešil. (Tedy místo Pythonu bych šáhl po PHP, ale to je jen detail.)
To já radši v BASHi nebo Perlu – PHP bych musel na většinu strojů doinstalovat, což se mi nechce – navíc v tom Perlu by se to i psalo líp.
To záleží na situaci. Když to bude nějaká jednorázovka, kde člověk pustí dva vnořené cykly a pak si ručně zkontroluje výsledek, tak klidně ten Perl. Jindy radši to XSLT/XQuery/… Taky záleží na okolí: z Javy radši budu volat XSLT než perlovský skript.
Ajajaj, od toho tu přece máme Metapost, Asymptote a bůhvícoještě...Možná by to chtělo ukázat, jak se stejná úloha vyřeší v Metapostu, Asymptote, pythonu a bůhvičemještě, abychom měli srovnání. Jsem přesvědčen, že TeX v tom srovnání vyjde velmi dobře. V cca padesáti řádcích kódu je vše: popisy kreseb, algoritmus pro vygenerování kartiček i jejich konečné vložení do stránek PDF dokumentu.
zbytocnost.Chápu, že asi k ničemu nevyužijete zrovna tuto karetní hru. V příkladu jsem ale chtěl hlavně ilustrovat, jak TeX vnitřně funguje na nejrůznějších úrovních (makra, boxy, grafika) bez sáhodlouhých popisů jednotlivých algoritmů. Ty si zájemce najde v odpovídající literatuře, např. v TeXbooku naruby.
myslim ze ten serial o TeXu sa mal uberat inym smerom.Není řečeno, jakým směrem by si čtenář představoval, že by se to mělo ubírat. Až to někdo vyloží, mohu na to reagovat, zda jsem ochoten to takovým směrem psát.
Autore, položte si otázky:
Píšu to za peníze, které mi za to čtenář nebo ABCL dává? Pokud ano, je názor "zbytocnost" k zamyšlení.
Píšu to zdarma, pro širokou veřejnost a s vidinou, že by to mohlo někomu jinémo pomoct? Pokud ano, potom je názor "zbytocnost" je tlacháním někoho, kdo sám umí hovno a potřeboval jen vylít dačo z mozgu, kde už toho privela nebolo...
Až to někdo vyloží, mohu na to reagovat, zda jsem ochoten to takovým směrem psát.Možná právě to srovnání s jinými řešeními by bylo zajímavé. Mně to skriptování v TeXu pořád připadá trochu moc hardcore a nejsem si jist, proč bych to měl dělat takhle. Já bych zvolil asymptote, protože procedurální/objektový přístup je mému myšlení blíž. (Ovšem každý přednostně použije to, co lépe ovládá.)
The Velvet Underground: An Illustrated History of a Walk on the Wild Side
v TeXu, ci sa to vobec da. ukazka sa da najst na amazone.
Jak se vlastně řeší přesné pozicování vůči listu papíru?Je potřeba nastavit \hoffset=-1in a \voffset=-1in. Například:
\hoffset=-1in \voffset=-1in \topskip=0pt \vsize=300mm \nopagenumbers \newcount\n \newcount\N \def\meritko#1#2 {#1{\C \loop \advance\n by1 \advance\N by1 \ifnum\n<#2 \kern1mm \ifnum\N=10 \N=0 \C \else \c \fi \repeat}} \def\c{\vrule height3mm depth0pt \kern-.4pt } \def\C{\vrule height3mm depth2mm \kern-.4pt } \meritko\hbox 211 \def\c{\hrule width3mm \kern-.4pt } \def\C{\hrule width5mm \kern-.4pt } \kern5mm \nointerlineskip \meritko\vbox 288 \endvytvoří na stránce A4 milimetrové měřítko přesně u horního a levého kraje stránky. TeX ručí přesností na úrovni nanometrů, ale jak se s tím poradí tiskárna, která typicky ne zcela přesně vezme papír, to už je jiná otázka.
bych to měl několikanásobně rychleji naklonované v inkscapeJá bych to měl několikanásobně rychleji napsané v TeXu.
Možná právě to srovnání s jinými řešeními by bylo zajímavé.OK, kdo to udělá? Já kvůli tomu nebudu studovat Asymptote ani Metapost, python a další zde zmíněné nástroje. Očekávám, že zde udělá srovnání nějaký uživatel těchto nástrojů.
Takhle mi to připomíná spíš úlohu do šifrovačkyK úloze do šifrovačky se spíše blíží třeba toto. Soubor je třeba zpracovat TeXem (ne LaTeXem). Zkuste si tipnout, co z toho vyleze.
Autore, položte si otázkyJá si ty otázky pokládat nemusím, ovšem nevím, jak to vnímají ostatní. Takže: píšu to pro veřejnost s vidinou, že by to mohlo někomu jinému pomoct, jako ostatně vše, co dělám v souvislosti s TeXem. Mám k tomu domluven velmi drobný honorář, kvůli kterému to rozhodně nedělám.
ved prva cast bola otvorena 7341, druha 4902 a predposledna 2614To taky sleduji. Navrhnul jsem tedy asi před měsícem šéfredaktorovi, že seriál ukončím, třebaže mám témata na asi dalších pět dílů. Dostal jsem odpověď, že úbytek přístupů je u odborně zaměřeného seriálu obvyklý a že bych mohl pokračovat. Pokud mě ovšem přesvědčíte o opaku vy, čtenáři, samozřejmě pokračovat nebudu. První, co bych potřeboval, je zjistit, co vlastně od seriálu očekáváte. Když napíšete jen slovo ,,zbytečnost`` pak to není příliš konstruktivní.
mna by zaujimalo ako urobit knihu The Velvet Underground ...Kniha, ve které každá dvojstrana je plná obrázků a jejich usazení je řešeno výtvarníkem individuálně, není vhodný příklad na použití TeXu. Obrázky jsou výtvarníkem usazovány interaktivně na každé dvoustraně dle potřeby a text tvoří jen podružnou část. Těžko můžete usazování obrázků ,,dle pocitu`` dělat tak, že vložíte jejich souřadnice do programu a program vám pak obrázky usadí. Pokud ale je v knize nějaký očekávatelný řád, pak se ten řád naprogramovat dá a vyplatí se to. Tento typ publikace bych dělal zhruba tak, jak popisuji na stranách 275 až 280 TeXbooku naruby. Příklady, na co se TeX naopak hodí, jsou třeba tady. Soukromé shrnutí: V okamžiku, kdy jsem zde poprvé na jednom poměrně jednoduchém příkladě naznačil, jak se v TeXu zhruba programuje, se zde sešly příspěvky o tom, že tento styl programování je neakceptovatelný, že to je hardcore nebo šifrovačka. Je to pro mě poučení, že dnešní programátoři nejsou schopni nebo ochotni takto uvažovat a že bych tedy s tím TeXem měl zde asi přestat obtěžovat. Je to škoda. Možná tím obě strany přicházejí o hodně.
Citace v OPmac sice řeší proměnu v interval [1-6], ale bohužel se neřeší nutnost seřazení [7,1,3,2].Děkuji za upozornění na chybu. Opravím to v únorové verzi.
Při použití \verbinput(-) z OPmac se zobrazí nakonec jeden prázdný řádek.Toto už někdo reportoval, takže v lednové verzi to je opraveno. Omlouvám se ostatním, toto jistě není prostor pro reportování chyb v OPmac. Kdybych věděl, kdo to je nasson, odpověděl bych mu přímo a nezatěžoval bych tuto diskusi.
\expandafter
je založeno na obdobných principech jako hanojská věž, ale proč bychom se tím měli trápit, když to prostě funguje?
\expandafter
mi běhal mráz po zádech. Úplně existenciální zážitek to byl...