Discuție:LaTeX/Indexare
Adăugare subiectAspect
Texindy, hyperref şi modificatorii textbf, textit
[modificare]Permite 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