opakovani mat. znamenek

Miroslav Dont dont at math.feld.cvut.cz
Tue Apr 29 09:38:39 CEST 1997


Vazeni pratele,
mam dotaz, zda nekdo nahodou nema vyresen nasledujici
problem. Pokud ne, prestavam verit, ze v TeXu je mozne
vsechno.
V ceske matematicke sazbe je vhodne, pokud se radek lame
za znamenkem +, = atd., toto znamenko opakovat na zacatku
dalsiho radku. Idealni by bylo, kdyby to fungovalo
automaticky. Neco takoveho navrhuje P. Olsak v knize
TeXbook naruby na prikladu znamenka +. Reseni je nasledujici:

{\catcode`\+=13
\expandafter }\expandafter \def\noexpand+{%
                           \mathplus\discretionary{}{+}{}}
\matchardef\mathplus=\mathcode`\+
\mathocode`\+="8000

\binoppenalty=10000

Vypada to, ze to funguje docela hezky, ale pokud clovek
chce neco takoveho udelat pro jine znaky, narazi na
potize. Nektere z techto potizi jsou nasledujici.
Pokud udelame totez pro znameni =, bude clovek spokojeny
az do okamziku, kdy se mu na konci radku objevi nerovnitko
(\neq). Pokud bude rozdeleno za nerovnitkem, pak se na
dalsim radku objevi rovnitko - v definici \neq je =.
Totez plati pro dalsi negovane relace pokud prislusna
nenegovana relace je predefinovana.

Dalsi potiz je s relacemi, ktere nejsou oznaceny znakem,
ale slovem - napr. \leq nebo \in atd. Tam to nejde udelat
stejnym zpusobem jako treba se znamenkem +. Jedna neprilis
elegantni moznost je nasledujici (Plainiste necht mi
prominou LaTeXovske prikazy - lze to samozrejme napsat
i v Plainu) - znamenko \in:

\newsavebox{\inbox}
\savebox{\inbox}{$\in$}
\mathchardef\oriin=\in
\def\in{\oriin\discretionary{}{\usebox{\inbox}}{}}

Tento zpusob ma ale zakladni nevyhodu, ze pri rozdeleni bude na
zacatku noveho radku pouzit vzdy znak v zakladni velikosti
- neda se to pouzit napr. za \large apod.

Timto zpusobem je treba take predefinovat - (minus). Jde o to,
ze v \discretionary jsme v textovem rezimu a - ma jiny vyznam
v textovem a math. rezimu.

Dalsi nevyhoda vyse uvedenych zpusobu je ta, ze po techto
predefinovanich debude za prislusnymi znaky fungovat
\nolinebreak (v LaTeXu - v Plainu \penalty). Nekdy se
vyskytne situace, kdy nechci v zadnem pripade rozdeli za
nejakym znamenkem (napr. f(x+y)). Mohu samozrejme tento vyraz
umistit do {} - atom nebude rozdelen. Tim se ovsem stane, ze
mezery nebudou natahovaci a muze to pokazit lamani radku.
Pri vyse uvedenem predefinovani znamenka + lze pouzit na
prislusnem miste \mathplus. Idealni by ovsem bylo, kdyby
fungovalo \nolinebreak (v jiz natukanem textu to mam na
mnoha mistech).

Shrnuto jsou pozadavky zhruba nasledujici.
Predefinovani znaku +, -, =, \leq, \geq, \in
\subset, <, >, \to, \cup, \cap (a mozna nekterych
dalsich) a prislusnych negovanych tak, aby se
opakovaly na novem radku po lamani a aby bylo
mozne lamani zabranit prikazem \nolinebreak.

Nevim, zda nejsem prilis narocny.

Tomu, kdo docetl az sem, dekuji za pozornost.

M. Dont







More information about the csTeX mailing list