LyX a vlna

Vaclav Ovsik Vaclav.Ovsik at i.cz
Thu Oct 17 10:35:24 CEST 2002


On Thu, Oct 17, 2002 at 09:09:19AM +0200, Matej Cepl wrote:
> Napsal jsem kdysi něco velmi podobného (součást většího skriptu,
> který předzpracovává LaTeX vyexportovaný z LyXu), ale dostal jsem
> se do stejných potíží, jako byste se dostal vy, kdybyste ten svůj
> skriptík chvilku používal: zkuste si chvilku představit co se
> stane s elegantními matematickými vzorečky, když se přes ně
> přežene Váš skript.
> 
> Ten můj původní byl ještě jednodušší (přidáváte tvrdé mezery na
> více mezery, nežli jak stanoví norma):
> 
> 	while(<OLD>) {
> 		 # ... nějaké další kroky
> 		 s/\b([KkSsvVZzOoUu§])([ ]|\$)/$1~/g; # substitute for vlna
> 		 print NEW;
> 	}
> 
> Jenže právě kvůli matice (a verbatim prostředí) jsem musel
> nakonec tenhle kousek nahradit voláním programu vlna (což je
> pomalejší a není to tak elegantní). Pochopitelně, že by to bylo
> možné (v Perlu je možné vše :-), ale právě bylo by to natolik
> složité, že jsem se raději ptal, jestli to někdo už nevyřešil.

Hmm, právě ten LyX zase moc nepoužívám (a lingvista taky nejsem :-),
ale zkusím tedy alespoň poradit s tím Perlem, v tom celkem píšu.
Jestli jsou hranice bloků které chcete vyjmout z toho "tildifování"
na samostatných řádkách a jsou jasné párové oddělovače, šel by použít
jednoduše oprátor "..".  Pokud budete snad chtít ty bloky dokonce
vnořovat, musel by se přidat ještě nějaký zásobník, ale to by bylo taky
easy. Zkuste doplnit/opravit příslušné poddělovače v následujícím.

#!/usr/bin/perl
use POSIX qw(locale_h);

setlocale(LC_CTYPE, 'cs_CZ.ISO-8859-2');
setlocale(LC_ALL, 'cs_CZ.ISO-8859-2');
setlocale(LANG, 'cs_CZ.ISO-8859-2');

use locale;

while (<>)
{
    unless ( (m/\\begin_inset/ .. m/\\end_inset/)
	     || (m/\\begin\{verbatim\}/ .. m/\\end\{verbatim\}/) )
    {
	s/\b([ksvzou])\b\s+/$1\n\\protected_separator\n/gi;
    }
    print;
}


-- 
Zito






More information about the csTeX mailing list