Lámání matematické sazby

Jaromír Kuben kuben at scova.vabo.cz
Tue Apr 20 14:04:21 CEST 2004


Jan Trmal napsal(a):

>-----BEGIN PGP SIGNED MESSAGE-----
>Hash: SHA1
>
>Dobry den,
>premyslim, jak formulovat dotaz, abych nevypadal jako uplna lama :).
>Pouzivam LaTeX  (+amsmath) a kdyz pisu  matematiku v hladkem textu,
>tak se mi obcas deli, abych tak rekl, ne zcela podle pravidel, ktera do mne
>vtlouka kamarad typograf. Napriklad pokud by vysel vyraz $x = 7 + x$, tak
>bych potreboval, aby se mi delil jen na mistech operatoru ( =, +) a to
>takovym zpusobem, aby se mi operator na druhe radce zopakoval.  Aspon si
>myslim, ze by to tak melo spravne byt.
>
>Na internetu jsem nasel zminku o makrech pana Karla Horaka, jenze jsou pro
>plain a mne se nepodarilo  je v latexu zprovoznit. Zatim jsem ani prilis
>nebadal proc, rikam si, by to mohlo byt v AMS balickach vyresene, ale nikde
>jsem nic nenasel. Zajimalo by mne tedy, jak to lze resit (pokud bych to
>skutecne mel resit), jestli neexituje jiz nejaky balicek pro latex  a vase
>navrhy, pripadne nakopnuti spravnym smerem.
>Dekuji moc, hezky den
>  Yenda
>  
>
Ja na to pouzivam nize uvedena makra, analogicky se to da udelat pro 
dalsi binarni operace a relace.
Vychazi to z navodu, ktery je v TBN p. Olsaka, a dalsich triku z TBN, 
princip je obdobny jako v makrech p. Horaka.
Asi by to slo udelat elegantneji, podobne jako to ma p. Horak, aby se to 
nemuselo delat pro kazdy symbol rucne.
Zdravi
Jaromir Kuben

Pozor, nefunguje pak \DeclareMathOperator, je treba pouzit napr.:

%Nefunguje kvu*li zme(ne(ným mathkódu*m - a pod.
%\DeclareMathOperator{\arctg}{arctg}

%Z amsopn.sty.
\newcommand\tg{\qopname\relax o{tg}}
\newcommand\cotg{\qopname\relax o{cotg}}
\newcommand\arctg{\qopname\relax o{arctg}}
%atd.

A nyni ten kod:

%Opakování symbolu* binárních operací a relací pr(i zalomení r(ádku

\newsavebox{\minusbox}
\savebox{\minusbox}{\hbox{$-$}}
\def\aktivniminus #1{{\catcode`#1=13 \bgroup \uccode`~=`#1
\uppercase{\egroup\gdef~}{\mathminus\discretionary{}{\copy\minusbox}{}}}}

\def\aktivnirovnitko #1{{\catcode`#1=13 \bgroup \uccode`~=`#1
\uppercase{\egroup\gdef~}{\mathequal\discretionary{}{=}{}}}}

\AtBeginDocument{%
\aktivniminus-%
\mathchardef\mathminus=\mathcode`\-%
\mathcode`\-="8000\relax
\aktivnirovnitko=%
\mathchardef\mathequal=\mathcode`\=%
\mathcode`\=="8000\relax
}

{\catcode`\+=13 % definice aktivního +
\expandafter }\expandafter \def\noexpand+{%
\mathplus\discretionary{}{+}{}}
\mathchardef\mathplus=\mathcode`\+ % sazba znaku + v mat. módu
\mathcode`\+="8000 % nastavení + jako aktivní v mat. módu, jinde zustává 
neaktivní

\newsavebox{\lessbox}
\savebox{\lessbox}{\hbox{$<$}}
{\catcode`\<=13 % definice aktivního <
\expandafter }\expandafter \def\noexpand<{%
\mathless\discretionary{}{\copy\lessbox}{}}
\mathchardef\mathless=\mathcode`\< % sazba znaku < v mat. módu
\mathcode`\<="8000 % nastavení < jako aktivní v mat. módu, jinde zustává 
neaktivní

\newsavebox{\greaterbox}
\savebox{\greaterbox}{\hbox{$>$}}
{\catcode`\>=13 % definice aktivního >
\expandafter }\expandafter \def\noexpand>{%
\mathgreater\discretionary{}{\copy\greaterbox}{}}
\mathchardef\mathgreater=\mathcode`\> % sazba znaku > v mat. módu
\mathcode`\>="8000 % nastavení > jako aktivní v mat. módu, jinde zustává 
neaktivní

\newsavebox{\lesseqbox}
\savebox{\lesseqbox}{\hbox{$\leq$}}
\mathchardef\lesseq=\the\leq %menaí nebo rovno
\renewcommand{\leq}{\lesseq\discretionary{}{\copy\lesseqbox}{}}
\let\le\leq

\newsavebox{\greatereqbox}
\savebox{\greatereqbox}{\hbox{$\geq$}}
\mathchardef\greatereq=\the\geq %ve(taí nebo rovno
\renewcommand{\geq}{\greatereq\discretionary{}{\copy\greatereqbox}{}}
\let\ge\geq

\binoppenalty=10000 % aby se to nelámalo jinak
\relpenalty=10000






More information about the csTeX mailing list