hu.wikipedia.org, en.wikibooks.org
(Itt most nem a fétis szexről lesz szó. Sokkal inkább matematikai képleteket is szépen megjelenítő kiadványszerkesztőről. Már a kiejtése sem ugyanaz!)
A Mandelbrot-halmaz korlátossági feltételének bizonyítsa során kissé el kellett mélyednem a LaTeX rejtelmeiben. A közben szerzett tapasztalataimat osztom meg itt. A bizonyítás a hivatkozott pdf doksiban van leírva. Ez a cikk inkább a LaTeX finomságokkal foglalkozik.
Debian alatt a LaTeX alapban fent van. A magyar elválasztás viszont nagyon nem okés. Keresgéltem, hogyan tudok ezen segíteni. Találtam egy magyar nyelvű leírást, ami 2011.jan.19-én frissült ugyan, de nekem réginek tűnik. Öt évvel korábban is így nézett ki. Ezért inkább megnéztem, hogy van-e valami idevágó Linux csomag:
apt-cache search babel
apt-get install texlive-lang-hungarian
No, ettől megjavult az elválasztás!
Emlékszem, hogy sokat kellett kavarni, hogy egy jó induló csomagot definiálgassak össze. A pdf kéthasábos, ISO-8859-2 kódkészlettel készült. Sok matekkel kapcsolatos csomagot tettem bele, plusz a pdf kezelés. A legújabb verzióban végül áttértem az utf-8 kódolásra (iconv -f L2 -t UTF-8 file_in > file_out paraccsal), amihez a fejléc elején egyetlen sort kellett átírnom.
A fejléc elején definiálom a papír és a betű méretét, a nyelvet, a két oszloposságot és a szöveg kódolását.
%\tracingmacros=9
%\NeedsTexFormat{LaTeX2e}
%fejlesztés alatt az első sor kell használni
%\documentclass[a4paper, 11pt, magyar, draft, twocolumn]{article}
\documentclass[a4paper, 11pt, magyar, twocolumn]{article}
% Ide kell tenni a definíciót, különben a \Title rossz lesz
\usepackage[utf8]{inputenc} % encoding of the input file
%\usepackage[latin2]{inputenc} % encoding of the input file
\newcommand{\Title}{Mandelbrot- és Júlia-halmazokról}
\newcommand{\Author}{TrueY}
\newcommand{\Version}{v0.005}
Utána betöltöm a használt csomagokat:
\usepackage[T1]{fontenc} % elvalasztas jo magyar karakterekkel is
%\usepackage[magyar]{babel} % Ez itt nem jó. Később kell definiálni!
%\usepackage{t1enc} % elvalasztas jo magyar karakterekkel is
\usepackage{xspace} % spaces after macros
\usepackage{calc} % to do length calculations
\usepackage{ifthen} % package for if-then-else constructions
%\usepackage{latexsym} % symbols for diagrams
\usepackage{amsmath} % Full math capability
\usepackage{amssymb} % symbols for diagrams
%\usepackage{amsthm} % Theorem styles
%\usepackage{theorem} % Theorem styles
\usepackage[thmmarks, standard]{ntheorem} % Theorem styles
%\usepackage{subfigure} % subfigures
\usepackage{fancyhdr} % Define headers and footers
%\usepackage{afterpage} % to handle the float pages
Mivel dönthetünk úgy, hogy nem pdf formátumra konvertáljuk egyből, hanem mondjuk dvi-re, azért pár csak pdf-re jellemző beállítást kell végeznünk.
\newif\ifPDF
\ifx\pdfoutput\undefinied\PDFfalse
\else\ifnum\pdfoutput > 0\PDFtrue
\else\PDFfalse
\fi
\fi
\ifPDF
%\usepackage[pdftex]{graphicx}
\usepackage[pdftex]{graphicx, color}
\usepackage[pdftex,
bookmarks=false,
%%%pdftoolbar=false,
%%%pdfmenubar,
pdffitwindow,
%pdfpagemode=FullScreen, % Open Full Screen
pdfpagemode=UseNone,
%, pdfpagemode=None, pdfstartview=FitH
%pdfwindowui=false,
%pdfcenterwindow,
colorlinks,
linkcolor=red
]{hyperref}
%\pdfimageresolution=288
\pdfimageresolution=300
\pdfcompresslevel=9
\else
\usepackage[dvips]{graphicx}
\usepackage[dvips]{hyperref}
\fi
\usepackage[magyar]{babel} % Ide kell tenni, kulonben a pdf elhal
% Ehhez már kell a babel csomag!
\ifPDF
\hypersetup{
pdftitle={\Title},
pdfauthor={\Author},
pdfsubject={\Version},
pdfkeywords={Mandelbrot, Julia}
}
\fi
És most jönnek a formázó utasítások.
\renewcommand{\headheight}{14pt}
% Setting penalties for clubs and widows
\clubpenalty=1000 % fattyusor - lap aljan
\widowpenalty=1000 % ozvegy - lap tetejen
\displaywidowpenalty=1000
%\overfullrule=6pt % show slug right to ugly lines
\hyphenpenalty=0 % Hungarian likes the hyphenation
\brokenpenalty=200 % Dont hyphen at the last line of page
\doublehyphendemerits=0 % Hungarian likes the hyphenation. 2 elvalaszt 1 par-ban
\finalhyphendemerits=0 % Hungarian likes the hyphenation. par utcso soraban
%\renewcommand{\floatpagefraction}{.6} % instead of .5
%\renewcommand{\textfraction}{.15} % .2
%\renewcommand{\topfraction}{.8} % .7
%\renewcommand{\bottomfraction}{.5} % .3
\setcounter{topnumber}{3} % 2
\setcounter{bottomnumber}{1} % 1
\setcounter{totalnumber}{5} % 3
\setlength{\parskip}{1.5 ex plus 1 ex minus 0.5 ex}
%\setlength{\parindent}{0 em}
\fancypagestyle{myfancy}{ %declearing the modified fancy
\lhead{\Title}
%\chead{\Cat}
\rhead{\Author}
%\lfoot{left}
%\cfoot{center}
%\rfoot{\thepage}
%\renewcommand{\headrulewidth}{0pt}
%\renewcommand{\footrulewidth}{0pt}
%\renewcommand{\plainheadrulewidth}{0pt}
%\renewcommand{\plainfootrulewidth}{0pt}%
}
\pagestyle{myfancy}
Az egészet pdflatex-hel fordítottam le, a szokásos tex -> dvi -> pdf helyett. Így a belső és a külső linkek is elérhetők maradnak. Sajnos a belső referenciákat a pdflatex valami miatt rosszul kezeli. Bármely belső hivatkozásra klikkelve az első oldalra ugrik a célállomás helyett. Ennek okát nem sikerült megfejtenem.
Bár a Tex nyelvet nem sikerült megszeretnem és teljesen megértenem, de pár saját függvény definiáltam. Az első a magyar bábel csomagból használható \aref, \Aref parancsok kiegészítése. Ezek eredetileg arra jók, hogy névelővel lehessen referenciákra hivatkozni (pl. "lásd a 6. ábrán", "Az 5. fejezetben"). Összeházasítottam a \eqref és az \aref parancsokat és készítettem egy \aeqref, és egy \Aeqref parancsot, ami az egyenletek névelőhelyes hivatkozását teszi lehetővé, ahol is az egyenlet száma zárójelben van (pl. "Lásd a (3) egyenlőtlenséget", "Az (5) egyenletből következik"). Íme a definíció:
%generic/babel/magyar.ldf-bol ollózva!
%3 betüsnek kell lennie, ezért az eredeti azr-t aze-nek írtam át
% és az \eqref-t használtam \ref helyett
\makeatletter
\def\aeqref{\aze}
\def\Aeqref{\Aze}
\def\aze{a\@ifstar{\@aze}{\aze@}}
\def\Aze{A\@ifstar{\@aze}{\aze@}}
\def\aze@{\@ifnextchar ({\aze@@@}{\aze@@}}
\def\aze@@#1{\@aze{#1}\nobreakspace\eqref{#1}}
\def\aze@@@(#1{\@aze{#1}\nobreakspace(\eqref{#1}}
\def\@aze#1{%
\hun@tempadef{hun@r@#1}{r@#1}{}%
\ifx\@tempa\empty
\else
\edef\@tempb{\noexpand\@@az\expandafter\@firstoftwo\@tempa\hbox!}%
\@tempb
\fi
}
\makeatother
A \makeatletter-rel engedjük, hogy a függvény nevében '@' lehessen. Nem mondom, hogy minden porcikáját értem, de működik. Vigyázni kell! Én először \azeq-kra cseréltem az eredeti \azr-eket, de úgy nem működött. Úgy tűnik, hogy fontos, hogy három betűs a függvények neve. Ezért \aze-k lettek.
A másik egy olyan módosítás, ami a bizonyítás utolsó sorába, jobbra igazítva egy kis fekete négyzetet tesz. Ezzel nagyon sokat szenvedtem, mert a jobbra igazítás nem ment.
% Állítás
%http://en.wikibooks.org/wiki/LaTeX/Theorems
\providecommand{\QED}{\ensuremath{\blacksquare}}
\theoremstyle{change}
\theoremseparator{:}
\newtheorem{allitas}{Állítás}[subsection]
{\theorembodyfont{\upshape}
\theoremsymbol{\QED}
\renewtheorem{proof}{Bizonyítás}[subsection]}
Itt definiáltam egy Állítás - Bizonyítás párt, ami konzekvensen számozódik és a kis négyzet jobbra lesz igazítva. Ehhez nekem a fejlécbe be kellett tennem a\usepackage[thmmarks, standard]{ntheorem} % Theorem styles
sorban a "standard"-ot is.
Még pár, kisebb segédfüggvényt követtem el.
% \A or \A[z_1]
\newcommand{\A}[1][z]{\ensuremath{\left|#1\right|}}
A default formában (\A) egy z vektor nagyságát fogja kiírni (=|z|). Ha adunk egy opcionális argumentumot, akkor annak a nagyságát, amit megadtunk (\A[z_1] = |z1|).
\newcommand{\FI}[1][]{
\ifthenelse{\equal{#1}{}}
{\ensuremath{\varphi}}
{\ensuremath{\varphi_#1}}
}
Használata \FI (=φ), vagy \FI[1] (=φ1).
\newcommand{\ii}[0]{\ensuremath{\mathbf{i}}}
\newcommand{\ef}[2][z]{\ensuremath{\left|#1\right| e^{\ii \FI[#2]}}}
Ez a két függvény pedig az Euler alak kiírásában segít. A \ii egy szép kövér i-t ír ki, a \ef{} = |z|eiφ , \ef{z_1}[1] = |z1|eiφ1 (azért ez LaTex-ben szebben mutat). Most vettem észre, hogy a \FI-hez hasonlóan elegendő lenne az indexet átadni. Itt is és a \A-nál is. No, majd legközelebb!
És meg egy kis trükk. Alapban az amsmath csomag nem húzza le a négyzetgyök végét. Ez kicsit furcsává teszi a gyökjelet. Erre találtam orvoslatot a neccen >itt<.
\let\oldsqrt\sqrt
\def\sqrt{\mathpalette\DHLhksqrt}
\def\DHLhksqrt#1#2{\setbox0=\hbox{$#1\oldsqrt{#2\,}$}\dimen0=\ht0
\advance\dimen0-0.2\ht0
\setbox2=\hbox{\vrule height\ht0 depth -\dimen0}%
{\box0\lower0.4pt\box2}}
Sajnos az évek során változtak a dolgok. Az equation-ban definiált label-ekre pl. nem értem, hogy miért nem tudok hivatkozni. Illetve csak bizonyosakra. Mindegy, átírtam gather-re és úgy már megy. Az align az egyenlőtlenségeket tudja összerendezi. A gather itt jobbnak tűnt.
Helyesírás ellenőrzéshez hunspell-t használtam.
apt-get install hunspell hunspell-hu hunspell-tools
hunspell -d hu_HU -t Mandelbrot.tex
Kicsit sok a fel nem ismert szöveg. Még a TeX label-ekben is keres. Nem értem miért. Leírások a hunspell-ről: hunspell.sourceforge.net, hu.wikipedia.org .
Kérem, hogy akinek van lelki ereje, vessen egy pillantást a bizonyítást tartalmazó pdf-re és jelezze, ha valamilyen problémát talál! Előre is köszönöm! A teljes LaTeX forrás file is elérhető >itt<.
Aki hozzá szeretne olvasni, az belenézhet ebbe a könyvbe: Wettl Ferenc; Mayer Gyula; Sudár Csaba: LaTeX kezdőknek és haladóknak
Bizonyítsunk be valamit minden nap!
+jegyzések