"Panie, jak oni robią tę całą matematykę?" Cz. 1


Korzystając z politycznej flauty, którą zakłócają jedynie pojedyncze bałwany, z pianą na grzbiecie i gębie obijające się o barierki przed sejmem, rozpocznę po dłuższej przerwie kolejny cykl artykułów. Na razie nie będzie to kontynuacja, tylko zupełnie nowy cykl. Muszę tak postąpić, czyli wycofać się na z góry upatrzone pozycje, gdyż poprzednie teksty wyraźnie spowodowały KO przed pierwszym gongiem.

Postaram się teraz dokładniej wyjaśnić wybrane pojęcia z poprzedniej serii po to, żeby nadchodząca walka była uczciwa. A jest do czego się przygotowywać. Trzecie Dźgnięcie miało za cel zburzyć typowo szkolne intuicje dotyczące porządków i ich roli w matematyce, ostatecznie odsłonić miałkość przyjętego kanonu aksjomatów, a jednocześnie pokazać, że matematykę można uprawiać w światach, gdzie nic nie jest normalne na chłopski rozum, czyli np. konstruowanych w oparciu o liczby p-adyczne. W szczególności mam bardzo zgrabny artykulik pokazujący, że trygonometrię można z powodzeniem uprawiać w ciałach skończonych Galois. Geniusz Galois polegał na tym, że jako nastolatek zaczął z nudów dzielić wielomiany przez inne wielomiany, biorąc na ich współczynniki zamiast liczb całkowitych, reszty z dzielenia przez wybraną liczbę n, po czym zauważył jakieś regularności i do tego zrozumiał jakie jest ich znaczenie. My będziemy szczęśliwi jak uda nam się policzyć na palcach kilka podstawowych wzorów.

Opracowany mam także temat dotyczący dziwnego zjawiska zasygnalizowanego wcześniej, że proste w geometrii mają jakąś taką dziwną ciągotę, żeby wraz z poprawianiem symetrii zwijać się w okręgi. Tęsknotę tę przejawiają zresztą nie tylko proste, lecz także dużo bardziej złożone obiekty. Jednocześnie wiąże się to ze zjawiskiem poluzowywania geometrii - najbardziej sztywna jest g. euklidesowa, trochę mniej g. afiniczna i wreszcie g. rzutowa. Niestety, w tym celu muszę omówić kilka fundamentalnych pojęć z zakresu topologii, jak ciągłe deformacje, aksjomaty oddzielania, spójność, ośrodkowość, zwartość i przynajmniej napomknąć o rozmaitościach i mapach. Tak jest, potrzeba poznać pojęcie uzwarcenia np. płaszczyzny, a nawet zbioru liczb naturalnych, aby zrozumieć wspomniane zjawisko.

Jednocześnie będzie to dobry przyczółek dla zagadnień z dziedziny fizyki i modeli kosmologicznych. Tam aż roi się nie tylko od kompaktyfikacji (uzwarceń), ale także od konforemności i innych tajemniczych zagadnień. Okaże się przy okazji jak trudny do ominięcia jest aksjomat wyboru, a także fakt, że niestandardowa analiza i matematyka, wynaleziona przez Abrahama Robinsona, to nie jest tylko zabawa aksjomatami poza wszelką konkurencją, lecz że wyłania się ona w najmniej pożądanych momentach w tzw. normalnej matematyce (liczby hiperrzeczywiste).

Są nawet plany na dalszą przyszłość. Uogólnienie trygonometrii, czyli funkcje dwuokresowe. Wrócę do szczegółów dotyczących tych strasznych wektorów, a właściwie tensorów, spinorów i reszty tego osobliwego zwierzyńca wyewoluowanego z teorii względności Einsteina. Czy ktoś słyszał jak funkcjonują równania Lagrange'a albo Hamiltona? Co je łączy? Co to są formy dwuliniowe, kwadratowe i jaką rolę grają? Konforemność posłuży do wytłumaczenia fenomenu równań Maxwella, które poddawane intensywnej obróbce poprzez algebry stanowiące uogólnienie ciał liczbowych (ℝ,ℂ), czyli przez kwaterniony i oktoniony, zamienią się w jedno jedyne równanie. Przykład z Maxwellem pokaże w jaki sposób fizycy starają się budować te swoje dziwne teorie unifikacji, teorie wszystkiego i na co szczególnie zwracają uwagę. Może przy okazji stanie się też jasne skąd się wzięło tych 11 wymiarów dla teorii strun, bowiem mówienie, że tak już jest, to dyskusja na poziomie Gazety Wyborczej. Będzie to wejście w zaanonsowany już świat straszliwych lecz zniewalająco pięknych potworów geometrii algebraicznej, jak np. rozmaitości Calabi Yau. Pożyjemy, zobaczymy, mi się nigdzie nie spieszy ;)

Jednak aby móc skutecznie i efektywnie przekazać tę wiedzę, muszę mieć tutaj do dyspozycji pewne skromne środki wyrazu. Oczywiście poradzę sobie i bez tego, lecz w pierwszym czytaniu artykuły na pewno okażą się mało czytelne, gdyż zamierzam zastosować tu pewną szeroko stosowaną już w reszcie Internetu technologię kodowania wzorów matematycznych. Opiszę czary i zaklęcia, które trzeba będzie rzucić, żeby miały one ręce i nogi, czyli ogólnie znaną i akceptowaną postać. Przyznam, że znużyło mnie trochę to stałe wymachiwanie rękami i szukanie obejść, kruczków oraz form zastępczych, od których wydłużyły mi się tylko palce.

