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.
Jarní konference EurOpen.cz 2025 proběhne 26. až 28. května v Brandýse nad Labem. Věnována je programovacím jazykům, vývoji softwaru a programovacím technikám.
Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.
Před 25 lety zaplavil celý svět virus ILOVEYOU. Virus se šířil e-mailem, jenž nesl přílohu s názvem I Love You. Příjemci, zvědavému, kdo se do něj zamiloval, pak program spuštěný otevřením přílohy načetl z adresáře e-mailové adresy a na ně pak „milostný vzkaz“ poslal dál. Škody vznikaly jak zahlcením e-mailových serverů, tak i druhou činností viru, kterou bylo přemazání souborů uložených v napadeném počítači.
Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).
Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.
Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Dlouhá slova, která se už nevlezou na konec řádku se nezalomí ale přesáhnou okraj. Pokud to chci napravit a před dlouhé slovo vložím příkaz \newline slovo na konci dalšího řádku opět přečuhuje.
Zde je ukázka: obrázek
Kde dělám chybu a jak přinutit latex, aby správně zalamoval dlouhá slova?
Díky moc!\-
. Například. Dlou\-ha\-tán\-ský. Pokud ti nerozdělí slovo "Jméno", tak to asi znamená, že nemůže najít vzory pro české dělení slov. Nevím, jakou distribuci TeXu máš a jestli obsahuje CSLaTeX. Zkus raději místo příkazu latex
, použít cslates
(u mě ale malinko zlobí, když je vstupní soubor v kódování UTF-8).
Ovlivnit se to dá proměnnými \lefthyphenmin a \righthyphenmin (výchozí hodnoty jsou 2 a 3).
\parindent=0pt\hsize=7em
Test dělení slova do řádků.\par
\righthyphenmin=2
Test dělení slova do řádků.\par
\bye
Takhle by to mělo fungovat v čemkoliv, co si řáká TeX (testováno v plainu, nechce se mi hledat, jak se píšou LaTeXové hlavičky, ale fakt nevidím důvod, proč by se měl LaTeX chovat jinak). Můžeš sem dát ukázkový zdroják, ve kterém ti to nefunguje?
Jinak algoritmus zlomu řádek se dá ovlivnit ještě dalšími proměnnými a pro poměrně úzkou sazbu může být občas nějaká úprava potřeba, ale to už je na delší povídání. To už spíš odkážu na TeXbook naruby od Olšáka. :)
Test dělení slova
do řádků.
Píšu 12ti bodovým písmem.
\emergencystretch=0pt \pretolerance=150 \tolerance=250 \hbadness=150 \hfuzz=0pta po něm už žádný přesah nemám. Sice nevím proč, ale funguje to :)
\discretionary{}{\the\textfont2\char"6E}{}
, případně si rovnou předefinovat makro \backslash tak, aby tento kód obsahovalo, a pak se bude v matice backslash lámat s tím, že se navíc zopakuje na příštím řádku.
\renewcommand{\backslash}[1]{\backslash\discretionary{}{\the\textfont2\char"6E}{}}ale latex mi vypíše jen chybu "Tex capacity exceeded, sorry [input stack=5000]". předpokládám, že je to kvůli příkazu \backslash v těle nového příkazu. Dochází asi k nekonečné rekurzi. Když příkaz pojmenuju jinak (např. \bslash), tak to funguje, ale nastanou 2 problémy:
1. za lomítkem chybí 1. znak: $AA\bslash BB\bslash CC$ vypíše AA\B\C 2. pokud slovo na konci řádku nevyjde, šířku řádku přesáhne (blbá matikaTak mě ještě napadlo, je nějaký způsob, jak psát lomítko vně prostředí matiky? Matiku totiž používám na proměnné v textu a ta to celá kazí. Kdyby existoval způsob jak zvýraznit text stejně jako v mat. prostředí $$ a fungovaly by lomítka, pak bych mat. prostředí nemusel vůbec používat a neměl bych problém s přesahem.)
Ad nevyjde na konec řádku -- no pokud není míst zlomu dostatek vzhledem k povoleným roztažení a stažení různých mezer (mezi slovy), tak se prostě zlom vyřešit nedá. Možnost je poněkud přestylyzovat text, přidat další místa k dělení (ale jestli povolit dělení pomlčkou názvů proměnných nevím ...) atd. Univerzální postup bohužel neexistuje.
Ad backslash mimo matiku. Máš návod v mém předchozím příspěvku. :) Obsah \discretionary se sází mimo matiku. Takže stačí jen nadefinovat backslash jako {\the\textfont2\char"6E}
. Takhle definovaný backslash nebude umět narozdíl od toho standardního, co je definován jako delimiter, růst, ale to tady asi neva.
Ještě lépe jej definovat stylem \def\bs{\discretionary{\the\textfont2\char"6E}{\the\textfont2\char"6E}{\the\textfont2\char"6E}}
, takže se bude i dělit na konci řádku. Ale nevím jak moc to celé pomůže oproti matice ...
Zvýraznění jako v matice ... font, co se používá na značky proměnných je myslím standardní kurziva, v matematice je jen jiné mezerování (pro psaní celých slov mnohem ošklivější :), protože se předpokládá, že veličiny se značí jen jedním písmenkem. Takže nadefinovat backslash jak jsme zmínil výše a psát kurzivou.
{tohle bude {@it kurziva}}
, ale nevím, jestli to tak úplně chceš. :)
Naopak si můžeš vybrat nějaký nepoužívaný znak (třeba zas ten zavináč), přiřadit mu \catcode 13 (aktivní znak), což znamená, že pak se může jako makro použít sám bez potřeby uvození backslashem (standardně má tuhle kategorii třeba vlnka). Pokud pak provedeš něco jako \catcode`\@=13\def@{\discretionary...}
, tak pak můžeš používat zavináč jako backslash.
Tož asi tak ... prostě nemůžeš po TeXu chtít, aby sám od sebe uhádl, jestli chceš použít backslash jako uvození řídící sekvence, nebo explicitní backslash. :)
Zakázání dělení uprostřed slov se dá udělat nejjednodušeji tím, že se \hypenchar pro daný font nastaví na hodnotu -1 (v \tt fontu je to tak standardně, jinde by bylo potřeba nastavit).
Vlnka je už sama od sebe aktivním znakem, takže není problém ji předefinovat na \char"7E (znak vlnky). Nadefinovat slash jako aktivní znak také není problém: \catcode`\/=13\def/{\discretionary...}
S backslashem bude srandy trochu víc ... nejjednodušší je předem si nějaký jiný znak, který určitě nebude v cestě, předefinovat na \catcode0, tím si ušetříš spoustu problémů. :) Třeba takhle: {\catcode`\*=0\catcode`*\=13*def\{*discretionary...}}
No a koneckonců, pak si tu hvězdičku zas můžeš předefinovat zpátky na \catcode12, kdyby to bylo potřeba.
Jo .. a nezapomínat na závorky, ať ty definice a upravené \catcode nevylezou mimo makro. :)
{\catcode`\|=0\catcode`\/=13\catcode`\*=13\catcode`\\=13%
|global|def|path{|begingroup%
|def*{|endgroup}
|def~{|char"7E}|catcode`|/=13|def/{|discretionary{|char"2F}{|char"2F}{|char"2F}}%
|catcode`|*=0|catcode`|\=13|def\{|discretionary{|char"5C}{|char"5C}{|char"5C}}%
|tt|catcode`|*=13%
}}
A cesta se pak píše přibližně takto: Soubor je v adresáři \path /tohle/je\cesta/s\~vlnkami/konec*, anebo někde jinde.
Kvůli změně kategorií se to nedá nijak jednoduše (jestli vůbec) dostat do makra s parametrem, takže je potřeba zvlášť začínací a ukončovací makro. V tomhle případě je ukončovací makro hvězdička.
Vysvětlení té ukázky hledej v TeXbooku naruby, anebo řekni, co není jasné a zkusím vysvětlit.
|catcode`|*=0
je tam samozřejmě nanic a klidně může být vyhozeno. Mi tam prolezlo omylem ...
{\catcode`\|=0\catcode`\/=13\catcode`\*=13\catcode`\\=13 |global|def|path{ |begingroup |def*{|endgroup} |def~{|char"7E} |catcode`|/=13|def/{|discretionary{|char"2F}{|char"2F}{|char"2F}} |catcode`|\=13|def\{|discretionary{|char"5C}{|char"5C}{|char"5C}} |tt|catcode`|*=13 }}Zkoušel jsem přijít na význam a chápu to takhle:
% nastaví znak | ve významu uvozování příkazu, znaky / * \ budou příkazy \catcode`\|=0\catcode`\/=13\catcode`\*=13\catcode`\\=13 % co je global nevím, ale |def|path{ nadefinuje nový příkaz path |global|def|path{ % begingroup znamená, že asi začíná skupina, ale proč je to zrovna tady nevím |begingroup % definice příkazů: * bude ukončovat skupinu, ~ se vytiskne jako ~, |def*{|endgroup} |def~{|char"7E} % proč je tu znova řečeno, že / bude příkaz nevím, následuje definice příkazu / |catcode`|/=13|def/{|discretionary{|char"2F}{|char"2F}{|char"2F}} % proč je tu znova řečeno, že \ bude příkaz nevím, následuje definice příkazu \ |catcode`|\=13|def\{|discretionary{|char"5C}{|char"5C}{|char"5C}} % |tt nastaví strojové písmo a proč je tu řečeno, že * je příkaz ??? |tt|catcode`|*=13Pokoušel jsem se přidat příkazy, aby i podtržítko bylo obyčejný znak. Nejprve jsem zkusil:
{\catcode`\|=0\catcode`\/=13\catcode`\*=13\catcode`\\=13\catcode`\_=13 |global|def|path{ |begingroup |def*{|endgroup} |def~{|char"7E} |def_{|char"5F} |catcode`|/=13|def/{|discretionary{|char"2F}{|char"2F}{|char"2F}} |catcode`|\=13|def\{|discretionary{|char"5C}{|char"5C}{|char"5C}} |tt|catcode`|*=13 }}ale to mi latex nezkousl. Nevím proč :(
Zkoušel jsem, zkoušel jsem, zkoušel jsem a nakonec se mi podařilo přidat podtržítko, ale vůbec nevím proč to tak funguje. Na konec jsem prostě přidal místo
|tt|catcode`|*=13sekvenci:
|tt|catcode`|*=13|catcode`_=12Zkoušel jsem ještě vytvořit nový příkaz tak, abych mohl používat \path{...} místo \path ...*. Začal jsem postupně. Nejprve jsem chtěl aby \path{} sázelo lomítka normálně. Napsal jsem toto:
\newcommand{\path}[1] { { \catcode`\|=0 \catcode`\\=13 |def\{|char"5C} |texttt{#1} } }Vůbec to ale nejde zkompilovat :( Prostě si Latex dělá co chce :). Když odstraním řádek
|def\{|char"5C}tak se to zkompiluje, ale samozřejmě nefunguje. Kde jenom pořád dělám chyby?
Kvůli změně kategorií se to nedá nijak jednoduše (jestli vůbec) dostat do makra s parametrem, takže je potřeba zvlášť začínací a ukončovací makro. V tomhle případě je ukončovací makro hvězdička.
Co je to "změna kategorií"?
\def\neco{....}
) prikazy neprovadi, ale jen uklada. A uklada je jako dvojici ASCII hodnota a catcode. Ja chci mit zmenene catcode az po zavolani makra \path, ale protoze zaroven v tele makra s temi znaky, kterym menim catcode pracuji, tak uz pri uceni se museji ulozit se spravnou catcode (alespon tam, kde ma catcode vyznam). Takze docasne pro uceni zmenim catcode (to je to pred \def, ale ve slozenych zavorkach, takze po skonceni uceni se uz budou zas catcode jak maji byt). Ale pak ty catcode chci menit jeste pri kazdem pouziti makra. Pri pouziti makra se uz samozrejme jeho obsah provadi, takze se provedou prikazy na zmenu kategorie uvnitr makra. Takze v te tve uprave ti chybi proste jen |catcode`|_=13
uvnitr tela makra.
Proc to nejde jednoduse udelat jako makro \path{cesta}. No strucne receo proto, ze TeX nejdriv nacita parametry makra a pak teprv to makro provadi. Kdyz bude ale mezi parametry makra napriklad backslash, tak se TeX pokusi vse za \ nacist jako ridici sekvenci, ktera ale neexistuje a zahlasi chybu (a kdyby existovala, tak to stejne bude jine chovani nez chces -- ty bys potreboval, aby mel backslash jinou kategorii uz pri nacitani parametru makra, ale toho nedocilis prikazem \catcode uvnitr makra. Naopak ten system s makrem bez parametru funguje, protoze se nejdriv provede makro \path, nastavi se catcode a pak se teprv pokracuje ve cteni vstupu. IMO je makro s ukoncovacim znakem na pouziti v pohode. Pokud se ti nelibi hvezdicka, predefinuj si k tomu ucelu slozenou zavorku. (Ale bacha na to, ze ji zaroven asi budes chtit pouzivat jako normalni slozenou zavorku v definici makra.)
Proc je tam \begingroup
: Jednoduse proto, ze chci, aby borcus, co mi makro udela (jine \catcode a definice) byl po ukonceni cesty zas hezky uklizen. Takze to cele uzavru do skupiny. Zavorku pouzit nemuzu, protoze bych je pri definici makra nemel spravne sparovane, takze pouziju \begingroup a \endgroup, ktere delaji +/- totez jako slozenen zavorky.
\global
je u definice makra proto, ze cela definice zije ve slozenych zavorkach (kvuli catcode), ale ja chci, aby to nadefinovane makro existovalo i po ukonceni bloku.
Uf, bych to pomalu mohl vydat jako clanek na Abicku. :) Ale pokud budes mit chvili casu a zajimaji te vnitrnosti TeXu tak ta knizka od Olsaka, co jsem tu parkrat zminil je skutecne skvely popis.
Tiskni
Sdílej: