Portál AbcLinuxu, 5. května 2025 15:15
Možná se vám už stalo, že jste potřebovali vložit matematický vzorec na webovou stránku. Co si v takové situaci počít?
Když se porozhlédneme po webu, narazíme na dvě nejčastější řešení. Z prvního na nás dýchne éra psacích strojů: vzorec tvořený různými formátovacími obezličkami, občas hraničícími s ascii artem. Druhá varianta obvykle aspoň vypadá podstatně lépe, jde o obrázek vytvořený v nějaké více či méně specializované aplikaci, a to počínaje tužkou a papírem, konče typografickým systémem TeX. Tu a tam se ještě objeví technologie pro tyto účely přímo určená, leč málo rozšířená, totiž MathML. Anebo kombinace předchozích řešení — tak je to třeba na Wikipedii. Tam se vzorce zobrazují jako obrázky, ale v popisku mají svůj zápis v prostém textu pomocí nějakého značkovacího jazyka. Při bližším průzkumu zjistíme, že tyto obrázky jsou generovány CMS právě ze zdrojového kódu v nějakém značkovacím jazyce, jak je to ostatně pro wiki typické.
Mimochodem, podobný problém vyvstává i v jiných situacích — může jít o osobní poznámky nebo namátkou mě napadá tvorba elektronické knihy, protože málokterá čtečka si korektně poradí s PDF, zatímco od dokumentu pro web je už jen krok ke knize ve formátu ePub.
V následujícím textu si představíme možnosti, které nám poskytuje pandoc, implementace nejen minimalistického značkovacího jazyka Markdown. Většina z nich jsou skripty (v JavaScriptu), tudíž jsou použitelné jen tak v HTML, jestliže o konverzi pomocí pandoc nestojíte. Z rozhodnutí použít pandoc plyne, že vzorce samotné budeme psát v LaTeXu. Pokud občas narazíte na to, že neznáte příkaz pro některý matematický symbol, může vám pomoci Detexify nebo editor od CodeDogs.
Nejprve krátce k obyčejné konverzi do MathML. Dokument přeložíme s parametrem --mathml
(tedy např. pandoc -sS -o spam.html --mathml spam.txt
), tzn. použije se knihovna texmath (můžete vyzkoušet online). Nevýhodou MathML obecně je, že “sazba” v prohlížečích, které ho podporují, vypadá odpudivě — a především webové prohlížeče postavené kolem vykreslovacího jádra WebKit ho nepodporují vůbec. Překlad do MathML mimochodem ve výchozím stavu používá také wiki gitit založená na nástroji pandoc.
Pro úplnost zmíním LaTeXMathML (parametr --latexmathml
), jež také překládá vzorce z LaTeXu do MathML, ale až na straně klienta, a to pomocí JavaScriptu. Upřímně řečeno, nevidím důvod používat tuto možnost, a to mj. z toho důvodu, že uvedený skript není udržován a neřeší např. problém WebKitu.
Další variantou je nahrazení vzorců obrázky. Pro tyto účely slouží kupř.
--mimetex _URL_
, kde URL vede k CGI skriptu, tj. např. na Ubuntu /usr/lib/cgi-bin/mimetex.cgi
, musím ale podotknout, že mimeTeX mi nikdy nefungoval zcela korektně;--gladtex
), který nahradí to, co je obaleno značkami <eq>
, obrázkem vygenerovaným LaTeXem, nicméně program si musíme sami zkompilovat;--webtex _URL_
, výchozí varianta je Google Chart API), jenž při každém načtení stránky provede konverzi, tedy doporučuji obrázky si ukládat lokálně, resp. spouštět pandoc s parametrem --self-contained
, který vloží obrázky přímo do dokumentu.Konečně ale existuje také řešení, které nepoužívá bitmapové obrázky, hezky vypadá a funguje napříč moderními webovými prohlížeči (resp. vykreslovacími jádry). Jmenuje se MathJax. Co se nasazení týče, standardně se v HTML pouze uvede odkaz na skript v MathJax CDN (když používáme pandoc, stačí parametr --mathjax
a odpovídající kód se vloží do hlavičky dokumentu), ale pro lokální použití si můžeme MathJax stáhnout z webu projektu. Díky Apache License 2.0 není problém s redistribucí. Zatímco předchozí řešení vesměs podporovala jen podmnožinu příkazů použitelných ve vzorcích v LaTeXu, MathJax dokonce umožňuje definovat si vlastní makra.
Další varianta je jsMath, používá ji např. web planetmath.org nebo volitelně zmíněná wiki gitit
. Návod k použití je prostý, dokument přeložte s parametrem --jsmath
a do vygenerovaného HTML vložte odkaz na svou instalaci jsMath (buď balíček repozitářů z vaší distribuce, nebo archiv stáhnutý z SourceForge), tj. <script src="cesta_k_jsMath/easy/load.js"></script>
. Nutno podotknout, že jsMath je docela bumbrlíček, obvykle si nese vlastní (kvalitnější) písma, tudíž ho doporučuji pouze pro weby hojně využívající matematické vzorce.
Jak vypadají výsledky konverze pomocí různý pandoc, si ukážeme na vzorci, který slouží k výpočtu času potřebného k uvaření vajíčka:
$t = 0,465 \cdot M^{2/3} \cdot \ln ( 0,76 \cdot \frac { T_{Wasser} – T_{Start} } {T_{Wasser} – T_{Innen}} )$
Na následujících obrázcích je vidět výstup s použitím různých konverzí. Všímejte si např. velikosti mezer kolem operátorů a rozměrů závorek, v nichž je uzavřený zlomek. Za zmínku také stojí to, jak se zobrazí MathML v prohlížeči, který ho nepodporuje (druhý snímek).
už mlčím,
Já bych to taky popletl, proto jsem se schválně podíval.
Jak si mohu ověřit, že ten co to tam napsal, z čeho čerpal?
To se jich zeptejte sám. Tipuji, že ručně zařazovali slova z korpusů. Moje zkušenosti s Ajkou jsou zatím jen dobré.
Pro mě jsou důkaz historické prameny.
V historických pramenech najdete historická data. Nikoliv současnou češtinu. Navíc pro historická data budete muset zajít do archivu a dělat si výpisky ručně (digitalizovaná Naše řeč rozhodně nepokrývá vše).
Můžete prohledat korpusy. Veřejný SYN2010 pro „se spoustou“ dokonce vrací jeden případ, kdy se nějaký pisálek do Lidé a země, č. 5/2009, pokusil použít „spousty“ jako sedmý pád.
Jinak mám pocit, že i tradiční školní vydání Pravidel českého pravopisu z minulého století má značnou slovníkovou část, kde je u každého slova uveden vzor a případné odchylky. Takže být vámi, hledal bych tam.
Dále popisky časů nejsou veličiny, takže mají být zapsané normálním písmem (a ne skloněným), tedy pomocí \text nebo \mathrm.
Pointa je, že to leckde (např. LaTeXMathML) nefunguje (ano, to jsem mohl demonstrovat). Totéž platí pro některé další záležitosti, např. Google Chart API podle mé zkušenosti obecně umisťuje mezery takřka náhodně.
Poznámka pod čarou: ta "správná" podoba toho vzorce je přesně důvod, proč nesnáším LaTeX. Kupa hnoje. Dobrá zpráva je, že skoro polovinu z toho jde vyházet a furt to bude vypadat celkem k světu. *následně se sbíhají typografičtí náckové*
To je sice smutné, že to někde nefunguje, ale já pak musím studenty pořád opravovat, protože si to přečetli ve špatném článku.
Tohle není článek o typografii.
LaTeX možná nesnášíte, mě je úplně jedno v čem sázíte vzorce, ale výsledek je vysázený hnusně, a to mi vadí.
A co já s tím?
Možná, kdybyste nevyházel tu dle vás kupu hnoje z původně správného vzorce na wikipedii, tak by to vypadalo k světu?
Kupa hnoje je to především syntakticky. Nikde nepochybuji o kvalitách sazby v TeXu. Nicméně není úměrná vynaložené energii.
Proč o tom vlastně píšete, když LaTeXový zápis nemáte rád?
Co to je za absurdní dotaz? (Ostatně by se nabízela analogie s jistým Churchillovi připisovaným citátem o demokracii.)
Tvrdíte, že význam a správnost předání významu je otázkou priorit a kompromisu?Možná, když trochu otevřeš oči, to budeš tvrdit taky ;). Na střední jsem se rozčiloval nad nejednoznačností matematických zápisů. Pak mi došlo, že všechny ty kecy o jednoznačnosti a stoprocentní exaktnosti jsou bullshit dobře promíchaný s pokrytectvím. Ve skutečnosti jsou správné předání významu a formální správnost dle nějakých pravidel dvě různé věci. Pravidla by měla být postavena, upravována a uplatňována s ohledem na jejich účel.
Joj, upřímně doufám, že tohle nikdy neuslyším na zkoušce. Student by letěl jak tryskáč :)Jojo, představa moci, to umí některé pohladit po srdíčku ;).
tohle je učební materiál, pro poměrně široké masyJsi si jistý? Prvním i druhým?
Tohle není článek o typografii.Článek je o tom, jak sázet na webu matematické vzorce. Jestliže jsou vzorce v příkladech vysázené špatně, je to mizerný článek. Zmršit vzorec typograficky, aby se mi to v mém oblíbeném nástroji snadněji psalo, je projev lenosti a ignorance. Pokud navíc autor po upozornění chyby neopraví a tvrdí, že je to tak ve skutečnosti lepší, je to arogance a hloupost. Proboha, typografická pravidla nejsou samoúčelná! Není to jen otázka vkusu, speciálně v matematických vzorcích má typografie klíčový význam. Například podle skloněného písma se rozeznává proměnná od konstanty nebo standardní funkce, takže když to sázíte blbě, tak se na to nejen špatně kouká, ale mění se smysl. Jste to vy, kdo začal s osobními útoky poznámkou "typografičtí náckové", místo abyste poděkoval za věcné a konstruktivní upozornění na chyby. Takže si pak nestěžujte.
Článek je o tom, jak sázet na webu matematické vzorce.
Myslím si, že nikoliv. Je každý, kdo používá kancelářský balík, sazeč? Je kodér v HTML sazeč? Já to slovo tak nechápu.
Proboha, typografická pravidla nejsou samoúčelná!
S tím do jisté míry souhlasím. Do jisté míry. Občas zabrousím do materiálů z nějakého TuGu a nabydu dojmu, že samoúčelná jsou, ale co... každý máme nějaký fetiš.
Takže si pak nestěžujte.
Já si stěžuji? Mám pocit, že jsem asi tak poslední v této diskuzi, kdo si stěžuje (vyjma nadávání na syntaxi LaTeXu).
Je každý, kdo používá kancelářský balík, sazeč? Je kodér v HTML sazeč?Sazba je proces umísťování grafémů na stránku. Takže podle mě ano, i když si to třeba neuvědomuje. Výsledkem jeho snahy je nějaká grafická reprezentace textu a vzorců.
každý máme nějaký fetiš.Takže rozlišování proměnných a textových popisků je fetiš? Velikost závorek odpovídající jejich obsahu je fetiš? Já v zásadě chápu, že spousta lidí si může takovou míru ignorance dovolit, ale dost mi vadí, když to někdo ostatní záměrně učí.
Sazba je proces umísťování grafémů na stránku. Takže podle mě ano, i když si to třeba neuvědomuje. Výsledkem jeho snahy je nějaká grafická reprezentace textu a vzorců.V tomhle případě to může být vedlejší efekt (cíleným efektem může být předání informace).
Takže rozlišování proměnných a textových popisků je fetiš? Velikost závorek odpovídající jejich obsahu je fetiš?To záleží na okolnostech, že.
Já v zásadě chápu, že spousta lidí si může takovou míru ignorance dovolit, ale dost mi vadí, když to někdo ostatní záměrně učí.Taky mám kus tohoto komplexu. Ale asi už stárnu, protože si pomalu začínám zvykat, že se prakticky všechno učí z valné většiny špatně.
Taky mám kus tohoto komplexu. Ale asi už stárnu, protože si pomalu začínám zvykat, že se prakticky všechno učí z valné většiny špatně.A jelikož někdo učí špatně, tak jste rezignoval a taky předáváte informace špatně? No fuj. A pro Vás domácí úkol. Najděte ve svých komentářích chyby v argumentaci dle Vámi odkazovaného obrázku ( https://yourlogicalfallacyis.com/assets/FallaciesPosterHigherRes.jpg )
Taky mám kus tohoto komplexu. Ale asi už stárnu, protože si pomalu začínám zvykat, že se prakticky všechno učí z valné většiny špatně.Já jsem učitel a pokud něco učím špatně, tak to není záměr. Upozornění na chybu vždycky vítám.
Sazba je proces umísťování grafémů na stránku. Takže podle mě ano, i když si to třeba neuvědomuje. Výsledkem jeho snahy je nějaká grafická reprezentace textu a vzorců.TIL webový prohlížeč je sázecí nástroj. OK.
Takže rozlišování proměnných a textových popisků je fetiš? Velikost závorek odpovídající jejich obsahu je fetiš? Já v zásadě chápu, že spousta lidí si může takovou míru ignorance dovolit, ale dost mi vadí, když to někdo ostatní záměrně učí.
Vytrhnutí z kontextu na jedničku. Ale ano, lpění na tom, že ten dolní index má být takovým písmem a ne makovým (bez ohledu na kontext), kladu zhruba na roveň tomu, když se audiofilové dohadují o kabeláži (nebo koneckonců některé diskuze na GH/DT tak také vypadají).
Vytrhnutí z kontextu na jedničku.Nic jsem z kontextu nevytrhl, přesně o těchto chybách je od začátku řeč.
Ale ano, lpění na tom, že ten dolní index má být takovým písmem a ne makovým (bez ohledu na kontext), kladu zhruba na roveň tomu, když se audiofilové dohadují o kabeláži (nebo koneckonců některé diskuze na GH/DT tak také vypadají).Zkusím to ještě naposled. Elektron se značí e, elementární náboj nebo Eulerovo číslo je e. Neutron je n, zatímco n je látkové množství nebo třeba hlavní kvantové číslo. Chápeš že není jedno, jak se to napíše?
Nic jsem z kontextu nevytrhl, přesně o těchto chybách je od začátku řeč.
Samozřejmě vytrhl, pro připomenutí: Občas zabrousím do materiálů z nějakého TuGu a nabydu dojmu...
Chápeš že není jedno, jak se to napíše?
Dal sis práci, aby jsi zkopíroval a následně zmršil správně zapsaný vzorec.
Chybný předpoklad. Vzorec jsem opsal, aniž bych viděl zdrojový kód.
Pak trávíš spoustu času, aby jsi obhájil, proč sis dal práci s tím, že jsi něco zmršil, místo abys to vrátil do původního tvaru.
Já tuto konverzaci takto nechápu. Nicméně uvedené tvrzení bych mohl obrátit: Proč si někdo dává tu práci a dává světu najevo, že jediný správný způsob (TM) vizuální podoby vzorců je ten jeho?
Bych podotknul, to co považuji za správný způsob zápisu není jen můj, takto mě to naučili na vysoké škole, a takto se to používá i na jiných vysokých školách, co jsem měl tu čest číst skripta a knihy.
Mám tu několik současných českých knih o klasické logice — každá používá výrazně odlišné konvence (namátkou formule jsou v jedné latinkou a kaligrafickým písmem, v druhé kurzivou a symboly řecké abecedy). Nehledě k tomu, že v amerických učebnicích diskrétní matematiky a logiky, které jsem nedávno potkal, bylo značení zcela jiné. Tato zkušenost mě ze spoléhání na konvence zcela vyléčila.
Na wikipedii je pro každý obrázek s rovnicí dostupný alternativní text, který obsahuje LaTeXovský zápis rovnice, podle které byla vytvořena. Stačí ho zkopírovat. Není třeba se namáhat opisováním z bitmapového obrázku.
To vím, ale ve Firefoxu se nezobrazuje, tudíž je nutné se podívat do seznamu objektů na stránce nebo si otevřít zdroják.
Hm, ale my neřešíme klasickou logiku, že? My řešíme zápis fyzikálního vzorečku.
Tak jsem jako příklad mohl použít třeba to, jak matalýzníci nemají jasno v tom, jak se má zapisovat i tak základní věc jako uzavřený interval, nebo taková ukázka z lingebry: skalární součin. To už s fyzikou souvisí vcelku úzce.
Jenže ona ta otázka má ještě jednu vrstvu: jednak způsob vykreslení ve skutečnosti závisí na použitém stylu, jednak i v latexovském zápisu se míchá forma a sémantika — na zamyšlení: používat \Rightarrow
, nebo \implies
? \rightarrow
, nebo \to
? Co třeba taková dvojtečka? Ta by se IIRC neměla v LaTeXu používat u definice zobrazení (kvůli mezerám), leč korektním zápisem se kód komplikuje (což je případ ekvivalentní použití čárky v tomto příkladu).
A navíc, nový článek nespraví stávající problém - tenhle článek s chybným příkladem :).Pokud by tě to fakt tolik trápilo tak věz, že článků s chybami a špatnými příklady lze po internetu najít tolik, že by ti to roztrhalo srdce. Ale v podstatě tě chápu. Taky jsem v hloubi duše idealista ;).
Tato zkušenost mě ze spoléhání na konvence zcela vyléčila.A s touto výmluvou kdosi v Microsoftu naprogramoval Internet Explorer.
Standard nevyhovuje, k něčemu nás nutí, tak co s tím?
Upřímně řečeno, docela by mě zajímal ten standard, který specifikuje, jaké písmo se má používat ve vzorcích.
Když už používám překladače zápisů tak proč nepoužít takový který má zápis čitelný
To je dobrá připomínka. V LaTeXu mám nachystané útržky kódu a doplňování, takže to není zase tak strašné, byť je vzniklý kód z podstaty TeXu prakticky write-only (z hledání drobných chyb v delším textu mám po jisté zkušenosti panickou (pun intended) hrůzu). AsciiMath bych si stejně musel rozšířit, jak tak koukám na seznam podporovaných symbolů.
Přitom by LaTeX nemusel být tak hrozný, stačí se podívat na Lout.
(La)TeX programovací jazyk, takže dělat z něho write-only pomocí preprocesoru, doplňování apod. není zrovna moc dobrý přístup
Byl bych rád, kdyby existovala alternativa lepší než MathML (které, když jsme u toho, občas míchá typografii a sémantiku, místo aby řešilo pořádně jen jedno).
Zrovna tu zmiňované věci se dají v pohodě řešit makry a zápis zůstane pěkný.
Z uvedených makra jednoduše podporuje AFAIK pouze MathJax.
A není to žádné typo-nazi, ale informační obsah. Čárka s mezerou za ní je prostě oddělovač vět, seznamu apod., nikoliv desetinná čárka. (...)
Obávám se, že tady dochází k neporozumění. Používám Markdown s inline LaTeXem proto, aby se mi dobře psalo, potažmo editovalo, tudíž i četlo v prostém textu — a abych měl okamžitě čitelný výstup. Když dospěju k finální verzi textu, použiju hezčí šablonu a provedu určitá nahrazení ve vzorcích, aby to lépe vypadalo, tím ale kód (a) podstatně nabobtná nebo (b) přijdu o snadnou přenositelnost.
zda si uvědomuje, že sází text.Ve skutečnosti ten text z valné většiny sází stejně až prohlížeč, takže o nějaké super duper sazbě nemůže být řeč, pokud teda nemáš namysli konkrétně vysázení vzorečku do obrázku, které je alespoň jakž takž stabilní.
ROFLtristni je, ze je tu nejake lamce zatezko napsat o par znaku nijak neubirajicich na citelnosti vic, aniz by si uvedomovala, ze ten latech, jak uz tu nekdo psal, nebyl vytvorenej s umyslem byti tupou syntaxi pro webikoveslunickove lidi[.]
chlape - co je to za lemplactvi delat to zamerne blbe? fakt ti ta uspora par keystrokeu zvysi produktivitu? a jeste se tu navazis do nekoho, kdo ti dost slusnym zpusobem ukazal spravnej smer..[.]
fakt ti ta uspora par keystrokeu zvysi produktivitu?To těžko. Používá übercool rozložení klávesnice a nejsuper ergonomickou klávesnici, kterou našel. Jenom má prostě Pravdu a přece nenechá čtenářskej póvl, aby mu do toho článku kecal. Dobrej základ pro to psát pro skutečné noviny.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.