Taka anegdota. Kiedyś uczęszczałem na zajęcia (tzw. seminarium) dotyczące fraktali i dynamiki dyskretnej u prof. Feliksa Przytyckiego. Jak to jest w zwyczaju każdy z uczestników dostał jakiś kawałek teorii do zreferowania. Mi przypadła w udziale praca młodego doktoranta. W dniu egzekucji stanąłem przed tablicą i nagle uświadomiłem sobie obecność bolesnego pypcia na języku, co powodowało rozliczne problemy z wymawianiem greckich liter typu ksi, psi, dzeta. Niestety praca była nimi nafaszerowana na czarno. Postanowiłem zmienić wszystkie bolesne oznaczenia na mniej brzęczące lub syczące. Początkowo szło mi dobrze, lecz po pewnym czasie zacząłem słyszeć odgłosy buntu w tylnych ławkach sali. Okazało się, że zbuntował się jeden z doktorantów i stwierdził, że on nic nie rozumie, ponieważ oznaczenia nie są standardowe. Po wykładzie dowiedziałem się od znajomego, że to był autor referowanej przeze mnie pracy. Tak więc odrzućmy te brednie o tym, że wystarczy tylko mówić jasno, logicznie i na temat, zaniedbując znaczki, gdyż niektórzy są po prostu od urodzenia wzrokowcami przyzwyczajonymi do jednego garnituru oznaczeń. Jak tylko zobaczą równania Maxwella w innych oznaczeniach, to po prostu nie uwierzą, że to jest to samo. Tu właśnie ujawnia się wyższość zinformatyzowanych matematyków nad klasycznymi, gdyż dla nich kompletnie nie ma znaczenia czy używa się w równaniach iksa i igreka, czy "Ptysia" z "Balbinką", albo może "bardzo_podejrzany_znak" pospołu z "taka_tam_literka". Przewaga jest taka, jak piechoty zmotoryzowanej nad zwykłą, lecz trzeba też dać szansę zrozumienia zagadnienia innym, mniej biegłym.
 

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics" - Karl J. Smith

 

Po tym długim wstępie będzie w zasadzie artykuł techniczny, a nie matematyczny, pokazujący kilka sztuczek z użyciem komputera oraz przeglądarki, które pozwolą nam zamienić ją w profesjonalny edytor wzorów matematycznych. Okazuje się, że nie potrzeba do tego żadnego Worda ani innych "szkolnych" otłuszczonych fetyszy. Wystarczy prosty edytor tekstów typu Notatnika. A zatem wystarczy odpalić Notepada i zaczynamy. Matematykę w przeglądarce "robi się" w dwóch głównych formatach: 1) język znaczników MathML, wywodzący się z rodziny języków XML, oraz 2) system TeX, w wersji najczęściej obecnie stosowanej w przeglądarkach, czyli LaTeX. Oba są zresztą ze sobą powiązane, o czym dalej.

Język MathML wygląda podobnie jak znany już chyba każdemu współczesnemu uczniowi HTML. Składa się ze znaczników otwierających i zamykających frazę, czyli są to napisy postaci: <mo>...</mo>. Najnowszą wersją jest trójka, której dokumentacje można znaleźć na stronie organizacji W3C: https://www.w3.org/TR/MathML3/

Można podejrzeć na stronach Wikipedii, jak to jest robione. Najprostsze wzory, jak powiedzmy funkcja "f:X→Y" wymagają tylko jednej gałęzi znaczników zanurzonych w "nagłówek" zbudowany kolejno ze znaczników math, semantics, mrow, mstyle. Potem jest sam wzór, w którym znacznik mi stosuje się do symboli zmiennych (i od identifier), czyli liter, zaś znacznik mo do symboli operacji (o jak operator). Jest jeszcze znacznik mn, który służy do wprowadzania liczb (n jak numeric literal). Oczywiście nic specjalnego się nie stanie, gdy pomieszamy trochę te znaczniki lub użyjemy tylko jednego. Co najwyżej formatowanie wynikowego tekstu nie będzie idealne. Elegancką strzałkę oraz część innych nietypowych symboli uzyskuje się znanym w HTML-u chwytem poprzez wpisanie jej kodu unicode, który można podać dziesiątkowo &#8594;, szesnatkowo &#x2192;, albo użyć specjalnej nazwy (w naszym przypadku &rarr;).

Nie będę tu głębiej wnikał w to zagadnienie, gdyż ręczne pisanie bardziej skomplikowanych niż jednak linia formuł MathML jest jak rzeźbienie w ciepłym błotku. Jeżeli ktoś chce efektywnie używać tego formatu dla własnych potrzeb, wcześniej czy później zostanie zmuszony do programowania na przykład w językach skryptowych. W przykładzie z Wikipedii jest jednak jeszcze jeden ważny dla nas, choć nieistotny dla wyświetlania znacznik języka MathML, a mianowicie annotation. W tym znaczniku mamy parametr encoding="application/x-tex", który mówi nam, że to, co ten znacznik obejmuje, należy rozumieć jako formułę TeX-a. Przykładowo dla naszej funkcji jest to napis "{\displaystyle f:X\to Y}". Właśnie tym się teraz zajmę.

Albowiem zupełnie inaczej wygląda sprawa z TeX-em. Został on wynaleziony około roku 1985 na uniwersytecie Stanforda przez znanego każdemu informatykowi profesora Knutha. Początkowo miał to być system wspomagający składanie plików tekstowych dla potrzeb wydruku. W zasadzie miała to być taka mała proteza, która pozwoliłaby autorowi na stworzenie lepszego wyglądu jego słynnej książki "Sztuka programowania" (posiadam tę kultową cegłę w 3 tomach). Lecz prace nad nim ciągnęły się długie 8 lat, a w efekcie powstał system, który do dziś nie ma sobie równych. W tamtych czasach TeX miał silnego konkurenta, opartego na podobnej zasadzie, a mianowicie język PostScript firmy Adobe. Gdy ten ostatni podbijał szturmem urządzenia drukarskie i świat wydruków, TeX pozostał domeną głównie komputerów osobistych i zaciszy pracowni uczelniach, skąd np. przeniknął na stałe do kolejnych edycji Linuxa. Dziś istnieje już wiele wariantów TeX-a, a jednym z nich jest stworzony przez Leslie'go Lamporta LaTeX.

Może na początek podam kilka klasycznych przykładów użycia LaTeX-a, a dopiero na sam koniec opiszę sposób, który pozwoli nie tylko na dołączenie go do własnej strony internetowej lub portalu, lecz na zainstalowanie go lokalnie na prywatnym komputerze w domu. W ten sposób będzie możliwe korzystanie z treści z dodatkiem LaTeX-a skopiowanej ze stron WWW, jak powiedzmy z Wikipedii nawet bez połączenia z nią, albo własne eksperymenty.

Pierwszym przykładem bardzo prostej formuły matematycznej w języku LaTeX będzie wielomian. Weźmy ogólną postać wielomianu 4-tego stopnia. Jest to napis kształtu "a1x^4+a2x^3+a3x^2+a4x+a5", który dla urozmaicenia zapisu poprzedzimy "w(x)=" i przyrównamy do zera "=0". Ktoś znający HTML wie, że nie jest to żaden problem, gdyż w tym języku istnieją już znaczniki, które pozwalają na takie sztuczki z indeksami i potęgami. Indeksy dolne uzyskuje się poprzez użycie znacznika "<sub>" zaś indeksy górne, czyli potęgi, przez użycie znacznika "<sup>". W LaTeX-ie natomiast stosowana jest konwencja, w której indeksy dolne poprzedza się znakiem podkreślenia "_", zaś potęgi znakiem "^". W sumie nasz "lateksowy" napis wyglądałby następująco "w(x)=a_1x^4+a_2x^3+a_3x^2+a_4x+a_5=0". Proste. Skąd jednak przeglądarka ma wiedzieć kiedy zaczyna się wzór i kiedy kończy? To zależy od konfiguracji LaTeX-a i domyślnie wzory obejmuje się znakami dolara $...$. Pojedyncze znaki dolara oznaczają wzór typu inline, czyli włączony w tekst akapitu, zaś podwójny dolar oznacza formułę typu block, czyli osobny akapit. Z całą pewnością powoduje to kolizje z normalnym użyciem symbolu dolara. Gdy przejdę do szczegółów konfiguracji LaTeX-a, pokażę jak sobie z tym problemem poradzić. Jest także domyślna alternatywa dla oznaczania formuł inline, a mianowicie 3-znakowa "\\(...\\)". Podany wzór będzie się wyświetlał poprawnie dlatego, że system ten pracuje w oparciu o gramatykę wyrażeń regularnych, czyli potrafi rozpoznawać znaczenie sporej części symboli z kontekstu. Gdybyśmy jednak chcieli konkretnie zaznaczyć, co będzie w indeksie dolnym, albo co będzie w górnym (potędze), to po znaku "_" albo "^" otwieramy nawias klamrowy {...} i w nim wpisujemy całość wzoru opisującego te sprawy. Nawias klamrowy będzie odtąd nam służył jako narzędzie do zanurzania jednych formuł LaTeX-a w innych oraz do przekazywania dodatkowych parametrów.

Drugi przykład będzie trudniejszy. Mianowicie chodzi o zapisanie w LaTeX-ie sumy indeksowanej od i=1 do nieskończoności z odwrotności potęg dwójki, czyli wyrażeń 1/2^i. Moglibyśmy to trochę obejść sumując ujemne potęgi dwójki, lecz przecież nie o to nam chodzi. Symbolem sumowania jest w matematyce duża sigma, która na dole ma napis "i=1", zaś na górze znak nieskończoności, czyli taką przekręconą ósemkę. Problemem jest też napisanie ułamka. Symbol sumy wprowadzamy tak "\sum". Można tez użyć "\Sigma", ale jest on zdecydowanie brzydszy. Dolne ograniczenie sumowania wprowadzamy tak samo jak indeks dolny, zaś górną granicę jako potęgę, czyli indeks górny. Będzie to coś w ten deseń "\sum_{i=1}^{\infty}". Pozostał tylko ułamek "1 \over 2^{i}", którego nie zapomnijmy ująć w nawiasy klamrowe, bo inaczej na górze ułamka zostanie symbol sumy z jedynką, a na dole 2 do i-tej. Ostatecznie mamy:

\sum_{i=1}^{\infty}{1 \over 2^{i}}"

i jest to ładne. Pamiętajmy, że system zrozumie to jako wzór matematyczny dopiero po otoczeniu go znakami dolara, lub innymi równoważnymi znacznikami zgodnie z aktualną konfiguracją MathJaxa. Na uwagę zasługuje jeszcze fakt, że gdy używamy symbolu sumy we wzorze typu inline (pojedyncze dolary), to granice sumowania pojawią się w postaci indeksów, czyli za sumą, a w przypadku formuły typu block (podwójne dolary) normalnie, czyli pod i ponad sigmą. Ma to znaczenie, gdyż formuły włączone w tekst akapitu muszą być niższe. A gdybyśmy zamiast sumy chcieli wprowadzić symbol całki oznaczonej? Nic prostszego, zastępujemy sum przez int, a granice całkowania oznaczamy tak samo, np.: "\int _{1}^{\infty }f(x)\,dx". Ten dziwny znaczek "\," (przecinek) wprowadza mały odstęp pomiędzy symbolami.

A co przedstawia następujący wzór?

"f(a) = \frac{1}{(2\pi i)^n} \int_{|z_1|=r_1} \int_{|z_2|=r_2}\cdots\int_{|z_n|=r_n} \frac{f(z_1, z_2, \ldots, z_n)}{(z_1-a_1)(z_2-a_2)\cdots(z_n-a_n)}\,dz_1\cdots dz_n".

Gdy będziemy już umieli zainstalować sobie system MathJax, to wystarczy tylko przygotować w Notatniku pusty dokument HTML z poprawnie skonfigurowanym skryptem i cierpliwość zostanie nagrodzona, a ciekawość zaspokojona. Nawet nie trzeba lokalnej kopii MathJaxa, gdyż od biedy można podłączyć się do systemu umieszczonego na dowolnym portalu w całej sieci, który z niego korzysta, jak np. Wikipedia, Stanford Encyclopedia of Philosophy albo jakiś MIMUW. Wystarczy podać odpowiednią ścieżkę URL.

W przykładzie dla MathML mieliśmy pewien problem z wprowadzeniem eleganckiego symbolu strzałki w prawo. Tu załatwia to funkcja "\rightarrow". Można się domyślić, że działa także funkcja "\leftarrow", a dla miłośników mechaniki kwantowej także "\uparrow" i "\downarrow". Rozdwojone duże litery oznaczające zwykle zbiory liczb naturalnych, wymiernych, rzeczywistych i innych wprowadzamy tak "\mathbb{N}" itp. Litery z alfabetu greckiego - ulubione przez matematyków - wprowadzamy za pomocą funkcji będących ich angielskimi nazwami, np. "\alpha", "\pi", "\rho" itd. Piękny pierwiastek uzyskujemy za pomocą funkcji "\sqrt{...}". Jeżeli chcemy zapobiec tłumaczeniu frazy LaTeX-a przez skrypt MathJax, to wystarczy ją ująć w znaczniki HTML <code>...</code> lub <pre>...</pre>. W tym sam symbol dolara, jakby co.

Teraz coś bardziej złożonego czyli tablice. Aby napisać typową macierz musimy użyć kontekstu. Konteksty wprowadza się w ten sposób, że używa się pewnych funkcji z parametrami np. "\begin{kontekst}...\end{kontekst}". W naszym przypadku będzie to słowo "matrix". Następnie kolejne wyrazy w wierszach naszej macierzy oddzielamy ampersandami, zaś wiersz kończymy podwójnym back slashem. Ponieważ parser jest spryciarzem i nie zrozumie naszych intencji, czyli nie potraktuje liczb dwucyfrowych jako indeksów dolnych (napis "a_1_1" wręcz spowoduje błąd "Double subscripts: use braces to clarify"), musimy wziąć je w nawiasy klamrowe:

\begin{matrix}
    a_{11} & a_{12} & a_{13} \\
    a_{21} & a_{22} & a_{23} \\
    a_{31} & a_{32} & a_{33} \\
\end{matrix}

Teraz trzeba jeszcze całą macierz udekorować jakimiś nawiasami. Mogą to być zwykłe okrągłe nawiasy "pmatrix", kwadratowe "bmatrix", klamrowe "Bmatrix", pojedyncze kreski pionowe "vmatrix", albo podwójne "Vmatrix". Używamy ich jako kontekstów zastępujących "matrix", wedle uznania. Może się jednak zdarzyć przypadek, że będziemy chcieli trochę urozmaicić wnętrze macierzy, np. stawiając pionową kreskę. Wtedy wygodniejsze jest użycie kontekstu tablicy "\begin{array}...\end{array}". Jednak tablice "array" wymagają jeszcze dodatkowego parametru określającego formatowanie wyrazów, a także nawiasy trzeba im dopisać "ręcznie". Nawiasy wprowadzamy jako "\left[" oraz "\right]" wokół naszej tablicy:

\left[
\begin{array}{cc|c}
  1&2&3\\
  4&5&6
\end{array}
\right]

Będzie to macierz w nawiasach kwadratowych o trzech kolumnach i dwóch wierszach, zaś formatowanie "{cc|c}" centruje wyrazy i stawia kreskę oddzielającą ostatnią kolumnę. Aby wstawić w macierzy poziomą kreskę, posłużyć się można funkcją "\hline" Skoro już jesteśmy przy tablicach, czy raczej tabelkach, to wypadałoby napisać jakąś. Stworzymy tabelkę, w której najpierw będą nazwy produktów, linia pionowa, potem cena, ilość, linia pionowa i nazwa dostawcy:

\begin{array}{l|rl|c}
\text{Artykuł} & \text{Cena} & \text{Ilość} & \text{Dostawca} \\
\hline
\text{Papier} & 17.50 & 1000 & Monika \\
\text{Ołówki} & 1.10 & 303 & Janek \\
\text{Gumki} & 2.25 & 12 & Adam
\end{array}

Formatowanie tekstu w kolumnach jest następujące: do lewej, do prawej, do lewej i wycentrowany, czyli "{l|rl|c}". Z powodu zbyt sprytnego analizatora składni dłuższe lub bardziej złożone teksty proponuję wprowadzać za pomocą funkcji "\text{...}".

Ostatnim przykładem będą słynne równania Maxwella. Tu też mamy użycie kontekstu, lecz znaki & znaczą teraz coś innego:

\begin{align}
  \nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
  \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
  \nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
  \nabla \cdot \vec{\mathbf{B}} & = 0
\end{align}

Tu okazuje się, że system oparty na wyrażeniach regularnych nie jest taki głupi i potrafi poprawnie odczytać funkcję "\frac1c" jako ułamek 1/c, czyli trochę inaczej niż typowy parser identyfikatorów i nazw zmiennych w językach programowania. Nabla to jest taka odwrócona delta, mathbf pogrubia literę, funkcja "\vec" robi z niej wektor (strzałka u góry), partial oznacza znak pochodnej cząstkowej, cdot stawia 3 kropki centralnie w wierszu, zaś znak ampersand (&) odnosi się do występującej po begin dyrektywy (pragma) align, czyli wyrównuje wiersze w pionie do podanej pozycji przed znakiem "=".

A na koniec zadanie: co to jest? Oczywiście chodzi mi o nie tylko o kształt, lecz także znaczenie tego czegoś w matematyce:

f(n) =
\begin{cases}
\frac{n}{2},  & \text{if $n$ is even} \\[2ex]
3n+1, & \text{if $n$ is odd}
\end{cases}

Jak widać system jest prosty i logiczny. Już w kilku przykładach nauczyliśmy się bardzo dużo. Reszta to sprawa podglądania wzorów u innych oraz grzebania w dokumentacji: https://www.sharelatex.com/learn

Jak to wszystko działa? Skrypt uruchamia się w przeglądarce, czyli po stronie klienta i w żaden sposób nie wpływa na treść dokumentów HTML leżących sobie spokojnie na serwerze portalu. Prawdopodobnie (bo nie jestem w stanie przetestować wszystkich skryptów świata) nie kłóci się z żadnym innym skryptem używanym typowo przez portale. A nawet jeśli, to od dokonywania stosownych zmian są deweloperzy MathJaxa, a nie takie małe żuczki jak my. Czyli jeśli tam do środka nie wsadzimy zręcznych paluszków, to w zasadzie wszystko powinno być OK. Wyjątkiem jest ów znak dolara, który może być używany w innych kontekstach (np. jako symbol waluty) i wtedy wymagana jest drobna interwencja w konfiguracji (opis pod koniec).

Gdy przeglądarka otwiera stronę z ciągami znaków, na które reaguje MathJax (czyli w praktyce gdy znajdzie dolara lub inny równoważny znacznik), następuje krótka przerwa, a następnie na ekranie w miejscu wszystkich formuł pojawiają się odpowiadające im wzory matematyczne. Podgląd źródła pozwala nam zobaczyć te wszystkie formuły z LaTeX-a, jednak już podgląd/zbadanie elementu (dość nowa i powszechnie mało znana funkcja przeglądarek) pokazuje kompletnie inną rzeczywistość. Gdy klikniemy na wzorze, to otworzy się menu kontekstowe z różnymi poleceniami, m.in. "Show Math As", które pozwala nam w prosty sposób zobaczyć tłumaczenie na różne systemy (MathML Code, TeX Commands). Każda formuła LaTeX-a zastąpiona została całym ciągiem znaczników HTML div oraz span z jakimś identyfikatorem id="MathJax-cośtam", klasą nawiązującą do znaczników MathML class="mrow" oraz parametrem style="...", gdzie znajduje się drobiazgowe formatowanie i pozycjonowanie. Dokładniejsza analiza trochę wykracza poza ten temat i wymaga znajomości arkusza stylów CSS.

No to teraz obiecana lokalizacja LaTeX-a. Najpierw pobieramy na dysk archiwum ZIP z plikami ze strony http://docs.mathjax.org/en/lat... . Najnowsza obecnie wersja, to MathJax-2.6 (34.3MB) i znajduje się w pliku v2.6-latest.zip. Następnie wypakowujemy z niego pliki MathJaxa do przygotowanego gdzieś na dysku katalogu. Ja wezmę bardzo prostą ścieżkę do niego i nazwę, żeby nie zaciemniać - powiedzmy "C:\Test\MathJax". Nasze testowe dokumenty HTML będziemy tworzyć w katalogu "C:\Test", a oto zgrabny szablon, który można stąd skopiować do Notatnika:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<title>Matematyka</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
    tex2jax: {inlineMath: [["$","$"],["\\(","\\)"]]}
  });
</script>
<script type="text/javascript" src="MathJax/MathJax.js"></script>
</head>
<body>
....
</body>
</html>

Uwaga: Należy upewnić się, że skrypt MathJax.js rzeczywiście znajduje się w tym katalogu, a nie w jakimś podkatalogu, gdyż wtedy trzeba to uwzględnić w ścieżce src="MathJax/MathJax.js" albo przekopiować wszystkie pliki MathJaxa o jeden katalog w górę. W miejscu czterech kropek możemy umieścić nasze formuły LaTeX-a otoczone znakami dolarów, a następnie zapisać jako plik o nazwie powiedzmy test01.htm. To ważne, żeby było tam rozszerzenie .htm lub .html, gdyż po tym zainstalowana przeglądarka rozpoznaje strony w HTML-u i po podwójnym kliknięciu automatycznie je otwiera. W ten sposób można skopiować formuły LateX-a z tego artykułu i wyświetlić je poprawnie, a nawet wydrukować. Idealne narzędzie dla sprytnych dzieci chcących zaszpanować rówieśnikom w szkole i nauczycielowi swoimi rozwiązaniami zadań domowych z matematyki lub fizyki. Na poziomie polskiej edukacji efekt murowany O.O

Proponowane rozwiązanie przetestowałem w przeglądarkach Firefox, Opera, Google Chrome oraz Microsoft Edge i działa bez problemu. Na koniec gorąca prośba do Administratora. Mogę? To by mi naprawdę pomogło, a strony Blogów przyjęłyby bardziej profesjonalny wygląd. No i wreszcie skończyłoby się te wielodniowe jałowe dyskutowanie w dziedzinie neoliberalnej ekonomii, czyli o wyższości świąt buddyjskich nad muzułmańskimi bez użycia jakichkolwiek wzorów lub choćby tabelek :]

YouTube: 


Forum jest miejscem wymiany opinii użytkowników, myśli, informacji, komentarzy, nawiązywania kontaktów i rodzenia się inicjatyw. Dlatego eliminowane będą wszelkie wpisy wielokrotne, zawierające wulgarne słowa i wyrażenia, groźby karalne, obrzucanie się obelgami, obrażanie forumowiczów, członków redakcji i innych osób. Bezwzględnie będziemy zwalczali trollowanie, wszczynanie awantur i prowokowanie. Jeśli czyjaś opinia nie została dopuszczona, to znaczy, że zaliczona została do jednej z wymienionych kategorii. Jednocześnie podkreślamy, iż rozumiemy, że nasze środowisko chce mieć miejsce odreagowywania wielu lat poniżania i ciągłej nagonki na nas przez obóz "miłości", ale nie upoważnia to do stosowania wulgarnego języka. Dopuszczalna jest natomiast nawet najostrzejsza krytyka, ale bez wycieczek osobistych.

Komentarze

Obrazek użytkownika Marek1taki

20-07-2018 [10:25] - Marek1taki | Link:

