Sari la conținut

Discuție:LaTeX/Indexare

Conținutul paginii nu este suportat în alte limbi.
Adăugare subiect
De la Wikimanuale, o colecţie de manuale libere !

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