Discuție:LaTeX/Indexare
Texindy, hyperref şi modificatorii textbf, textit
modificarePermite a permite texindy să proceseze fişiere .idx
şi hyperlinkuri în index, trebuie să pre- şi post-procesaţi fişierele utilizate de texindy.
Mai întâi, preprocesorul, texindy-pre.pl
:
#!/usr/bin/perl unless ($ARGV[0] =~ /\.idx$/){ print "\nUtilizare:\n"; print "texindy-post.pl fişier.idx\n\n"; print "Acest script merge numai pentru fişiere LaTeX .idx neprocesate.\n"; print "Este primul script din serie, pentru a preprocesa fişierele ca să\n"; print "poată fi apoi procesate de TeXindy.\n"; print "\nÎmpreună cu texindy-post.pl, remediază deficienţa \"\\hyperindexformat{}\"\n"; print "din TeXindy, făcând posibilă utilizarea \"textbf\" şi \"texit\",\n"; print "modificatorilor din comanda \"\\index{}\", alături de pachetul \'hyperref\'\n"; } open(DATA, "< $ARGV[0]") or die "\nNu am reuşit să deschid fişierul pentru citire: $!\n"; #Toate liniile trebuie să fie citite de Perl, astfel că nu trebuie folosite fişiere temporare @lines = <DATA>; close(DATA); print "\nFişierul $ARGV[0] a fost citit\.\n\n"; open(DATA, "> $ARGV[0]") or die "\nNu pot deschide fişierul $ARGV[0] pentru scriere: $!\n"; $f1=0; $f2=0; foreach $line (@lines) { # schimbă "|)" în "|)hyperpage" if ($line =~ s/\|\)/|)hyperpage/){ $f1 += 1; } # înlătură hyperindexformat if ($line =~ s/hyperindexformat\{\\([^\}]*)\}/$1/){ $f2 += 1; } print DATA $line; } close(DATA); print "Am fixat limitele intervalului pentru pagini $f1.\nAm rezolvat problema apariţiilor hyperindexformat $f2.\n\n"; exit();
Apoi, postprocesorul, texindy-post.pl
:
#!/usr/bin/perl unless ($ARGV[0] =~ /\.ind$/){ print "\nUtilizare:\n"; print "texindy-post.pl file.ind\n\n"; print "Acest script merge numai cu fişiere LaTeX .ind procesate.\n"; print "Este al doilea script din serie, pentru a postprocesa fişierele după ce\n"; print "au fost procesate de TeXindy.\n"; print "\nÎmpreună cu texindy-pre.pl, remediază deficienţa \"\\hyperindexformat{}\"\n"; print "din TeXindy, făcând posibilă utilizarea \"textbf\" şi \"texit\",\n"; print "modificatorilor comenzii \"\\index{}\", alături de pachetul \'hyperref\'\n"; } open(DATA, "< $ARGV[0]") or die "\nNu pot deschide fişierul pentru citire: $!\n"; #Toate liniile trebuie să fie citite de Perl, astfel că nu sunt necesare fişiere temporare @lines = <DATA>; close(DATA); print "\nFişierul $ARGV[0] a fost citit\.\n\n"; open(DATA, "> $ARGV[0]") or die "\nNu pot deschide fişierul $ARGV[0] pentru scriere: $!\n"; $f1=0; $f2=0; foreach $line (@lines) { #schimbă modificatorii textbf în hyperlinkuri if ($line =~ s/ \\textbf{([0-9ivxl]+)}/ \\hyperindexformat{\\textbf}{\1}/){ $f1 += 1; } #schimbă modificatorii textit în hyperlinkuri if ($line =~ s/ \\textit{([0-9ivxl]+)}/ \\hyperindexformat{\\textit}{\1}/){ $f2 += 1; } print DATA $line; } close(DATA); print "Am schimbat apariţiile textbf $f1.\nAm schimbat apariţiile textit $f2.\n\n"; exit();
Dacă cele două fişiere sunt în acelaşi director cu proiectul LaTeX, fişierul LaTeX este main.tex
, iar proiectul este scris în poloneză, utilizaţi aceste comenzi pentru a genera fişierul DVI cu sintaxa corectă:
latex main ./texindy-pre.pl main.idx texindy -M lang/polish/utf8 -I latex 'main.idx' ./texindy-post.pl main.ind latex main