Szanowny Nauczycielu Matematyki,
"Elegancką strzałkę oraz część innych nietypowych symboli uzyskuje się znanym w HTML-u chwytem poprzez wpisanie jej kodu unicode, który można podać dziesiątkowo &#8594"
Poległem na próbie napisania strzałki w notatniku stosując instrukcję o  "Trzymając naciśnięty (lewy) Alt nacisnąć klawisz plus, wpisać numer szesnastkowy znaku, po czym zwolnić klawisz Alt. Metoda ta działa w systemie Windows XP i nowszych." z  https://pl.wikipedia.org/wiki/...
Pozdrawiam

Obrazek użytkownika Imć Waszeć

20-07-2018 [15:22] - Imć Waszeć | Link:

Strzałka nie pojawia się w Notatniku, tylko w przeglądarce. Notatnik służy jedynie do edycji źródła strony w HTML-u. Ten kod (unicode) &#8594; to jest właśnie odpowiednik strzałki. Wprowadzanie encji HTML, bo tak to się fachowo nazywa, zaczyna się znakiem ampersand &, potem następuje znak #, który oznacza wartość numeryczną, później możemy użyć znaku x, który mówi, że nie będzie to kod w systemie dziesiątkowym tylko szesnastkowym, następnie sam kod długości najczęściej od 1 do 4 znaków (płaszczyzna BMP w Unicode, czyli 16-bitowy uwspólniony zestaw kodów dla znaków z praktycznie wszystkich języków świata), zaś na końcu musi być średnik ; zamykający encję: http://www.taat.pl/typografia/...
Albo lepiej tu: http://www.w3big.com/pl/html/h...

Niektóre ze znaków mają nazwy, którymi posługujemy się tak &nazwa; , w naszym przypadku encja dla strzałki w prawo jest taka &rarr; , dla strzałki w lewo &larr; , dla znaku stopnia Celsjusza &deg; , tzw. twarda spacja &nbsp; itd. Ponieważ strony HTML są ściśle przypisane do pewnego rodzaju kodowania, zestawu znaków ASCII np. środkowoeuropejski itp. Znaki z większości innych języków nie będą wyświetlać się poprawnie w przeglądarce. Wystarczy wejść w menu przeglądarki "Widok/Kodowanie tekstu" i się trochę pobawić. Jest to spowodowane tym, że kody ASCII/ISO są 8-bitowe, a nie 16-bitowe, i dostosowane do konfiguracji klawiatury. Zresztą można w dokumentach HTML znaleźć taką oto linię:

<meta http-equiv="Content-Type" content="text/html; charset=X" />

gdzie X = UTF-8 lub ISO-8859-2 lub windows-1250.

Która mówi, jakiego kodowania 8-bitowego używamy w danej stronie. Przypomnę, że ASCII jest 7-bitowe i dodatkowe znaki wprowadza się w drugiej połowie strony, czyli z ustawionym na 1 ósmym bitem; jest to starożytne pojmowanie rozszerzenia. Współczesne kodowania są więc 8-bitowe: https://pl.wikipedia.org/wiki/...

Jak więc na stronach polskich pisać po szwedzku, turecku, francusku lub japońsku? Właśnie za pomocą encji &#x____; gdzie wstawia się odpowiedni kod szesnastkowy (preferuję ten styl, bowiem zawsze można go zapisać jako 4 cyfrowy i nie ma przekłamań). Litery z innych języków też często mają swoje encje nazwowe, jak powiedzmy umlauty, akcenty u góry zwrócone w lewo lub w prawo, kółka, daszki, kreski, falki itd. Wprowadza je się w ten sposób, że rozpoczynamy encję literą, którą zamierzamy zmodyfikować (dużą duże lub małą małe) &A , dalej piszemy rodzaj modyfikacji: grave, acute, macr, uml, cedil itp. i zamykamy encję średnikiem. Pisanie po japońsku wymaga już samych kodów.

Są także kody pełniące rolę kombinatorów, których używa się do tworzenia znaków nieistniejących w BMP. Na przykład można stworzyć literę, która ma jednocześnie kreseczkę na górze (macron) i umlaut. Proszę poszukać w sieci i potrenować.
Pozdrawiam.

Obrazek użytkownika Marek1taki

20-07-2018 [19:27] - Marek1taki | Link:

Ha:→ĀÄ
Perwersyjna krzyżówka macrona z umlautem nie przeszła - na pewno chodziło o cenzurę w sieci - ewidentne skojarzenia polityczne.
Mimo to gratuluję sukcesu pedagogicznego.

Obrazek użytkownika Imć Waszeć

20-07-2018 [20:30] - Imć Waszeć | Link:

Brawo. Ale to była tylko rozgrzewka. Teraz dopiero zacznie się jazda ;)

https://en.wikipedia.org/wiki/...
https://en.wikipedia.org/wiki/...
https://www.compart.com/en/uni...

PS: Zapomniałem dodać, że Notepad ma możliwość zapisu plików w formacie unicode, czyli w kodowaniu 16-bitowym. Niestety, takie strony HTML mają pewne problemy z poprawnym formatowaniem w Firefoxie (i być może w innych przeglądarkach). W takich 16-bitowych dokumentach znaki japońskie, koreańskie, czy w sanskrycie możemy wpisywać na żywca bez encji.

Obrazek użytkownika Marek1taki

20-07-2018 [21:10] - Marek1taki | Link:

Wskutek lenistwa dotarłem do generatora tabelek
https://www.tablesgenerator.com/
i jakiego takiego czegoś
https://www.sharelatex.com/lea...

Obrazek użytkownika Imć Waszeć

20-07-2018 [22:15] - Imć Waszeć | Link:

W sprawie tabelek i automatów, niech Pan zajrzy koniecznie tutaj: https://www.tablesgenerator.co...
To jest literatura, którą ja zwykle czytam :)))
A ten drugi link.... tak, właśnie pisałem, że TeX jest narzędziem do składu poligraficznego, czyli można w nim kodować obrazy książek do wydruku. Jest w tym podobny do PostScriptu. Natomiast SVG pozwala jeszcze więcej zrobić z grafiką. Tam w dokumentacji LaTeX-a jest przykład jak osadzać grafikę w formułach. Przy okazji, to jest plik SVG:

https://upload.wikimedia.org/w...
https://upload.wikimedia.org/w...

Proszę koniecznie zajrzeć do źródła strony dla tych obrazków, a zrozumie Pan dlaczego stale mówię o programowaniu przynajmniej w skryptach 8]

Obrazek użytkownika Marek1taki

21-07-2018 [07:28] - Marek1taki | Link:

Tak, otworzyłem poszczególne obrazki torów i źródła strony. Zrozumieć nie zrozumiałem, mogę się domyślać, że ta forma jest idealna do obróbki skrawaniem.
A kiedyś cieszono się TAGiem.

Obrazek użytkownika Imć Waszeć

21-07-2018 [11:27] - Imć Waszeć | Link:

No tak, ale tam jest taka ciekawostka jak dwa słowa powtarzane do znudzenia: sodipodi oraz inkscape. To są nazwy programów z których wyeksportowano te grafiki. Czyli jest to efekt słabo, a nawet bardzo słabo zoptymalizowanego eksportu do formatu SVG. Dlatego to jest takie wielkie. Ja mam przykłady, które dają dobre efekty już w kilku liniach, czyli mniejsze kilka lub kilkanaście tysięcy razy. Tak właśnie wygląda zawierzanie rozmaitym programikom, zamiast własnej pracy ;)
Już kiedyś pisałem, że pierwszą myślą programisty, który siada do cudzego kodu, jest wywalić to wszystko i napisać od nowa. To jest typowy punkt widzenia programisty. Natomiast analitycy już nie mają tak dobrze (vide skrypty), gdyż muszą to nie tylko przeczytać, lecz także zrozumieć jak działa każdy kawałek. Jeśli działa źle i generuje błędy, albo może służyć do exploitowania, to mają to wiedzieć i kropka. Prawda, że to mała różnica? :]

Sodipodi – program do tworzenia grafiki wektorowej. Jest wolnym oprogramowaniem rozpowszechnianym na licencji GNU GPL. Nazwa programu odpowiada słowu „miszmasz” w języku estońskim. Głównym autorem Sodipodi jest Lauris Kaplinski i kilka innych osób które przyczyniły się do projektu. Aktualnie projekt nie jest rozwijany. Następcą Sodipodi jest Inkscape, który oddzielił się pod koniec 2003. Sodipodi jako macierzystego formatu zapisu plików używa SVG, lecz posiada też funkcję eksportowania do PNG. Potrafi wyświetlać grafikę używając wygładzania, korzysta z kanału alfa dla uzyskania przezroczystości, obsługuje czcionki wektorowe.

Tu jest strona projektu Sodipodi na Sourceforge: https://sourceforge.net/projec...
A tu jest kod źródłowy w języku C (warto wziąć wersję sodipodi-0.34.tar.gz): https://sourceforge.net/projec...

Obsługa formatu SVG znajduje się w katalogu sodipodi-0.34.tar\sodipodi-0.34\sodipodi-0.34\src\svg w 5 plikach .c i 3 plikach nagłowkowych .h (w sumie ok. 55 kB).

Inkscape – darmowy program do tworzenia grafiki wektorowej, stworzony w ramach projektu GNU. Pozwala na tworzenie przede wszystkim symboli, znaków towarowych i logotypów produktów/firm/stowarzyszeń oraz tworzenie ikon czy postaci komiksowych. Jest odpowiednikiem popularnego, płatnego programu CorelDRAW. Umożliwia tworzenie kształtów i linii, strzałek, krzywych Béziera, wyginanie napisów wzdłuż krzywych, malowanie obiektów – także gradientem, nadawanie im przezroczystości, zmianę kształtów dowolnych obiektów za pomocą rozbudowanej edycji węzłów, sumowanie i odejmowanie ścieżek, grupowanie i rozgrupowywanie obiektów, kaligrafię. Zawiera również prosty edytor kodu XML. Macierzystym formatem zapisu plików w Inkscape jest SVG. Program jest odpowiedzią na niezadowolenie części programistów z kierunku i postępu prac nad innym podobnym programem – SodiPodi.
 

Obrazek użytkownika Kazimierz Jarząbek

20-07-2018 [11:11] - Kazimierz Jarząbek | Link:

@ Imć Waszeć
Kłaniam się Sąsiadowi, dziś losowo z lewej, na NB. Czy w ramach tego sąsiedztwa mogę Panu opowiedzieć długą matematyczną anegdotę w trzech odcinkach, która przydarzyła się mi w realu, w 1963 roku, kiedy studiowałem na Wydziale Inżynierii Budowlanej na na Politechnice Warszawskiej?
Jeśli chodzi o Pański tekst, to oceniam go jako ciekawy i dla mnie inspirujący. Przeczytam go jeszcze raz, bo mnie zainteresował. -- Pozdrawiam. :)

Obrazek użytkownika Imć Waszeć

20-07-2018 [14:08] - Imć Waszeć | Link:

Oczywiście. Chętnie poczytam zwłaszcza matematyczną anegdotę :) Ja również studiowałem na PW i skończyłem nawet praktyki inżynierskie na komputerze IBM 370 (w wersji RIAD), który stał na piętrze budynku wydziału elektroniki (przepisywałem programy numeryczne z Fortranu amerykańskiego na polski), gdy kierownictwo Partii podjęło decyzję o stopniowym relegowaniu mnie za "działalność wywrotową" i szkodzącą statutowi "uczelni". Chodziło o indywidualny tok studiów, na  który namówił mnie Wiesław Sasin i jego szef prof. Żekanowski, wtedy traktowani jako "dysydenci". Miałem wtedy zostać kosmologiem i nawet uczniem samego ks. prof. Michała Hellera ;). Szczególnie uwziął się na mnie dziekan Zajączek... tfu wróć.... Muszyński, a także pani Kasia Litewska. Takie nazwiska zawsze pachniały mi wschodem, Anatewka i te rzeczy. Dzieciaczki takich dziekanów do dziś piastują wysokie stanowiska i funkcje na PW, gdyby Pan pytał, więc pytanie, czy chciało mi się kiedykolwiek wrócić uważam za bezzasadne, zwłaszcza po wprowadzeniu pomysłów Gowina betonujących te "nowe" układy. W efekcie wtedy zwiałem im na UW na matematykę teoretyczną i nie żałuję. Niebawem będzie jeszcze druga część tego artykułu, dotycząca rysowania schematów typowych w algebrze, topologii i teorii kategorii (nawet w fizyce się to przydaje) za pomocą grafiki wektorowej SVG. Nie wszystko da się elegancko zapisać za pomocą LaTeX-a, więc SVG jest bardzo pomocne w pisaniu prac. Też można znaleźć wszystko na źródłach Wikipedii. Ja osobiście miałem problem z tym, jak narysować torus z paroma dziurami, triangulację płaszczyzny rzutowej, czy butelkę Kleina do tematu o kompaktyfikacjach płaszczyzny. Gdzie chęć tam sposób się znajdzie ;)
Pozdrawiam.

Obrazek użytkownika Kazimierz Jarząbek

23-07-2018 [15:55] - Kazimierz Jarząbek | Link:

@ Imć Waszeć
Mieliśmy różne kierunki i studiów, i geograficzne. Mnie pognało najpierw do Wołgogradu, a później za Ural, do Bracka. Opowiem więc najpierw niezapowiedzianą anegdotę z Wołgogradu, też związaną z matematyką. Na ostatnim roku studiów mieliśmy m.in. przedmiot; "mechanikę gruntów i fundamentowanie". Wykładowcami byli Tokin, do którego chodziłem na wykłady i Cyljurik, którego nie znałem nawet z widzenia i nie wiedziałem, że obaj ostro rywalizują ze sobą, tak jak Dyląg z Krystosiakiem w moich czasach na PW. Miałem wszystkie dokumenty na wycieczkę do Polski. Poszedłem więc do Dziekana załatwić kartę egzaminacyjną do Tokina w terminie przed sesją. Dziekan był przychylny, ale zmartwiony powiedział, że Tokin jest w podróży służbowej i wróci dopiero na sesję egzaminacyjną. Poprosiłem o skierowanie na egzamin do Cyljurika. Dziekan powiedział: :"Nie radzę." Byłem stanowczy, bilet do Moskwy już miałem wykupiony. Dostałem skierowanie i pobiegłem na egzamin, do którego byłem nieźle przygotowany. W trzeciej godzinie tego egzaminu Cyljurik z głowy powoli podyktował mi kilkanaście parametrów i zadanie do rozwiązania i podania konkretnego wyniku obliczeń. -- Gdy on mówił, ja obliczałem w głowie (jak komputer) i gdy on skończył mówić -- podałem mu wynik. Egzaminator zaczął się śmiać, powiedział, że gadam głupstwa, na co ja się zaperzyłem, w ciągu ok. 30 sekund policzyłem w pamięci jeszcze raz i zapisałem tę samą cyfrę na kartce. Cyljurik zaśmiewał się z 10 minut. Kiedy się uspokoił, wyjaśnił, że do rozwiązania tego zadania należy zastosować wzór znany w literaturze jako "wzór Cyljurika" (jego praca habilitacyjna) którego głupi Tokin nie wykłada i dlatego jego studenci się kompromitują jak ja. Na dużej karce napisał bardzo skomplikowaną funkcję matematyczną, określił przedział itd. powstawiał dane z zadania, pieszo obliczał ok. 15 min i, wyszedł mu ten sam wynik co mnie. Tak to bywa z wyższa matematyką :)

Obrazek użytkownika Imć Waszeć

23-07-2018 [17:02] - Imć Waszeć | Link:

Tak, przeczytałem, tylko zajęty jestem drugą częścią artykułu. Bo jak rozumiem, to pogrubienie jest formą pytania. Jeśli chodzi o matematykę, to przestałem się zbytnio interesować "podstawianiem do wzoru", gdy zmieniłem szkołę na uniwerek. Od tego momentu bardziej mnie interesuje dogłębne zrozumienie zagadnienia, które pozwala mi samemu formułować potrzebne wzory (albo odtwarzać w pamięci). Podawałem gdzie indziej przykład równań różniczkowych zwyczajnych. Na politechnikach wymagają wykucia wzorków na rozwiązywanie rozmaitych klas równań. Ja zaś wiem z czego te wzory wynikają - z symetrii dla generatorów i zależności w algebrach Liego. Inny przykład to politechniczne zadanka "twardzioszki" na homografie, transformowanie kół w półpłaszczyzny, w pasy albo w wielokąty. W jednym z moich artykułów pokazałem, że nie ma w tym nic mistycznego i jak podejdzie się od strony wzorów Christoffela-Schwarza, to raptem zaczyna się rozumieć samo sedno zagadnienia konforemności. Zresztą konforemność to bardzo szczególny przypadek quasikonforemności, która zachodzi nawet dla przekształceń przestrzeni metrycznych. W zaawansowanej fizyce roi się od tego. Po prostu na każde zagadnienie należy patrzeć z możliwie najwyżej położonego i dostępnego nam punktu, a wtedy wiele rzeczy staje się jasne. Jeśli nadal nie widać, to trzeba się wspinać dalej :)
Pozdrawiam.

Obrazek użytkownika Kazimierz Jarząbek

23-07-2018 [22:27] - Kazimierz Jarząbek | Link:

@ Imć Waszeć
Dzięki za ciekawą odpowiedź, pozdrawiam.