diff options
author | Karl Berry <karl@freefriends.org> | 2013-04-07 18:42:53 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-04-07 18:42:53 +0000 |
commit | edb2136c619d2c59bcb6dfd431c4c7636ff8913d (patch) | |
tree | 8aa04dd27bee1b2f2f9b3fd45dab41cf7771f82e /Master/texmf-dist/scripts | |
parent | b3efa3bb4509e7bd53d737fb729d0d92a76f1f98 (diff) |
texmf -> texmf-dist: scripts
git-svn-id: svn://tug.org/texlive/trunk@29719 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/scripts')
46 files changed, 64216 insertions, 0 deletions
diff --git a/Master/texmf-dist/scripts/bitmap2eps/bitmap2eps.vbs b/Master/texmf-dist/scripts/bitmap2eps/bitmap2eps.vbs new file mode 100644 index 00000000000..fbfc850e851 --- /dev/null +++ b/Master/texmf-dist/scripts/bitmap2eps/bitmap2eps.vbs @@ -0,0 +1,108 @@ +option explicit +On Error Resume next + +dim oWsh, oArgs, oFS, oDia, oTS, infile, outfile, f, c, result + +set oWsh = createobject( "wscript.Shell" ) +Set oFS = CreateObject("Scripting.FileSystemObject") +Set oArgs = wscript.arguments + +' assume sam2p and bmeps on searchpath +If oArgs.count = 0 Then + ' This appears to fail on win7: 'No file to convert' messagebox + Set oDia = CreateObject("UserAccounts.CommonDialog") + 'oDia.InitialDir = oWsh.SpecialFolders("MyDocuments") + oDia.filter = _ + "Bitmaps|*.bmp;*.png;*.gif;*.bmp;*.jpg;*.jpeg;*.tif;*.tiff|All files|*.*" + oDia.filterindex = 1 + oDia.flags = 1 + If oDia.ShowOpen = False then + msgBox "No file to convert" + wscript.quit + End If + infile = oDia.filename + ' MsgBox "infile: " & infile +Else + ' may have to flip slashes if the file was on a network drive !!! + infile = replace(oArgs(0), "/", "\") + infile = ofs.getabsolutepathname(infile) +End If + +' name of output file +outfile = ofs.buildpath(ofs.getparentfoldername(infile), _ + ofs.getbasename(infile) & ".eps") + +If ofs.fileexists(outfile) Then + result = MsgBox(outfile & vbcrlf & "exists; overwrite?", _ + vbyesno+vbquestion) + If result <> vbyes Then + wscript.quit + Else + oFS.deletefile(outfile) + Err.clear + If ofs.fileexists(outfile) Then + MsgBox "Unable to remove old " & outfile, vbcritical + wscript.quit + End If + End If +End If + +' MsgBox "trying sam2p" +owsh.run "sam2p """ & infile & """ EPS: """ & outfile & """", 0 +If Err Then + ' This is a failure of this script to start sam2p, + ' not just a failure of sam2p to do its job + MsgBox "Unspecified failure", vbcritical + wscript.quit +End If +wscript.sleep(1000) + +If ofs.fileexists(outfile) Then + MsgBox ofs.getbasename(infile) & "." & ofs.getextensionname(infile) & _ + " successfully converted", vbInformation +Else + Err.clear + ' clear sam2p temp files + For Each f in ofs.getfolder(ofs.getparentfoldername(infile)).files + If InStr(f.Name, "tmp__sam2p") = 1 Then + f.delete + Err.clear + End If + Next + ' MsgBox "trying bmeps" + owsh.run "bmeps -c """ & infile & """ """ & outfile & """", 0 + If Err Then + MsgBox "Unspecified failure", vbcritical + wscript.quit + End If + wscript.sleep(1000) + If ofs.fileexists(outfile) Then + result = True + ' check the eps file; it may contain just an error mesage from bmeps + Set oTS = ofs.opentextfile (outfile, 1) + If Err Then + result = False + Err.clear + Else + c = oTS.read(2) + If Err Then + result = false + Err.clear + Else + If c <> "%!" Then + result = False + End If + End If + oTS.close + End If + If result then + MsgBox ofs.getbasename(infile) & "." & ofs.getextensionname(infile) & _ + " successfully converted with bmeps", vbInformation + Else + 'ofs.deletefile(outfile) + MsgBox "Conversion failed", vbCritical + End If + Else + MsgBox "Conversion failed", vbCritical + End If +End If diff --git a/Master/texmf-dist/scripts/chktex/deweb.pl b/Master/texmf-dist/scripts/chktex/deweb.pl new file mode 100755 index 00000000000..83de358bc2e --- /dev/null +++ b/Master/texmf-dist/scripts/chktex/deweb.pl @@ -0,0 +1,122 @@ +#! /usr/bin/env perl +# deweb v1.2, kills the C sections of a CWEB file, for passing to ChkTeX. +# Copyright (C) 1996 Jens T. Berger Thielemann +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# Contact the author at: +# Jens Berger +# Spektrumvn. 4 +# N-0666 Oslo +# Norway +# E-mail: <jensthi@ifi.uio.no> +# +# +# + +print STDERR "DeWEB v1.2 - Copyright 1996 Jens T. Berger Thielemann\n"; + +undef $/; +$texmode = 1; +$_ = <>; + +while(/\@/) +{ + &out($`); + $_ = $'; + + if(/^@/) { + $_ = $'; + &out('@'); + next; + } + + if(/^([\s\n])/) { + $_ = $'; + print "\n" if $1 eq "\n"; + $texmode = 1; + next; + } + + if(/^[cpd]/i) { + $_ = $'; + $texmode = 0; + next; + } + + if(/^\,/i) { + $_ = $'; + print '\,'; + next; + } + + if(m!^/!) { + $_ = $'; + print '\\\\'; + next; + } + + if(/^[h\&\|\;\#\+]/i || /^i.*/i) { + $_ = $'; + next; + } + + if(/^\*[0-9\*]?((.|\n)*?\.)/) { + $_ = $'; + print $1; + $texmode = 1; + next; + } + + if(/^[<(^.t!]((.|\n)*?)\@\>/i) { + $_ = $'; + print '{'.$1.'}'; + $texmode = 0; + next; + } + + if(/^[=]((.|\n)*?)\@\>/) { + $_ = $'; + print &printnl($1); + next; + } + + if(/^[fsl](\s+\S+\s+\S+)|^\'(.|\n)*?\'|^\[((.|\n)*?)\@\]/i) { + $_ = $'; + print &printnl($+); + next; + } + + @line = split(/\n/, $_, 2); + print STDERR "Unknown opcode, ignored. Buffer:\n$line[0]\n"; + +} + +print $_; + +sub printnl { + my($foo); + if(defined $_[0]) { + $foo = $_[0]; + $foo =~ s/.//g; + } else { + $foo = ""; + } + $foo; +} + +sub out { + print $texmode? $_[0] : &printnl($_[0]); +} diff --git a/Master/texmf-dist/scripts/ps2eps/ps2eps.pl b/Master/texmf-dist/scripts/ps2eps/ps2eps.pl new file mode 100755 index 00000000000..7daa8752bff --- /dev/null +++ b/Master/texmf-dist/scripts/ps2eps/ps2eps.pl @@ -0,0 +1,945 @@ +#!/usr/bin/env perl +# The expression in the previous line replaces the unix specific line +# {#!/usr/bin/perl}. +# ps2eps - convert PostScript to EPS (Encapsulated PostScript) files +# ------------------------------------------------------------------- +# $Id: ps2eps,v 1.68 2010-05-07 19:42:35 bless Exp $ +# ------------------------------------------------------- +# (C)opyright 1999-2009 Roland Bless +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Author: Roland Bless +# Send bug reports to roland <at> bless.de +# ------------------------------------------------------------------- +# Additional filtering is performed when Windows generated PostScript files +# are processed. Some instructions will otherwise lead to bad output +# if EPS-file gets embedded into other PostScript files. +# +# Requirements: +# + perl +# + gs (ghostscript supporting pbm output) +# + bbox (a little C program [ANSI-C - should work on every platform] +# for calculation of the actual BoundingBox) + +use POSIX; + +#use warnings; + +#use Getopt package +use Getopt::Long; +Getopt::Long::Configure("no_ignore_case"); + +$prgname= "ps2eps"; + +if (! -d "/usr/bin") +{ # we assume that we are running under native windows + $ghostscriptname = "gswin32c"; + $NULLDEV = "nul"; +} +else +{ # Unix or cygwin + $ghostscriptname = "gs"; + $NULLDEV = "/dev/null 2>&1"; +} + +$bboxver=`bbox >$NULLDEV -V`; +$bboxname= ($?== -1) ? "" : "bbox"; +$version= '$Id: ps2eps,v 1.68 2010-05-07 19:42:35 bless Exp $'; #' +$insertPScode= 1; # Insert surrounding Postscript code +$infhandle = STDIN; # Standard input is the default input file +$outfhandle = STDOUT; # Standard output is default output if STDIN is input +$infname= '-'; +$outfname= '-'; +$forceoverwrite=0; # do not overwrite existing files +$ignoreBB= 0; # ignore existing Bounding Box comment +$removeDSC= 1; # remove Adobe document structure comments +$removeADO= 1; # remove Adobe printer Driver console Output [Page: ...] +$ignoreEOFDSC= 0; # ignore %%EOF DSC hint +$removePreview= 0; # remove preview +$quiet= 0; # write progress to stdout +$resolution= 144; # resolution for bounding box calculation is 2x72 dpi +$trytofixps= 1; # try to fix postscript code +$forcefixps= 0; # fix postscript code unconditionally if eq 1 +$filterorientation= 1;# filter Orientation line +$looseBB=''; # default: tight bounding box +$clip=0; # do not clip +$warnings=0; # do not print warnings concerning postscript sanity +$debuggs=0; # no debugging of ghostscript call, turn this on if you want to see the gs call +$inch=2.54; # one inch is 2.54cm +$fullcolors= 1; # use ppm format (24-bit full color) +$trailerseen= 0; # Trailer comment seen? +$PSversion="2.0"; # default Postscript Version +$PSDSCversion="2.0"; # default Postscript DSC Version +$translate_x= 0; # translate by x postscript points +$translate_y= 0; # translate by y postscript points +$allbinary= 0; # treat postscript as binary do not filter or change stuff +$alphaopt=""; # rendering option for ghostscript "-dTextAlphaBits=4 -dGraphicsAlphaBits=4" +$hiresprecision=0.5; # amount that is changed of HiresBB in case that looseBB was requested + +$defaultext = '(ps|prn)'; # default extension +$defaultoutext = '.eps'; # default output extension +$envname_size = 'PS2EPS_SIZE'; +$envname_gsbbox = 'PS2EPS_GSBBOX'; + +$gpar=""; +$known_papersizes="11x17|ledger|legal|letter(small)?|arch[A-E]|a([0-9]|10)|isob[0-6]|b[0-5]|c[0-6]|jisb[0-6]|fls(a|e)|halfletter"; +$papersize_help="11x17,ledger,legal,letter,lettersmall,archA,archB,archC,archD,archE\ +a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,isob0,isob1,isob2,isob3,isob4,isob5,isob6,\ +b0,b1,b2,b3,b4,b5,c0,c1,c2,c3,c4,c5,c6,\ +jisb0,jisb1,jisb2,jisb3,jisb4,jisb5,jisb6,flsa,flse,halfletter\n"; +$trigger= 0; +$notsane= 0; +$dummy=""; + +@ver= split(/ /,$version); + +# filename for temporary files +if ($^O =~ /MSWin32/i or $^O =~ /cygwin/i) +{ + # it is less trouble to use the current directory if working on + # cygwin and nevertheless using gswin32c. + $tmpfname= "$prgname.$$"; + $win=1; +} +elsif (defined($ENV{'TMP'})) +{ + $tmpdir= $ENV{'TMP'}; + $filesep= ($tmpdir =~ /^?\:\\/) ? '\\' : '/'; + if ($tmpdir =~ /$filesep$/) + { $tmpfname= $tmpdir . "$prgname.$$"; } + else + { $tmpfname= $tmpdir . "$filesep$prgname.$$"; } + $win=1; +} +else #assume we're on a UNIXBOX +{ + $tmpfname= "/tmp/" . "$prgname.$$"; + $win=0; +} + + +$licensetxt= "\ + This program is free software; you can redistribute it and/or modify\ + it under the terms of the GNU General Public License as published by\ + the Free Software Foundation; either version 2 of the License, or\ + (at your option) any later version.\ +\ + This program is distributed in the hope that it will be useful,\ + but WITHOUT ANY WARRANTY; without even the implied warranty of\ + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\ + GNU General Public License for more details.\ +\ + You should have received a copy of the GNU General Public License\ + along with this program; if not, write to the Free Software\ + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"; + +@prgidtxt= ( "$prgname - convert PostScript to EPS (Encapsulated PostScript) files\n", + "(C)opyright 1998-2009 Roland Bless\n\n" ); + +@helptxt= ("Version: $ver[2]\n", + "Operation:\n", + " Without any argument, $prgname reads from standard input\n", + " and writes to standard output.\n", + " If filenames are given as arguments they are processed\n", + " one by one and output files are written to filenames\n", + " with extension '$defaultoutext'. If input filenames have the extension\n", + " '.ps' or '.prn', this extension is replaced with '$defaultoutext'.\n", + " In all other cases '$defaultoutext' is appended to the input filename.\n", + " Please note that PostScript files for input should contain\n", + " only one single page.\n\n", + " If BoundingBox in output seems to be wrong, please try options --size or --ignoreBB.\n\n" ); + +@usagetxt= ("Syntax:\n", + " $prgname [-f] [-q] [-N] [-O] [-n] [-P] [-c] [-b] [-C] [-m] [-B] [-E] [-s <pagedim>] [-R +|-|^] [-t <x,y>] [-l] [-g] [-d] [-H] [-h|--help] [-g] [-a] [-W] [-L] [-V|--version] [--] [psfile1] [psfile2] [...]\n", + "Options:\n", + " -f, --force force overwriting existing files\n", + " -q, --quiet quiet operation (no output while processing files)\n", + " -N, --noinsert do not insert any postscript code\n", + " -O, --preserveorientation do not filter Orientation: header comment\n", + " -n, --nofix do not try to fix postscript code\n", + " -P, --removepreview remove preview image (smaller file, but no preview)\n", + " -F, --fixps fix postscript code unconditionally\n", + " -c, --comments preserve document structure comments\n", + " -b, --binary treat postscript as binary, do not modify characters\n", + " -C, --clip insert postscript code for clipping\n", + " -m, --mono use black/white bitmap as base for calculation\n", + " -s, --size=<pagedim> page size (a0-a10,letter,...) or in format XxY[cm|in] (default:cm), where X and Y are numbers\n", + " use --size=list to list pre-defined page sizes\n", + " -R, --rotate=<direction> rotate resulting EPS. <direction>: +=+90 (clockw.),-=-90 (counter-clockw.) ^=180 degrees\n", + " -t, --translate specify x,y offset (may be negative) in postscript points (1/72 dpi)\n", + " -r, --resolution specify dpi resolution to render with ghostscript (default 144)\n", + " -l, --loose expand the original bounding box by one point in each direction\n", + " -B, --ignoreBB do not use existing bounding box as page size for rendering\n", + " -E, --ignoreEOF do not use %%EOF as hint for end of file\n", + " -g, --gsbbox use internal bbox device of ghostscript\n", + " -H, --no-hires do not use a HiResBoundingBox\n", + " -h, --help help information\n", + " -L, --license show licensing information\n", + " -V, --version show version information\n", + " -d, --debuggs show ghostscript call\n", + " -a, --accuracy improve accuracy during rendering (maybe slower)\n", + " -W, --warnings show warnings about sanity of generated eps file\n", + " -- all following arguments are treated as files\n", + " (allows filenames starting with -)\n", + "\n", + "Arguments:\n", + " One or more names of PostScript files for input\n"); + +## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +## -- argument checking -- +## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +#environment variable for papersize +if (defined($ENV{"$envname_size"})) +{ + $opt_s= $ENV{"$envname_size"}; +} +else +{ + $opt_s = ''; # for s-option +} + +if (defined($ENV{"$envname_gsbbox"})) +{ + $bboxname=""; +} + +$opt_t = ''; # for t-option +$opt_R = ''; # for R-option +$opt_r = ''; # for r-option +$stopnow = 0; +die "Wrong option(s), please check usage with $prgname --help\n" unless +GetOptions('f|force' => \$forceoverwrite, + 'q|quiet' => \$quiet, + 'm|mono' => sub { $fullcolors = 0 }, + 'n|nofix' => sub { $trytofixps = 0 }, + 'F|fixps' => \$forcefixps, + 'N|noinsert' => sub { $insertPScode = 0 }, + 'O|preserveorientation' => sub { $filterorientation= 0 }, + 'P|removepreview' => \$removePreview, + 'c|comments' => sub { $removeDSC = 0 }, + 'b|binary' => sub { $allbinary = 1 }, + 'C|clip' => \$clip, + 'l|loose' => sub { $looseBB = '-l' }, + 'B|ignoreBB' => \$ignoreBB, + 'E|ignoreEOF'=> \$ignoreEOFDSC, + 's|size=s' => \$opt_s, + 't|translate=s' => \$opt_t, + 'r|resolution=s' => \$opt_r, + 'R|rotate=s' => \$opt_R, + 'g|gsbbox' => sub { $bboxname=""; }, + 'H|nohires' => \$nohires, + 'h|help' => sub { $stopnow = 1; print @prgidtxt,@helptxt,@usagetxt,"\nAuthor: Roland Bless (roland\@bless.de)\n\n"; }, + 'L|license' => sub { $stopnow = 1; print @prgidtxt,$licensetxt,"\nAuthor: Roland Bless (roland\@bless.de)\n\n"; }, + 'a|accuracy' => sub { $alphaopt = '-dTextAlphaBits=4 -dGraphicsAlphaBits=4' }, + 'd|debuggs' => \$debuggs, + 'W|warnings' => \$warnings, + 'V|version' => sub { $stopnow = 1; print @prgidtxt,"Version: $ver[2]\n"; });exit if ($stopnow); + +## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +## -- wildcard processing -- +## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +## internal wildcard processing for current directory, +## only used for non UNIX-based OSs (which may lack shell wildcard expansion) +@filenames = (); +foreach $object (@ARGV) { + if ($win && $object =~ m/\*/o) # asterisk is present in filename + { + $wildcard = $object; + $wildcard =~ s/\./\\\./g; # replace . in pattern with \. + $wildcard =~ s/\*/\(\.\*\)/g; # replace * in pattern with (.*) + opendir(DIR,'.') || die 'Unable to open current directory, stopped'; # open current directory + print STDERR $wildcard; + @fid = grep { /$wildcard(\.$defaultext)?/i } readdir(DIR); + foreach (@fid) { push @filenames, $_; } + closedir DIR; + } + else { push @filenames, $object; } +} # end foreach +$filenames[0]= '-' if (scalar(@filenames) == 0); # no file arguments, use STDIN as input + +print STDERR "Input files: @filenames\n" if (!$quiet); + +if ($opt_r ne '') +{ + $resolution=$opt_r; +} + +# papersize stuff +if ($opt_s ne '') +{ + # if explicit size is given, ignore existing BoundingBox always + $ignoreBB = 1; + $pagedimension = $opt_s; + if ($opt_s eq "list") + { + print STDERR "Available paper sizes: $papersize_help"; + exit 0; + } + + #explicit format XxY[cm|in] + if ($pagedimension =~ /(\d*\.?\d+)x(\d*\.?\d+)/) + { + ($x_dim, $dummy, $y_dim, $unit)= split(/(x|cm|in)/,$pagedimension); + if ( $x_dim !~ /^\d*\.?\d+$/ ) + { die "$x_dim in $arg is not a valid number, stopped"; } + if ( $y_dim !~ /^\d*\.?\d+$/ ) + { die "$y_dim in $arg is not a valid number, stopped"; } + + #print STDERR "xdim: $x_dim ydim: $y_dim unit:$unit\n" ; + if (!defined($unit) ) + { + $unit='cm'; + $opt_s=$opt_s . $unit; + } + if ( $unit ne 'in' ) # assume centimeters + { # calculate dimension in pixels (remember: resolution is in dpi) + $xpixels= int(($x_dim * $resolution) / $inch)+1; + $ypixels= int(($y_dim * $resolution) / $inch)+1; + $gpar= "-g${xpixels}x${ypixels}"; + } + else + { + $xpixels= int($x_dim * $resolution)+1; + $ypixels= int($y_dim * $resolution)+1; + $gpar= "-g${xpixels}x${ypixels}"; + } + } #endif XxY in opt_s + else + { + if ($opt_s =~ /$known_papersizes/) + { + $gpar="-sPAPERSIZE=$opt_s"; + } + else + { + print STDERR "Error: Unknown paper size: $opt_s\n Acceptable papersizes are:$papersize_help\n"; + exit 1; + } + } +} + +#translate option +if ($opt_t ne '') +{ + ($translate_x,$translate_y)= split(/\,/,$opt_t); +} + +#rotate +$rotright='-90 rotate'; +$rotleft='90 rotate'; +$rotupsidedown='180 rotate'; +$rotate=''; +if ($opt_R ne '') +{ + if ($opt_R eq '+') { $rotate=$rotright; } + elsif ($opt_R eq '-') { $rotate=$rotleft; } + elsif ($opt_R eq '^') { $rotate=$rotupsidedown; } + else { die "Wrong parameter for option -R: Valid are only +,-,^\n"; }; +} + +$device= $fullcolors ? "ppmraw" : "pbmraw"; + +## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +## -- iterate over different input files -- +## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +PROCESSFILE: +while ($infname= (shift @filenames)) +{ + # reset filter definitions for each file + undef $linefilter; + undef $rangefilter_begin; + undef $rangefilter_end; + $fixthisps= $trytofixps; + $fixmsgprinted= 0; + + if (!$quiet) { print STDERR "Processing: $infname\n"; } + unless (open($infhandle,"<$infname")) + { # skip over this file + print STDERR "$prgname: Can't open $infname: $!\n"; + next PROCESSFILE; + } + + # buffer input from stdin into temporary file, because it has to be read twice + # one time for ghostscript processing, the second time for generating output + if ($infname eq '-') # input is stdin + { + $tmpfhandle=''; + open($tmpfhandle,">$tmpfname") or + die "Cannot open temporary file $tmpfname for writing: $!\n"; + } + else # input is not stdin + { + undef $tmpfhandle; + #if filename ends with $defaultext usually .ps or .prn, replace the extension with $defaultoutext + if ($infname =~ /\.$defaultext$/i) + { + $outfname= $infname; $outfname =~ s/\.$defaultext$/$defaultoutext/i; + } + else # otherwise simply append the extension $defaultoutext + { + $outfname= $infname . "$defaultoutext"; + } + } #end else input is not stdin + + ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + ## -- process input file -- + ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + $linefilter= '^$'; #'# filter empty lines by default + while (<$infhandle>) + { + # get postscript and DSC version + if (/%!PS-Adobe-(\S+).*EPSF-(\S+)/) + { + $PSversion=$1; + $PSDSCversion=$2; + if (! ($PSversion =~ /\d+\.\d+/)) + { + $PSDSCversion="2.0"; + } + if (! ($PSDSCversion =~ /\d+\.\d+/)) + { + $PSDSCversion="2.0"; + } + } + + # check for existing BoundingBox parameters + if ( /^%%\s*BoundingBox:\s*(.*)/ && !defined($eBBllx) ) + { + $BBarg= $1; + # accept even negative and fractional BBs + if ( $BBarg =~ /(\-?\d+\.?\d*\s+){3,}\d+/ ) # ignore %% BoundingBox: (atend) comments + { + ($eBBllx,$eBBlly,$eBBurx,$eBBury,$dummy)= split /\s/,$BBarg; + #print STDERR "Existing BB: $eBBllx,$eBBlly,$eBBurx,$eBBury\n"; + if (int($eBBllx) < 0) { $translate_x= - int($eBBllx-0.5); } + if (int($eBBlly) < 0) { $translate_y= - int($eBBlly-0.5); } + + $xpixels= int((($eBBurx-$eBBllx) * $resolution)/72 + 0.5); + $ypixels= int((($eBBury-$eBBlly) * $resolution)/72 + 0.5); + if (!$ignoreBB) + { + $gpar= "-g${xpixels}x${ypixels}"; + # check for meaningful values + if (($xpixels <= 1) || ($ypixels <= 1)) + { + $gpar=""; undef $eBBllx; undef $eBBlly; + } + else + { + if (!$quiet) + { + print STDERR "Rendering with existing $_"; + if (int($eBBllx) < 0 || int($eBBlly) < 0) + { + print STDERR "WARNING: existing Bounding Box shows negative values - shifting\n"; + } + } + } + } #endif !$ignoreBB + } #endif $BBarg =~ + } + + + if ($fixthisps) # try to fix bad postscript code + { + # check for Windows 3.x output + if ( /^Win.*Dict/ ) + { + if (!$quiet && !$fixmsgprinted) + { print STDERR "Windows 3.5 generated Postscript file detected, fixing\n"; } + $linefilter= '^(EJ|RS)'; + $rangefilter_begin= '^statusdict'; + $rangefilter_end= 'cvx\ settransfer$'; #' + $fixmsgprinted= 1; # stop printing message + } + else + { + if ( /^%%Creator:\s*Wind.U\s*Xprinter/ ) + { + if (!$quiet && !$fixmsgprinted) + { print STDERR "Star/OpenOffice generated Postscript file detected, fixing\n"; } + $linefilter= '^rs'; + $fixmsgprinted= 1; # stop printing message + } + else + { + if ( $forcefixps || + /^\/NTPS/ || + /Creator:\s*(AdobePS|Pscript|.*Windows)/i ) #check for NT generated output + { + if (!$quiet && !$fixmsgprinted) + { + if ($forcefixps) + { + print STDERR "Postscript filtering requested, fixing\n"; + } + else + { + print STDERR "Windows generated Postscript file detected, fixing\n"; + } + } + $rangefilter_begin= '^((\[\{)|(featurebegin\{))$'; #' + $rangefilter_end= '^(\} stopped cleartomark|\}featurecleanup)'; + $exclude_rangefilter_begin= '^(?i)%%BeginNonPPDFeature'; #' + $exclude_rangefilter_end= '^(?i)%%EndNonPPDFeature'; + #$triggered_rangefilter_begin= ''; #' + #$triggered_rangefilter_end= ''; #' + $fixsearchpat='(^|\s)(initmatrix|initclip|initgraphics)(\s|$)'; + $fixreplacepat=' '; + $fixmsgprinted= 1; # stop printing message + } # end if NTPS + } #end else + } + } #end if trytofixps + + if (defined($tmpfhandle)) + { + print $tmpfhandle $_ or die "$prgname: Failure during writing to temporary file $tmpfname"; + } + + if (/^%%EOF\s*$/) + { + $totalEOFDSC++ + } + } #end while <$infhandle> + + if (defined($tmpfhandle)) + { + close($tmpfhandle); + } + else + { + $tmpfhandle= $infhandle; + $tmpfname= $infname; + } + + ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + ## -- calculate the bounding box -- + ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + if ($translate_x!=0 || $translate_y!=0) + { + $translation="$translate_x $translate_y translate"; + $translatecmd="-c \'$translation\'"; + } + else + { + $translation=""; + $translatecmd=""; + } + + if (!$quiet) + { + print STDERR "Calculating Bounding Box..."; + if ($opt_s) + { + print STDERR "using page size $opt_s..."; + } + } + + $rotatecmd=''; + if ($rotate ne '') + { + $rotatecmd="-c \"$rotate\"" + } + if ($bboxname ne '') + { + $cmdline="$ghostscriptname -dSAFER -dNOPAUSE $alphaopt -q $gpar -r$resolution -sDEVICE=$device -sOutputFile=- $translatecmd -f \"$tmpfname\" -c showpage -c quit | $bboxname -r $resolution"; + } + else + { + if (!$quiet) { + print STDERR "...using bbox device of $ghostscriptname..."; + } + $cmdline = "$ghostscriptname -dSAFER -dBATCH -dNOPAUSE -q $gpar -r$resolution -sDEVICE=bbox -sOutputFile=- -c \"/setpagedevice {pop} def\" $translatecmd -f \"$tmpfname\" -c quit 2>&1"; + } + + if ($debuggs) { print STDERR "\nCalling: $cmdline\n"; } + + # actual ghostscript call + $boundingbox=`$cmdline`; + if ($debuggs) { print STDERR "Call result: $boundingbox"; } + + # check result of gs call + if ($boundingbox !~ /^%%BoundingBox/m) + { + die "Error: Could not determine bounding box!\n", + "I suppose $ghostscriptname had some trouble interpreting the postscript-file $infname. Exiting now.\n"; + } + + $boundingbox =~ /^%%HiResBoundingBox:\s*(.*)/m; + if (defined($1)) # HiResBoundingBox given + { + ($hcBBllx,$hcBBlly,$hcBBurx,$hcBBury,$dummy)= split(/\s/,$1); + $hiresboundingbox="%%HiResBoundingBox: $hcBBllx $hcBBlly $hcBBurx $hcBBury\n"; + $cBBllx = floor($hcBBllx); + $cBBlly = floor($hcBBlly); + $cBBurx = ceil($hcBBurx); + $cBBury = ceil($hcBBury); + } + else + { #use normal BoundingBox + $boundingbox =~ /^%%.*BoundingBox:\s*(.*)/; + ($cBBllx,$cBBlly,$cBBurx,$cBBury,$dummy)= split(/\s/,$1); + } + # if loose BB is requested + # apply changes to resulting bounding box if needed + if ($looseBB ne '') + { + if ($cBBllx > 0) { $cBBllx--; } + if ($cBBlly > 0) { $cBBlly--; } + $cBBurx++; + $cBBury++; + + if ($hcBBllx-$hiresprecision >= 0.0) { $hcBBllx-= $hiresprecision; } + if ($hcBBlly-$hiresprecision >= 0.0) { $hcBBlly-= $hiresprecision; } + $hcBBurx+= $hiresprecision; + $hcBBury+= $hiresprecision; + $hiresboundingbox="%%HiResBoundingBox: $hcBBllx $hcBBlly $hcBBurx $hcBBury\n"; + + } + if ($cBBllx < 0 || $cBBlly < 0) + { + if (!$quiet) + { + print STDERR "WARNING! Your drawing had a negative Bounding Box which is deprecated and may cause problems!. I'll shift it.\n"; + } + $translate_x= -int($cBBllx); + $translate_y= -int($cBBlly); + $cBBllx=0; + $cBBurx= $cBBurx + $translate_x; + $cBBlly=0; + $cBBury= $cBBury + $translate_y; + + $hcBBurx= $hcBBurx + $hcBBllx; + $hcBBury= $hcBBury + $hcBBlly; + $hcBBllx= 0; + $hcBBlly= 0; + + $hiresboundingbox="%%HiResBoundingBox: $hcBBllx $hcBBlly $hcBBurx $hcBBury\n"; + + $translation="$translate_x $translate_y translate"; + $translatecmd="-c \'$translation\'"; + } + $boundingbox = "%%BoundingBox: $cBBllx $cBBlly $cBBurx $cBBury\n"; + + if (!$quiet) { print STDERR "ready. $boundingbox" }; + + $before_startps= 1; + $inserted_prolog= 0; + $prolog_passed= 0; + + ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + ## -- Create output file -- + ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + if (!$quiet) { print STDERR "Creating output file $outfname ... "; } + if (!$forceoverwrite and -s "$outfname") + { + die "$prgname: Sorry, file named $outfname already exists,", + " will not overwrite it.\n", + " You will have to use the -f option, delete it or rename it", + " before running $prgname again.\n"; + } + else + { + open($outfhandle,">$outfname") or die "Can't open file $outfname for writing: $!\n"; + } + + + open($tmpfhandle,"<$tmpfname") or die "Cannot open file $tmpfname for reading"; + CREATEOUTPUT: + while (<$tmpfhandle>) + { + # check whether we are in a binary section + + $binarysection=$allbinary || + (/^(%%Begin(Binary|Data))|(beginimage)\r?\n?$/ ... /^(%%End(Binary|Data))|^(endimage)/) || + (/^(doNimage)|(doclutimage)\r?\n?$/ ... /(^|~> )Z\r?\n?$/) || # Pscript_Win_Dib_L2 5.0 0 + (/^beginjpeg / ... /~> endjpeg\r?\n?$/) || # Pscript_Win_Dib_L2 5.0 0 + (/^pdfIm/ ... /^%-EOD-/); + + if ( !$binarysection ) + { + s/\r?\n?$//; # remove CR and/or LF at end of line if not in binary section + } + + # check where magic Postscript header starts - skip leading binary stuff, e.g., HP PCL/PJL code + if ($before_startps) + { + if ( /%!/ ) # This is usually the smallest magic sequence + { # Note: Adobe Photoshop generated a binary heading, so ^ is not applicable + # %! may be part of a binary sequence, but then control characters follow + # so skip %! if non alphanumeric characters follow + if ( ! /%!.*[^\w]{2,}/ ) + { + # some heading without two control characters found + $before_startps= 0; + if (! /%!PS-Adobe.*/i) # some strange programs use other magics + { + print STDERR "** Warning **: Weird heading line -- ",$_," -- "; + } + } + } + next CREATEOUTPUT; + } + else # we are hopefully in regular postscript code now + { + # count %%EOFs as we want to know when we got the last EOF + if ( /^%%EOF\s*$/ ) + { + $seenEOF++; + } + + # We should insert our own prologue including the newly calculated BoundingBox + if (! $inserted_prolog) + { + print $outfhandle "%!PS-Adobe-$PSversion EPSF-$PSDSCversion\n"; + # check if we need to rotate + $transrotcmd=''; + if ($rotatecmd) + { + if ($rotate eq $rotright) + { + $transrotcmd="-$cBBlly $cBBurx translate"; + $boundingbox='%%BoundingBox: 0 0 ' . ($cBBury-$cBBlly) . ' ' . ($cBBurx-$cBBllx) . "\n"; + if ($hiresboundingbox ne "") + { + $hiresboundingbox='%%HiResBoundingBox: 0 0 ' . ($hcBBury-$hcBBlly) . ' ' . ($hcBBurx-$hcBBllx) . "\n"; + } + + } + elsif ($rotate eq $rotleft) + { + $transrotcmd="$cBBury -$cBBllx translate"; + $boundingbox='%%BoundingBox: 0 0 ' . ($cBBury-$cBBlly) . ' ' . ($cBBurx-$cBBllx) . "\n"; + if ($hiresboundingbox ne "") + { + $hiresboundingbox= '%%HiResBoundingBox: 0 0 ' . ($hcBBury-$hcBBlly) . ' ' . ($hcBBurx-$hcBBllx) . "\n"; + } + } + elsif ($rotate eq $rotupsidedown) + { + $transrotcmd="$cBBurx $cBBury translate"; + $boundingbox='%%BoundingBox: 0 0 ' . ($cBBurx-$cBBllx) . ' ' . ($cBBury-$cBBlly) . "\n"; + if ($hiresboundingbox ne "") + { + $hiresboundingbox='%%HiResBoundingBox: 0 0 ' . ($hcBBurx-$hcBBllx) . ' ' . ($hcBBury-$hcBBlly) . "\n"; + } + } + } + print $outfhandle $boundingbox; + if (!defined($hiresboundingbox)) + { + $nohires=1; + } + if (defined($hiresboundingbox) && !defined($nohires)) { print $outfhandle $hiresboundingbox; } + $inserted_prolog= 1; + redo CREATEOUTPUT; + } + else # already inserted_prolog + { + if (! $prolog_passed) + { + #ignore the following lines in the prologue + if ( /^%%(HiRes)?BoundingBox/ || + /^%%Pages/ || + /^%%BeginProlog/ || + /^%%EndProlog/ || + ($filterorientation && /^%%Orientation/) || + ($removeDSC && /^%%.*: \(atend\)/) || + ($removePreview && (/^%%BeginPreview/ ... /^%%EndPreview/)) ) + { + next CREATEOUTPUT; + } + else + { + if ( /^[^%].*/ || + /^%%EndComments/ ) # line is not a comment + { + #output postscript code for proper EPS file + if ($insertPScode) + { + print $outfhandle "%%EndComments\n", + "% EPSF created by ps2eps $ver[2]\n", + "%%BeginProlog\n"; + } + # Insert own postscript code for clipping + if ($clip) + { + if (!defined($nohires)) + { + printf $outfhandle "newpath %f %f moveto %f %f lineto %f %f lineto %f %f lineto closepath clip\n",$hcBBllx,$hcBBlly,$hcBBurx,$hcBBlly,$hcBBurx,$hcBBury,$hcBBllx,$hcBBury; + } + else + { + printf $outfhandle "newpath %d %d moveto %d %d lineto %d %d lineto %d %d lineto closepath clip\n",$cBBllx,$cBBlly,$cBBurx,$cBBlly,$cBBurx,$cBBury,$cBBllx,$cBBury; + } + } #endif clip + + if ($rotate ne '') + { + print $outfhandle "$transrotcmd\n"; + print $outfhandle "$rotate\n"; + } + if ($translation ne '') + { + print $outfhandle "$translation\n"; + } + + #insert surrounding postscript code + if ($insertPScode) + { + print $outfhandle "save\n", + "countdictstack\n", + "mark\n", + "newpath\n", + "/showpage {} def\n", + "/setpagedevice {pop} def\n", + "%%EndProlog\n", + "%%Page 1 1\n"; + } + $prolog_passed= 1; + if (/^%%EndComments/) { next CREATEOUTPUT; } + } #endif line is not a comment + } #end else + } #endif (we are in the prologue section) + else #we are in the main part of postscript file + { + #end of postscript file reached? + #Usually the DSC %%EOF signifies the end + if ( eof($tmpfhandle) || + ($ignoreEOFDSC == 0 && /^%%EOF\s*$/ && $seenEOF == $totalEOFDSC) + || ( $trailerseen && /^II\*\000.*/ ) + ) + { + #do not forget to print last line if not terminated by LF + if ( eof($tmpfhandle) && !/^$/ && !/^%%EOF\s*$/ ) # do not insert %%EOF twice + { + print $outfhandle $_,"\n"; + } + #add appropriate trailer + if ($insertPScode) + { + print $outfhandle "%%Trailer\n", + "cleartomark\n", + "countdictstack\n", + "exch sub { end } repeat\n", + "restore\n", + "%%EOF\n"; + } + last CREATEOUTPUT; + } # stop output + + # Trailer comment seen? + if ( /^%%Trailer\s*$/ ) + { + $trailerseen=1; + } + else + { + if (!/^\s*$/) #non empty lines follow + { + $trailerseen=0; + } + } + + # check for trigger + if (defined($triggerstring) && /^$triggerstring$/) + { + $trigger= 1; + }; + + # remove complete lines if one of the expression matches + if ( !$binarysection # only when not in binary section + && + ( + ($removePreview && (/^%%BeginPreview/ ... /^%%EndPreview/)) + || # no preview + (defined($rangefilter_begin) && + (/$rangefilter_begin/ ... /$rangefilter_end/) && + (!(/$exclude_rangefilter_begin/ ... /$exclude_rangefilter_end/)) + ) + || + (defined($triggered_rangefilter_begin) && defined($triggered_rangefilter_end) && + $trigger && + (/$triggered_rangefilter_begin/ ... /$triggered_rangefilter_end/) + ) + || + /$linefilter/ # lines by linefilter + || + ($removeDSC && (/^%( |!)(\w )+/ || /^%%([A-Za-z]+\s)/)) # any type of structured comment + || + ($removeADO && + (/^statusdict begin.*ProductName.*print product print.*flush end\r?\n?$/ || + /^\(%%\[\s*(Page:.*|LastPage)\s*\]%%\)\s*=\s*\w*\s*\r?\n?/ )) + || + /^$/ # empty lines + ) + ) + { + next CREATEOUTPUT; + } + + # replacement + if ( defined($fixsearchpat) ) + { + #if (/$fixsearchpat/) { print STDERR "**filter** before:",$_,"\n"; } + #if (s/$fixsearchpat/$fixreplacepat/) { print STDERR "**filter** after:",$_,"\n";} + s/$fixsearchpat/$fixreplacepat/; + } + + # sanity check for potential dangerous commands + if ( /(^|\s)(clear|erasepage|initmatrix|initclip|initgraphics|startjob|cleardictstack|setmatrix|setpagedevice|copypage|grestoreall|exitserver|quit)(\s|$)/ ) + { + $notsane= 1; + #print STDERR "Warning: dangerous command in line: ",$_,"\n"; + } + } # end else (this is main part) + + # Output the postscript line to result file + print $outfhandle $_; + + if (!$binarysection) + { + print $outfhandle "\n"; # terminate line with LF + } + } # end else prolog_passed + } # end else inserted_prolog + } # end while CREATEOUTPUT + + close($tmpfhandle); + + if ($tmpfname ne $infname) { unlink "$tmpfname"; } #remove temporary file + + close ($outfhandle); + + # print warning if magic sequence not found + if ( $before_startps ) + { + print STDERR "\n ** Error!! **: could not identify begin of postscript code in file $infname, please check header line!\n First line should start with %!. No output generated.\n"; + } + + if (!$quiet) { print STDERR "ready.\n"; } + if ($warnings and $notsane and !$quiet) + { + print STDERR "** Warning **: EPS-output for $infname is not sane, at least one\n", + "of the following commands was still present:\n", + "clear erasepage initmatrix initclip initgraphics startjob\n", + "cleardictstack setmatrix setpagedevice copypage grestoreall\n", + "exitserver quit\n"; + } +} #end while PROCESSFILE + +# ---- end of perl-script ------- diff --git a/Master/texmf-dist/scripts/psutils/extractres.pl b/Master/texmf-dist/scripts/psutils/extractres.pl new file mode 100755 index 00000000000..adee938c95d --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/extractres.pl @@ -0,0 +1,101 @@ +#!/usr/bin/env perl +# extractres: extract resources from PostScript file +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +$0 =~ s=.*/==; +$prog = $0; + +%resources = (); # list of resources included +%merge = (); # list of resources extracted this time +%extn = ("font", ".pfa", "file", ".ps", "procset", ".ps", # resource extns + "pattern", ".pat", "form", ".frm", "encoding", ".enc"); +%type = ("%%BeginFile:", "file", "%%BeginProcSet:", "procset", + "%%BeginFont:", "font"); # resource types + +while (@ARGV) { + $_ = shift; + if (/^-m(erge)?$/) { $merge = 1; } + elsif (/^-/) { + print STDERR "Usage: $prog [-merge] [file]\n"; + exit 1; + } else { + unshift(@ARGV, $_); + last; + } +} + +if (defined($ENV{TMPDIR})) { # set body file name + $body = "$ENV{TMPDIR}/body$$.ps"; +} elsif (defined($ENV{TEMP})) { + $body = "$ENV{TEMP}/body$$.ps"; +} elsif (defined($ENV{TMP})) { + $body = "$ENV{TMP}/body$$.ps"; +} else { + $body = "body$$.ps"; +} + +open(BODY, $body) && die "Temporary file $body already exists"; +open(BODY, ">$body") || die "Can't write file $body"; + +sub filename { # make filename for resource in @_ + local($name); + foreach (@_) { # sanitise name + s/[!()\$\#*&\\\|\`\'\"\~\{\}\[\]\<\>\?]//g; + $name .= $_; + } + $name =~ s@.*/@@; # drop directories + die "Filename not found for resource ", join(" ", @_), "\n" + if $name =~ /^$/; + $name; +} + +$output = STDOUT; # start writing header out +while (<>) { + if (/^%%BeginResource:/ || /^%%BeginFont:/ || /^%%BeginProcSet:/) { + local($comment, @res) = split(/\s+/); # look at resource type + local($type) = defined($type{$comment}) ? $type{$comment} : shift(@res); + local($name) = &filename(@res, $extn{$type}); # make file name + $saveout = $output; + if (!$resources{$name}) { + print "%%IncludeResource: $type ", join(" ", @res), "\n"; + if (!open(RES, $name)) { + open(RES, ">$name") || die "Can't write file $name"; + $resources{$name} = $name; + $merge{$name} = $merge; + $output = RES; + } else { # resource already exists + close(RES); + undef $output; + } + } elsif ($merge{$name}) { + open(RES, ">>$name") || die "Can't append to file $name"; + $output = RES; + } else { # resource already included + undef $output; + } + } elsif (/^%%EndResource/ || /^%%EndFont/ || /^%%EndProcSet/) { + if (defined $output) { + print $output $_; + close($output); + } + $output = $saveout; + next; + } elsif ((/^%%EndProlog/ || /^%%BeginSetup/ || /^%%Page:/)) { + $output = BODY; + } + print $output $_ + if defined $output; +} + +close(BODY); # close body output file + +open(BODY, $body); # reopen body for input +while (<BODY>) { # print it all + print $_; +} +close(BODY); + +unlink($body); # dispose of body file + diff --git a/Master/texmf-dist/scripts/psutils/fixdlsrps.pl b/Master/texmf-dist/scripts/psutils/fixdlsrps.pl new file mode 100755 index 00000000000..2a1d85a654c --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/fixdlsrps.pl @@ -0,0 +1,54 @@ +#!/usr/bin/env perl +# fixdlsrps: fix DviLaser/PS document to work with PSUtils +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +$nesting = 0; +$page = 1; +$infont = 0; + +@fonts = (); +@body = (); +$header = 1; + +while (<>) { + if (/^XP/) { + $infont++; + push(@fonts, $_); + $infont-- if /PXL.*RP/ || /DN?F.*RP/; + } elsif ($infont) { + push(@fonts, $_); + $infont-- if /PXL.*RP/ || /DN?F.*RP/; + } elsif ((/^%%EndSetup/ || /^%%Page:/) && $header) { + print @body; + @body = ("%%EndSetup\n"); + $header = 0; + } elsif (/^%%EndProlog/ && !$nesting) { + push(@body, + "\$DviLaser begin/GlobalMode{}bdef/LocalMode{}bdef/XP{}def/RP{}def", + "/DoInitialScaling{72.0 Resolution div dup scale}bdef end\n", $_); + } elsif (/^%%BeginPageSetup/ && !$nesting) { + push(@body, "%%Page: $page $page\n", $_, + "Resolution 72 div dup scale Magnification 1000 div dup scale\n", + "/DocumentInitState where {\n", + "/DocumentInitState [ matrix currentmatrix currentlinewidth", + " currentlinecap currentlinejoin currentdash currentgray", + " currentmiterlimit] cvx put}if\n"); + $page++; + } elsif (/^%%BeginDocument:/ || /^%%BeginBinary:/ || /^%%BeginFile:/) { + push(@body, $_); + $nesting++; + } elsif (/^%%EndDocument/ || /^%%EndBinary/ || /^%%EndFile/) { + push(@body, $_); + $nesting--; + } elsif (!/^%%PageBoundingBox:/ && !/^%%Page:/) { + push(@body, $_); + } +} + +print @fonts; +print @body; + +exit 0; + diff --git a/Master/texmf-dist/scripts/psutils/fixfmps.pl b/Master/texmf-dist/scripts/psutils/fixfmps.pl new file mode 100755 index 00000000000..039ac8e5a3e --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/fixfmps.pl @@ -0,0 +1,21 @@ +#!/usr/bin/env perl +# fixfmps: get conforming PostScript out of FrameMaker version 2 file +# move all FMDEFINEFONTs to start of pages +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +%fonts=(); + +while (<>) { + if (/^([0-9]+) [0-9]+ .* FMDEFINEFONT$/) { + $fonts{$1} = $_; + } elsif (/^[0-9.]+ [0-9.]+ [0-9]+ FMBEGINPAGE$/) { + print $_, join('',values(%fonts)); + } elsif (m%(.*/PageSize \[paperwidth paperheight\]put )setpagedevice(.*)%) { + print "$1pop$2\n"; + } else { + print $_; + } +} + diff --git a/Master/texmf-dist/scripts/psutils/fixpsditps.pl b/Master/texmf-dist/scripts/psutils/fixpsditps.pl new file mode 100755 index 00000000000..2a1728a8204 --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/fixpsditps.pl @@ -0,0 +1,25 @@ +#!/usr/bin/env perl +# fixpsditps: fix psdit output for use in psutils +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +$nesting = 0; + +while (<>) { + if (/^\/p{pop showpage pagesave restore \/pagesave save def}def$/) { + print "/p{pop showpage pagesave restore}def\n"; + } elsif (/^%%BeginDocument/ || /^%%BeginBinary/ || /^%%BeginFile/ ) { + print $_; + $nesting++; + } elsif (/^%%EndDocument/ || /^%%EndBinary/ || /^%%EndFile/) { + print $_; + $nesting--; + } elsif (/^%%Page:/ && $nesting == 0) { + print $_; + print "xi\n"; + } elsif (! /^xi$/) { + print $_; + } +} + diff --git a/Master/texmf-dist/scripts/psutils/fixpspps.pl b/Master/texmf-dist/scripts/psutils/fixpspps.pl new file mode 100755 index 00000000000..77bba66d6b7 --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/fixpspps.pl @@ -0,0 +1,58 @@ +#!/usr/bin/env perl +# mangle PostScript produced by PSPrint to make it almost conforming +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +$header = 1; $ignore = 0; +$verbose = 0; +@body = (); +%fonts = (); $font = ""; +$inchar = 0; @char = (); + +while (<>) { + if (/^\@end$/) { + $ignore = 1; + } elsif (/^[0-9]+ \@bop0$/) { + $ignore = 0; + $header = 1; + } elsif ($header) { + if (/^\/([a-z.0-9]+) \@newfont$/) { + if (! defined($fonts{$1})) { + $fonts{$1} = 1; + print; + } elsif ($verbose) { + print STDERR "$font already defined\n"; + } + } elsif (/^([a-z.0-9]+) sf$/) { + $font = $1; + print; + } elsif (/^\[</) { + $inchar = 1; + push (@char, $_); + } elsif ($inchar) { + push (@char, $_); + if (/.*\] ([0-9]+) dc$/) { + if (! defined($fonts{$font,$1})) { + $fonts{$font,$1} = 1; + print (@char); + } elsif ($verbose) { + print STDERR "$font character $1 already defined\n"; + } + $inchar = 0; + @char = (); + } + } elsif (/^([0-9]+) \@bop1$/) { + $header = 0; + push (@body, "%%Page: ? $1\n"); + push (@body, $_); + } else { + print; + } + } elsif (! $ignore) { + push (@body, $_); + } +} +print (@body); +print ("\@end\n"); + diff --git a/Master/texmf-dist/scripts/psutils/fixscribeps.pl b/Master/texmf-dist/scripts/psutils/fixscribeps.pl new file mode 100755 index 00000000000..bd4e9a0e3e0 --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/fixscribeps.pl @@ -0,0 +1,19 @@ +#!/usr/bin/env perl +# fixscribeps: get conforming PostScript out of Scribe +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +$inepsf = 0; +$epsfn = 0; +while (<>) { + if (/^([0-9]+ [0-9]+ [0-9]+ PB) (%!.*)/) { + print "$1\n%%BeginDocument: Scribe-EPSF $epsfn 0\n$2\n"; + $inepsf++; + } elsif (/^ PE/ && $inepsf) { + print "%%EndDocument\n", $_; + } else { + print $_; + } +} + diff --git a/Master/texmf-dist/scripts/psutils/fixtpps.pl b/Master/texmf-dist/scripts/psutils/fixtpps.pl new file mode 100755 index 00000000000..4239bb9dfc5 --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/fixtpps.pl @@ -0,0 +1,28 @@ +#!/usr/bin/env perl +# fixtpps: fix tpscript document to work with PSUtils +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +$nesting = 0; +$header = 1; + +while (<>) { + if (/^%%Page:/ && $nesting == 0) { + print $_; + print "save home\n"; + $header = 0; + } elsif (/^%%BeginDocument/ || /^%%BeginBinary/ || /^%%BeginFile/) { + print $_; + $nesting++; + } elsif (/^%%EndDocument/ || /^%%EndBinary/ || /^%%EndFile/) { + print $_; + $nesting--; + } elsif (/save home/) { + s/save home//; + print $_; + } elsif (!$header || (! /^save$/ && ! /^home$/)) { + print $_; + } +} + diff --git a/Master/texmf-dist/scripts/psutils/fixwfwps.pl b/Master/texmf-dist/scripts/psutils/fixwfwps.pl new file mode 100755 index 00000000000..92d88443fe1 --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/fixwfwps.pl @@ -0,0 +1,33 @@ +#!/usr/bin/env perl +# fixwfwps: fix Word for windows PostScript for printing. +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +$nesting = 0; +while (<>) { + tr/\000-\010\012-\014\016-\037//d; + foreach (grep($_ ne "", split("\015"))) { + s!/SVDoc\s+save\s+def!!g; + s!SVDoc\s+restore!!g; + if (/^(%!PS-Adobe-\d*\.\d*) EPSF-/ && !$nesting) { + print "$1\n"; + $wfwepsf = 1; + } elsif (/^SS\s*$/ && $wfwepsf) { + print "%%Page: $wfwepsf $wfwepsf\n"; + $wfwepsf++; + print "$_\n"; + } elsif (/^%MSEPS Preamble/) { + print "%%BeginDocument: (Included EPSF)\n"; + print "$_\n"; + $nesting++; + } elsif (/^%MSEPS Trailer/) { + $nesting--; + print "$_\n"; + print "%%EndDocument\n"; + } elsif (! /^%%BoundingBox/) { + print "$_\n"; + } + } +} + diff --git a/Master/texmf-dist/scripts/psutils/fixwpps.pl b/Master/texmf-dist/scripts/psutils/fixwpps.pl new file mode 100755 index 00000000000..83a5fdfaf0b --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/fixwpps.pl @@ -0,0 +1,31 @@ +#!/usr/bin/env perl +# fixwpps: get semi-conforming PostScript out of WordPerfect 5.0 file +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +$page = 1; +$nesting = 0; + +while (<>) { + s/([^\/]_t)([0-9]+)/\1 \2/g; # fix wp 5.0 bug + if (m!/_[be][dp]! || m!_bp \d+ \d+ roll!) { + print $_; + } elsif (/^(.*)(_bp.*)$/) { + print "$1\n" if $1 ne ""; + print "%%Page: $page $page\n"; + print "$2\n"; + $page++; + $nesting++; + } elsif (/_ep$/) { + print $_; + $nesting--; + } elsif (/^(.*)(_ed.*)/) { + print "$1\n" if $1 ne ""; + print "%%Trailer:\n"; + print "$2\n"; + } else { + print $_; + } +} + diff --git a/Master/texmf-dist/scripts/psutils/fixwwps.pl b/Master/texmf-dist/scripts/psutils/fixwwps.pl new file mode 100755 index 00000000000..bfd58c086da --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/fixwwps.pl @@ -0,0 +1,20 @@ +#!/usr/bin/env perl +# fixwwps: get semi-conforming PostScript out of Windows Write file +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +$page = 1; + +while (<>) { + if (/^(%!.*) EPSF-\d.\d/) { + print $1, "\n"; + } elsif (/^SS/) { + print "%%Page: $page $page\n"; + print $_; + $page++; + } else { + print $_; + } +} + diff --git a/Master/texmf-dist/scripts/psutils/includeres.pl b/Master/texmf-dist/scripts/psutils/includeres.pl new file mode 100755 index 00000000000..c9d0eee61cb --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/includeres.pl @@ -0,0 +1,45 @@ +#!/usr/bin/env perl +# includeres: include resources in PostScript file +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +$0 =~ s=.*/==; +$prog = $0; + +%extn = ("font", ".pfa", "file", ".ps", "procset", ".ps", # resource extns + "pattern", ".pat", "form", ".frm", "encoding", ".enc"); +%type = ("%%BeginFile:", "file", "%%BeginProcSet:", "procset", + "%%BeginFont:", "font"); # resource types + +sub filename { # make filename for resource in @_ + local($name); + foreach (@_) { # sanitise name + s/[!()\$\#*&\\\|\`\'\"\~\{\}\[\]\<\>\?]//g; + $name .= $_; + } + $name =~ s@.*/@@; # drop directories + die "Filename not found for resource ", join(" ", @_), "\n" + if $name =~ /^$/; + $name; +} + +while (<>) { + if (/^%%IncludeResource:/ || /^%%IncludeFont:/ || /^%%IncludeProcSet:/) { + local($comment, @res) = split(/\s+/); + local($type) = defined($type{$comment}) ? $type{$comment} : shift(@res); + local($name) = &filename(@res); + if (open(RES, $name) || open(RES, "$name$extn{$type}")) { + while (<RES>) { + print $_; + } + close(RES); + } else { + print "%%IncludeResource: ", join(" ", $type, @res), "\n"; + print STDERR "Resource $name not found\n"; + } + } else { + print $_; + } +} + diff --git a/Master/texmf-dist/scripts/psutils/psmerge.pl b/Master/texmf-dist/scripts/psutils/psmerge.pl new file mode 100755 index 00000000000..ff1b8039b4d --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/psmerge.pl @@ -0,0 +1,86 @@ +#!/usr/bin/env perl +# psmerge: merge PostScript files produced by same application and setup +# usage: psmerge [-oout.ps] [-thorough] file1.ps file2.ps ... +# +# Copyright (C) Angus J. C. Duggan 1991-1995 +# See file LICENSE for details. + +$0 =~ s=.*/==; +$prog = $0; + +while ($ARGV[0] =~ /^-/) { + $_ = shift; + if (/^-o(.+)/) { + if (!close(STDOUT) || !open(STDOUT, ">$1")) { + print STDERR "$prog: can't open $1 for output\n"; + exit 1; + } + } elsif (/^-t(horough)?$/) { + $thorough = 1; + } else { + print STDERR "Usage: $prog [-oout] [-thorough] file...\n"; + exit 1; + } +} + +$page = 0; +$first = 1; +$nesting = 0; + +@header = (); +$header = 1; + +@trailer = (); +$trailer = 0; + +@pages = (); +@body = (); + +@resources = (); +$inresource = 0; + +while (<>) { + if (/^%%BeginFont:/ || /^%%BeginResource:/ || /^%%BeginProcSet:/) { + $inresource = 1; + push(@resources, $_); + } elsif ($inresource) { + push(@resources, $_); + $inresource = 0 if /^%%EndFont/ || /^%%EndResource/ || /^%%EndProcSet/; + } elsif (/^%%Page:/ && $nesting == 0) { + $header = $trailer = 0; + push(@pages, join("", @body)) if @body; + $page++; + @body = ("%%Page: ($page) $page\n"); + } elsif (/^%%Trailer/ && $nesting == 0) { + push(@trailer, $_); + push(@pages, join("", @body)) if @body; + @body = (); + $trailer = 1; + $header = 0; + } elsif ($header) { + push(@trailer, $_); + push(@pages, join("", @body)) if @body; + @body = (); + $trailer = 1; + $header = 0; + } elsif ($trailer) { + if (/^%!/ || /%%EOF/) { + $trailer = $first = 0; + } elsif ($first) { + push(@trailer, $_); + } + } elsif (/^%%BeginDocument/ || /^%%BeginBinary/ || /^%%BeginFile/) { + push(@body, $_); + $nesting++; + } elsif (/^%%EndDocument/ || /^%%EndBinary/ || /^%%EndFile/) { + push(@body, $_); + $nesting--; + } else { + print $_ if $print; + } +} + +print @trailer; + +exit 0; + diff --git a/Master/texmf-dist/scripts/tetex/fmtutil-sys.sh b/Master/texmf-dist/scripts/tetex/fmtutil-sys.sh new file mode 100755 index 00000000000..bfb52f94e1f --- /dev/null +++ b/Master/texmf-dist/scripts/tetex/fmtutil-sys.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +# fmtutil-sys: Thomas Esser, public domain. + +# wrapper script for fmtutil with TEXMFVAR and TEXMFCONFIG set to +# TEXMFSYSVAR / TEXMFSYSCONFIG + +test -f /bin/ksh && test -z "$RUNNING_KSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \ + && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; } +unset RUNNING_KSH + +test -f /bin/bsh && test -z "$RUNNING_BSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \ + && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; } +unset RUNNING_BSH + +# hack around a bug in zsh: +test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"' +export PATH + +v=`kpsewhich -var-value TEXMFSYSVAR` +c=`kpsewhich -var-value TEXMFSYSCONFIG` + +TEXMFVAR="$v" +TEXMFCONFIG="$c" +export TEXMFVAR TEXMFCONFIG + +exec fmtutil ${1+"$@"} diff --git a/Master/texmf-dist/scripts/tetex/fmtutil.sh b/Master/texmf-dist/scripts/tetex/fmtutil.sh new file mode 100755 index 00000000000..06ef11380b4 --- /dev/null +++ b/Master/texmf-dist/scripts/tetex/fmtutil.sh @@ -0,0 +1,1017 @@ +#!/bin/sh +# fmtutil - utility to maintain format files. +# Public domain. Originally written by Thomas Esser. +# Run with --help for usage. + +# program history: +# further changes in texk/tetex/ChangeLog. +# 2007-01-04 patch by JK to support $engine subdir (enabled by default) +# Fr Apr 8 19:15:05 CEST 2005 cleanup now has an argument for the return code +# Do Mar 02 10:42:31 CET 2006 add tmpdir to TEXFORMATS +# So Ma 27 18:52:06 CEST 2005 honor $TMPDIR, $TEMP and $TMP, not just $TMP +# Sa Jan 15 18:13:46 CET 2005 avoid multiple variable assignments in one statement +# Di Jan 11 11:42:36 CET 2005 fix --byhyphen with relative hyphenfile +# Fr Dez 31 16:51:29 CET 2004 option catcfg added (for being called by texconfig) +# Do Dez 30 21:53:27 CET 2004 rename variable verbose to verboseFlag +# Sa Dez 25 12:44:23 CET 2004 implementation adopted for teTeX-3.0 (tcfmgr) +# Do Okt 28 11:09:36 CEST 2004 added --refresh +# Fr Sep 17 19:25:28 CEST 2004 save $0 in a variable before calling a function +# Sun May 9 23:24:06 CEST 2004 changes for new web2c: format names +# are now *.fmt, nothing else, disable +# "plain" symlinks +# Thu May 6 14:16:19 CEST 2004: "mv ...</dev/null" to avoid interaction. +# Sun Mar 21 19:44:36 CET 2004: support aleph +# Thu Dec 25 22:11:53 CET 2003: add version string +# Thu Dec 25 12:56:14 CET 2003: new listcfg_loop lists only supported formats +# Sun Dec 21 10:25:37 CET 2003 "mktexfmt pdflatex" did not work (if called +# as mktexfmt, an extention was mandatory) +# Mon Sep 15 13:07:31 CEST 2003 add tmpdir to TEXINPUTS +# Sun Aug 3 11:09:46 CEST 2003 special case for mptopdf +# Sun Apr 20 10:27:09 CEST 2003 allow " " as well as tab in config file +# Wed Feb 19 21:14:52 CET 2003 add eomega support +# Sat Feb 15 22:01:35 CET 2003 let mf-nowin work without mf +# Wed Dec 25 09:47:44 CET 2002 bugfix for localized pool files +# Fri Oct 25 02:29:06 CEST 2002: now more careful about find_hyphenfile() +# Tue Oct 22 22:46:48 CEST 2002: -jobname, oft extension +# Fri Oct 4 22:33:17 CEST 2002: add more cli stuff: enablefmt +# disablefmt listcfg +# Sun Jul 7 21:28:37 CEST 2002: look at log file for possible problems, +# and issue a warning +# Tue Jun 4 21:52:57 CEST 2002: trap / cleanup code from updmap +# Tue Jun 4 19:32:44 CEST 2002: be smarter about stdout / stderr +# Tue Apr 9 22:46:34 CEST 2002: pass -progname=mpost for metafun +# Tue Apr 2 00:37:39 CEST 2002: added mktexfmt functionality +# Tue Jun 5 14:45:57 CEST 2001: added support for mf / mpost +############################################################################### + +test -f /bin/ksh && test -z "$RUNNING_KSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \ + && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; } +unset RUNNING_KSH + +test -f /bin/bsh && test -z "$RUNNING_BSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \ + && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; } +unset RUNNING_BSH + +# hack around a bug in zsh: +test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"' + +progname=fmtutil +argv0=$0 +version='$Id: fmtutil 25899 2012-04-09 23:09:26Z karl $' + +cnf=fmtutil.cnf # name of the config file +export PATH + +############################################################################### +# cleanup() +# clean up the temp area and exit with proper exit status +############################################################################### +cleanup() +{ + rc=$1 + # for debugging, exit $rc here so $tmpdir with its logs sticks around. + $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \ + && { cd / && rm -rf "$tmpdir"; } + (exit $rc); exit $rc +} + +############################################################################### +# help() and version() +# display help (or version) message and exit +############################################################################### +help() +{ + cat <<eof +$version +Usage: fmtutil [OPTION]... CMD [ARG]... +Usage: mktexfmt FORMAT.fmt|BASE.base|MEM.mem|FMTNAME.EXT + +Rebuild and manage TeX formats, Metafont bases and MetaPost mems. + +If the command name ends in mktexfmt, only one format can be created. +The only options supported are --help and --version, and the command +line must consist of either a format name, with its extension, or a +plain name that is passed as the argument to --byfmt (see below). The +full name of the generated file (if any) is written to stdout, and +nothing else. + +If not operating in mktexfmt mode, the command line can be more general, +and multiple formats can be generated, as follows. + +Optional behavior: + --cnffile FILE read FILE instead of fmtutil.cnf. + --fmtdir DIRECTORY + --no-engine-subdir don't use engine-specific subdir of the fmtdir + --no-error-if-no-format exit successfully if no format is selected + --quiet be silent + --test (not implemented, just for compatibility) + --dolinks (not implemented, just for compatibility) + --force (not implemented, just for compatibility) + +Valid commands for fmtutil: + --all recreate all format files + --missing create all missing format files + --refresh recreate only existing format files + --byengine ENGINENAME (re)create formats using ENGINENAME + --byfmt FORMATNAME (re)create format for FORMATNAME + --byhyphen HYPHENFILE (re)create formats that depend on HYPHENFILE + --enablefmt FORMATNAME enable formatname in config file + --disablefmt FORMATNAME disable formatname in config file + --listcfg list (enabled and disabled) configurations, + filtered to available formats + --catcfg output the content of the config file + --showhyphen FORMATNAME print name of hyphenfile for format FORMATNAME + --edit no-op in TeX Live + --version show version info + --help show this message + +The default config file is named fmtutil.cnf, and +running kpsewhich fmtutil.cnf should show the active file. +The command kpsewhich --engine=/ --all foo.fmt should show the +locations of any and all foo.fmt files. + +For more information about fmt generation in TeX Live, try +tlmgr --help or see http://tug.org/texlive/doc/tlmgr.html. +The \`generate' action in tlmgr does the work. + +Report bugs to: tex-k@tug.org +TeX Live home page: <http://tug.org/texlive/> +eof + cleanup 0 +} + +versionfunc() +{ + cat <<eof +$progname version $version +eof + cleanup 0 +} + +############################################################################### +# setupTmpDir() +# set up a temp directory and a trap to remove it +############################################################################### +setupTmpDir() +{ + $needsCleanup && return + + trap 'cleanup 1' 1 2 3 7 13 15 + needsCleanup=true + (umask 077; mkdir "$tmpdir") \ + || abort "could not create directory \`$tmpdir'" +} + +############################################################################### +# configReplace(file, pattern, line) +# The first line in file that matches pattern gets replaced by line. +# line will be added at the end of the file if pattern does not match. +############################################################################### +configReplace() +{ + file=$1; pat=$2; line=$3 + + if grep "$pat" "$file" >/dev/null; then + ed "$file" >/dev/null 2>&1 <<-eof + /$pat/ + c + $line + . + w + q +eof + else + echo "$line" >> $file + fi +} + +############################################################################### +# setmatch(match) +# setting the "match state" to true or false. Used to see if there was at +# least one match. +############################################################################### +setmatch() +{ + match=$1 +} + +############################################################################### +# getmatch() +# return success if there was at least one match. +############################################################################### +getmatch() +{ + test "x$match" = xtrue +} + +############################################################################### +# initTexmfMain() +# get $MT_TEXMFMAIN from $TEXMFMAIN +############################################################################### +initTexmfMain() +{ + case $MT_TEXMFMAIN in + "") MT_TEXMFMAIN=`kpsewhich --var-value=TEXMFMAIN`;; + esac + export MT_TEXMFMAIN +} + +############################################################################### +# cache_vars() +# locate files / kpathsea variables and export variables to environment +# this speeds up future calls to e.g. mktexupd +############################################################################### +cache_vars() +{ + : ${MT_VARTEXFONTS=`kpsewhich --expand-var='$VARTEXFONTS' | sed 's%^!!%%'`} + : ${MT_MKTEXNAM=`kpsewhich --format='web2c files' mktexnam`} + : ${MT_MKTEXNAM_OPT=`kpsewhich --format='web2c files' mktexnam.opt`} + : ${MT_MKTEXDIR=`kpsewhich --format='web2c files' mktexdir`} + : ${MT_MKTEXDIR_OPT=`kpsewhich --format='web2c files' mktexdir.opt`} + : ${MT_MKTEXUPD=`kpsewhich --format='web2c files' mktexupd`} + : ${MT_MKTEX_CNF=`kpsewhich --format='web2c files' mktex.cnf`} + : ${MT_MKTEX_OPT=`kpsewhich --format='web2c files' mktex.opt`} + export MT_VARTEXFONTS MT_MKTEXNAM MT_MKTEXNAM_OPT MT_MKTEXDIR + export MT_MKTEXDIR_OPT MT_MKTEXUPD MT_MKTEX_CNF MT_MKTEX_OPT +} + +############################################################################### +# abort(errmsg) +# print `errmsg' to stderr and exit with error code 1 +############################################################################### +abort() +{ + echo "$progname: $1." >&2 + cleanup 1 +} + +############################################################################### +# maybe_abort(errmsg) +# print `errmsg' to stderr and +# unless noAbortFlag is set exit with error code 1 +############################################################################### +maybe_abort() +{ + echo "$progname: $1." >&2 + $noAbortFlag || cleanup 1 +} + +############################################################################### +# verboseMsg(msg) +# print `msg' to stderr is $verbose is true +############################################################################### +verboseMsg() { + $verboseFlag && verbose echo ${1+"$@"} +} + +############################################################################### +# byebye() +# report any failures and exit the program +############################################################################### +byebye() +{ + if $has_warnings; then + { + cat <<eof + +############################################################################### +$progname: Warning! Some warnings have been issued. +Visit the log files in directory + $destdir +for details. +############################################################################### + +This is a summary of all \`warning' messages: +$log_warning_msg +eof + } >&2 + fi + + if $has_errors; then + { + cat <<eof + +############################################################################### +$progname: Error! Not all formats have been built successfully. +Visit the log files in directory + $destdir +for details. +############################################################################### + +This is a summary of all \`failed' messages: +$log_failure_msg +eof + } >&2 + cleanup 1 + else + cleanup 0 + fi +} + +############################################################################### +# init_log_warning() +# reset the list of warning messages +############################################################################### +init_log_warning() +{ + log_warning_msg= + has_warnings=false +} + +############################################################################### +# init_log_failure() +# reset the list of failure messages +############################################################################### +init_log_failure() +{ + log_failure_msg= + has_errors=false +} + +############################################################################### +# log_warning(errmsg) +# report and save warning message `errmsg' +############################################################################### +log_warning() +{ + echo "Warning: $@" >&2 + if test -z "$log_warning_msg"; then + log_warning_msg="$@" + else + OLDIFS=$IFS; IFS= + log_warning_msg="$log_warning_msg +$@" + IFS=$OLDIFS + fi + has_warnings=true +} + +############################################################################### +# log_failure(errmsg) +# report and save failure message `errmsg' +############################################################################### +log_failure() +{ + echo "Error: $@" >&2 + if test -z "$log_failure_msg"; then + log_failure_msg="$@" + else + OLDIFS=$IFS; IFS= + log_failure_msg="$log_failure_msg +$@" + IFS=$OLDIFS + fi + has_errors=true +} + +############################################################################### +# verbose (cmd) +# execute cmd. Redirect output depending on $mktexfmtMode. +############################################################################### +verbose() +{ + $mktexfmtMode && ${1+"$@"} >&2 || ${1+"$@"} +} + +############################################################################### +# mktexdir(args) +# call mktexdir script, disable all features (to prevent sticky directories) +############################################################################### +mktexdir() +{ + initTexmfMain + MT_FEATURES=none "$MT_TEXMFMAIN/web2c/mktexdir" "$@" >&2 +} + +############################################################################### +# tcfmgr(args) +# call tcfmgr script +############################################################################### +tcfmgr() +{ + initTexmfMain + "$MT_TEXMFMAIN/texconfig/tcfmgr" "$@" +} + +############################################################################### +# mktexupd(args) +# call mktexupd script +############################################################################### +mktexupd() +{ + initTexmfMain + "$MT_TEXMFMAIN/web2c/mktexupd" "$@" +} + +############################################################################### +# main() +# parse commandline arguments, initialize variables, +# switch into temp. direcrory, execute desired command +############################################################################### +main() +{ + destdir= # global variable: where do we put the format files? + cnf_file= # global variable: full name of the config file + cmd= # desired action from command line + needsCleanup=false + need_find_hyphenfile=false + cfgparam= + cfgmaint= + verboseFlag=true + noAbortFlag=false + # eradicate double slashes to avoid kpathsea expansion. + tmpdir=`echo ${TMPDIR-${TEMP-${TMP-/tmp}}}/$progname.$$ | sed s,//,/,g` + + # mktexfmtMode: if called as mktexfmt, set to true. Will echo the + # first generated filename after successful generation to stdout then + # (and nothing else), since kpathsea can only deal with one. + mktexfmtMode=false + case $argv0 in + mktexfmt|*/mktexfmt) + mktexfmtMode=true + fullfmt=$1; shift + case $fullfmt in + ""|--help) help ;; + --version) versionfunc ;; + --*) abort "unknown option $fullfmt, try --help" ;; + *.fmt|*.mem|*.base) + set x --byfmt `echo $fullfmt | sed 's@\.[a-z]*$@@'` ${1+"$@"} + shift + ;; + *.*) abort "unknown format type: $fullfmt" ;; + *) set x --byfmt $fullfmt; shift ;; + esac + ;; + esac + + use_engine_dir=true # whether to use web2c/$engine subdirs + while + case $1 in + --cnffile) + shift; cnf_file=$1; cfgparam=1;; + --cnffile=*) + cnf_file=`echo "$1" | sed 's/--cnffile=//'`; cfgparam=1; shift ;; + --fmtdir) + shift; destdir=$1;; + --fmtdir=*) + destdir=`echo "$1" | sed 's/--fmtdir=//'`; shift ;; + --no-engine-subdir) + use_engine_dir=false;; + --all|-a) + cmd=all;; + --edit|-e) + cmd=edit; cfgmaint=1;; + --missing|-m) + cmd=missing;; + --refresh|-r) + cmd=refresh;; + --byengine) + shift; cmd=byengine; arg=$1;; + --byengine=*) + cmd=byengine; arg=`echo "$1" | sed 's/--byengine=//'`; shift ;; + --byfmt|-f) + shift; cmd=byfmt; arg=$1;; + --byfmt=*) + cmd=byfmt; arg=`echo "$1" | sed 's/--byfmt=//'`; shift ;; + --byhyphen|-h) + shift; cmd=byhyphen; arg=$1;; + --byhyphen=*) + cmd=byhyphen; arg=`echo "$1" | sed 's/--byhyphen=//'`; shift ;; + --showhyphen|-s) + shift; cmd=showhyphen; arg=$1;; + --showhyphen=*) + cmd=showhyphen; arg=`echo "$1" | sed 's/--showhyphen=//'`; shift ;; + --help|-help) + cmd=help;; + --version) + cmd=version;; + --enablefmt) + shift; cmd=enablefmt; arg=$1; cfgmaint=1;; + --enablefmt=*) + cmd=enablefmt; arg=`echo "$1" | sed 's/--enablefmt=//'`; cfgmaint=1; shift;; + --disablefmt) + shift; cmd=disablefmt; arg=$1; cfgmaint=1;; + --disablefmt=*) + cmd=disablefmt; arg=`echo "$1" | sed 's/--disablefmt=//'`; cfgmaint=1; shift;; + --catcfg) + cmd=catcfg;; + --listcfg) + cmd=listcfg;; + --no-error-if-no-format) + noAbortFlag=true;; + --quiet|-q|--silent) + verboseFlag=false;; + --test|--dolinks|--force) + ;; + "") break;; + *) abort "unknown option \`$1'; try $progname --help if you need it";; + esac + do test $# -gt 0 && shift; done + + case "$cmd" in + "") abort "missing command; try $progname --help if you need it";; + help) help;; + version) versionfunc;; + esac + + if test -n "$cfgparam"; then + test -f "$cnf_file" || abort "config file \`$cnf_file' not found (ls-R missing?)" + fi + + if test -n "$cfgmaint"; then + if test -z "$cfgparam"; then + setupTmpDir + co=`tcfmgr --tmp $tmpdir --cmd co --file $cnf` + test $? = 0 || cleanup 1 + set x $co; shift + id=$1; cnf_file=$3; orig=$4 + verboseMsg "$progname: initial config file is \`$orig'" + fi + else + if test -z "$cfgparam"; then + cnf_file=`tcfmgr --cmd find --file $cnf` + test -f "$cnf_file" || abort "config file \`$cnf' not found" + fi + fi + + # these commands need no temp directory, so do them here: + case "$cmd" in + catcfg) + grep -v '^ *#' "$cnf_file" | sed 's@^ *@@; s@ *$@@' | grep . | sort + cleanup $? ;; + edit) + echo "$0: fmtutil --edit is disabled in TeX Live;" >&2 + echo "$0: use a file fmtutil-local.cnf instead." >&2 + echo "$0: See tlmgr --help or http://tug.org/texlive/doc/tlmgr.html." >&2 + cleanup 0 ;; + enablefmt|disablefmt) + $cmd $arg ;; # does not return + listcfg) + listcfg_loop + cleanup $? ;; + showhyphen) + show_hyphen_file "$arg" + cleanup $? ;; + esac + + if test -n "$cfgmaint"; then + if test -z "$cfgparam"; then + ci=`tcfmgr --tmp $tmpdir --cmd ci --id $id` + if test $? = 0; then + if test -n "$ci"; then + verboseMsg "$progname: configuration file updated: \`$ci'" + else + verboseMsg "$progname: configuration file unchanged." + fi + else + abort "failed to update configuration file." + fi + fi + cleanup $? + fi + + # set up destdir: + if test -z "$destdir"; then + : ${MT_TEXMFVAR=`kpsewhich -var-value=TEXMFVAR`} + destdir=$MT_TEXMFVAR/web2c + fi + test -d "$destdir" || mktexdir "$destdir" >/dev/null 2>&1 + test -d "$destdir" || abort "format directory \`$destdir' does not exist" + test -w "$destdir" || abort "format directory \`$destdir' is not writable" + + thisdir=`pwd` + + : ${KPSE_DOT=$thisdir} + export KPSE_DOT + + # due to KPSE_DOT, we don't search the current directory, so include + # it explicitly for formats that \write and later on \read + TEXINPUTS="$tmpdir:$TEXINPUTS"; export TEXINPUTS + # for formats that load other formats (e.g., jadetex loads latex.fmt), + # add the current directory to TEXFORMATS, too. Currently unnecessary + # for MFBASES and MPMEMS. + TEXFORMATS="$tmpdir:$TEXFORMATS"; export TEXFORMATS + + setupTmpDir + cd "$tmpdir" || cleanup 1 + + # make local paths absolute: + case "$destdir" in + /*) ;; + *) destdir="$thisdir/$destdir";; + esac + case "$cnf_file" in + /*) ;; + *) cnf_file="$thisdir/$cnf_file";; + esac + + cache_vars + init_log_failure + init_log_warning + # execute the desired command: + case "$cmd" in + all) + recreate_all;; + missing) + create_missing;; + refresh) + recreate_existing;; + byengine) + recreate_by_engine "$arg";; + byfmt) + recreate_by_fmt "$arg";; + byhyphen) + recreate_by_hyphenfile "$arg";; + esac + + byebye +} + +############################################################################### +# parse_line(config_line) sets global variables: +# format: name of the format, e.g. pdflatex +# engine: name of the TeX engine, e.g. tex, etex, pdftex +# texargs: flags for initex and name of the ini file (e.g. -mltex frlatex.ini) +# fmtfile: name of the format file (without directory, but with extension) +# +# Support for building internationalized formats sets: +# pool: base name of pool file (to support translated pool files) +# tcx: translation file used when creating the format +# +# Example (for fmtutil.cnf): +# mex-pl tex mexconf.tex nls=tex-pl,il2-pl mex.ini +# +# The nls parameter (pool,tcx) can only be specified as the first argument +# inside the 4th field in fmtutil.cnf. +# +# exit code: returns error code if the ini file is not installed +############################################################################### +parse_line() +{ + case $1 in + '#!') disabled=true; shift;; + *) disabled=false;; + esac + format=$1 + engine=$2 + hyphenation=$3 + shift; shift; shift + + # handle nls support: pool + tcx + pool=; tcx= + case $1 in + nls=*) + pool=`echo $1 | sed 's@nls=@@; s@,.*@@'` + tcx=`echo $1 | sed 's@nls=[^,]*@@; s@^,@@'` + shift # nls stuff is not handled by the engine directly, + # so we shift this away + ;; + esac + + texargs="$@" + + case "$engine" in + mpost) fmtfile="$format.mem"; kpsefmt=mp; texengine=metapost;; + mf|mfw|mf-nowin) fmtfile="$format.base"; kpsefmt=mf; texengine=metafont;; + *) fmtfile="$format.fmt"; kpsefmt=tex; texengine=$engine;; + esac + + # remove any * for the sake of the kpsewhich lookup. + eval lastarg=\$$# + inifile=`echo $lastarg | sed 's%^\*%%'` + + # See if we can find $inifile for return code: + kpsewhich -progname=$format -format=$kpsefmt $inifile >/dev/null 2>&1 +} + +############################################################################### +# find_hyphenfile(format, hyphenation) searches for hyphenation along +# searchpath of format +# exit code: returns error is file is not found +############################################################################### +find_hyphenfile() +{ + format="$1"; hyphenation="`echo $2 | sed 's/,/ /g'`" + case $hyphenation in + -) ;; + *) kpsewhich -progname="$format" -format=tex $hyphenation;; + esac +} + +############################################################################### +# find_info_for_name(format) +# Look up the config line for format `format' and call parse_line to set +# global variables. +############################################################################### +find_info_for_name() +{ + format="$1" + + # set x `awk '$1 == format {print; exit}' format="$format" "$cnf_file"`; shift + set x `egrep "^$format( | )" "$cnf_file" | sed q`; shift + test $# = 0 && abort "no info for format \`$format'" + parse_line "$@" +} + +############################################################################### +# run_initex() +# Calls initex. Assumes that global variables are set by parse_line. +############################################################################### +run_initex() +{ + + # install a pool file and set tcx flag if requested in lang= option: + rm -f *.pool + poolfile= + tcxflag= + test -n "$pool" \ + && poolfile=`(kpsewhich -progname=$engine $pool.pool) 2>/dev/null` + if test -n "$poolfile" && test -f "$poolfile"; then + verboseMsg "$progname: attempting to create localized format using pool=$pool and tcx=$tcx." + cp "$poolfile" $engine.pool + test -n "$tcx" && tcxflag=-translate-file=$tcx + localpool=true + else + localpool=false + fi + + jobswitch="-jobname=$format" + case "$format" in + metafun) prgswitch=-progname=mpost;; + mptopdf|cont-??) prgswitch=-progname=context;; + *) prgswitch=-progname=$format;; + esac + + rm -f $fmtfile + + # Check for infinite recursion before running the iniTeX: + # We do this check only if we are running in mktexfmt mode + # otherwise double format definitions will create an infinite loop, too + $mktexfmtMode || mktexfmt_loop= + case :$mktexfmt_loop: in + *:"$format/$engine":*) + abort "Infinite recursion detected, giving up!" ;; + esac + mktexfmt_loop=$mktexfmt_loop:$format/$engine + export mktexfmt_loop + + verboseMsg "$progname: running \`$engine -ini $tcxflag $jobswitch $prgswitch $texargs' ..." + + # run in a subshell to get a local effect of TEXPOOL manipulation: + ( + # If necessary, set TEXPOOL. Use absolute path, because of KPSE_DOT. + $localpool && { TEXPOOL="`pwd`:$TEXPOOL"; export TEXPOOL; } + verbose $engine -ini $tcxflag $jobswitch $prgswitch $texargs + ) </dev/null + + if test $use_engine_dir; then + fulldestdir="$destdir/$texengine" + else + fulldestdir="$destdir" + fi + mkdir -p "$fulldestdir" + if test -f "$fmtfile"; then + grep '^! ' $format.log >/dev/null 2>&1 && + log_warning "\`$engine -ini $tcxflag $jobswitch $prgswitch $texargs' possibly failed." + + # We don't want user-interaction for the following "mv" commands: + mv "$format.log" "$fulldestdir/$format.log" </dev/null + # + destfile=$fulldestdir/$fmtfile + if mv "$fmtfile" "$destfile" </dev/null; then + verboseMsg "$progname: $destfile installed." + # + # As a special special case, we create mplib-luatex.mem for use by + # the mplib embedded in luatex if it doesn't already exist. (We + # never update it if it does exist.) + # + # This is used by the luamplib package. This way, an expert user + # who wants to try a new version of luatex (hence with a new + # version of mplib) can manually update mplib-luatex.mem without + # having to tamper with mpost itself. + # + if test "x$format" = xmpost && test "x$engine" = xmpost; then + mplib_mem_name=mplib-luatex.mem + mplib_mem_file=$fulldestdir/$mplib_mem_name + if test \! -f $mplib_mem_file; then + verboseMsg "$progname: copying $destfile to $mplib_mem_file" + if cp "$destfile" "$mplib_mem_file" </dev/null; then + mktexupd "$fulldestdir" "$mplib_mem_name" + else + log_warning "cp $destfile $mplib_mem_file failed." + fi + else + verboseMsg "$progname: $mplib_mem_file already exists, not updating." + fi + fi + # + # Echo the (main) output filename for our caller. + $mktexfmtMode && $mktexfmtFirst \ + && echo "$destfile" && mktexfmtFirst=false + # + mktexupd "$fulldestdir" "$fmtfile" + fi + else + log_failure "\`$engine -ini $tcxflag $jobswitch $prgswitch $texargs' failed" + fi +} + +############################################################################### +# recreate_loop() +# for each line in config file: check match-condition and recreate format +# if there is a match +############################################################################### +recreate_loop() +{ + OIFS=$IFS + IFS=' +' + set `echo x; sed '/^#/d; /^[ ]*$/d' "$cnf_file"`; shift + IFS=$OIFS + for line + do + parse_line $line || continue + check_match || continue + run_initex + done +} + +############################################################################### +# listcfg_loop() +# prints all format definitions in config files (enabled and disabled ones) +# for supported formats (i.e. for those which have an existing ini file) +############################################################################### +listcfg_loop() +{ + OIFS=$IFS + IFS=' +' + set `echo x; sed '/^#$/d; /^#[^!]/d; /^[ ]*$/d' "$cnf_file"`; shift + IFS=$OIFS + for line + do + parse_line $line && echo "$line" + done +} + +############################################################################### +# check_match() +# recreate all formats +############################################################################### +check_match() +{ + $need_find_hyphenfile && \ + this_hyphenfile="`find_hyphenfile "$format" "$hyphenation"`" + + eval $match_cmd && setmatch true +} + +############################################################################### +# recreate_by_fmt(fmtname) +# recreate all versions of fmtname +############################################################################### +recreate_by_fmt() +{ + fmtname=$1 + match_cmd="test x\$format = x$fmtname" + recreate_loop +} + +############################################################################### +# create_missing() +# create all missing format files +############################################################################### +create_missing() +{ + # match_cmd='test ! -f $destdir/$fmtfile' + match_cmd='test ! -f "`kpsewhich -engine=$texengine -progname=$format $fmtfile`"' + recreate_loop +} + +############################################################################### +# recreate_existing() +# recreate only existing format files +############################################################################### +recreate_existing() +{ + match_cmd='test -f "`kpsewhich -engine=$texengine -progname=$format $fmtfile`"' + recreate_loop +} + +############################################################################### +# recreate_all() +# recreate all formats +############################################################################### +recreate_all() +{ + match_cmd=true + recreate_loop +} + +############################################################################### +# recreate_by_hyphenfile(hyphenfile) +# recreate all formats that depend on hyphenfile +############################################################################### +recreate_by_hyphenfile() +{ + hyphenfile=$1 + + case $hyphenfile in + /*) + : + ;; + ./*) + hyphenfile="$KPSE_DOT/"`echo "$hyphenfile" | sed 's@..@@'` + ;; + *) + hyphenfile="$KPSE_DOT/$hyphenfile" + ;; + esac + need_find_hyphenfile=true + match_cmd="echo \"\$this_hyphenfile\" | grep $hyphenfile >/dev/null" + + # No match before the loop: + setmatch false + + recreate_loop + + # Now check if there was at least one match: + getmatch || maybe_abort "no format depends on hyphen file \`$hyphenfile'" +} + +############################################################################### +# recreate_by_engine(enginename) +# recreate all formats that are based on enginename +############################################################################### +recreate_by_engine() +{ + enginename=$1 + + match_cmd="test x\$engine = x$enginename" + + # No match before the loop: + setmatch false + + recreate_loop + + # Now check if there was at least one match: + getmatch || maybe_abort "no format depends on engine \`$enginename'" +} + + + +############################################################################### +# show_hyphen_file(format) +# prints full name of the hyphenfile for format +# +# exit code: returns error code if the ini file is not installed or if +# the hyphen file cannot be found +############################################################################### +show_hyphen_file() +{ + fmtname=$1 + + find_info_for_name "$fmtname" || abort "no info for format \`$fmtname'" + if test "x$hyphenation" = x-; then + echo - + cleanup 0 + fi + find_hyphenfile "$format" "$hyphenation" \ + || abort "hyphenfile \`$hyphenation' not found" +} + +############################################################################### +# disablefmt(format) +# disables format in configuration file +############################################################################### +disablefmt() +{ + grep "^$1[ ]" $cnf_file >/dev/null || { (exit 0); return 0; } + + ed $cnf_file >/dev/null 2>&1 <<-eof + g/^$1[ ]/s/^/#! / + w + q +eof + (exit 0); return 0 +} + +############################################################################### +# enablefmt(format) +# enables format in configuration file +############################################################################### +enablefmt() +{ + grep "^#![ ]*$1[ ]" $cnf_file >/dev/null || { (exit 0); return 0; } + ed $cnf_file >/dev/null 2>&1 <<-eof + g/^#![ ]*$1[ ]/s/..[ ]*// + w + q +eof + (exit 0); return 0 +} + +main ${1+"$@"} +cleanup 0 diff --git a/Master/texmf-dist/scripts/tetex/texconfig-dialog.sh b/Master/texmf-dist/scripts/tetex/texconfig-dialog.sh new file mode 100755 index 00000000000..e1868d91574 --- /dev/null +++ b/Master/texmf-dist/scripts/tetex/texconfig-dialog.sh @@ -0,0 +1,486 @@ +#!/bin/sh + +# TeX-Config version 3.0 +# Thomas Esser, te@dbs.uni-hannover.de. Public domain. + +# invoke the right shell: + +test -f /bin/ksh && test -z "$RUNNING_KSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \ + && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; } +unset RUNNING_KSH + +test -f /bin/bsh && test -z "$RUNNING_BSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \ + && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; } +unset RUNNING_BSH + +export PATH + +# hack around a bug in zsh: +test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"' + +# the version string +version='$Id: texconfig-dialog 23826 2011-09-05 17:59:15Z karl $' + +: ${PAGER=more} +progname=texconfig-dialog +tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/tcdtmp.$$ +log=$tmpdir/log +tmpmenu=$tmpdir/tmpmenu +needsCleanup=false + +############################################################################### +# cleanup() +# clean up the temp area and exit with proper exit status +############################################################################### +cleanup() +{ + rc=$1 + $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \ + && { cd / && rm -rf "$tmpdir"; } + termCtl reset + (exit $rc); exit $rc +} + +############################################################################### +# setupTmpDir() +# set up a temp directory and a trap to remove it +############################################################################### +setupTmpDir() +{ + case $needsCleanup in + true) return;; + esac + + trap 'cleanup 1' 1 2 3 7 13 15 + needsCleanup=true + (umask 077; mkdir "$tmpdir") \ + || abort "could not create directory \`$tmpdir'" +} + +############################################################################### +# abort(errmsg) +# print `errmsg' to stderr and exit with error code 1 +############################################################################### +abort() +{ + echo "$progname: $1." >&2 + cleanup 1 +} + +logexec() +{ + (echo; echo ">>> Executing \`$@' <<<") >> $log + "$@" 2>&1 | tee -a $log +} + +############################################################################### +# runDialog(args, ...) +# execute the right dialog program with the right default parameters +############################################################################### +runDialog() +{ + if test -n "$DIALOG_PROG"; then + termCtl clear + $DIALOG_PROG --title "TeX setup utility" ${1+"$@"} + runDialogRc=$? + termCtl clear + else + abort "could not find dialog or whiptail program to run" + fi + (exit $runDialogRc) + return $runDialogRc +} + +############################################################################### +# findDialog(void) +# set DIALOG_PROG to the system dialog program, or the empty string. +############################################################################### +findDialog() +{ + for bin in whiptail dialog + do + binLoc=`texconfig findprog $bin` + case $binLoc in + "") DIALOG_PROG="";; + *) DIALOG_PROG=$binLoc; break;; + esac + done +} + +############################################################################### +# mktexdir(args) +# call mktexdir script, disable all features (to prevent sticky directories) +############################################################################### +mktexdir() +{ + MT_FEATURES=none "$TEXMFMAIN/web2c/mktexdir" "$@" >&2 +} + +############################################################################### +# termCtl(arg) +# some convenience utilities for terminal control +############################################################################### +termCtl() +{ + case $1 in + clear) + test -n "$NO_CLEAR" && return + tty >/dev/null 2>&1 && clear + ;; + reset) + test -n "$NO_CLEAR" && return + reset 2>/dev/null + stty sane 2>/dev/null + reset 2>/dev/null + termCtl clear + ;; + readln) + echo + echo "press return to continue..." + read a + ;; + esac +} + +############################################################################### +# menuMain(void) +# the main menu +############################################################################### +menuMain() +{ + cat <<-'eof' + The interactive texconfig utility will be started now. Make sure + your screen has at least 24 rows and 80 columns. If texconfig + crashes now, you can still set up your teTeX system using the + batch mode of texconfig. Try 'texconfig help' to get a list + of options. + + The interactive mode works best with a real vt100 terminal or + inside an xterm window. +eof + termCtl readln + + while :; do + logMessage='view logfile' + + runDialog \ + --menu " +Hint: all output of external commands (e.g. tex) is logged into +a file. You can look at this file using "LOG". If cursor keys make +trouble, you may have more luck with +/- and TAB. +" \ + 23 80 14 \ + EXIT 'exit' \ + PAPER 'default paper: A4 or letter (us)' \ + MODE 'default metafont mode and resolution' \ + REHASH 'rebuild filename databases' \ + FORMATS 'edit format definitions' \ + HYPHENATION 'customize hyphenation' \ + DVIPS 'dvips configuration' \ + FAQ 'view frequently asked questions + answers' \ + CONF 'show configuration' \ + LOG "$logMessage" \ + 2>"$tmpmenu" || break + + case `cat "$tmpmenu"` in + EXIT) + break + ;; + PAPER) + menuPaper + ;; + MODE) + menuMode + ;; + REHASH) + logexec texconfig rehash + termCtl readln + ;; + FORMATS) + texconfig formats + termCtl readln + ;; + HYPHENATION) + menuHyphenation + ;; + DVIPS) + menuDvips + ;; + FAQ) + texconfig faq + termCtl readln + ;; + CONF) + logexec texconfig conf + termCtl readln + ;; + LOG) + <"$log" eval $PAGER + termCtl readln + ;; + esac + done +} + +menuGetMode() +{ + # we need eval to get the command line right... :-( + eval \ + runDialog \ + --menu \"" +Chosse a mode to be used when metafont generates font bitmaps. The resolution is the most important point, but there might +be differences between modes of the same resolution. See the comments in the file modes.mf for more details. +\"" \ + 23 80 14 \ + `texconfig mode-list` 2>"$tmpmenu" +} + +menuMode() +{ + menuGetMode + mode=`cat "$tmpmenu"` + + if test -n "$mode"; then + logexec texconfig mode "$mode" + termCtl readln + fi +} + +menuDvips() +{ + menuDvipsDest=ps + + while :; do + case $menuDvipsDest in + ps) + menuDvipsPrinterOpt= + menuDvipsMsg=" +dvips GLOBAL section. Define the most common default settings (config.ps). +To define settings for a specific printer, first ADD a printer definition, +then CHANGE it. +" + ;; + *) + menuDvipsPrinterOpt="-P $menuDvipsDest" + menuDvipsMsg=" +dvips settings for printer $menuDvipsDest (config.$menuDvipsDest). Define +local settings for this printer. To switch back to global settings mode, +select GLOBAL. +" + ;; + esac + + runDialog \ + --menu "$menuDvipsMsg +You can use dvips for non PostScript printers, if you can setup your +printing system to convert PostScript to a format that your printer can +handle. Maybe, you can use GhostScript to do the conversion (if your +printer is supported)." \ + 23 80 9 \ + RETURN 'back to the main menu' \ + DEST 'define default destination of the generated Postscript' \ + MODE 'change metafont mode/resolution' \ + OFFSET 'shift output by some offset' \ + PAPER 'define the default paper' \ + GLOBAL 'change global settings (config.ps)' \ + CHANGE 'change printer settings (config.$PRINTER)' \ + ADD 'add a printer configuration' \ + DEL 'remove a printer configuration' \ + 2>"$tmpmenu" || break + + menuDvipsAns=`cat "$tmpmenu"` + case $menuDvipsAns in + RETURN) + break + ;; + DEST) + runDialog --inputbox "Enter the command to print. + +In general, you need a command like 'lpr' or 'lpr -Pfoo'. + +NOTE: If you just press return, printing will be disabled and the output saved to a file by default. +" 23 80 2>"$tmpmenu" + if test $? = 0; then + menuDvipsAns=`cat "$tmpmenu"` + case $menuDvipsAns in + "") + menuDvipsPrintOpt=- + ;; + *) + menuDvipsPrintOpt=$menuDvipsAns + ;; + esac + logexec texconfig dvips $menuDvipsPrinterOpt printcmd "$menuDvipsPrintOpt" + termCtl readln + fi + ;; + MODE) + menuGetMode + mode=`cat "$tmpmenu"` + + if test -n "$mode"; then + logexec texconfig dvips $menuDvipsPrinterOpt mode "$mode" + termCtl readln + fi + ;; + OFFSET) + runDialog --inputbox "Enter a dimension pair (a rightwards offset and a downwards +offset), e.g. 2mm,-0.5in (right 2mm and up .5in):" 23 80 2>"$tmpmenu"; menuDvipsAns=`cat "$tmpmenu"` + case $menuDvipsAns in + "") : ;; + *) + logexec texconfig dvips $menuDvipsPrinterOpt offset "$menuDvipsAns" + termCtl readln + ;; + esac + ;; + PAPER) + eval runDialog \ + --menu \'\\n\\nChoose the default papersize definition for dvips.\\n\\n\' \ + 23 80 8 `texconfig dvips paper-list` \ + 2>"$tmpmenu" + paper=`cat "$tmpmenu"` + if test -n "$paper"; then + logexec texconfig dvips paper "$paper" + termCtl readln + fi + ;; + GLOBAL) + menuDvipsDest=ps + ;; + CHANGE) + runDialog --inputbox "Printer name (for future settings of DEST / MODE / OFFSET)" 23 80 2>"$tmpmenu" + menuDvipsAns=`cat $tmpmenu` + case $menuDvipsAns in + "") : ;; + *) menuDvipsDest=$menuDvipsAns;; + esac + ;; + ADD) + runDialog --inputbox "Printer name (for printer to add)" 23 80 2>"$tmpmenu" + menuDvipsAns=`cat $tmpmenu` + case $menuDvipsAns in + "") : ;; + *) + logexec texconfig dvips add $menuDvipsAns + termCtl readln + ;; + esac + ;; + DEL) + runDialog --inputbox "Printer name (for printer to delete)" 23 80 2>"$tmpmenu" + menuDvipsAns=`cat $tmpmenu` + case $menuDvipsAns in + "") : ;; + *) + logexec texconfig dvips del $menuDvipsAns + termCtl readln + ;; + esac + ;; + esac + done +} + +menuPaper() +{ + runDialog \ + --menu " +Select your default paper format. +" \ + 23 80 14 \ + RETURN 'return to the main menu' \ + A4 'ISO A4 (210x297mm)' \ + LETTER 'US (8.5x11in)' 2>"$tmpmenu" + + p=`cat "$tmpmenu"` + case $p in + A4) + logexec texconfig paper a4 + termCtl readln + ;; + LETTER) + logexec texconfig paper letter + termCtl readln + ;; + esac +} + +menuHyphenation() +{ + runDialog \ + --menu " +Choose format to set up hyphenation for. +" \ + 23 80 14 \ + `texconfig hyphen-list | sed 's@\(.*\)@\1 \1@'` 2>"$tmpmenu" + p=`cat "$tmpmenu"` + case $p in + "") + return + ;; + *) + texconfig hyphen "$p" + termCtl readln + esac +} + +# main() + +case $1 in + help|--help) + cat <<-eof + Usage: $progname [--help|--version] +eof + exit 0 + ;; + --version) + cat <<-eof + $progname version $version. +eof + exit 0 + ;; +esac + + +: ${TEXMFCONFIG=`kpsewhich -var-value=TEXMFCONFIG`} +: ${TEXMFVAR=`kpsewhich -var-value=TEXMFVAR`} +: ${TEXMFMAIN=`kpsewhich -var-value=TEXMFMAIN`} +export TEXMFCONFIG TEXMFVAR TEXMFMAIN + +setupTmpDir +echo "$progname: started `date`" > $log +findDialog + +test -d "$TEXMFCONFIG" \ + || mktexdir "$TEXMFCONFIG" >/dev/null 2>&1 \ + || echo "$progname: directory \`$TEXMFCONFIG' (from TEXMFCONFIG variable) does not exist and cannot be created" >&2 + +canWriteConfig=false +if test -d "$TEXMFCONFIG"; then + if test -w "$TEXMFCONFIG"; then + canWriteConfig=true + else + echo "$progname: directory \`$TEXMFCONFIG' (from TEXMFCONFIG variable) is not writable." + echo "$progname: configuration data cannot be changed." >&2 + fi +fi + +test -d "$TEXMFVAR" \ + || mktexdir "$TEXMFVAR" >/dev/null 2>&1 \ + || echo "$progname: directory \`$TEXMFVAR' (from TEXMFVAR variable) does not exist and cannot be created" >&2 + +canWriteVardata=false +if test -d "$TEXMFVAR"; then + if test -w "$TEXMFVAR"; then + canWriteVardata=true + else + echo "$progname: directory \`$TEXMFVAR' (from TEXMFVAR variable) is not writable." + echo "$progname: cached variable runtime data files cannot be written." >&2 + fi +fi + +menuMain +cleanup 0 diff --git a/Master/texmf-dist/scripts/tetex/texconfig-sys.sh b/Master/texmf-dist/scripts/tetex/texconfig-sys.sh new file mode 100755 index 00000000000..ff549003ad2 --- /dev/null +++ b/Master/texmf-dist/scripts/tetex/texconfig-sys.sh @@ -0,0 +1,31 @@ +#!/bin/sh +# $Id: texconfig-sys 20962 2011-01-07 11:45:38Z peter $ + +# texconfig-sys: Thomas Esser, public domain. + +# wrapper script for texconfig with TEXMFVAR and TEXMFCONFIG set to +# TEXMFSYSVAR / TEXMFSYSCONFIG + +test -f /bin/ksh && test -z "$RUNNING_KSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \ + && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; } +unset RUNNING_KSH + +test -f /bin/bsh && test -z "$RUNNING_BSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \ + && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; } +unset RUNNING_BSH + +export PATH + +# hack around a bug in zsh: +test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"' + +v=`kpsewhich -var-value TEXMFSYSVAR` +c=`kpsewhich -var-value TEXMFSYSCONFIG` + +TEXMFVAR="$v" +TEXMFCONFIG="$c" +export TEXMFVAR TEXMFCONFIG + +exec texconfig ${1+"$@"} diff --git a/Master/texmf-dist/scripts/tetex/texconfig.sh b/Master/texmf-dist/scripts/tetex/texconfig.sh new file mode 100755 index 00000000000..c9cc73c8305 --- /dev/null +++ b/Master/texmf-dist/scripts/tetex/texconfig.sh @@ -0,0 +1,1432 @@ +#!/bin/sh + +# TeXConfig version 3.0 +# Originally written by Thomas Esser. Public domain. +# Now maintained as part of TeX Live; correspondence to tex-live@tug.org. + +# invoke the right shell: + +test -f /bin/ksh && test -z "$RUNNING_KSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \ + && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; } +unset RUNNING_KSH + +test -f /bin/bsh && test -z "$RUNNING_BSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \ + && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; } +unset RUNNING_BSH + +export PATH + +# hack around a bug in zsh: +test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"' + +# initializations... +progname=texconfig + +# the version string +version='$Id$' + +envVars=" + AFMFONTS BIBINPUTS BSTINPUTS CMAPFONTS CWEBINPUTS ENCFONTS GFFONTS + GLYPHFONTS INDEXSTYLE LIGFONTS MFBASES MFINPUTS MFPOOL MFTINPUTS + MISCFONTS MPINPUTS MPMEMS MPPOOL MPSUPPORT OCPINPUTS OFMFONTS + OPENTYPEFONTS OPLFONTS OTPINPUTS OVFFONTS OVPFONTS PDFTEXCONFIG PKFONTS + PSHEADERS SFDFONTS T1FONTS T1INPUTS T42FONTS TEXBIB TEXCONFIG TEXDOCS + TEXFONTMAPS TEXFONTS TEXFORMATS TEXINDEXSTYLE TEXINPUTS TEXMFCNF + TEXMFDBS TEXMFINI TEXMFSCRIPTS TEXPICTS TEXPKS TEXPOOL TEXPSHEADERS + TEXSOURCES TFMFONTS TRFONTS TTFONTS VFFONTS WEB2C WEBINPUTS +" +tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/tctmp.$$ +needsCleanup=false +lastUpdatedFile= + +# +############################################################################### +# setupFMT(void) - find a suitable version of fmt / adjust +# +setupFMT() +{ + case $FMT in + "") + FMT=fmt + test ! -x /bin/fmt && test ! -f /usr/bin/fmt && + { test -x /bin/adjust || test -x /usr/bin/adjust; } && FMT=adjust + ;; + *) + return + ;; + esac +} + +############################################################################### +# myFmt(args) - run $FMT +# +myFmt() +{ + setupFMT + $FMT ${1+"$@"} +} + +############################################################################### +# echoShowVariable(args ...) +# show environment variables which names are as args and their values +# +echoShowVariable() +{ + for esv + do + var=$esv + eval val=\"\${$var+=}\${$var- is unset}\" + echo "$var$val" + done | grep -v 'is unset$' +} + +############################################################################### +# echoShowKpseVariable(args ...) +# show kpathsea variables which names are as args and their values +# +echoShowKpseVariable() +{ + for eskv + do + var=$eskv + val=`kpsewhich -var-value="$eskv"` + echo "$var=$val" + done +} + +############################################################################### +# echoLocateBinary(args ...) - show where programs actually exist +# +echoLocateBinary() +{ + for elb + do + elbLoc=`checkForBinary "$elb"` + if test -n "$ELB_PATH_ONLY"; then + test -n "$elbLoc" && echo "$elbLoc" + else + case $elbLoc in + "") echo "$elb: not found";; + *) echo "$elb: $elbLoc";; + esac + fi + done +} + +############################################################################### +# echoLocateCfgfile(args ...) - show where files actually exist +# +echoLocateCfgfile() +{ + for elc + do + case $elc in + texmf.cnf) elcLoc=`kpsewhich $elc`;; + *) elcLoc=`tcfmgr --cmd find --file "$elc"`;; + esac + case $elcLoc in + "") echo "$elc: not found";; + *) echo "$elcLoc";; + esac + done +} + +############################################################################### +# checkForBinary(prog) - echo full path of prog +# +checkForBinary() +{ + cfbBinary=$1 + + OLDIFS=$IFS + IFS=: + set x `echo "$PATH" | sed 's/^:/.:/; s/:$/:./; s/::/:.:/g'`; shift + found=false + for pathElem + do + case $pathElem in + "") continue;; + *) test -f "$pathElem/$cfbBinary" && { echo "$pathElem/$cfbBinary"; found=true; break; } + esac + done + IFS=$OLDIFS + case $found in + true) (exit 0); return 0;; + false) (exit 1); return 1;; + esac +} + +############################################################################### +# cleanup() - clean up the temp area and exit with proper exit status +# +cleanup() +{ + rc=$1 + $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \ + && { cd / && rm -rf "$tmpdir"; } + (exit $rc); exit $rc +} + +############################################################################### +# setupTmpDir() - set up a temp directory and a trap to remove it +# +setupTmpDir() +{ + case $needsCleanup in + true) return;; + esac + + trap 'cleanup 1' 1 2 3 7 13 15 + needsCleanup=true + (umask 077; mkdir "$tmpdir") \ + || abort "could not create directory \`$tmpdir'" +} + +############################################################################### +# setupTexmfmain() - get value for MT_TEXMFMAIN (with caching) +# +setupTexmfmain() +{ + case $MT_TEXMFMAIN in + "") MT_TEXMFMAIN=`kpsewhich -var-value=TEXMFMAIN`;; + *) return;; + esac +} + +############################################################################### +# setupTexmfmain() - get value for MT_TEXMFDIST (with caching) +# +setupTexmfdist() +{ + case $MT_TEXMFDIST in + "") MT_TEXMFDIST=`kpsewhich -var-value=TEXMFDIST`;; + *) return;; + esac +} + +############################################################################### +# setupTexmfvar() - get value for MT_TEXMFVAR (with caching) +# +setupTexmfvar() +{ + case $MT_TEXMVAR in + "") MT_TEXMVAR=`kpsewhich -var-value=TEXMFVAR`;; + *) return;; + esac +} + +############################################################################### +# setupSystexmf() - get value for MT_SYSTEXMF (with caching) +# +setupSystexmf() +{ + case $MT_SYSTEXMF in + "") MT_SYSTEXMF=`kpsewhich -var-value=SYSTEXMF`;; + *) return;; + esac +} + +############################################################################### +# abort(errmsg) +# print `errmsg' to stderr and exit with error code 1 +# +abort() +{ + echo "$progname: $1." >&2 + cleanup 1 +} + +############################################################################### +# mktexdir(args) +# call mktexdir script, disable all features (to prevent sticky directories) +# +mktexdir() +{ + setupTexmfmain + MT_FEATURES=none "$MT_TEXMFMAIN/web2c/mktexdir" "$@" >&2 +} + +############################################################################### +# tcfmgr(args) - call tcfmgr script +# +tcfmgr() +{ + setupTexmfmain + "$MT_TEXMFMAIN/texconfig/tcfmgr" "$@" +} + +############################################################################### +# mktexupd(args) - call mktexupd script +# +mktexupd() +{ + setupTexmfmain + "$MT_TEXMFMAIN/web2c/mktexupd" "$@" +} + +############################################################################### +# getRelDir(file) +# matches file against SYSTEXMF. Returns relative directory of file within +# a texmf tree in variable relPart. +# +getRelDir() +{ + file=$1 + relPart= + + setupSystexmf + OLDIFS=$IFS + IFS=' +' + set x `echo "$MT_SYSTEXMF" | tr : ' +'`; shift + IFS=$OLDIFS + + # now loop over all components of SYSTEXMF + for dir + do + test -n "$dir" || continue + case "$file" in + $dir/*) + relPart=`echo "$file" | sed "s%$dir/*%%"` + break + ;; + esac + done + + # now check for success / failure + case $relPart in + ""|$file) + # empty or full filename -> getRelDir failed! + (exit 1); return 1 + ;; + *) + # relPart should just have the "dirname" part: + relPart=`echo "$relPart" | sed 's%/*[^/]*$%%'` + (exit 0); return 0 + ;; + esac +} + +############################################################################### +# configReplace(file pattern line) +# The first line in file that matches pattern gets replaced by line. +# line will be added at the end of the file if pattern does not match. +# +configReplace() +{ + configReplaceFile=$1; configReplacePat=$2; configReplaceLine=$3 + + if grep "$configReplacePat" "$configReplaceFile" >/dev/null; then + ed "$configReplaceFile" >/dev/null 2>&1 <<-eof + /$configReplacePat/c + $configReplaceLine + . + w + q +eof + else + echo "$configReplaceLine" >> $configReplaceFile + fi +} + +############################################################################### +# fmgrConfigReplace (file regex value) +# replaces line matching regex by value in file +# +fmgrConfigReplace() +{ + fmgrConfigReplaceChanged=false + + moreArgs="" + while + case $1 in + --*) moreArgs="$moreArgs $1 $2";; + *) break;; + esac + do shift; shift; done + fmgrConfigReplaceFile=$1 + fmgrConfigReplaceRegex=$2 + fmgrConfigReplaceValue=$3 + + setupTmpDir + co=`tcfmgr $moreArgs --tmp $tmpdir --cmd co --file $fmgrConfigReplaceFile` + if test $? != 0; then + echo "$progname: fmgrConfigReplace co failed for \`$fmgrConfigReplaceFile'" >&2 + (exit 1); return 1 + fi + set x $co; shift + fmgrConfigReplaceID=$1; fmgrConfigReplaceCfgFile=$3; fmgrConfigReplaceOrigFile=$4 + configReplace "$fmgrConfigReplaceCfgFile" "$fmgrConfigReplaceRegex" "$fmgrConfigReplaceValue" + ci=`tcfmgr --tmp $tmpdir --cmd ci --id "$fmgrConfigReplaceID"` + if test $? != 0; then + echo "$progname: fmgrConfigReplace ci failed for \`$fmgrConfigReplaceFile'" >&2 + (exit 1); return 1 + fi + case $ci in + "") :;; + $lastUpdatedFile) + fmgrConfigReplaceChanged=true;; + *) echo "$progname: updated configuration saved as file \`$ci'" >&2 + fmgrConfigReplaceChanged=true + lastUpdatedFile=$ci;; + esac + (exit 0); return 0 +} + +############################################################################### +# setupDvipsPaper(paper) +# rearranges config.ps to make paper the first paper definition +# +setupDvipsPaper() +{ + setupDvipsPaperChanged=false + setupDvipsPaperFile=config.ps + setupDvipsPaperDftPaper=$1 + + setupTmpDir + co=`tcfmgr --tmp $tmpdir --cmd co --file $setupDvipsPaperFile` + if test $? != 0; then + echo "$progname: setupDvipsPaper co failed for \`$setupDvipsPaperFile'" >&2 + (exit 1); return 1 + fi + set x $co; shift + setupDvipsPaperID=$1; setupDvipsPaperCfgFile=$3; setupDvipsPaperOrigFile=$4 + + ed "$setupDvipsPaperCfgFile" > /dev/null 2>&1 <<-eof + /@ /ka + \$a + @ + . + /@ $setupDvipsPaperDftPaper /;/@ /-1m'a-1 + \$d + w + q +eof + + ci=`tcfmgr --tmp $tmpdir --cmd ci --id "$setupDvipsPaperID"` + if test $? != 0; then + echo "$progname: setupDvipsPaper ci failed for \`$setupDvipsPaperFile'" >&2 + (exit 1); return 1 + fi + case $ci in + "") :;; + $lastUpdatedFile) + setupDvipsPaperChanged=true;; + *) echo "$progname: updated configuration saved as file \`$ci'" >&2 + setupDvipsPaperChanged=true + lastUpdatedFile=$ci;; + esac + (exit 0); return 0 +} + +############################################################################### +# setupModesMfFile(void) - find modes.mf file (with caching) +# +setupModesMfFile() +{ + case $modesMfFile in + "") + modesMfFile=`tcfmgr --cmd find --file modes.mf` + ;; + *) + return + ;; + esac +} + +############################################################################### +# locateConfigPsFile(void) - find config.ps file (with caching) +# +locateConfigPsFile() +{ + case $configPsFile in + "") + configPsFile=`tcfmgr --cmd find --file config.ps` + ;; + *) + return + ;; + esac +} + +############################################################################### +# listMfModes(file) - list modes from modes.mf file +# +listMfModes() +{ + grep mode_def "$modesMfFile" | + sed -e "s/mode_def //" \ + -e "s/ .*%[^ ]* / '/" \ + -e "s/\$/' /" | + egrep -v "^(help|%)" | sort +} + +############################################################################### +# listDvipsPapers(void) - list paper definitions from config.ps +# +listDvipsPapers() +{ + grep '@ ' $configPsFile | sed "s/..//;s/ / '/;s/\$/' /" +} + +############################################################################### +# getFormatsForHyphen(void) +# list all formats which have customizable hyphenation +# +getFormatsForHyphen() +{ + fmtutil --catcfg | awk '$3 != "-" {print $1}' | sort +} + +############################################################################### +# getRes(mode) - print resolution (both X and Y axis) to metafont mode +# +getRes() +{ + getResMode=$1 + ( + cd $tmpdir + cat >mftmp.mf <<-'eof' + let myexit = primitive_end_; + mode_setup; + string xdpi; + xdpi := decimal round pixels_per_inch; + message "XDPI = " & xdpi; + string ydpi; + ydpi := decimal round (pixels_per_inch * aspect_ratio); + message "YDPI = " & ydpi; + fontmaking := 0; + myexit; +eof + mf '\mode='"$getResMode"'; \input ./mftmp' </dev/null \ + | awk '$1 == "XDPI" || $1 == "YDPI" { print $3 }' + ) +} + +############################################################################### +# checkElemInList(elem, list) +# check if element exists in list +############################################################################### +checkElemInList() +{ + checkElemInListElem=$1; shift + checkElemInListFound=false + for checkElemInListIter + do + case "x$checkElemInListElem" in + x$checkElemInListIter) + checkElemInListFound=true + break + ;; + esac + done + case $checkElemInListFound in + true) (exit 0); return 0;; + esac + (exit 1); return 1 +} + + +# show version information from the distribution, if we have any. +showDistVersionInfo() +{ + # TeX Live file. + test -f $MT_TEXMFMAIN/../release-texlive.txt \ + && sed 1q $MT_TEXMFMAIN/../release-texlive.txt + + # no harm in continuing to look for the teTeX files. + test -f $MT_TEXMFMAIN/release-tetex-src.txt \ + && "teTeX-src release: `cat $MT_TEXMFMAIN/release-tetex-src.txt`" + test -f $MT_TEXMFDIST/release-tetex-texmf.txt \ + && "teTeX-texmf release: `cat $MT_TEXMFDIST/release-tetex-texmf.txt`" +} + +# +############################################################################### +# tcBatch(args) +# handle batch mode +############################################################################### +tcBatch() +{ + help="texconfig supports adjusting and updating many aspects of +the TeX installation. + +Usage: $progname conf (show configuration information) + $progname dvipdfmx paper PAPER (dvipdfmx paper size) + $progname dvipdfm paper PAPER (dvipdfm paper size) + $progname dvips [OPTION...] (dvips options) + $progname faq (show teTeX faq) + $progname findprog PROG... (show locations of PROGs, a la which) + $progname font vardir DIR + $progname font ro + $progname font rw + $progname formats (edit fmtutil.cnf) + $progname help (or --help; show this help) + $progname hyphen FORMAT (edit hyphenation config for FORMAT) + $progname init [FORMAT]... (rebuild FORMATs, or all formats + plus run texlinks and updmap) + $progname mode MODE (set Metafont MODE) + $progname paper PAPER (set default paper size to PAPER) + $progname pdftex [OPTION]... (pdftex options) + $progname rehash (rebuild ls-R files with mktexlsr) + $progname version (or --version; show version info) + $progname xdvi paper PAPER (xdvi paper size) + +Get more help with: + $progname dvipdfmx + $progname dvipdfm + $progname dvips + $progname font + $progname hyphen + $progname mode + $progname paper + $progname pdftex + $progname xdvi + +Report bugs to: tex-k@tug.org +TeX Live home page: <http://tug.org/texlive/> +" + + case $1 in + # texconfig conf + conf|confall) + setupTexmfmain + setupTexmfdist + echo '=========================== version information ==========================' + showDistVersionInfo + echo + echo '==================== binaries found by searching $PATH ===================' + echo "PATH=$PATH" + echoLocateBinary kpsewhich updmap fmtutil texconfig tex pdftex mktexpk dvips dvipdfm + echo + echo '=========================== active config files ==========================' + echoLocateCfgfile texmf.cnf updmap.cfg fmtutil.cnf config.ps mktex.cnf XDvi pdftexconfig.tex config | sort -k 2 + echo + echo '============================= font map files =============================' + for m in psfonts.map pdftex.map ps2pk.map dvipdfm.map; do + echo "$m: `kpsewhich $m`" + done + echo + echo '=========================== kpathsea variables ===========================' + echoShowKpseVariable TEXMFMAIN TEXMFDIST TEXMFLOCAL TEXMFSYSVAR TEXMFSYSCONFIG TEXMFVAR TEXMFCONFIG TEXMFHOME VARTEXFONTS TEXMF SYSTEXMF TEXMFDBS WEB2C TEXPSHEADERS TEXCONFIG ENCFONTS TEXFONTMAPS + + echo + echo '==== kpathsea variables from environment only (ok if no output here) ====' + echoShowVariable $envVars + ;; + + # texconfig dvipdfm + dvipdfm) + help="Usage: $progname dvipdfm paper PAPER + +Valid PAPER settings: + letter legal ledger tabloid a4 a3" + case $2 in + # texconfig dvipdfm paper + paper-list) + for p in letter legal ledger tabloid a4 a3; do echo $p; done + ;; + paper) + case $3 in + letter|legal|ledger|tabloid|a4|a3) + fmgrConfigReplace config '^p' "p $3";; + "") echo "$help" >&2; rc=1;; + *) + echo "$progname: unknown PAPER \`$3' given as argument for \`$progname dvipdfm paper'" >&2 + echo "$progname: try \`$progname dvipdfm paper' for help" >&2 + rc=1 ;; + esac ;; + # texconfig dvipdfm "" + "") + echo "$help" >&2; rc=1 ;; + # texconfig dvipdfm <unknown> + *) + echo "$progname: unknown option \`$2' given as argument for \`$progname dvipdfm'" >&2 + echo "$progname: try \`$progname dvipdfm' for help" >&2 + rc=1 + ;; + esac + ;; + + # texconfig dvipdfmx + dvipdfmx) + help="Usage: $progname dvipdfmx paper PAPER + +Valid PAPER settings: + letter legal ledger tabloid a4 a3" + case $2 in + # texconfig dvipdfmx paper + paper-list) + for p in letter legal ledger tabloid a4 a3; do echo $p; done + ;; + paper) + case $3 in + letter|legal|ledger|tabloid|a4|a3) + fmgrConfigReplace dvipdfmx.cfg '^p' "p $3";; + "") echo "$help" >&2; rc=1;; + *) + echo "$progname: unknown PAPER \`$3' given as argument for \`$progname dvipdfmx paper'" >&2 + echo "$progname: try \`$progname dvipdfmx paper' for help" >&2 + rc=1 ;; + esac ;; + # texconfig dvipdfmx "" + "") + echo "$help" >&2; rc=1 ;; + # texconfig dvipdfmx <unknown> + *) + echo "$progname: unknown option \`$2' given as argument for \`$progname dvipdfmx'" >&2 + echo "$progname: try \`$progname dvipdfmx' for help" >&2 + rc=1 + ;; + esac + ;; + + # texconfig dvips + dvips) + shift + help="Usage: $progname dvips add PRINTER + $progname dvips del PRINTER + $progname dvips paper PAPER + $progname dvips [-P PRINTER] mode MODE + $progname dvips [-P PRINTER] offset OFFSET + $progname dvips [-P PRINTER] printcmd CMD" + case $1 in + -P) + case $2 in + "") + echo "$progname: missing arg for parameter -P" >&2 + rc=1; (exit $rc); return $rc + ;; + *) + otherPrinter=true + otherPrinterName=$2 + otherPrinterFile=`kpsewhich -format='dvips config' "config.$otherPrinterName"` + case $otherPrinterFile in + "") + echo "$progname: configuration file \`config.$otherPrinterName' for printer \`$otherPrinterName' not found" >&2 + rc=1; (exit $rc); return $rc + ;; + *) shift; shift;; + esac + ;; + esac + ;; + *) + otherPrinter=false + ;; + esac + case $otherPrinter in + true) + tcBatchDvipsPrinter=$otherPrinterName + moreFmgrArgs="--reldir dvips/config --infile $otherPrinterFile" + ;; + *) + tcBatchDvipsPrinter=ps + ;; + esac + case $1 in + add) + case $2 in + "") + echo "Usage: $progname dvips add PRINTER" >&2 + rc=1 + ;; + *) + printerName=$2 + pFile=`kpsewhich -format='dvips config' "config.$printerName"` + case $pFile in + "") + setupTmpDir + tcfRet=`tcfmgr --emptyinfile --reldir dvips/config --cmd co --tmp $tmpdir --file "config.$printerName"` + if test $? != 0; then + echo "$progname: failed to add new configuration file \`config.$printerName'" >&2 + rc=1 + else + set x $tcfRet; shift + tcBatchDvipsAddID=$1; tcBatchDvipsAddFile=$3 + echo "% file config.$printerName; added by texconfig" > "$tcBatchDvipsAddFile" + tcfRet=`tcfmgr --tmp $tmpdir --id "$tcBatchDvipsAddID" --cmd ci` + if test $? != 0; then + echo "$progname: failed to add new configuration file \`config.$printerName'" >&2 + rc=1 + else + echo "$progname: file $tcfRet added" >&2 + fi + fi + ;; + *) + echo "$progname: configuration file for printer \`$printerName' already exists (\`$pFile')" >&2 + rc=1 + ;; + esac + ;; + esac + ;; + del) + case $2 in + "") + echo "Usage: $progname dvips del PRINTER" >&2 + rc=1 + ;; + *) + printerName=$2 + pFile=`kpsewhich -format='dvips config' "config.$printerName"` + case $pFile in + "") + echo "$progname: configuration file for printer \`$printerName' (config.$printerName) not found" >&2 + rc=1 + ;; + *) + if rm "$pFile"; then + echo "$progname: file \`$pFile' removed" >&2 + else + echo "$progname: failed to remove file \`$pFile'" >&2 + rc=1 + fi + ;; + esac + ;; + esac + ;; + paper-list) + locateConfigPsFile + listDvipsPapers + ;; + paper) + case $2 in + "") + echo "Usage: $progname dvips paper PAPER" >&2 + echo >&2; echo "Valid PAPER settings:" >&2 + locateConfigPsFile + listDvipsPapers | sed 's@ .*@@; s@^@ @' | myFmt + rc=1 + ;; + *) + tcBatchDvipsPaper=$2 + locateConfigPsFile + case "$configPsFile" in + "") + echo "$progname: file config.ps not found" >&2; rc=1 + ;; + *) + if grep "@ $tcBatchDvipsPaper " $configPsFile >/dev/null 2>&1; then + setupDvipsPaper "$tcBatchDvipsPaper" + else + echo "$progname: paper \`$tcBatchDvipsPaper' not found in file \`$configPsFile'" >&2; rc=1 + fi + ;; + esac + ;; + esac + ;; + mode) + case $2 in + "") + echo "Usage: $progname dvips mode MODE + +Valid MODE settings:" + setupModesMfFile + listMfModes | sed 's@ .*@@; s@^@ @' | myFmt + rc=1 + ;; + *) + tcBatchDvipsMode=$2 + setupTmpDir + setupModesMfFile + if checkElemInList "$tcBatchDvipsMode" `listMfModes | sed 's@ .*@@'`; then + set x `getRes "$tcBatchDvipsMode"`; shift + resX=$1; resY=$2 + fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^M' "M $tcBatchDvipsMode" + fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^D' "D $resX" + fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^X' "X $resX" + fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^Y' "Y $resY" + else + echo "$progname: unknown MODE \`$tcBatchDvipsMode' given as argument for \`$progname dvips mode'" >&2 + echo "$progname: try \`$progname dvips mode' for help" >&2 + rc=1 + fi + ;; + esac + ;; + offset) + offset=$2 + case $offset in + "") + echo "Usage: $progname dvips offset OFFSET" + rc=1 + ;; + *) + fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^O' "O $offset" + esac + ;; + printcmd) + printcmd=$2 + case $printcmd in + "") + echo "Usage: $progname dvips printcmd CMD" + rc=1 + ;; + -) + fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^o' o + ;; + *) + fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^o' "o |$printcmd" + ;; + esac + ;; + "") + echo "$help" >&2; rc=1 + ;; + *) + echo "$progname: unknown option \`$1' given as argument for \`$progname dvips'" >&2 + echo "$progname: try \`$progname dvips' for help" >&2 + rc=1 + ;; + esac + ;; + + faq) + setupTexmfmain + if test -f $MT_TEXMFMAIN/doc/tetex/teTeX-FAQ; then + <$MT_TEXMFMAIN/doc/tetex/teTeX-FAQ eval ${PAGER-more} + else + echo "$progname: faq not found (usually in \$TEXMFMAIN/doc/tetex/teTeX-FAQ)" >&2 + rc=1 + fi + ;; + + findprog) + shift + ELB_PATH_ONLY=1 echoLocateBinary "$@" + ;; + + # handle "texconfig font" + font) + help="Usage: $progname font vardir DIR + $progname font ro + $progname font rw + +The vardir option changes the VARTEXFONTS variable in the texmf.cnf file. + +The rw option makes the VARTEXFONTS directory (and subtrees pk, tfm, +source) world writable and sets the features appendonlydir:varfonts +in mktex.cnf. + +The ro option makes the VARTEXFONTS directory (and subtrees pk, tfm, +source) writable for the owner only and sets the feature texmfvar in +mktex.cnf. + +For more information about these \`features', consult the teTeX manual +(e.g. by running \`texdoc TETEXDOC')." + + case $2 in + vardir) + case $3 in + "") + echo "$help" >&2 + rc=1 + ;; + *) + tcBatchFontVardir=$3 + tfc=`kpsewhich texmf.cnf` + if test -n "$tfc"; then + if test -w "$tfc"; then + configReplace "$tfc" '^VARTEXFONTS' "VARTEXFONTS = $tcBatchFontVardir" + else + echo "$progname: setting up vardir failed. Reason: no permission to write file \`$tfc'" >&2 + rc=1 + fi + else + echo "$progname: setting up vardir failed. Reason: failed to find file texmf.cnf" >&2 + rc=1 + fi + ;; + esac + ;; + rw) + MT_VARTEXFONTS=`kpsewhich -var-value VARTEXFONTS` + if test -z "$MT_VARTEXFONTS"; then + echo "$progname: failed to set \`font rw'; reason: could not determine VARTEXFONTS variable." >&2; rc=1 + return + fi + test -d "$MT_VARTEXFONTS" || mktexdir "$MT_VARTEXFONTS" + if test ! -d "$MT_VARTEXFONTS"; then + echo "$progname: failed to set \`font rw'; reason: directory \`$MT_VARTEXFONTS' does not exist." >&2; rc=1 + return + fi + chmod 1777 "$MT_VARTEXFONTS" || { + echo "$progname: failed to modify permissions in \`$MT_VARTEXFONTS'." >&2; rc=1 + return; + } + ( + cd "$MT_VARTEXFONTS" || exit + echo "$progname: modifying permissions in \`$MT_VARTEXFONTS' ..." >&2 + for d in pk tfm source; do + test -d "$d" && find $d -type d -exec chmod 1777 '{}' \; + done + echo "$progname: all permissions set." >&2 + ) + setupTmpDir + fmgrConfigReplace mktex.cnf '^: ..MT_FEATURES=' ": \${MT_FEATURES=appendonlydir:varfonts}" + ;; + ro) + MT_VARTEXFONTS=`kpsewhich -var-value VARTEXFONTS` + if test -z "$MT_VARTEXFONTS"; then + echo "$progname: failed to set \`font ro'; reason: could not determine VARTEXFONTS variable." >&2; rc=1 + return + fi + test -d "$MT_VARTEXFONTS" || mktexdir "$MT_VARTEXFONTS" + if test ! -d "$MT_VARTEXFONTS"; then + echo "$progname: failed to set \`font ro'; reason: directory \`$MT_VARTEXFONTS' does not exist." >&2; rc=1 + return + fi + chmod 755 "$MT_VARTEXFONTS" || { + echo "$progname: failed to modify permissions in \`$MT_VARTEXFONTS'." >&2; rc=1 + return; + } + ( + cd "$MT_VARTEXFONTS" || exit + echo "$progname: modifying permissions in \`$MT_VARTEXFONTS' ..." >&2 + for d in pk tfm source; do + test -d "$d" && find "$d" -type d -exec chmod 755 '{}' \; + done + echo "$progname: all permissions set." >&2 + ) + setupTmpDir + fmgrConfigReplace mktex.cnf '^: ..MT_FEATURES=' ": \${MT_FEATURES=texmfvar}" + ;; + "") echo "$help" >&2; rc=1;; + *) echo "$progname: unknown option \`$2' given as argument for \`$progname font'" >&2 + echo "$progname: try \`$progname font' for help" >&2 + rc=1 + ;; + esac + ;; + + formats) + cat >&2 <<EOM +texconfig formats is no longer supported, because manual edits of +fmtutil.cnf will be overwritten by the new TeX Live package manager, +tlmgr, which regenerates that file as needed upon package changes. +Thus, to add or remove formats, the recommended method is to use tlmgr +to add or remove the appropriate package. + +If you need to make manual additions, you can edit the file +fmtutil-local.cnf under TEXMFLOCAL. Further information with +tlmgr --help and at http://tug.org/texlive/tlmgr.html. + +Exiting. +EOM + exit 1 # but leave the real code for posterity + + setupTmpDir + echo "$progname: analyzing old configuration..." >&2 + fmtutil --catcfg > $tmpdir/pre + fmtutil --edit + echo "$progname: analyzing new configuration..." >&2 + fmtutil --catcfg > $tmpdir/post + + if cmp $tmpdir/pre $tmpdir/post >/dev/null 2>&1; then + echo "$progname: no new/updated formats available ..." >&2 + else + echo "$progname: updating formats ..." >&2 + comm -13 $tmpdir/pre $tmpdir/post > $tmpdir/addOrChange + for i in `awk '{print $1}' $tmpdir/addOrChange`; do + fmtutil --byfmt "$i" || rc=1 + done + texlinks --multiplatform || rc=1 + fi + ;; + + help|--help|-h) + echo "$help" + ;; + + # "hyphen FORMAT" + hyphen) + cat >&2 <<EOM +texconfig hyphen is no longer supported, because manual edits of +language.dat (or language.def) will be overwritten by the new TeX Live +package manager, tlmgr, which regenerates those configuration files as +needed upon package changes. Thus, to add or remove hyphenation +patterns, the recommended method is to use tlmgr to add or remove the +appropriate package. + +If you need to make manual additions, you can edit the files +language-local.dat and language-local.def under TEXMFLOCAL. Further +information with tlmgr --help and at http://tug.org/texlive/tlmgr.html. + +Exiting. +EOM + exit 1 # but leave the real code for posterity + + tcBatchHyphenFormat=$2 + formatsForHyphen=`getFormatsForHyphen` + formatsForHyphenFmt=`echo "$formatsForHyphen" | myFmt | sed 's@^@ @'` + help="Usage: $progname hyphen FORMAT + +Valid FORMATs are: +$formatsForHyphenFmt" + case $tcBatchHyphenFormat in + "") + echo "$help" >&2; rc=1 + ;; + *) + if checkElemInList "$tcBatchHyphenFormat" $formatsForHyphen; then + + tcBatchHyphenFile=`fmtutil --showhyphen "$tcBatchHyphenFormat"` + case $tcBatchHyphenFile in + "") + echo "$progname: could not find hyphen setup file for format \`$tcBatchHyphenFormat'" >&2 + rc=1 + return + ;; + esac + + getRelDir "$tcBatchHyphenFile" + case $relPart in + "") + # edit tcBatchHyphenFile directly + tcBatchHFID= + setupTmpDir + tcBatchHFEdit=$tcBatchHyphenFile + tcBatchHFOrig=$tmpdir/hforig + cp "$tcBatchHyphenFile" "$tcBatchHFOrig" + ;; + *) + # use tcfmgr + tcBatchHyphenFileBasename=`echo "$tcBatchHyphenFile" | sed 's@.*/@@'` + setupTmpDir + co=`tcfmgr --tmp $tmpdir --cmd co --file "$tcBatchHyphenFileBasename" --reldir "$relPart" --infile "$tcBatchHyphenFile"` + if test $? != 0; then + echo "$progname: failed to check out file \`$tcBatchHyphenFile'" >&2 + rc=1 + return 1 + else + set x $co; shift + tcBatchHFID=$1; tcBatchHFEdit=$3; tcBatchHFOrig=$4 + fi + ;; + esac + ${VISUAL-${EDITOR-vi}} "$tcBatchHFEdit" + if cmp "$tcBatchHFEdit" "$tcBatchHFOrig" >/dev/null 2>&1; then + echo "$progname: configuration unchanged." >&2 + else + case $tcBatchHFID in + "") + tcBatchHFOut=$tcBatchHFEdit + echo "$progname: updated configuration saved as file \`$tcBatchHFOut'" >&2 + lastUpdatedFile=$ci + ;; + *) + ci=`tcfmgr --tmp $tmpdir --cmd ci --id "$tcBatchHFID"` + if test $? != 0; then + echo "$progname: failed to check in file \`$tcBatchHyphenFileBasename'" >&2 + rc=1 + return + else + tcBatchHFOut=$ci + echo "$progname: updated configuration saved as file \`$tcBatchHFOut'" >&2 + lastUpdatedFile=$ci + fi + ;; + esac + fmtutil --byhyphen "$tcBatchHFOut" + fi + else + echo "$progname: invalid format \`$tcBatchHyphenFormat' specified as argument for \`$progname hyphen'" >&2 + echo "$progname: for getting help, try \`$progname hyphen'" >&2 + rc=1 + fi + ;; + esac + ;; + + hyphen-list) + getFormatsForHyphen + ;; + + init) + case $2 in + "") + if fmtutil --all \ + && texlinks --multiplatform \ + && updmap; then + : + else + rc=1 + fi + ;; + *) + shift 1 + for i in "$@"; do + fmtutil --byfmt "$i" || rc=1 + done + ;; + esac + ;; + + mode-list) + setupModesMfFile + listMfModes + ;; + + mode) + case $2 in + "") + echo "Usage: $progname mode MODE + +Valid MODE settings:" + setupModesMfFile + listMfModes | sed 's@ .*@@; s@^@ @' | myFmt + rc=1 + ;; + *) + tcBatchMode=$2 + setupModesMfFile + if checkElemInList $tcBatchMode `listMfModes | sed 's@ .*@@'`; then + + # modify mktex.cnf + setupTmpDir + fmgrConfigReplace mktex.cnf '^: ..MODE=' ": \${MODE=$tcBatchMode}" + set x `getRes "$tcBatchMode"`; shift + tcBatchRes=$1 + fmgrConfigReplace mktex.cnf '^: ..BDPI=' ": \${BDPI=$tcBatchRes}" + + if checkForBinary dvips >/dev/null && tcfmgr --cmd find --file config.ps >/dev/null 2>&1; then + tcBatch dvips mode "$tcBatchMode" + fi + if checkForBinary pdftex >/dev/null && tcfmgr --cmd find --file pdftexconfig.tex >/dev/null 2>&1; then + tcBatch pdftex mode "$tcBatchMode" + fi + else + echo "$progname: unknown mode \`$tcBatchMode' specified as argument for \`$progname mode'" >&2; rc=1 + fi + ;; + esac + ;; + + paper) + help="Usage: $progname paper PAPER + +Valid PAPER settings: + letter a4" + + p=$2; pXdvi=$2; pDvips=$2 + case $2 in + letter) + pXdvi=us;; + a4) + pXdvi=a4;; + "") echo "$help" >&2; rc=1; return;; + *) + echo "$progname: unknown PAPER \`$2' given as argument for \`$progname paper'" >&2 + echo "$progname: try \`$progname paper' for help" >&2 + rc=1 + return;; + esac + if checkForBinary dvips >/dev/null && tcfmgr --cmd find --file config.ps >/dev/null 2>&1; then + tcBatch dvips paper $pDvips + fi + if checkForBinary dvipdfm >/dev/null && tcfmgr --cmd find --file config >/dev/null 2>&1; then + tcBatch dvipdfm paper $p + fi + if checkForBinary dvipdfmx >/dev/null && tcfmgr --cmd find --file dvipdfmx.cfg >/dev/null 2>&1; then + tcBatch dvipdfmx paper $p + fi + if checkForBinary xdvi >/dev/null && tcfmgr --cmd find --file XDvi >/dev/null 2>&1; then + tcBatch xdvi paper $pXdvi + fi + if checkForBinary pdftex >/dev/null && tcfmgr --cmd find --file pdftexconfig.tex >/dev/null 2>&1; then + tcBatch pdftex paper $p + fi + ;; + + pdftex) + help="Usage: $progname pdftex paper PAPER + +Valid PAPER settings: + a4 letter" + case $2 in + + mode) + case $3 in + "") + echo "Usage: $progname pdftex mode MODE" + rc=1 + ;; + *) + tcBatchPdftexMode=$3 + setupTmpDir + setupModesMfFile + if checkElemInList "$tcBatchPdftexMode" `listMfModes | sed 's@ .*@@'`; then + set x `getRes "$tcBatchPdftexMode"`; shift + fmgrConfigReplace pdftexconfig.tex 'pdfpkresolution' "\\pdfpkresolution=$1" + if $fmgrConfigReplaceChanged; then + fmtutil --refresh + fi + else + echo "$progname: unknown MODE \`$tcBatchPdftexMode' given as argument for \`$progname pdftex mode'" >&2 + rc=1 + fi + ;; + esac + ;; + + paper) + case $3 in + letter) + w="8.5 true in"; h="11 true in" + setupTmpDir + fmgrConfigReplace pdftexconfig.tex pdfpagewidth '\pdfpagewidth='"$w" + wChanged=$fmgrConfigReplaceChanged + fmgrConfigReplace pdftexconfig.tex pdfpageheight '\pdfpageheight='"$h" + if $wChanged || $fmgrConfigReplaceChanged; then + fmtutil --refresh + fi + ;; + a4) + w="210 true mm"; h="297 true mm" + fmgrConfigReplace pdftexconfig.tex pdfpagewidth '\pdfpagewidth='"$w" + wChanged=$fmgrConfigReplaceChanged + fmgrConfigReplace pdftexconfig.tex pdfpageheight '\pdfpageheight='"$h" + if $wChanged || $fmgrConfigReplaceChanged; then + fmtutil --refresh + fi + ;; + "") echo "$help" >&2; rc=1;; + *) + echo "$progname: unknown PAPER \`$3' given as argument for \`$progname pdftex paper'" >&2 + echo "$progname: try \`$progname pdftex paper' for help" >&2 + rc=1 ;; + esac ;; + "") + echo "$help" >&2; rc=1;; + *) + echo "$progname: unknown option \`$2' given as argument for \`$progname pdftex'" >&2 + echo "$progname: try \`$progname pdftex' for help" >&2 + rc=1 + ;; + esac + ;; + + rehash) + mktexlsr + ;; + + # + version|--version) + echo "$progname version $version" + setupTexmfmain + setupTexmfdist + showDistVersionInfo + (exit 0); exit 0;; + + # handle "xdvi paper PAPER" + xdvi) + tcBatchXdviPapers='us "8.5x11" +usr "11x8.5" +legal "8.5x14" +foolscap "13.5x17.0" +a1 "59.4x84.0cm" +a2 "42.0x59.4cm" +a3 "29.7x42.0cm" +a4 "21.0x29.7cm" +a5 "14.85x21.0cm" +a6 "10.5x14.85cm" +a7 "7.42x10.5cm" +a1r "84.0x59.4cm" +a2r "59.4x42.0cm" +a3r "42.0x29.7cm" +a4r "29.7x21.0cm" +a5r "21.0x14.85cm" +a6r "14.85x10.5cm" +a7r "10.5x7.42cm" +b1 "70.6x100.0cm" +b2 "50.0x70.6cm" +b3 "35.3x50.0cm" +b4 "25.0x35.3cm" +b5 "17.6x25.0cm" +b6 "13.5x17.6cm" +b7 "8.8x13.5cm" +b1r "100.0x70.6cm" +b2r "70.6x50.0cm" +b3r "50.0x35.3cm" +b4r "35.3x25.0cm" +b5r "25.0x17.6cm" +b6r "17.6x13.5cm" +b7r "13.5x8.8cm" +c1 "64.8x91.6cm" +c2 "45.8x64.8cm" +c3 "32.4x45.8cm" +c4 "22.9x32.4cm" +c5 "16.2x22.9cm" +c6 "11.46x16.2cm" +c7 "8.1x11.46cm" +c1r "91.6x64.8cm" +c2r "64.8x45.8cm" +c3r "45.8x32.4cm" +c4r "32.4x22.9cm" +c5r "22.9x16.2cm" +c6r "16.2x11.46cm" +c7r "11.46x8.1cm"' + help="Usage: $progname xdvi paper PAPER + +Valid PAPER settings: + a1 a1r a2 a2r a3 a3r a4 a4r a5 a5r a6 a6r a7 a7r + b1 b1r b2 b2r b3 b3r b4 b4r b5 b5r b6 b6r b7 b7r + c1 c1r c2 c2r c3 c3r c4 c4r c5 c5r c6 c6r c7 c7r + foolscap legal us usr" + case $2 in + paper-list) + echo "$tcBatchXdviPapers" + ;; + paper) + case $3 in + a1|a1r|a2|a2r|a3|a3r|a4|a4r|a5|a5r|a6|a6r|a7|a7r|b1|b1r|b2|b2r|b3|b3r|b4|b4r|b5|b5r|b6|b6r|b7|b7r|c1|c1r|c2|c2r|c3|c3r|c4|c4r|c5|c5r|c6|c6r|c7|c7r|foolscap|legal|us|usr) + fmgrConfigReplace XDvi paper: "*paper: $3" + ;; + "") echo "$help" >&2; rc=1;; + *) + echo "$progname: unknown PAPER \`$3' given as argument for \`$progname xdvi paper'" >&2 + echo "$progname: try \`$progname xdvi paper' for help" >&2 + rc=1 ;; + esac ;; + "") + echo "$help" >&2; rc=1;; + *) + echo "$progname: unknown option \`$2' given as argument for \`$progname xdvi'" >&2 + echo "$progname: try \`$progname xdvi' for help" >&2 + rc=1 + ;; + esac + ;; + *) + echo "$progname: unknown option \`$1' given as argument for \`$progname'" >&2 + echo "$progname: try \`$progname help' for help" >&2 + rc=1 + esac +} + +############################################################################### +# tcInteractive(void) +# handle interactive mode +############################################################################### +tcInteractive() +{ + texconfig-dialog +} + +############################################################################### +# main() +############################################################################### +rc=0 +case $# in + 0) tcInteractive;; + *) tcBatch "$@";; +esac + +cleanup $rc diff --git a/Master/texmf-dist/scripts/tetex/texlinks.sh b/Master/texmf-dist/scripts/tetex/texlinks.sh new file mode 100755 index 00000000000..09b3488d263 --- /dev/null +++ b/Master/texmf-dist/scripts/tetex/texlinks.sh @@ -0,0 +1,335 @@ +#!/bin/sh +# $Id: texlinks 18035 2010-04-28 17:41:52Z mpg $ + +# Thomas Esser, 1999, 2002, 2003. public domain. + +# texlinks: script to maintain symlinks from format to engine. Interprets +# the lines given in fmtutil.cnf. + +# History: +# (Further changes in ChangeLog.) +# Tue Oct 9 14:23:01 BST 2007 +# Added unlink option (-u) to aid OpenBSD package uninstall +# Edd Barrett <vext01@gmail.com> +# Sun Aug 28 21:41:06 CEST 2005 +# remove special cases for csplain,cslatex,pdfcslatex,pdfcsplain +# Fr Apr 8 19:15:05 CEST 2005 +# cleanup now has an argument for the return code +# So Mar 27 18:52:06 CEST 2005 +# honor $TMPDIR, $TEMP and $TMP, not just $TMP +# Mon May 10 20:52:48 CEST 2004 +# kpseaccess instead of access +# Thu Dec 25 22:11:53 CET 2003, te: +# add version string +# Tue Apr 9 22:46:34 CEST 2002, te: +# do not create symlinks for cont-??, metafun and mptopdf + +test -f /bin/sh5 && test -z "$RUNNING_SH5" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \ + && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; } +unset RUNNING_SH5 + +test -f /bin/bsh && test -z "$RUNNING_BSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \ + && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; } +unset RUNNING_BSH + +export PATH + +# hack around a bug in zsh: +test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"' + +version='$Id: texlinks 18035 2010-04-28 17:41:52Z mpg $' +progname=texlinks +cnf=fmtutil.cnf # name of the config file + +usage='Usage: texlinks [OPTION]... [DIRECTORY]... + +Create symbolic links format -> engine according to fmtutil setup. + +Mandatory arguments to long options are mandatory for short options too. + -e, --exeext EXT append EXT to symlink targets (default: none) + -f, --cnffile FILE use FILE as config file (default: fmtutil.cnf) + -m, --multiplatform operate in all platform specific directories + (default: operate only in directory for this platform) + -q, --quiet silently skip existing scripts / binaries + (default: issue warning) + -s, --silent same as -q + -u, --unlink remove symlinks created by texlinks + -v, --verbose enable verbose messages (default: off) + -h, --help show this help text + --version show version string + +The DIRECTORY arguments are an optional list of directories in which to +operate. If no directories are specified and --multiplatform is +likewise not specified, the directory of this script itself is used. +With --multiplatform, all child dirs of an upper-level bin/ dir are used. + +Report bugs to: tex-k@tug.org +TeX Live home page: <http://tug.org/texlive/> +' + +############################################################################### +# abort(errmsg) +# print `errmsg' to stderr and exit with error code 1 +############################################################################### +abort() { errmsg "texlinks: $1."; cleanup 1; } + +# error message to stderr: +errmsg() { echo "$@" >&2; } + +# give message to stderr only if "verbose" mode is on: +verbose_echo() { $verbose && errmsg "$@"; } + +# in verbose mode: show command that is executed: +verbose_do() { verbose_echo "$@"; "$@"; } + +############################################################################### +# cleanup() +# clean up the temp area and exit with proper exit status +############################################################################### +cleanup() +{ + rc=$1 + $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \ + && { rm -f "$tmpdir"/*; cd /; rmdir "$tmpdir"; } + exit $rc +} + +############################################################################### +# setupTmpDir() +# set up a temp directory and a trap to remove it +############################################################################### +setupTmpDir() +{ + $needsCleanup && return + + trap 'cleanup 1' 1 2 3 7 13 15 + needsCleanup=true + (umask 077; mkdir "$tmpdir") \ + || abort "could not create directory \`$tmpdir'" +} + + +# search a binary along $PATH: +check_for_binary() +{ + testbin=$1 + set x `echo "$PATH" | sed 's/^:/.:/; s/:$/:./; s/::/:.:/g; s/:/ /g'`; shift + for i + do + if [ -x "$i/$testbin" ]; then + echo "$i/$testbin" + return 0 + fi + done + return 1 +} + + +############################################################################### +# install_link(dest src) +# create a symlink like ln -s dest src, but make sure that src is not +# an existing binary, possibly adding the executable extension if +# passed on the command. +############################################################################### +install_link() +{ + # make symlink src -> dest + dest=$1; src=$2 + + case $src in + */mf) + if test "$dest" = mf-nowin; then + if test -f $selfautoloc/mfw; then + dest=mfw # name for windows-enabled mf, once upon a time + verbose_echo "both mfw and mf-nowin exists, $src linked to $dest" + fi + if test -f $selfautoloc/mf && test -f $selfautoloc/mf-nowin; then + # have both mf and mf-nowin binaries. no link. + verbose_echo "skipped metafont symlink $src -> $dest (special case)" + return + fi + fi + ;; + esac + + # append .exe if supplied (for cygwin). + test -n "$exeext" && dest="$dest$exeext" + + case $src in + */cont-??|*/mptopdf) + # context includes wrapper scripts that create/run these. + verbose_echo "skipped ConTeXtish symlink $src -> $dest (special case)" + ;; + *) + test "x$src" != "x`(ls -ld $src | awk '{print $NF}') 2>/dev/null`" && + rm -f "$src" + + if test -f "$src"; then + case $silent in + true) + ;; + *) + errmsg "install_link $src -> $dest failed: file already exists." + ;; + esac + else + verbose_do ln -s "$dest" "$src" + fi + ;; + esac +} + +############################################################################### +# search_symlinkdir() +# look if $PATH has only symlinks to the real binaries and find that +# directory. Also check if this directory is writable. +############################################################################### +search_symlinkdir() +{ + kpsewhich=`check_for_binary kpsewhich` + test -z "$kpsewhich" && return 1 + symlinkdir=`echo $kpsewhich | sed 's@/*kpsewhich$@@'` + kpseaccess -w "$symlinkdir" || return 1 + touch "$symlinkdir/tl$$" + if test -f "$selfautoloc/tl$$"; then + rm -f "$symlinkdir/tl$$" + return 1 + else + rm -f "$symlinkdir/tl$$" + return 0 + fi +} + +############################################################################### +# upd_symlinkdir() +# if $PATH has only symlinks to the real binaries, update that directory +# that holds the symlinks +############################################################################### +upd_symlinkdir() +{ + search_symlinkdir || return 0 + for i in `sed 's@ .*@@' cnf_file_ln.$$`; do + install_link "$selfautoloc/$i" "$symlinkdir/$i" + done +} + +############################################################################### +# rm_link() +# Delete a previously installed link +############################################################################### +rm_link() +{ + link=$1; + if test -e $link; then + if test -h $link; then + verbose_do rm -Rf $link + else + verbose_echo "kept $link, since not a symlink" + fi + else + verbose_echo "skipped $link, non-existent" + fi +} + +############################################################################### +# main() +# parse commandline arguments, initialize variables, +# switch into temp. direcrory, execute desired command +############################################################################### +main() +{ + cnf_file= # global variable: full name of the config file + dirs= + needsCleanup=false + + exeext= + multiplatform=false + verbose=false + unlink=false + silent=false + thisdir=`pwd` + : ${KPSE_DOT=$thisdir}; export KPSE_DOT + selfautoloc=`kpsewhich --expand-var='$SELFAUTOLOC'` + while + case $1 in + --h*|-h) + echo "$usage"; exit 0;; + --version) + echo "$progname version $version"; exit 0;; + --cnffile|-f) + shift; cnf_file=$1;; + --e*|-e) shift; exeext=$1;; + --m*|-m) multiplatform=true;; + --s*|-s|--q*|-q) silent=true;; + --u*|-u) unlink=true;; + --v*|-v) verbose=true;; + -*) errmsg "fmtutil: unknown option \`$1' ignored.";; + *) break;; + esac + do test $# -gt 0 && shift; done + dirs="$*" + + # if no cnf_file from command-line, look it up with kpsewhich: + test -z "$cnf_file" && cnf_file=`kpsewhich --format='web2c files' $cnf` + test -f "$cnf_file" || abort "config file \`$cnf' not found" + + + tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/texlinks.$$ + setupTmpDir + cd "$tmpdir" || cleanup 1 + + sed '/^[ ]*#/d; /^[ ]*$/d' $cnf_file \ + | awk '{print $1, $2}' > cnf_file_ln.$$ + + if test -z "$dirs"; then + if test $multiplatform = true; then + case $selfautoloc in + */bin) dirs=$selfautoloc;; + *) parent=`kpsewhich --expand-var='$SELFAUTODIR'` + dirs=`find $parent -type f -name kpsewhich -print \ + | sed 's@/kpsewhich$@@'`;; + esac + else + dirs=$selfautoloc + fi + fi + + for d in $dirs; do + kpseaccess -w $d \ + || { errmsg "$d: no write permissions. Skipping..."; continue; } + # cnf_file_ln.$$ has lines with "format engine" pairs + set x `cat cnf_file_ln.$$`; shift + while test $# != 0; do + fmt=$1; engine=$2; shift; shift + + # Some broken shells destroy the positional arguments when calling a + # shellfunction. Therefore, we save and restore them "by hand" in the + # main_args_while variable. + main_args_while="$@" + + test "x$fmt" = "x$engine" && continue + if test -f "$d/$engine$exeext"; then + case $unlink in + true) + rm_link "$d/$fmt";; + *) + install_link "$engine" "$d/$fmt";; + esac + else + verbose_echo "skipped $d/$engine, engine does not exist" + fi + + # restore positional arguments: + set x $main_args_while; shift + + done + done + upd_symlinkdir +} + +main ${1+"$@"} + +# set successful return code +cleanup 0 diff --git a/Master/texmf-dist/scripts/tex4ht/htcopy.pl b/Master/texmf-dist/scripts/tex4ht/htcopy.pl new file mode 100644 index 00000000000..c8d2193b21d --- /dev/null +++ b/Master/texmf-dist/scripts/tex4ht/htcopy.pl @@ -0,0 +1,46 @@ +use File::Copy; +use File::Path; +use File::Basename; + +&main ; + +0; + +sub is_absolute { + my ($f) = @_; + return $f =~ m@^([a-zA-Z]:)?[\\/]@ ; +} + +sub canonicalize { + my ($f) = @_; + $f =~ s@/@\\@g; + return $f; +} + +sub main { + my $src = &canonicalize($ARGV[0]); + my $dst = &canonicalize($ARGV[1]); + + if (&is_absolute($src)) { + if (-d $dst) { + $dst = $dst . "\\" . &basename($src); + } + } + else { + if (-d $dst) { + $dst = "$dst\\$src"; + &mkpath(&dirname($dst)); + } + } + + if ($0 =~ m/htmove\.pl$/) { + &move($src, $dst); + } + elsif ($0 =~ m/htcopy\.pl$/) { + ©($src, $dst); + } + else { + print STDERR "$0: bad verb $ARGV[0]\n"; + } +} + diff --git a/Master/texmf-dist/scripts/tex4ht/htmove.pl b/Master/texmf-dist/scripts/tex4ht/htmove.pl new file mode 100644 index 00000000000..2d52965ebf5 --- /dev/null +++ b/Master/texmf-dist/scripts/tex4ht/htmove.pl @@ -0,0 +1,45 @@ +use File::Copy; +use File::Path; +use File::Basename; + +&main ; + +0; + +sub is_absolute { + my ($f) = @_; + return $f =~ m@^([a-zA-Z]:)?[\\/]@ ; +} + +sub canonicalize { + my ($f) = @_; + $f =~ s@/@\\@g; + return $f; +} + +sub main { + my $src = &canonicalize($ARGV[0]); + my $dst = &canonicalize($ARGV[1]); + + if (&is_absolute($src)) { + if (-d $dst) { + $dst = $dst . "\\" . &basename($src); + } + } + else { + if (-d $dst) { + $dst = "$dst\\$src"; + &mkpath(&dirname($dst)); + } + } + + if ($0 =~ m/htmove\.pl$/) { + &move($src, $dst); + } + elsif ($0 =~ m/htcopy\.pl$/) { + ©($src, $dst); + } + else { + print STDERR "$0: bad verb $ARGV[0]\n"; + } +} diff --git a/Master/texmf-dist/scripts/texlive/NEWS b/Master/texmf-dist/scripts/texlive/NEWS new file mode 100644 index 00000000000..5cd9121f29c --- /dev/null +++ b/Master/texmf-dist/scripts/texlive/NEWS @@ -0,0 +1,103 @@ +(This file public domain. Originally written by Norbert Preining and +Karl Berry, 2010.) + +<li>new tlperl (version 5.16.2) for Windows, compiled without + optimization and with debugging + +<p><b>tlmgr revision 28216 (released 09nov12):</b><br> +<li>menu shortcuts are installed unconditionally, the desktop_integration + option only controls shortcuts on the desktop (W32) +<li>fix --self updates on W32 when multiple remote repositories are used + +<p><b>tlmgr revision 27748 (released 25oct12):</b><br> +<li>support <tt>tlmgr repository list ...</tt> for listing of any repository +<li>work around Cygwin Perl returning undef from an empty file + +<p><b>tlmgr revision 27601 (released 07sep12):</b><br> +<li>allow for spaces in the repository path (again) +<li>make <tt>tlmgr --help</tt> more robust against broken perldoc + +<p><b>tlmgr revision 27413 (released 16aug12):</b><br> +<li>fix Perl syntax warning in trans.pl +<li><tt>tar -m</tt> in Windows update to avoid spurious problems + +<p><b>tlmgr revision 27258 (released 30jul12):</b><br> +<li>more fixes to updmap multi-tree support for TEXMFLOCAL + +<p><b>tlmgr revision 27170 (released 26jul12):</b><br> +<li>consistently use ll_RR in .po file naming, per general gettext convention +<li>make sure that an outdated updmap.cfg file is backed up and removed + +<p><b>texlive.infra (tlmgr) revision 26923 (released 07jul12):</b><br> +<li>version with TeX Live 2012 +<li>generate updmap is no more, since updmap.cfg is now per-tree +<li>multiple repository support +<li>tlmgr can now install a package from a file + +<p><b>tlmgr revision 24419 (released 01nov11):</b><br> +<li>support addKanjiMap execute + +<p><b>tlmgr revision 23514 (released 12aug11):</b><br> +<li>dependent formats are regenerated when necessary. +<li>on Windows only, do not update time stamps when unpacking, + to partially avoid spurious errors. +<li>detect mipsel and mipsel64 platforms. + +<p><b>tlmgr revision 23117 (released 23jun11):</b><br> +<li>version with TeX Live 2011. +<li>support <tt>gui-lang</tt> in tlmgr config file, and add GUI + interface for it. + +<p><b>tlmgr revision 20975 (released 24jan11):</b><br> +<li>fix usage of persistent connections in tlmgr. +<li>override locale settings when using wget as a subprocess. + +<p><b>tlmgr revision 20243 (released 1nov10):</b><br> +<li>try (again) not to load the remote tlpdb if tlmgr update is called + without arguments. +<li>fix bugs in autobackup/backupdir handling; unify error messages; + on clean, also remove package backups for packages no longer present + in tlpdb. +<li>support keyword searching as provided by the beta CTAN characterizations + at <a href="http://az.ctan.org/">http://az.ctan.org/</a> (no Internet + access needed for the search, though). tlmgr documentation + has details. Support is also present in tlmgrgui. + +<p><b>tlmgr revision 19923 (released 28sep10):</b><br> +<li>undo change for not loading remote db, needs more work. + +<p><b>tlmgr revision 19896 (released 27sep10):</b><br> +<li>add <tt>-R</tt> to the <tt>LESS</tt> environment variable, and unset + LESSOPEN and LESSPIPE, before calling pod2usage. +<li>don't load the remote db if tlmgr update is called without arguments. + +<p><b>tlmgr revision 19414 (TeX Live 2010 release version):</b><br> + +<li>implement download selection mode in the file + <tt>TEXMFCONFIG/tlmgr/config</tt>, + option <tt>persistent-downloads</tt>, with value 0 or 1. +<li>remove support for old GUI (<tt>tlmgr gui-old</tt>). + +tlmgr rev 17811 (2010-04-25) + + * tlmgr restore --all: restoring the latest, using all available backups. + * GUI: add support for restore action. + * do not auto-install packages contained in forcibly removed collections. + * GUI: add support for the three command line options: --no-auto-install, + --no-auto-remove (under Menu->Options), and --reinstall-forcibly-removed + (just below the "Update all installed" button). + * GUI: provide access to the manual (tlmgr help) in the Help menu + * GUI: provide simple and expert modes (Options->Expert options) + +tlmgr rev 17611 (2010-03-30) + + * Support automatic installation of new collections (when they are + included in the selected scheme). + +tlmgr rev 17455 (2010-03-19) + + * persistent HTTP connections enabled by default + (use --no-persistent-downloads to turn off) + * package update algorithm changed to avoid incorrect + "forcibly removed" inferences. Should be invisible. + * report of the number of pending updates in tlmgr gui. diff --git a/Master/texmf-dist/scripts/texlive/lua/texlive/getopt.tlu b/Master/texmf-dist/scripts/texlive/lua/texlive/getopt.tlu new file mode 100644 index 00000000000..7e52ddd357f --- /dev/null +++ b/Master/texmf-dist/scripts/texlive/lua/texlive/getopt.tlu @@ -0,0 +1,99 @@ +#! /usr/bin/env texlua +--*-Lua-*- +-- getopt.tlu +-- +-- (tex)lua library function for argument processing +-- $Id$ +-- +-- Copyright 2008 Norbert Preining +-- +-- This code will presumably be changed in the near future. Don't use +-- it for your own scripts! +-- +-- This file is licensed under the GNU General Public License version 2 +-- or any later version. +-- +-- The file provides a basic getopt function +-- it takes as argument a table with the argument names as keys and the +-- number of argument options as values +-- +-- It returns a tables with the found arguments as keys and +-- . true as value for an option not taking any values +-- . a single value for an option taking one value +-- . an array of values for an option taking more than one value +-- +-- Example: +-- options = getopt( { help = 0, foo = 1, bar = 2 } ) +-- and calling the script with +-- script a --help b --bar c d e --foo f g h +-- will leave a b e g h in the arguments and will return +-- options["help"] = true +-- options["foo"] = "f" +-- options["bar"] = { "c", "d" } +-- +-- Options can start with a single or a double dash, but values may NOT be +-- separated with a =, but need to be seprate arguments! +-- +-- Example code for printing out the options: +-- print ("OPTIONS:") +-- for o,v in pairs(options) do +-- if (type(v) == "boolean") then +-- print ("option "..o) +-- elseif (type(v) == "table") then +-- for a,b in ipairs(v) do +-- print ("option "..o.."["..a.."] = "..b) +-- end +-- else +-- print ("option "..o.." = "..v) +-- end +-- end + +function getopt(spec) + local newarg = {} + local retargs = {} + do + local i, limit = 1, #arg + while (i <= limit) do + local found = false + for k,v in pairs(spec) do + if (arg[i] == "--"..k or arg[i] == "-"..k) then + found = true + if (v == 0) then + -- boolean argument + retargs[k] = true + elseif (v == 1) then + -- one single argument + retargs[k] = arg[i+1] + i = i + 1 + else + local bla = {} + for n=1, v do + bla[n] = arg[i+n] + end + retargs[k] = bla + -- we have to shift the next i!!! + i = i + v + end + -- we have found the arg, so stop processing further spec arguments + break + end + end + if not(found) then + -- non of the spec args did hit, so we push the arg to the newargs + newarg[#newarg+1] = arg[i] + end + i = i + 1 + end + end + -- replace the global arg with the cleaned newarg + arg = newarg + -- return the found arguments + return retargs +end + +-- Local Variables: +-- lua-indent-level: 2 +-- tab-width: 2 +-- indent-tabs-mode: nil +-- End: +-- vim:set tabstop=2 expandtab: # diff --git a/Master/texmf-dist/scripts/texlive/lua/texlive/tlpdb.tlu b/Master/texmf-dist/scripts/texlive/lua/texlive/tlpdb.tlu new file mode 100644 index 00000000000..d83f02ceccf --- /dev/null +++ b/Master/texmf-dist/scripts/texlive/lua/texlive/tlpdb.tlu @@ -0,0 +1,259 @@ +#! /usr/bin/env texlua +-- texlive/tlpdb.tlu +-- $Id$ +-- +-- Copyright (C) 2008 Norbert Preining +-- This file is licensed under the GNU General Public License version 2 +-- or any later version. +-- +-- TODO: tag evaluation of docfiles lines ... +-- +-- providing the tlpdb as a lua table +-- +-- format +-- tlpobj = tlpdb[packagename] +-- tlpobj.name string +-- tlpobj.revision string +-- tlpobj.category string +-- tlpobj.shortdesc string +-- tlpobj.longdesc string +-- tlpobj.catalogue string +-- tlpobj.cataloguedata table indexed by various catalogue values +-- tlpobj.containersize string +-- tlpobj.srccontainersize string +-- tlpobj.doccontainersize string +-- tlpobj.containermd5 string +-- tlpobj.srccontainermd5 string +-- tlpobj.doccontainermd5 string +-- tlpobj.binfiles table indexed by archs giving table indexed by numbers +-- tlpobj.binsize table indexed by archs giving strings +-- tlpobj.docfiles = table indexed by numbers +-- tlpobj.docfiledata[docfile][tag] = value +-- tlpobj.docsize string +-- tlpobj.srcfiles = table indexed by numbers +-- tlpobj.srcsize string +-- tlpobj.runfiles = table indexed by numbers +-- tlpobj.runsize string +-- tlpobj.depend = table indexed by numbers +-- tlpobj.execute = table of strings indexed by numbers +-- tlpobj.postaction = table of strings indexed by numbers +-- tlpobj.relocated = boolean +-- +--*-Lua-*- + +function read_tlpdb(root) + local fn = root..'/tlpkg/texlive.tlpdb' + if (lfs.isfile(fn)) then -- tlpdb exists + local lineno = 0 -- current line number + local errline = '' -- current line + local function die(msg) + io.stderr:write(msg..' in '..fn..' at line '..tostring(lineno) + ..'\n>>'..errline..'<<\n') + -- for now, exit, but this is bad behaviour if we want to be used + -- as a library. FIXME. + os.exit(1) + end + local started = false + local lastcmd = "" + local arch + local size + local tlpobj = {} + local name + local tlpdb = {} + for line in io.lines(fn) do + lineno = lineno + 1 + errline = line + if string.match(line, '^%s*$') then + if started then + -- we have encountered an empty line while creating a tlpobj, so + -- stop that tlpobj, add it to the tlpdb, and restart + --tlpdb[name] = tlpobj + tlpdb[name] = tlpobj + tlpobj = {} + --print ("adding "..name.." to tlpdb") + started = false + end + else + if string.match(line, '^ ') then + if lastcmd == 'runfiles' or + lastcmd == 'binfiles' or + lastcmd == 'docfiles' or + lastcmd == 'srcfiles' or + lastcmd == 'execute' or + lastcmd == 'depend' then + line = string.gsub(line, '^ ', lastcmd.."continued ") + else + die('Continuation of '..lastcmd..' not allowed') + end + end + local first + local rest + first, rest = string.match(line,'^(%S+)%s*(.*)%s*$') + --print ("DEBUG: line = "..line) + --print ("DEBUG: first = "..first) + lastcmd = first + if first == "name" then + tlpobj.name = rest + name = rest + started = true + elseif first == "revision" then + tlpobj.revision = rest + elseif first == "category" then + tlpobj.category = rest + elseif first == "shortdesc" then + tlpobj.shortdesc = rest + elseif first == "catalogue" then + tlpobj.catalogue = rest + elseif string.match(first,'^catalogue%-') then + --local data = string.match(first,'^catalogue-(.*)$') + local cdata = string.gsub(first,'^catalogue%-', '') + --print("DEBUG: cdata = "..cdata..", first = "..first) + if not(tlpobj.cataloguedata) then + tlpobj.cataloguedata = {} + end + tlpobj.cataloguedata[cdata] = rest + elseif first == "containersize" then + tlpobj.containersize = rest + elseif first == "srccontainersize" then + tlpobj.srccontainersize = rest + elseif first == "doccontainersize" then + tlpobj.doccontainersize = rest + elseif first == "containermd5" then + tlpobj.containermd5 = rest + elseif first == "srccontainermd5" then + tlpobj.srccontainermd5 = rest + elseif first == "doccontainermd5" then + tlpobj.doccontainermd5 = rest + elseif first == "runfiles" then + local rsize = string.match(rest,'size=([0-9]*)') + if (rsize) then + tlpobj.runsize = rsize + else + if #rest > 0 then + die('Unknown tag') + end + end + elseif first == "docfiles" then + local dsize = string.match(rest,'size=([0-9]*)') + if (dsize) then + tlpobj.docsize = dsize + else + if #rest > 0 then + die('Unknown tag') + end + end + elseif first == "srcfiles" then + local ssize = string.match(rest,'size=([0-9]*)') + if (ssize) then + tlpobj.srcsize = ssize + else + if #rest > 0 then + die('Unknown tag') + end + end + elseif first == "binfiles" then + arch = "" + local barch + local bsize + for aaa in string.gmatch(rest,'%S+') do + if string.match(aaa,'^arch=(%S*)$') then + barch = string.match(aaa,'^arch=(%S*)$') + elseif string.match(aaa,'^size=(%S*)$') then + bsize = string.match(aaa,'^size=(%S*)$') + else + die('Unknown tag') + end + end + if barch and bsize then + if not(tlpobj.binsize) then + tlpobj.binsize = {} + end + tlpobj.binsize[barch] = bsize + arch = barch + else + die('Incomplete binfile tags ') + end + elseif first == "runfilescontinued" then + if not(tlpobj.runfiles) then + tlpobj.runfiles = {} + end + table.insert(tlpobj.runfiles,rest) + lastcmd = "runfiles" + elseif first == "docfilescontinued" then + local dfile,tags = string.match(rest,'^(%S+)%s*(.*)%s*$') + if not(tlpobj.docfiles) then + tlpobj.docfiles = {} + end + table.insert(tlpobj.docfiles,dfile) + for aaa,bbb in string.gmatch(tags,'(%S+)=(%b"")') do + if not(tlpobj.docfiledata) then + tlpobj.docfiledata = {} + end + if aaa == "details" or aaa == "language" then + if not(tlpobj.docfiledata[dfile]) then + tlpobj.docfiledata[dfile] = {} + end + tlpobj.docfiledata[dfile][aaa] = bbb + else + die('Unknown docfile tag') + end + end + lastcmd = "docfiles" + elseif first == "srcfilescontinued" then + if not(tlpobj.srcfiles) then + tlpobj.srcfiles = {} + end + table.insert(tlpobj.srcfiles,rest) + lastcmd = "srcfiles" + elseif first == "binfilescontinued" then + if not(tlpobj.binfiles) then + tlpobj.binfiles = {} + end + if not(tlpobj.binfiles[arch]) then + tlpobj.binfiles[arch] = {} + end + table.insert(tlpobj.binfiles[arch],rest) + lastcmd = "binfiles" + elseif first == "depend" then + if not(tlpobj.depend) then + tlpobj.depend = {} + end + table.insert(tlpobj.depend,rest) + elseif first == "longdesc" then + if tlpobj.longdesc then + tlpobj.longdesc = tlpobj.longdesc.." "..rest + else + tlpobj.longdesc = rest + end + elseif first == "execute" then + if not(tlpobj.execute) then + tlpobj.execute = {} + end + table.insert(tlpobj.execute,rest) + elseif first == 'postaction' then + tlpobj.postaction = tlpobj.postaction or {} + table.insert(tlpobj.postaction, rest) + elseif first == 'relocated' then + -- don't even try to validate the value + tlpobj.relocated = (rest == '1') + else + die('Unknown directive') + end + if not(first) then + die('Missing directive') + end + end + end + return tlpdb + else + print (fn..' not found.') + end +end + + +-- Local Variables: +-- lua-indent-level: 2 +-- tab-width: 2 +-- indent-tabs-mode: nil +-- End: +-- vim:set tabstop=2 shiftwidth=2 expandtab: # diff --git a/Master/texmf-dist/scripts/texlive/lua/texlive/utils.tlu b/Master/texmf-dist/scripts/texlive/lua/texlive/utils.tlu new file mode 100644 index 00000000000..a31475b351c --- /dev/null +++ b/Master/texmf-dist/scripts/texlive/lua/texlive/utils.tlu @@ -0,0 +1,78 @@ +-- texlive/utils.tlu +-- $Id$ +-- +-- Copyright (C) 2008 Reinhard Kotucha, Norbert Preining +-- You may freely use, modify and/or distribute this file. +-- +-- general utilities for TeX Live lua scripts + +function setupperl() + -- For Windows we use the shipped perl interpreter, otherwise we expect + -- a perl to be installed + local perlbin + if os.type == 'windows' then + perlbin=TEXDIR..'/tlpkg/tlperl/bin/perl.exe' + os.setenv('PERL5LIB', TEXDIR..'/tlpkg/tlperl/lib') + else + perlbin = 'perl' + end + return perlbin +end + +function findscript(scriptname) + local script = kpse.find_file(scriptname, 'texmfscripts') + if script then + return script + else + io.stderr:write(filename..': Cannot find script '..scriptname) + return false + end +end + +-- fix arguments for windows +function fixwin(args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +function rmtree (path) + if lfs.isdir(path) then + for file in lfs.dir(path) do + if file ~= '.' and file ~= '..' then + local f = path..'/'..file + if lfs.isdir(f) then + rmtree(f) + lfs.rmdir(f) + else + os.remove(f) + end + end + end + lfs.rmdir(path) + end +end + + +function list (t) + local i = 0 + return function () + i = i + 1 + return t[i] + end +end + + +-- Local Variables: +-- lua-indent-level: 2 +-- tab-width: 2 +-- indent-tabs-mode: nil +-- End: +-- vim:set tabstop=2 expandtab: # diff --git a/Master/texmf-dist/scripts/texlive/rungs.tlu b/Master/texmf-dist/scripts/texlive/rungs.tlu new file mode 100755 index 00000000000..1987af06362 --- /dev/null +++ b/Master/texmf-dist/scripts/texlive/rungs.tlu @@ -0,0 +1,43 @@ +#!/usr/bin/env texlua +--*-Lua-*- +-- $Id$ + +-- Copyright (C) 2008 Reinhard Kotucha. +-- You may freely use, modify and/or distribute this file. + +-- Run Ghostscript (gs on Unix, gswin32c on Windows) + +function fixwin(args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +if os.type == 'windows' then + command={'gswin32c'} +else + command={'gs'} +end + +for i=1, #arg do + command[#command+1]=arg[i] +end + +command=fixwin(command) + +--[[ prepend an additional hyphen to activate this code +for i=0, #command do + print (command[i]) +end +os.exit(ret) +--]] + +ret=os.spawn(command) +os.exit(ret) diff --git a/Master/texmf-dist/scripts/texlive/test-tlpdb.tlu b/Master/texmf-dist/scripts/texlive/test-tlpdb.tlu new file mode 100755 index 00000000000..2004e958fb1 --- /dev/null +++ b/Master/texmf-dist/scripts/texlive/test-tlpdb.tlu @@ -0,0 +1,45 @@ +#! /usr/bin/env texlua +--*- Lua -*- + +-- Copyright (C) 2008 Norbert Preining. +-- You may freely use, modify and/or distribute this file. + +-- test the functionality of tlpdb.tlu + +kpse.set_program_name(arg[-1]) +texmfmain = kpse.var_value('TEXMFMAIN') +package.path = texmfmain.."/scripts/texlive/lua/?.tlu" +require("texlive.tlpdb") +master=kpse.var_value('SELFAUTOPARENT') +io.stderr:write('reading tlpdb ... ') +tlpdb = read_tlpdb(master) +io.stderr:write('done\n') + +--os.exit(0) + +for a,b in pairs(tlpdb) do + print ("package = "..a) + for c,d in pairs(b) do + if (type(d) == "table") then + print (" "..c..":") + for cdata,cvalue in pairs(d) do + if (type(cvalue) == "table") then + print (" "..cdata..":") + for aaa,bbb in pairs(cvalue) do + print (" "..aaa.." = "..bbb) + end + else + print (" "..cdata.." = "..cvalue) + end + end + else + print (" "..c.." = "..tostring(d)) + end + end +end +-- Local Variables: +-- lua-indent-level: 2 +-- tab-width: 2 +-- indent-tabs-mode: nil +-- End: +-- vim:set tabstop=2 shiftwidth=2 expandtab: # diff --git a/Master/texmf-dist/scripts/texlive/texconf.tlu b/Master/texmf-dist/scripts/texlive/texconf.tlu new file mode 100755 index 00000000000..e41500cc447 --- /dev/null +++ b/Master/texmf-dist/scripts/texlive/texconf.tlu @@ -0,0 +1,728 @@ +#! /usr/bin/env texlua +--*- Lua -*- +-- $Id$ + +-- Copyright (C) 2008 Reinhard Kotucha, Norbert Preining. +-- You may freely use, modify and/or distribute this file. + +-- texconf is a subset of Thomas Esser's texconfig shell script. + +if string.find(arg[0], '/') then -- UNIX path + filename=select(1, string.gsub(arg[0], '.*/', '')) +elseif string.find(arg[0], '\\') then -- Windows path + filename=select(1, string.gsub(arg[0], '.*\\', '')) +else -- no path + filename=arg[0] +end + +basename=select(1, string.gsub(filename, '\.tlu$', '')) + +usageprogname = basename + +domktexlsr = false +doformat = false +sys=false +noformatopt = false + +if string.find(basename, '-sys$') then + basename=select(1, string.gsub(basename, '-sys$', '')) + sys=true +end + +-- this script does NOT appear in the patch, so we cannot use its basename +-- for kpse.set_program_name +-- thus we use simply mktexlsr, which always is in the path and which +-- does not have any special settings in texmf.cnf +-- kpse.set_program_name(filename, basename) +kpse.set_program_name( "mktexlsr" ) + +-- set the search path for lua libraries +texmfmain = kpse.var_value('TEXMFMAIN') +texmfdist = kpse.var_value('TEXMFDIST') +package.path = texmfmain.."/scripts/texlive/lua/?.tlu" +require("texlive.getopt") +require("texlive.utils") + +-- do argument processing +options = getopt ( { sys = 0, prog = 1, noformat = 0 } ) +if (options["sys"]) then + sys = true +end +if (options["prog"]) then + usageprogname = options["prog"] +end +if (options["noformat"]) then + noformatopt = true +end + +if (sys) then + texmfconfig=kpse.var_value('TEXMFSYSCONFIG') + os.setenv('TEXMFCONFIG', texmfconfig) + texmfsysvar=kpse.var_value('TEXMFSYSVAR') + os.setenv('TEXMFVAR', texmfsysvar) +else + texmfconfig=kpse.var_value('TEXMFCONFIG') + if string.match(texmfconfig, '^~') then + -- workaround for old texlua, new kpathsea which expands '~' not + -- integrated yet. + if os.type == 'windows' then + home = os.getenv('USERPROFILE') + else + home = os.getenv('HOME') + end + texmfconfig = string.gsub(texmfconfig, '^~', home) + end +end + + +pdftex_papersize={} +pdftex_papersize['letter']={'8.5 true in', '11 true in'} +pdftex_papersize['a4']={'210 true mm', '297 true mm'} + +xdvi_papersize={} +xdvi_papersize['us']='8.5x11' +xdvi_papersize['usr']='11x8.5' +xdvi_papersize['legal']='8.5x14' +xdvi_papersize['foolscap']='13.5x17.0' +xdvi_papersize['a1']='59.4x84.0cm' +xdvi_papersize['a2']='42.0x59.4cm' +xdvi_papersize['a3']='29.7x42.0cm' +xdvi_papersize['a4']='21.0x29.7cm' +xdvi_papersize['a5']='14.85x21.0cm' +xdvi_papersize['a6']='10.5x14.85cm' +xdvi_papersize['a7']='7.42x10.5cm' +xdvi_papersize['a1r']='84.0x59.4cm' +xdvi_papersize['a2r']='59.4x42.0cm' +xdvi_papersize['a3r']='42.0x29.7cm' +xdvi_papersize['a4r']='29.7x21.0cm' +xdvi_papersize['a5r']='21.0x14.85cm' +xdvi_papersize['a6r']='14.85x10.5cm' +xdvi_papersize['a7r']='10.5x7.42cm' +xdvi_papersize['b1']='70.6x100.0cm' +xdvi_papersize['b2']='50.0x70.6cm' +xdvi_papersize['b3']='35.3x50.0cm' +xdvi_papersize['b4']='25.0x35.3cm' +xdvi_papersize['b5']='17.6x25.0cm' +xdvi_papersize['b6']='13.5x17.6cm' +xdvi_papersize['b7']='8.8x13.5cm' +xdvi_papersize['b1r']='100.0x70.6cm' +xdvi_papersize['b2r']='70.6x50.0cm' +xdvi_papersize['b3r']='50.0x35.3cm' +xdvi_papersize['b4r']='35.3x25.0cm' +xdvi_papersize['b5r']='25.0x17.6cm' +xdvi_papersize['b6r']='17.6x13.5cm' +xdvi_papersize['b7r']='13.5x8.8cm' +xdvi_papersize['c1']='64.8x91.6cm' +xdvi_papersize['c2']='45.8x64.8cm' +xdvi_papersize['c3']='32.4x45.8cm' +xdvi_papersize['c4']='22.9x32.4cm' +xdvi_papersize['c5']='16.2x22.9cm' +xdvi_papersize['c6']='11.46x16.2cm' +xdvi_papersize['c7']='8.1x11.46cm' +xdvi_papersize['c1r']='91.6x64.8cm' +xdvi_papersize['c2r']='64.8x45.8cm' +xdvi_papersize['c3r']='45.8x32.4cm' +xdvi_papersize['c4r']='32.4x22.9cm' +xdvi_papersize['c5r']='22.9x16.2cm' +xdvi_papersize['c6r']='16.2x11.46cm' +xdvi_papersize['c7r']='11.46x8.1cm' + +dvipdfm_papersize={'letter', 'legal', 'ledger', 'tabloid', 'a4', 'a3'} + +function mkdirhier(path) + local dirs={} + local dir=path + while string.match(dir, '/') do + dirs[#dirs+1]=dir + dir=select(1, string.gsub(dir, '/[^/]*$', '')) + end + -- reverse the list + local dirlist={} + for i=1, #dirs do + dirlist[#dirlist+1]=dirs[#dirs-i+1] + end + for i=1, #dirlist do + if not lfs.isdir(dirlist[i]) then + lfs.mkdir(dirlist[i]) + end + end +end + +function set_dvips_papersize(papersize) + -- If the argument is 'list' then a list of available paper sizes is + -- returned to stdout. It can be used by dialog(1) or */Tk + -- interfaces in order to build up the menu. The topmost entry is + -- the one which is actually used by dvips. + local i, key, val + local partab={} + local par=1 + local line + local lin=1 + partab[par]={} + -- Read the file. partab{} contains all paragraphs. + kpse.set_program_name('dvips') + local filename=kpse.find_file('config.ps', 'dvips config') + -- print ('< '..filename) + local infile=assert(io.open(filename, 'r')) + while true do + line=infile:read('*line') + if line == nil then break end + if string.find(line, '^\s*$') then + par=par+1 + partab[par]={} + lin=1 + else + partab[par][lin]=line + lin=lin+1 + end + end + -- par_papersize{} is a list which associates papersizes with + -- paragraphs. Paregraphs containing no papersize information are + -- denoted by 'NO_SIZE_PAR'. + local par_papersize={} + for i=1, #partab do + par_papersize[i]='NO_SIZE_PAR' + for k=1, #partab[i] do + if string.find(partab[i][k], '^@%s') then + par_papersize[i]=string.match(partab[i][k], '^@%s+(%w+)%s') + end + end + end + infile:close() + + local index=-1 --the papagraph wich contains the desired size. + if papersize=='--list' then + -- print a list of available sizes to stdout. + -- the topmost item is the one currently used by dvips. + for key, val in ipairs(par_papersize) do + if val ~= 'NO_SIZE_PAR' and val ~= 'unknown' then + io.stdout:write(val..'\n') + end + end + elseif papersize=='help' then + io.stdout:write('Usage: '..usageprogname..' dvips paper PAPER\n\n'.. + 'Valid PAPER settings:\n ') + local buffer='' + for key, val in ipairs(par_papersize) do + if val ~= 'NO_SIZE_PAR' and val ~= 'unknown' then + if #buffer + #val < 77 then + buffer=buffer..' '..val + else + io.stdout:write(buffer..'\n') + buffer=' '..val + end + end + end + io.stdout:write(buffer..'\n') + else --change paper size + for key, val in ipairs(par_papersize) do + if string.find(val, '^'..papersize..'$') then + index=key + end + end + if index == -1 then + io.stderr:write('Error: Paper Size "'..papersize.. + '" undefined. Aborting...\n') + os.exit(1) + end + -- print stuff which doesn't contain paper size information. + local outfile={} + for key, val in ipairs(par_papersize) do + if val == 'NO_SIZE_PAR' then + for i=1, #partab[key] do + outfile[#outfile+1]=partab[key][i]..'\n' + end + outfile[#outfile+1]='\n' + end + end + -- print selected par + for i=1, #partab[index] do + outfile[#outfile+1]=partab[index][i]..'\n' + end + outfile[#outfile+1]='\n' + -- print other pars to outfile table + for key, val in ipairs(par_papersize) do + if val ~= 'NO_SIZE_PAR' then + if key~=index then + for i=1, #partab[key] do + outfile[#outfile+1]=partab[key][i]..'\n' + end + outfile[#outfile+1]='\n' + end + end + end + -- write file + mkdirhier(texmfconfig..'/dvips/config') + local config=assert(io.open(texmfconfig..'/dvips/config/config.ps', 'w')) + for i=1, #outfile do + if not (string.match(outfile[i],'^%s*$') + and string.match(outfile[i-1],'^%s*$')) then + config:write(outfile[i]) + end + end + config:close() + print ('> '..texmfconfig..'/dvips/config/config.ps') + domktexlsr = true + end +end -- set_dvips_papersize + + +function set_xdvi_papersize(papersize) + local current_setting + -- Read the file. + local filename + if os.type == 'windows' then + return + end + + kpse.set_program_name('xdvi') + filename=kpse.find_file('XDvi', 'other text files') + + -- print ('< '..filename) + local infile=assert(io.open(filename, 'r')) + local lines={} + while true do + line=infile:read('*line') + if line == nil then break end + lines[#lines+1]=line + end + infile:close() + + if papersize=='--list' then + current_setting='a4' + for n, line in ipairs(lines) do + if string.find(line, '^\*paper:') then + current_setting=string.match(line, '^\*paper:%s+(%S+)') + for ptype, psize in pairs(xdvi_papersize) do + if current_setting==psize then + current_setting=ptype + end + end + end + end + print (current_setting) + for key, val in pairs(xdvi_papersize) do + if key ~= current_setting then + print(key) + end + end + elseif papersize=='help' then + io.stdout:write('Usage: '..usageprogname..' xdvi paper PAPER\n\n'.. + 'Valid PAPER settings:\n ') + local buffer='' + for ptype, psize in pairs(xdvi_papersize) do + if #buffer + #ptype < 77 then + buffer=buffer..' '..ptype + else + io.stdout:write(buffer..'\n') + buffer=' '..ptype + end + end + io.stdout:write(buffer..'\n') + else --change paper size + mkdirhier(texmfconfig..'/xdvi') + local config=assert(io.open(texmfconfig..'/xdvi/XDvi', 'w')) + for n=1, #lines do + if string.find(lines[n], '^!*\*paper:') then + config:write('*paper: '..papersize..'\n') + else + config:write(lines[n]..'\n') + end + end + config:close() + print ('> '..texmfconfig..'/xdvi/XDvi') + domktexlsr = true + end +end + + +function set_pdftex_papersize(papersize) + local current_setting + --Read the file. + kpse.set_program_name('pdftex') + local filename=kpse.find_file('pdftexconfig.tex', 'tex') + + -- print ('< '..filename) + local infile=assert(io.open(filename, 'r')) + local lines={} + while true do + line=infile:read('*line') + if line == nil then break end + if string.find(line, '^\\pdfpagewidth') then + pagewidth=string.match(line, '^\\pdfpagewidth%s*=?%s*(.+)%s*$') + end + if string.find(line, '^\\pdfpageheight') then + pageheight=string.match(line, '^\\pdfpageheight%s*=?%s*(.+)%s*$') + end + lines[#lines+1]=line + end + infile:close() + + current_setting='a4' + for ptype, sizes in pairs(pdftex_papersize) do + if pagewidth == pdftex_papersize[ptype][1] then + ptype_x=ptype + end + if pageheight == pdftex_papersize[ptype][2] then + ptype_y=ptype + end + end + if ptype_x == ptype_y then + current_setting=ptype_x + end + + if papersize=='--list' then + print(current_setting) + for ptype, sizes in pairs(pdftex_papersize) do + if ptype ~= current_setting then + print(ptype) + end + end + elseif papersize=='help' then + io.stdout:write('Usage: '..usageprogname..' pdftex paper PAPER\n\n'.. + 'Valid PAPER settings:\n ') + local buffer='' + for ptype, sizes in pairs(pdftex_papersize) do + if #buffer + #ptype < 77 then + buffer=buffer..' '..ptype + else + io.stdout:write(buffer..'\n') + buffer=' '..ptype + end + end + io.stdout:write(buffer..'\n') + else --change paper size + mkdirhier(texmfconfig..'/tex/generic/config') + local outfile=texmfconfig..'/tex/generic/config/pdftexconfig.tex' + local config=assert(io.open(outfile, 'w')) + for n=1, #lines do + line=lines[n] + if string.find(line, '^\\pdfpagewidth') then + config:write('\\pdfpagewidth='..pdftex_papersize[papersize][1]..'\n') + elseif string.find(line, '^\\pdfpageheight') then + config:write('\\pdfpageheight='..pdftex_papersize[papersize][2]..'\n') + else + config:write(line..'\n') + end + end + config:close() + print ('> '..outfile) + domktexlsr = true + doformat = true + end +end + + +function set_dvipdfm_papersize(papersize, program) + local current_setting + -- Read the file. + local filename + if program == 'dvipdfm' then + kpse.set_program_name('dvipdfm') + filename=kpse.find_file('config', 'other text files') + elseif program == 'dvipdfmx' then + kpse.set_program_name('dvipdfmx') + filename=kpse.find_file('dvipdfmx.cfg', 'other text files') + end + if not(filename) then + print ("Cannot find config file for "..program..", exiting!") + os.exit(1) + end + -- print ('< '..filename) + local infile=assert(io.open(filename, 'r')) + local lines={} + local current_setting='a4' + while true do + line=infile:read('*line') + if line == nil then break end + if string.find(line, '^p ') then + current_setting=string.match(line, '^p%s+(%S+)') + end + lines[#lines+1]=line + end + infile:close() + + if papersize=='--list' then + print(current_setting) + for i, ptype in ipairs(dvipdfm_papersize) do + if ptype ~= current_setting then + print (ptype) + end + end + elseif papersize=='help' then + io.stdout:write('Usage: '..usageprogname..' '..program..' paper PAPER\n\n'.. + 'Valid PAPER settings:\n ') + local buffer='' + for i, ptype in pairs(dvipdfm_papersize) do + if #buffer + #ptype < 77 then + buffer=buffer..' '..ptype + else + io.stdout:write(buffer..'\n') + buffer=' '..ptype + end + end + io.stdout:write(buffer..'\n') + else --change paper size + local outfile + mkdirhier(texmfconfig..'/dvipdfm/config') + if program == 'dvipdfm' then + outfile=texmfconfig..'/dvipdfm/config/config' + mkdirhier(texmfconfig..'/dvipdfm/config') + else + outfile=texmfconfig..'/dvipdfmx/dvipdfmx.cfg' + mkdirhier(texmfconfig..'/dvipdfmx') + end + print ('> '..outfile) + local config=assert(io.open(outfile, 'w')) + for n=1, #lines do + line=lines[n] + if string.find(line, '^p ') then + config:write('p '..papersize..'\n') + else + config:write(line..'\n') + end + end + config:close() + domktexlsr = true + end +end + + +function set_context_papersize(papersize) + local current_setting + + -- we cannot guarantee that context is installed, so we check for the + -- file we would need for creating the configuration, and if that is + -- missing we just return (with a warning). + if not(lfs.isfile(texmfdist..'/tex/context/user/cont-sys.rme')) then + io.stderr:write('context not installed, skipping paper setting for it\n') + return + end + + -- Read the file. + local filename + + kpse.set_program_name('tex') + filename=kpse.find_file('cont-sys.tex', 'tex') + if not(filename) then + filename=kpse.find_file('cont-sys.rme', 'other text files') + end + if not(filename) then + print ("Cannot find config file for context, exiting!") + os.exit(1) + end + -- print ('< '..filename) + + local infile=assert(io.open(filename, 'r')) + local lines={} + local current_setting='A4' + local papersize_regexp='^%s*\\setuppapersize%s*%[([^%[]*)%]' + while true do + line=infile:read('*line') + if line == nil then break end + if string.find(line, '^%s*\\setuppapersize') then + current_setting=string.match(line, papersize_regexp) + end + lines[#lines+1]=line + end + infile:close() + + -- print ('current setting: '..current_setting) + + if papersize=='--list' then + print(current_setting) + if (string.match (current_setting, '[aA]4')) then + print ('letter') + else + print ('A4') + end + elseif papersize=='help' then + io.stdout:write('Usage: '..usageprogname..' context paper PAPER\n\n'.. + 'Valid PAPER settings:\n\nA4 letter\n') + else --change paper size + -- make sure we have uppercase A4 for paper size + if (string.match (papersize, 'a4')) then + papersize = 'A4' + end + local outfile + mkdirhier(texmfconfig..'/tex/context/user') + outfile=texmfconfig..'/tex/context/user/cont-sys.tex' + print ('> '..outfile) + local config=assert(io.open(outfile, 'w')) + for n=1, #lines do + line=lines[n] + if string.find(line, '\setuppapersize') then + config:write('\\setuppapersize['..papersize..']['..papersize..']\n') + else + config:write(line..'\n') + end + end + config:close() + domktexlsr = true + end +end + + +function set_papersize(papersize) + if papersize == '--list' then + set_pdftex_papersize('--list') + elseif papersize == 'help' then + io.stdout:write('Usage: '..usageprogname..' paper PAPER\n\n'.. + 'Valid PAPER settings:\n a4 letter\n') + end + if papersize ~= 'a4' and papersize ~= 'letter' then + io.stdout:write('Invalid paper size "'..papersize..'".'.. + ' Valid sizes: a4 letter\n') + os.exit(1) + else + set_dvips_papersize(papersize) + set_pdftex_papersize(papersize) + set_xdvi_papersize(papersize) + set_context_papersize(papersize) + set_dvipdfm_papersize(papersize, 'dvipdfm') + set_dvipdfm_papersize(papersize, 'dvipdfmx') + end +end + + +function usage_main() + local usage={ + 'help', + 'xdvi paper PAPER (xdvi paper size)', + 'dvips paper PAPER (dvips paper size)', + 'pdftex paper PAPER (pdftex paper size)', + 'dvipdfm paper PAPER (dvipdfm paper size)', + 'dvipdfmx paper PAPER (dvipdfmx paper size)', + 'paper [a4|letter] (paper size for all programs)', + 'init [FORMAT] ... (rebuild FORMATs, or all formats plus run updmap)', + 'rehash (rebuild ls-R files with mktexlsr)' + } + io.stdout:write('Usage:\n') + for i, msg in ipairs(usage) do + io.stdout:write(' '..usageprogname..' '..msg..'\n') + end + os.exit(0) +end + + +function usage_paper(progname) + io.stdout:write('Usage: '..usageprogname..' '..progname..' paper PAPER\n') + io.stdout:write(' '..usageprogname..' '..progname..' help\n') + os.exit(0) +end + + +function set_prog_papersize(prog,size) + if (prog == 'dvips') then + set_dvips_papersize(size) + elseif (prog == 'xdvi') then + set_xdvi_papersize(size) + elseif (prog == 'pdftex') then + set_pdftex_papersize(size) + elseif (prog == 'dvipdfm') then + set_dvipdfm_papersize(size, "dvipdfm") + elseif (prog == 'dvipdfmx') then + set_dvipdfm_papersize(size, "dvipdfmx") + end +end + + +if arg[1] == 'help' then + usage_main() +elseif arg[1] == 'paper' then + if arg[2] == 'help' or arg[2] == nil then + usage_main() + else + set_papersize(arg[2]) + end +elseif arg[1] == 'rehash' then + command = { "mktexlsr" } + command = fixwin(command) + os.exec(command) + -- does not return +elseif arg[1] == 'init' then + if arg[2] == nil then + -- we have set TEXMFCONFIG and TEXMFVAR to the SYS variants above, + -- so we can run the normal fmtutil/updmap program + os.execute('fmtutil --all') + os.execute('updmap') + else + for i=2, #arg do + os.execute('fmtutil --byfmt "'..arg[i]..'"') + end + end +elseif arg[1] == 'paper' then + set_papersize(arg[2]) +elseif arg[1] == 'dvips' then + if arg[2] == 'help' or arg[3]==nil then + usage_paper('dvips') + elseif arg[2]=='paper' then + set_dvips_papersize(arg[3]) + end +elseif arg[1] == 'xdvi' then + if arg[2] == 'help' or arg[3]==nil then + usage_paper('xdvi') + elseif arg[2]=='paper' then + set_xdvi_papersize(arg[3]) + end +elseif arg[1] == 'pdftex' then + if arg[2] == 'help' or arg[3]==nil then + usage_paper(pdftex) + elseif arg[2]=='paper' then + set_pdftex_papersize(arg[3]) + end +elseif arg[1] == 'dvipdfm' then + if arg[2] == 'help' or arg[3]==nil then + usage_paper('dvipdfm') + elseif arg[2]=='paper' then + set_dvipdfm_papersize(arg[3], 'dvipdfm') + end +elseif arg[1] == 'dvipdfmx' then + if arg[2] == 'help' or arg[3]==nil then + usage_paper('dvipdfmx') + elseif arg[2]=='paper' then + set_dvipdfm_papersize(arg[3], 'dvipdfmx') + end +elseif arg[1] == 'context' then + if arg[2] == 'help' or arg[3]==nil then + usage_paper('context') + elseif arg[2]=='paper' then + set_context_papersize(arg[3]) + end +else + usage_main() +end + + +if sys and domktexlsr then + command = { "mktexlsr", texmfconfig } + command = fixwin(command) + os.spawn(command) +end + +if noformatopt then + doformat = false +end + +if doformat then + -- we have to update the formats + -- I don't know how to select only those formats for which pdftexconfig.tex + -- is necessary, so we call fmtutil-sys --refresh + -- that will recreate a lot, sorry + -- + -- on win32 texlua's os.spawn does not find fmtutil-sys.texlua as executable + -- even if I give it the full path. So we have to work around that + if sys then + command = 'fmtutil-sys --refresh' + else + command = 'fmtutil --refresh' + end + os.execute(command) +end + +-- Local Variables: +-- lua-indent-level: 2 +-- tab-width: 2 +-- indent-tabs-mode: nil +-- End: +-- vim:set tabstop=2 expandtab: # diff --git a/Master/texmf-dist/scripts/texlive/tlmgr.pl b/Master/texmf-dist/scripts/texlive/tlmgr.pl new file mode 100755 index 00000000000..e4a63e2bfcf --- /dev/null +++ b/Master/texmf-dist/scripts/texlive/tlmgr.pl @@ -0,0 +1,7503 @@ +#!/usr/bin/env perl +# $Id$ +# +# Copyright 2008-2013 Norbert Preining +# This file is licensed under the GNU General Public License version 2 +# or any later version. + +my $svnrev = '$Revision$'; +my $datrev = '$Date$'; +my $tlmgrrevision; +my $prg; +if ($svnrev =~ m/: ([0-9]+) /) { + $tlmgrrevision = $1; +} else { + $tlmgrrevision = "unknown"; +} +$datrev =~ s/^.*Date: //; +$datrev =~ s/ \(.*$//; +$tlmgrrevision .= " ($datrev)"; + +our $Master; +our $ismain; +our $loadmediasrcerror; +our $packagelogfile; +our $packagelogged; +our $tlmgr_config_file; +our $pinfile; + +BEGIN { + $^W = 1; + $ismain = (__FILE__ eq $0); + # WARNING + # The only use anticipated for tlmgr.pl as library for the 2009 release + # is the Windows w32client prototype script. + # Unix-specific problems with use as library will probably go undetected. + + # make subprograms (including kpsewhich) have the right path: + my ($bindir, $kpsewhichname); + if ($^O =~ /^MSWin/i) { + # on w32 $0 and __FILE__ point directly to tlmgr.pl; they can be relative + $Master = __FILE__; + $Master =~ s!\\!/!g; + $Master =~ s![^/]*$!../../..! + unless ($Master =~ s!/texmf/scripts/texlive/tlmgr\.pl$!!i); + $bindir = "$Master/bin/win32"; + $kpsewhichname = "kpsewhich.exe"; + # path already set by wrapper batchfile + } else { + $Master = __FILE__; + $Master =~ s,/*[^/]*$,,; + if ($ismain) { + $bindir = $Master; + $Master = "$Master/../.."; + } else { + # for the time being, this code will not be used or tested + $Master = "$Master/../../.."; + # no code yet for $bindir; would have to detect platform + } + # make subprograms (including kpsewhich) have the right path: + $ENV{"PATH"} = "$bindir:$ENV{PATH}"; + $kpsewhichname = "kpsewhich"; + } + if (-r "$bindir/$kpsewhichname") { + # if not in bootstrapping mode => kpsewhich exists, so use it to get $Master + chomp($Master = `kpsewhich -var-value=SELFAUTOPARENT`); + } + $::installerdir = $Master; + + # + # make Perl find our packages first: + unshift (@INC, "$Master/tlpkg"); + unshift (@INC, "$Master/texmf/scripts/texlive"); +} + +use Cwd qw/abs_path/; +use File::Spec; +use Digest::MD5; +use Pod::Usage; +use Getopt::Long qw(:config no_autoabbrev permute); +use strict; + +use TeXLive::TLConfig; +use TeXLive::TLPDB; +use TeXLive::TLPOBJ; +use TeXLive::TLUtils; +use TeXLive::TLWinGoo; +use TeXLive::TLDownload; +use TeXLive::TLConfFile; +TeXLive::TLUtils->import(qw(member info give_ctan_mirror win32 dirname + mkdirhier copy log debug tlcmp)); +use TeXLive::TLPaper; + +# +# set up $prg for warning messages +$prg = TeXLive::TLUtils::basename($0); + +binmode(STDOUT, ":utf8"); +binmode(STDERR, ":utf8"); + +our %config; # hash of config settings from config file +our $remotetlpdb; +our $location; # location from which the new packages come +our $localtlpdb; # local installation which we are munging + +# flags for machine-readable form +our $FLAG_REMOVE = "d"; +our $FLAG_FORCIBLE_REMOVED = "f"; +our $FLAG_UPDATE = "u"; +our $FLAG_REVERSED_UPDATE = "r"; +our $FLAG_AUTOINSTALL = "a"; +our $FLAG_INSTALL = "i"; +our $FLAG_REINSTALL = "I"; + +# option variables +$::gui_mode = 0; +$::machinereadable = 0; + +our %opts; + +main() if $ismain; + +sub main { + my %options; # TL options from local tlpdb + + my %globaloptions = ( + "gui" => 1, + "gui-lang" => "=s", + "debug-translation" => 1, + "location|repository|repo" => "=s", + "machine-readable" => 1, + "package-logfile" => "=s", + "persistent-downloads" => "!", + "no-execute-actions" => 1, + "pin-file" => "=s", + "pause" => 1, + "print-platform|print-arch" => 1, + "version" => 1, + "help" => 1, + "h|?" => 1); + + my %actionoptions = ( + "get-mirror" => { }, + "option" => { }, + "conf" => { }, + "version" => { }, + "repository" => { }, + "candidate" => { }, + "backup" => { "backupdir" => "=s", + "clean" => ":-99", + "all" => 1, + "dry-run|n" => 1 }, + "check" => { "use-svn" => 1 }, + "generate" => { "localcfg" => "=s", + "dest" => "=s", + "rebuild-sys" => 1 }, + "gui" => { "load" => 1 }, + "install" => { "no-depends" => 1, + "no-depends-at-all" => 1, + "file" => 1, + "reinstall" => 1, + "force" => 1, + "dry-run|n" => 1 }, + "paper" => { "list" => 1 }, + "path" => { "w32mode" => "=s" }, + "pinning" => { "all" => 1 }, + "platform" => { "dry-run|n" => 1 }, + "postaction" => { "w32mode" => "=s", + "all" => 1, + "fileassocmode" => "=i" }, + "recreate-tlpdb"=> { "platform|arch" => "=s" }, + "remove" => { "no-depends" => 1, + "no-depends-at-all" => 1, + "force" => 1, + "dry-run|n" => 1 }, + "repository" => { "with-platforms" => 1 }, + "restore" => { "backupdir" => "=s", + "dry-run|n" => 1, + "all" => 1, + "force" => 1 }, + "search" => { "global" => 1, + "word" => 1, + "file" => 1, + "keyword" => 1, + "list" => 1, + "all" => 1, + "characterization" => 1, + "functionality" => 1, + "taxonomy" => 1 }, + "info" => { "list" => 1, + "taxonomy" => 1, + "keyword" => 1, + "characterization" => 1, + "functionality" => 1, + "only-installed" => 1 }, + "dump-tlpdb" => { "local" => 1, + "remote" => 1 }, + "uninstall" => { "force" => 1 }, + "update" => { "no-depends" => 1, + "no-depends-at-all" => 1, + "all" => 1, + "self" => 1, + "list" => 1, + "no-auto-remove" => 1, + "no-auto-install" => 1, + "reinstall-forcibly-removed" => 1, + "force" => 1, + "backupdir" => "=s", + "backup" => 1, + "exclude" => "=s@", + "dry-run|n" => 1 }, + ); + + my %optarg; + for my $k (keys %globaloptions) { + if ($globaloptions{$k} eq "1") { + $optarg{$k} = 1; + } else { + $optarg{"$k" . $globaloptions{$k}} = 1; + } + } + for my $v (values %actionoptions) { + for my $k (keys %$v) { + if ($v->{$k} eq "1") { + $optarg{$k} = 1; + } else { + $optarg{"$k" . $v->{$k}} = 1; + } + } + } + + # save command line options for later restart, if necessary + @::SAVEDARGV = @ARGV; + + TeXLive::TLUtils::process_logging_options(); + + GetOptions(\%opts, keys(%optarg)) or pod2usage(2); + + $::debug_translation = 0; + $::debug_translation = 1 if $opts{"debug-translation"}; + + $::machinereadable = $opts{"machine-readable"} + if (defined($opts{"machine-readable"})); + + my $action = shift @ARGV; + if (!defined($action)) { + if ($opts{"gui"}) { # -gui = gui + $action = "gui"; + } elsif ($opts{"print-platform"}) { # -print-arch = print-arch + $action = "print-platform"; + } else { + $action = ""; + } + } + + $action = "platform" if ($action eq "arch"); + + ddebug("action = $action\n"); + for my $k (keys %opts) { + ddebug("$k => $opts{$k}\n"); + } + ddebug("arguments: @ARGV\n") if @ARGV; + + if ($opts{"version"} || (defined $action && $action eq "version")) { + info(give_version()); + finish(0); + } + + if (defined($action) && ($action =~ m/^help/i)) { + $opts{"help"} = 1; + } + + if (defined($action) && ($action =~ m/^print-platform$/i)) { + print TeXLive::TLUtils::platform(), "\n"; + exit 0; + } + + if ((!defined($action) || !$action) && !$opts{"help"} && !$opts{"h"}) { + die "$prg: missing action; try --help if you need it.\n"; + } + + if ($opts{"help"} || $opts{"h"}) { + # perldoc does ASCII emphasis on the output, so it's nice to use it. + # But not all Unix platforms have it, and on Windows our Config.pm + # can apparently interfere, so always skip it there. + my @noperldoc = (); + if (win32()) { + @noperldoc = ("-noperldoc", "1"); + } else { + if (!TeXLive::TLUtils::which("perldoc")) { + @noperldoc = ("-noperldoc", "1"); + } else { + # checking only for the existence of perldoc is not enough + # because stupid Debian/Ubuntu ships a stub that does nothing + # which is very very bad idea + # try to check for that, too + my $ret = system("perldoc -V > /dev/null 2>&1"); + if ($ret == 0) { + debug("Working perldoc found, using it.\n"); + } else { + tlwarn("Your perldoc seems to be non functional!\n"); + @noperldoc = ("-noperldoc", "1"); + } + } + } + # in some cases LESSPIPE of less breaks control characters + # and the output of pod2usage is broken. + # We add/set LESS=-R in the environment and unset LESSPIPE to be sure + if (defined($ENV{'LESS'})) { + $ENV{'LESS'} .= " -R"; + } else { + $ENV{'LESS'} = "-R"; + } + delete $ENV{'LESSPIPE'}; + delete $ENV{'LESSOPEN'}; + if ($action && ($action ne "help")) { + pod2usage(-exitstatus => 0, -verbose => 99, + -sections => "NAME|SYNOPSIS|ACTIONS/$action.*" , @noperldoc); + } else { + if ($opts{"help"}) { + pod2usage(-exitstatus => 0, -verbose => 2, @noperldoc); + } else { + # give a short message about usage + print " +tlmgr revision $tlmgrrevision +usage: tlmgr OPTION... ACTION ARGUMENT... +where ACTION is one of:\n"; + for my $k (sort keys %actionoptions) { + print " $k\n"; + } + print "\nUse\n tlmgr ACTION --help +for more details on a specific option, and + tlmgr --help +for the full story.\n"; + exit 0; + } + } + } + + # unify arguments so that the $action contains paper in all cases + # and push the first arg back to @ARGV for action_paper processing + if ($action =~ /^(paper|xdvi|pdftex|dvips|dvipdfmx?|context)$/) { + unshift(@ARGV, $action); + $action = "paper"; + } + + # backward compatibility with action "show" and "list" from before + if ($action =~ /^(show|list)$/) { + $action = "info"; + } + + # --machine-readable is only supported by update. + if ($::machinereadable && + $action ne "update" && $action ne "install" && $action ne "option") { + tlwarn("tlmgr: --machine-readable output not supported for $action\n"); + } + + # check on supported arguments + # + my %suppargs; + %suppargs = %{$actionoptions{$action}} + if defined($actionoptions{$action}); + my @notvalidargs; + for my $k (keys %opts) { + my @allargs = keys %suppargs; + push @allargs, keys %globaloptions; + my $found = 0; + for my $ok (@allargs) { + my @variants = split '\|', $ok; + if (TeXLive::TLUtils::member($k, @variants)) { + $found = 1; + last; + } + } + push @notvalidargs, $k if !$found; + } + if (@notvalidargs) { + my $msg = + "The following arguments are not supported for the action $action:\n"; + for my $c (@notvalidargs) { + $msg .= " $c"; + } + $msg .= "\n"; + my @noperldoc = (); + if (win32() || ! TeXLive::TLUtils::which("perldoc")) { + @noperldoc = ("-noperldoc", "1"); + } + pod2usage(-msg => $msg, -exitstatus => 1, -verbose => 1, @noperldoc); + } + + # besides doing normal logging if -logfile is specified, we try to log + # package related actions (install, remove, update) to + # the package-log file TEXMFSYSVAR/web2c/tlmgr.log + $packagelogged = 0; # how many msgs we logged + chomp (my $texmfsysvar = `kpsewhich -var-value=TEXMFSYSVAR`); + $packagelogfile = $opts{"package-logfile"}; + $packagelogfile ||= "$texmfsysvar/web2c/tlmgr.log"; + # + # Try to open the packagelog file, but do NOT die when that does not work + if (!open(PACKAGELOG, ">>$packagelogfile")) { + debug("Cannot open package log file $packagelogfile for appending\n"); + debug("Will not log package installation/removal/update for that run\n"); + $packagelogfile = ""; + } + + $loadmediasrcerror = "Cannot load TeX Live database from "; + + # load the config file and set the config options + # load it BEFORE starting downloads as we set persistent-downloads there! + load_config_file(); + + # set global variable if execute actions should be suppressed + $::no_execute_actions = 1 if (defined($opts{'no-execute-actions'})); + + + # if we are asked to use persistent connections try to start it here + { + my $do_persistent; + if (defined($opts{'persistent-downloads'})) { + # a command line argument for persistent-downloads has been given, + # either with --no-... or --... that overrides any other setting + $do_persistent = $opts{'persistent-downloads'}; + } else { + # check if it is set in the config file + if (defined($config{'persistent-downloads'})) { + $do_persistent = $config{'persistent-downloads'}; + } + } + # default method is doing persistent downloads: + if (!defined($do_persistent)) { + $do_persistent = 1; + } + ddebug("tlmgr:main: do persistent downloads = $do_persistent\n"); + if ($do_persistent) { + TeXLive::TLUtils::setup_persistent_downloads() ; + } + if (!defined($::tldownload_server)) { + debug("tlmgr:main: ::tldownload_server not defined\n"); + } else { + debug("tlmgr:main: ::tldownload_server defined\n"); + } + } + + execute_action($action, @ARGV); + + # end of main program. + +} # end main + +sub give_version { + if (!defined($::version_string)) { + $::version_string = ""; + $::version_string .= "tlmgr revision $tlmgrrevision\n"; + $::version_string .= "tlmgr using installation: $Master\n"; + if (open (REL_TL, "$Master/release-texlive.txt")) { + # print first and last lines, which have the TL version info. + my @rel_tl = <REL_TL>; + $::version_string .= $rel_tl[0]; + $::version_string .= $rel_tl[$#rel_tl]; + close (REL_TL); + } + } + # + # add the list of revisions + if ($::opt_verbosity > 0) { + $::version_string .= "Revision of modules:"; + $::version_string .= "\nTLConfig: " . TeXLive::TLConfig->module_revision(); + $::version_string .= "\nTLUtils: " . TeXLive::TLUtils->module_revision(); + $::version_string .= "\nTLPOBJ: " . TeXLive::TLPOBJ->module_revision(); + $::version_string .= "\nTLPDB: " . TeXLive::TLPDB->module_revision(); + $::version_string .= "\nTLPaper: " . TeXLive::TLPaper->module_revision(); + $::version_string .= "\nTLWinGoo: " . TeXLive::TLWinGoo->module_revision(); + $::version_string .= "\n"; + } + return $::version_string; +} + + +sub execute_action { + my ($action, @argv) = @_; + + # we have to set @ARGV to the @argv since many of the action_* subs + # use GetOption + @ARGV = @argv; + + # actions which shouldn't have any lasting effects, such as search or + # list, end by calling finish(0), which skips postinstall actions. + if ($action =~ m/^_include_tlpobj$/) { + # this is an internal function that should not be used outside + init_local_db(); + for my $f (@ARGV) { + my $tlpobj = TeXLive::TLPOBJ->new; + $tlpobj->from_file($f); + # we now have to check whether that is a .doc or .src package, so shipping + # src or doc files from a different package. + # We should have that package already installed ... + my $pkg = $tlpobj->name; + if ($pkg =~ m/^(.*)\.(source|doc)$/) { + # got a .src or .doc package + my $type = $2; + my $mothership = $1; + my $mothertlp = $localtlpdb->get_package($mothership); + if (!defined($mothertlp)) { + tlwarn("We are trying to add ${type} files to a nonexistent package $mothership!\n"); + tlwarn("Trying to continue!\n"); + # the best we can do is rename that package to $mothername and add it! + $tlpobj->name($mothership); + # add the src/docfiles tlpobj under the mothership name + $localtlpdb->add_tlpobj($tlpobj); + } else { + if ($type eq "source") { + $mothertlp->srcfiles($tlpobj->srcfiles); + $mothertlp->srcsize($tlpobj->srcsize); + } else { + # must be "doc" + $mothertlp->docfiles($tlpobj->docfiles); + $mothertlp->docsize($tlpobj->docsize); + } + # that make sure that the original entry is overwritten + $localtlpdb->add_tlpobj($mothertlp); + } + } else { + # completely normal package, just add it + $localtlpdb->add_tlpobj($tlpobj); + } + $localtlpdb->save; + } + finish(0); + } elsif ($action =~ m/^get-mirror$/i) { + my $loc = give_ctan_mirror(); + print "$loc\n"; + finish(0); + } elsif ($action =~ m/^generate$/i) { + action_generate(); + } elsif ($action =~ m/^gui$/i) { + action_gui(); + } elsif ($action =~ m/^platform$/i) { + action_platform(); + } elsif ($action =~ m/^option$/i) { + action_option(); + finish(0); + } elsif ($action =~ m/^repository$/i) { + action_repository(); + finish(0); + } elsif ($action =~ m/^pinning$/i) { + action_pinning(); + finish(0); + } elsif ($action =~ m/^candidates$/i) { + action_candidates(); + finish(0); + } elsif ($action =~ m/^check$/i) { + action_check(); + } elsif ($action =~ m/^install$/i) { + action_install(); + } elsif ($action =~ m/^update$/i) { + action_update(); + } elsif ($action =~ m/^backup$/i) { + action_backup(); + } elsif ($action =~ m/^restore$/i) { + action_restore(); + } elsif ($action =~ m/^path$/i) { + action_path(); + finish(0); + } elsif ($action =~ m/^search$/i) { + action_search(); + finish(0); + } elsif ($action =~ m/^postaction$/i) { + action_postaction(); + finish(0); + } elsif ($action =~ m/^conf$/i) { + action_conf(); + finish(0); + } elsif ($action =~ m/^dump-tlpdb$/i) { + action_dumptlpdb(); + finish(0); + } elsif ($action =~ m/^info$/i) { + action_info(@ARGV); + finish(0); + } elsif ($action =~ m/^remove$/i) { + action_remove(); + } elsif ($action =~ /^paper$/) { + action_paper(); + } elsif ($action =~ m/^uninstall$/i) { + action_uninstall(); + finish(0); + } elsif ($action =~ m/^recreate-tlpdb$/i) { + action_recreate_tlpdb(); + finish(0); + } else { + die "$prg: unknown action: $action; try --help if you need it.\n"; + } + + # close the special log file + if ($packagelogfile && !$::gui_mode) { + info("tlmgr: package log updated at $packagelogfile\n") if $packagelogged; + close(PACKAGELOG); + } + + # run external programs. + my $error_count = &handle_execute_actions(); + + # done, just in case there are 256 errors. + # we return here, because finish might return if we are running + # in the GUI, and we want to pass the error count on to the GUI + return finish($error_count ? 1 : 0); +} + + + +# run CMD with notice to the user and if exit status is nonzero, complain. +# return exit status. +# +sub do_cmd_and_check +{ + my $cmd = shift; + # we output the pre-running notice on a separate line so that + # tlmgr front ends (MacOSX's TeX Live Utility) can read it + # and show it to the user before the possibly long delay. + info("running $cmd ...\n"); + my ($out, $ret); + if ($opts{"dry-run"}) { + $ret = 0; + $out = ""; + } else { + ($out, $ret) = TeXLive::TLUtils::run_cmd("$cmd 2>&1"); + } + if ($ret == 0) { + info("done running $cmd.\n"); + log("--output of $cmd:\n$out\n--end of output of $cmd."); + } else { + info("\n"); + tlwarn("$cmd failed (status $ret), output:\n$out\n"); + } + return $ret; +} + +# run external programs (mktexlsr, updmap-sys, etc.) as specified by the +# keys in the RET hash. We return the number of unsuccessful runs, zero +# if all ok. +# +# If the "map" key is specified, the value may be a reference to a list +# of map command strings to pass to updmap, e.g., "enable Map=ascii.map". +# +sub handle_execute_actions +{ + my $errors = 0; + + if ($::files_changed) { + $errors += do_cmd_and_check("mktexlsr"); + if (defined($localtlpdb->get_package('context'))) { + $errors += do_cmd_and_check("mtxrun --generate"); + } + $::files_changed = 0; + } + + chomp(my $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`); + chomp(my $TEXMFSYSCONFIG = `kpsewhich -var-value=TEXMFSYSCONFIG`); + chomp(my $TEXMFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`); + chomp(my $TEXMFDIST = `kpsewhich -var-value=TEXMFDIST`); + + # + # maps handling + { + my $updmap_run_needed = 0; + for my $m (keys %{$::execute_actions{'enable'}{'maps'}}) { + $updmap_run_needed = 1; + } + for my $m (keys %{$::execute_actions{'disable'}{'maps'}}) { + $updmap_run_needed = 1; + } + if ($updmap_run_needed) { + my $dest = "$TEXMFDIST/web2c/updmap.cfg"; + TeXLive::TLUtils::create_updmap($localtlpdb, $dest); + } + $errors += do_cmd_and_check("updmap-sys") if $updmap_run_needed; + } + + # format relevant things + # we first have to check if the config files, that is fmtutil.cnf + # or one of the language* files have changed, regenerate them + # if necessary, and then run the necessary fmtutil calls. + + { + # first check for language* files + my $regenerate_language = 0; + for my $m (keys %{$::execute_actions{'enable'}{'hyphens'}}) { + $regenerate_language = 1; + last; + } + for my $m (keys %{$::execute_actions{'disable'}{'hyphens'}}) { + $regenerate_language = 1; + last; + } + if ($regenerate_language) { + for my $ext ("dat", "def", "dat.lua") { + my $lang = "language.$ext"; + info("regenerating $lang\n"); + my $arg1 = "$TEXMFSYSVAR/tex/generic/config/language.$ext"; + my $arg2 = "$TEXMFLOCAL/tex/generic/config/language-local.$ext"; + if ($ext eq "dat") { + TeXLive::TLUtils::create_language_dat($localtlpdb, $arg1, $arg2); + } elsif ($ext eq "def") { + TeXLive::TLUtils::create_language_def($localtlpdb, $arg1, $arg2); + } else { + TeXLive::TLUtils::create_language_lua($localtlpdb, $arg1, $arg2); + } + } + } + + # + # check if *depending* formats have been changed + # we are currently only caring for package "latex" and "tex". If + # one of these has changed, we search for all packages *depending* + # on latex/tex and regenerate all formats in these packages. + # + # do this only if we are not in --list or --dry-run mode + if (!$opts{"list"}) { + my @check_indirect_formats; + # TODO: + # in case that hyphenation patterns are changed, ie $regenerate_language + # then maybe we don't need to update latex based ones? + push @check_indirect_formats, $localtlpdb->needed_by("latex") + if ($::latex_updated); + push @check_indirect_formats, $localtlpdb->needed_by("tex") + if ($::tex_updated); + for my $p (@check_indirect_formats) { + my $tlp = $localtlpdb->get_package($p); + if (!defined($tlp)) { + tlwarn("$p mentioned but not found in local tlpdb, strange!\n"); + next; + } + TeXLive::TLUtils::announce_execute_actions("enable", $tlp, "format"); + } + } + + # format-regenerate is used when the paper size changes. In that + # case, if option("create_formats") is set, we simply want to generate + # all formats + # + my %done_formats; + my %updated_engines; + my %format_to_engine; + my %do_enable; + my $do_full = 0; + for my $m (keys %{$::execute_actions{'enable'}{'formats'}}) { + $do_full = 1; + $do_enable{$m} = 1; + # here we check whether an engine is updated + my %foo = %{$::execute_actions{'enable'}{'formats'}{$m}}; + if (!defined($foo{'name'}) || !defined($foo{'engine'})) { + tlwarn("tlmgr: Very strange error, please report ", %foo); + } else { + $format_to_engine{$m} = $foo{'engine'}; + if ($foo{'name'} eq $foo{'engine'}) { + $updated_engines{$m} = 1; + } + } + } + for my $m (keys %{$::execute_actions{'disable'}{'formats'}}) { + $do_full = 1; + } + my $opt_fmt = $localtlpdb->option("create_formats"); + if ($do_full) { + info("regenerating fmtutil.cnf in $TEXMFSYSVAR\n"); + TeXLive::TLUtils::create_fmtutil($localtlpdb, + "$TEXMFSYSVAR/web2c/fmtutil.cnf", + "$TEXMFLOCAL/web2c/fmtutil-local.cnf"); + } + if ($opt_fmt && !$::regenerate_all_formats) { + # first regenerate all formats --byengine + for my $e (keys %updated_engines) { + log ("updating formats based on $e\n"); + $errors += do_cmd_and_check("fmtutil-sys --no-error-if-no-format --byengine $e"); + } + # now rebuild all other formats + for my $f (keys %do_enable) { + next if defined($updated_engines{$format_to_engine{$f}}); + # ignore disabled formats + next if !$::execute_actions{'enable'}{'formats'}{$f}{'mode'}; + log ("(re)creating format dump $f\n"); + $errors += do_cmd_and_check("fmtutil-sys --byfmt $f"); + $done_formats{$f} = 1; + } + } + + # now go back to the hyphenation patterns and regenerate formats + # based on the various language files + # this of course will in some cases duplicate fmtutil calls, + # but it is much easier than actually checking which formats + # don't need to be updated + + if ($regenerate_language) { + for my $ext ("dat", "def", "dat.lua") { + my $lang = "language.$ext"; + if (! TeXLive::TLUtils::win32()) { + # Use full path for external command, except on Windows. + $lang = "$TEXMFSYSVAR/tex/generic/config/$lang"; + } + if ($localtlpdb->option("create_formats") + && !$::regenerate_all_formats) { + $errors += do_cmd_and_check("fmtutil-sys --byhyphen $lang"); + } + } + } + } + + # + if ($::regenerate_all_formats) { + info("Regenerating all formats, this may take some time ..."); + $errors += do_cmd_and_check("fmtutil-sys --all"); + info("done\n"); + $::regenerate_all_formats = 0; + } + + # undefine the global var, otherwise in GUI mode the actions are accumulating + undef %::execute_actions; + + return $errors; +} + + +# REMOVE +# +# tlmgr remove foo bar baz +# will remove the packages foo bar baz itself +# and will remove all .ARCH dependencies, too +# and if some of them are collections it will also remove the +# depending packages which are NOT Collections|Schemes. +# if some of them are referenced somewhere they will not be removed +# unless --force given +# +# tlmgr remove --no-depends foo bar baz +# will remove the packages foo bar baz itself without any dependencies +# but it will still remove all .ARCH dependency +# if some of them are referenced somewhere they will not be removed +# unless --force given +# +# tlmgr remove --no-depends-at-all foo bar baz +# will absolutely only install foo bar baz not even taking .ARCH into +# account +# +sub action_remove { + # we do the following: + # - (not implemented) order collections such that those depending on + # other collections are first removed, and then those which only + # depend on packages. Otherwise + # remove collection-latex collection-latexrecommended + # will not succeed + # - first loop over all cmd line args and consider only the collections + # - for each to be removed collection: + # . check that no other collections/scheme asks for that collection + # . remove the collection + # . remove all dependencies + # - for each normal package not already removed (via the above) + # . check that no collection/scheme still depends on this package + # . remove the package + # + $opts{"no-depends"} = 1 if $opts{"no-depends-at-all"}; + my %already_removed; + my @more_removal; + init_local_db(); + return if !check_on_writable(); + info("remove: dry run, no changes will be made\n") if $opts{"dry-run"}; + my @packs = @ARGV; + # + # we have to be carefull not to remove too many packages. The idea is + # as follows: + # - let A be the set of all packages to be removed from the cmd line + # - let A* be the set of A with all dependencies expanded + # - let B be the set of all packages + # - let C = B \ A*, ie the set of all packages without those packages + # in the set of A* + # - let C* be the set of C with all dependencies expanded + # - let D = A* \ C*, ie the set of all packages to be removed (A*) + # without all the package that are still needed (C*) + # - remove all package in D + # - for any package in A (not in A*, in A, ie on the cmd line) that is + # also in C* (so a package that was asked for to be removed on the + # cmd line, but it isn't because someone else asks for it), warn the + # user that it is still needed + # + # remove all .ARCH dependencies, too, unless $opts{"no-depends-at-all"} + @packs = $localtlpdb->expand_dependencies("-only-arch", $localtlpdb, @packs) + unless $opts{"no-depends-at-all"}; + # remove deps unless $opts{"no-depends"} + @packs = $localtlpdb->expand_dependencies("-no-collections", $localtlpdb, @packs) unless $opts{"no-depends"}; + my %allpacks; + for my $p ($localtlpdb->list_packages) { $allpacks{$p} = 1; } + for my $p (@packs) { delete($allpacks{$p}); } + my @neededpacks = $localtlpdb->expand_dependencies($localtlpdb, keys %allpacks); + my %packs; + my %origpacks; + my @origpacks = $localtlpdb->expand_dependencies("-only-arch", $localtlpdb, @ARGV) unless $opts{"no-depends-at-all"}; + for my $p (@origpacks) { $origpacks{$p} = 1; } + for my $p (@packs) { $packs{$p} = 1; } + for my $p (@neededpacks) { + if (defined($origpacks{$p})) { + # that package was asked for to be removed on the cmd line + my @needed = $localtlpdb->needed_by($p); + if ($opts{"force"}) { + info("tlmgr: $p is needed by " . join(" ", @needed) . "\n"); + info("tlmgr: removing it anyway, due to --force\n"); + } else { + delete($packs{$p}); + tlwarn("tlmgr: not removing $p, needed by " . + join(" ", @needed) . "\n"); + } + } else { + delete($packs{$p}); + } + } + @packs = keys %packs; + foreach my $pkg (sort @packs) { + my $tlp = $localtlpdb->get_package($pkg); + next if defined($already_removed{$pkg}); + if (!defined($tlp)) { + info("$pkg: package not present, cannot remove\n"); + } else { + # in the first round we only remove collections, nothing else + # but removing collections will remove all dependencies, too + # save the information of which packages have already been removed + # into %already_removed. + if ($tlp->category eq "Collection") { + my $foo = 0; + info ("$prg: removing $pkg\n"); + if (!$opts{"dry-run"}) { + $foo = $localtlpdb->remove_package($pkg); + logpackage("remove: $pkg"); + } + if ($foo) { + # removal was successful, so the return is at least 0x0001 mktexlsr + # remove dependencies, too + $already_removed{$pkg} = 1; + } + } else { + # save all the other packages into the @more_removal list to + # be removed at the second state. Note that if a package has + # already been removed due to a removal of a collection + # it will be marked as such in %already_removed and not tried again + push (@more_removal, $pkg); + } + } + } + foreach my $pkg (sort @more_removal) { + if (!defined($already_removed{$pkg})) { + info ("$prg: removing package $pkg\n"); + if (!$opts{"dry-run"}) { + if ($localtlpdb->remove_package($pkg)) { + # removal was successful + logpackage("remove: $pkg"); + $already_removed{$pkg} = 1; + } + } + } + } + if ($opts{"dry-run"}) { + # stop here, don't do any postinstall actions + return; + } else { + $localtlpdb->save; + my @foo = sort keys %already_removed; + if (@foo) { + info("tlmgr: ultimately removed these packages: @foo\n"); + } else { + info("tlmgr: no packages removed.\n"); + } + } +} + + +# PAPER +# ARGV can look like: +# paper a4 +# paper letter +# [xdvi|...|context] paper [help|papersize|--list] +# +sub action_paper { + init_local_db(); + chomp(my $texmfsysconfig = `kpsewhich -var-value=TEXMFSYSCONFIG`); + $ENV{"TEXMFCONFIG"} = $texmfsysconfig; + + my $action = shift @ARGV; + if ($action =~ m/^paper$/i) { # generic paper + my $newpaper = shift @ARGV; + if ($opts{"list"}) { # tlmgr paper --list => complain. + tlwarn("tlmgr: ignoring paper setting to $newpaper with --list\n") + if $newpaper; # complain if they tried to set, too. + tlwarn("tlmgr: please specify a program before paper --list, ", + "as in: tlmgr pdftex paper --list\n"); + + } elsif (!defined($newpaper)) { # tlmgr paper => show all current sizes. + TeXLive::TLPaper::paper_all($texmfsysconfig,undef); + + } elsif ($newpaper !~ /^(a4|letter)$/) { # tlmgr paper junk => complain. + $newpaper = "the empty string" if !defined($newpaper); + tlwarn("tlmgr: expected `a4' or `letter' after paper, not $newpaper\n"); + + } else { # tlmgr paper {a4|letter} => do it. + return if !check_on_writable(); + TeXLive::TLPaper::paper_all($texmfsysconfig,$newpaper); + } + + } else { # program-specific paper + my $prog = $action; # first argument is the program to change + my $arg = shift @ARGV; # get "paper" argument + if (!defined($arg) || $arg ne "paper") { + $arg = "the empty string." if ! $arg; + tlwarn("tlmgr: expected `paper' after $prog, not $arg\n"); + return; + } + # the do_paper progs check for the argument --list, so if given + # restore it to the cmd line. + if (@ARGV) { + return if !check_on_writable(); + } + unshift(@ARGV, "--list") if $opts{"list"}; + TeXLive::TLPaper::do_paper($prog,$texmfsysconfig,@ARGV); + } +} + + +# PATH +# +sub action_path { + my $what = shift @ARGV; + if (!defined($what) || ($what !~ m/^(add|remove)$/i)) { + $what = "" if ! $what; + tlwarn("tlmgr: action path requires add or remove, not: $what\n"); + return; + } + init_local_db(); + my $winadminmode = 0; + if (win32()) { + # + # for w32 we do system wide vs user setting detection as follows: + # - if --w32mode is NOT given, + # - if admin + # --> honor opt_w32_multi_user setting in tlpdb + # - if not admin + # - if opt_w32_multi_user == NO + # --> do user path adjustment + # - if opt_w32_multi_user == YES + # --> do nothing, warn that the setting is on, suggest --w32mode user + # - if --w32mode admin + # - if admin + # --> ignore opt_w32_multi_user and do system path adjustment + # - if non-admin + # --> do nothing but warn that user does not have privileges + # - if --w32mode user + # - if admin + # --> ignore opt_w32_multi_user and do user path adjustment + # - if non-admin + # --> ignore opt_w32_multi_user and do user path adjustment + if (!$opts{"w32mode"}) { + $winadminmode = $localtlpdb->option("w32_multi_user"); + if (!TeXLive::TLWinGoo::admin()) { + if ($winadminmode) { + tlwarn("The TLPDB specifies system wide path adjustments\nbut you don't have admin privileges.\nFor user path adjustment please use\n\t--w32mode user\n"); + # and do nothing + return; + } + } + } else { + # we are in the block where a --w32mode argument is given + # we reverse the tests: + if (TeXLive::TLWinGoo::admin()) { + # in admin mode we simply use what is given on the cmd line + if ($opts{"w32mode"} eq "user") { + $winadminmode = 0; + } elsif ($opts{"w32mode"} eq "admin") { + $winadminmode = 1; + } else { + tlwarn("Unknown --w32admin mode: $opts{w32mode}, should be 'admin' or 'user'\n"); + return; + } + } else { + # we are non-admin + if ($opts{"w32mode"} eq "user") { + $winadminmode = 0; + } elsif ($opts{"w32mode"} eq "admin") { + tlwarn("You don't have the privileges to work in --w32mode admin\n"); + return; + } else { + tlwarn("Unknown --w32admin mode: $opts{w32mode}, should be 'admin' or 'user'\n"); + return; + } + } + } + } + if ($what =~ m/^add$/i) { + if (win32()) { + TeXLive::TLUtils::w32_add_to_path( + $localtlpdb->root . "/bin/win32", + $winadminmode); + TeXLive::TLWinGoo::broadcast_env(); + } else { + TeXLive::TLUtils::add_symlinks($localtlpdb->root, + $localtlpdb->platform(), + $localtlpdb->option("sys_bin"), + $localtlpdb->option("sys_man"), + $localtlpdb->option("sys_info")); + } + } elsif ($what =~ m/^remove$/i) { + if (win32()) { + TeXLive::TLUtils::w32_remove_from_path( + $localtlpdb->root . "/bin/win32", + $winadminmode); + TeXLive::TLWinGoo::broadcast_env(); + } else { + # remove symlinks + TeXLive::TLUtils::remove_symlinks($localtlpdb->root, + $localtlpdb->platform(), + $localtlpdb->option("sys_bin"), + $localtlpdb->option("sys_man"), + $localtlpdb->option("sys_info")); + } + } else { + # that should not happen + tlwarn("\ntlmgr: Should not happen, action_path what=$what\n"); + exit 1; + } + return; +} + +# DUMP TLPDB +# +sub action_dumptlpdb { + init_local_db(); + + # we are basically doing machine-readable output. + my $savemr = $::machinereadable; + $::machinereadable = 1; + + if ($opts{"local"} && !$opts{"remote"}) { + # for consistency we write out the location of the installation, + # too, in the same format as when dumping the remote tlpdb + print "location-url\t", $localtlpdb->root, "\n"; + $localtlpdb->writeout; + + } elsif ($opts{"remote"} && !$opts{"local"}) { + init_tlmedia_or_die(); + $remotetlpdb->writeout; + + } else { + tlwarn("tlmgr dump-tlpdb: need exactly one of --local and --remote.\n"); + } + + $::machinereadable = $savemr; + return; +} + +# INFO +# +sub action_info { + init_local_db(); + my $taxonomy; + if ($opts{"taxonomy"} || $opts{"characterization"} || $opts{"functionality"} + || $opts{"keyword"}) { + $taxonomy = load_taxonomy_datafile(); + if (!defined($taxonomy)) { + tlwarn("tlmgr: Cannot load taxonomy file, showing taxonomies not supported.\n"); + } + } + my ($what, @todo) = @ARGV; + # + # tlmgr info + # tlmgr info collection + # tlmgr info scheme + # these commands just list the packages/collections/schemes installed with + # a short list + if (!defined($what) || ($what =~ m/^(collections|schemes)$/i)) { + show_list_of_packages($what); + return; + } + # we are still here, so $what is defined and neither collection nor scheme, + # so assume the arguments are package names + foreach my $ppp ($what, @todo) { + my ($pkg, $tag) = split '@', $ppp, 2; + my $tlpdb = $localtlpdb; + my $source_found; + my $tlp = $localtlpdb->get_package($pkg); + my $installed = 0; + if (!$tlp) { + if (!$remotetlpdb) { + init_tlmedia_or_die(); + } + if (defined($tag)) { + if (!$remotetlpdb->is_virtual) { + tlwarn("tlmgr: specifying implicit tags is not allowed for non-virtual databases!\n"); + next; + } else { + if (!$remotetlpdb->is_repository($tag)) { + tlwarn("tlmgr: no such repository tag defined: $tag\n"); + next; + } + } + } + $tlp = $remotetlpdb->get_package($pkg, $tag); + if (!$tlp) { + if (defined($tag)) { + # we already searched for the package in a specific tag, don't retry + # all candidates! + tlwarn("tlmgr: Cannot find package $pkg in repository $tag\n"); + next; + } + if ($remotetlpdb->is_virtual) { + # we might have a package that is available in a + # subsidiary repository, but not installable + # because it is not pinned + # we will list it but warn about this fact + my @cand = $remotetlpdb->candidates($pkg); + if (@cand) { + my $first = shift @cand; + if (defined($first)) { + tlwarn("strange, we have a first candidate but no tlp: $pkg\n"); + next; + } + # already shifted away the first element + if ($#cand >= 0) { + # recursively showing all tags, but warn + print "package: ", $pkg, "\n"; + print "WARNING: This package is not pinned but present in subsidiary repositories\n"; + print "WARNING: As long as it is not pinned it is not installable.\n"; + print "WARNING: Listing all available copies of the package.\n"; + my @aaa; + for my $a (@cand) { + my ($t,$r) = split(/\//, $a, 2); + push @aaa, "$pkg" . '@' . $t; + } + action_info(@aaa); + next; + } else { + tlwarn("strange, package listed but no residual candidates: $pkg\n"); + next; + } + } else { + tlwarn("strange, package listed but no candidates: $pkg\n"); + next; + } + } + tlwarn("tlmgr: cannot find package $pkg\n"); + next; + } + # we want to also show the source if it is known + if (defined($tag)) { + $source_found = $tag; + } else { + if ($remotetlpdb->is_virtual) { + my ($firsttag, @cand) = $remotetlpdb->candidates($pkg); + $source_found = $firsttag; + } else { + # might be single user repository, don't mention anything + } + } + $tlpdb = $remotetlpdb; + } else { + $installed = 1; + } + my @colls; + if ($tlp->category ne "Collection" && $tlp->category ne "Scheme") { + @colls = $localtlpdb->needed_by($pkg); + if (!@colls) { + # not referenced in the local tlpdb, so try the remote here, too + if (!$remotetlpdb) { + init_tlmedia_or_die(); + } + @colls = $remotetlpdb->needed_by($pkg); + } + } + # some packages might depend on other packages, so do not + # include arbitrary package in the list of collections, but + # only collectons: + @colls = grep {m;^collection-;} @colls; + print "package: ", $tlp->name, "\n"; + print "repository: ", $source_found, "\n" if (defined($source_found)); + print "category: ", $tlp->category, "\n"; + print "shortdesc: ", $tlp->shortdesc, "\n" if ($tlp->shortdesc); + print "longdesc: ", $tlp->longdesc, "\n" if ($tlp->longdesc); + print "installed: ", ($installed ? "Yes" : "No"), "\n"; + print "revision: ", $tlp->revision, "\n" if ($installed); + print "cat-version: ", $tlp->cataloguedata->{'version'}, "\n" + if $tlp->cataloguedata->{'version'}; + print "cat-date: ", $tlp->cataloguedata->{'date'}, "\n" + if $tlp->cataloguedata->{'date'}; + print "cat-license: ", $tlp->cataloguedata->{'license'}, "\n" + if $tlp->cataloguedata->{'license'}; + print "collection: ", @colls, "\n" if (@colls); + if ($opts{"keyword"} || $opts{"taxonomy"}) { + print "keywords: "; + if (defined($taxonomy->{'by-package'}{'keyword'}{$pkg})) { + print join(', ',@{$taxonomy->{'by-package'}{'keyword'}{$pkg}}), "\n"; + } else { + print "(none found)\n"; + } + } + if ($opts{"functionality"} || $opts{"taxonomy"}) { + print "function: "; + if (defined($taxonomy->{'by-package'}{'functionality'}{$pkg})) { + print join(', ',@{$taxonomy->{'by-package'}{'functionality'}{$pkg}}), "\n"; + } else { + print "(none found)\n"; + } + } + if ($opts{"characterization"} || $opts{"taxonomy"}) { + print "primary characterization: "; + if (defined($taxonomy->{'by-package'}{'primary'}{$pkg})) { + print $taxonomy->{'by-package'}{'primary'}{$pkg}, "\n"; + } else { + print "(none found)\n"; + } + print "secondary characterization: "; + if (defined($taxonomy->{'by-package'}{'secondary'}{$pkg})) { + print $taxonomy->{'by-package'}{'secondary'}{$pkg}, "\n"; + } else { + print "(none found)\n"; + } + } + if ($opts{"list"}) { + if ($tlp->category eq "Collection" || $tlp->category eq "Scheme") { + # in the case of collections of schemes we list the deps + my @deps = $tlp->depends; + if (@deps) { + print "depends:\n"; + for my $d (@deps) { + print "\t$d\n"; + } + } + } + print "Included files, by type:\n"; + # if the package has a .ARCH dependency we also list the files for + # those packages + my @todo = $tlpdb->expand_dependencies("-only-arch", $tlpdb, ($pkg)); + for my $d (sort @todo) { + my $foo = $tlpdb->get_package($d); + if (!$foo) { + tlwarn ("\nShould not happen, no dependent package $d\n"); + next; + } + if ($d ne $pkg) { + print "depending package $d:\n"; + } + if ($foo->runfiles) { + print "run files:\n"; + for my $f (sort $foo->runfiles) { print " $f\n"; } + } + if ($foo->srcfiles) { + print "source files:\n"; + for my $f (sort $foo->srcfiles) { print " $f\n"; } + } + if ($foo->docfiles) { + print "doc files:\n"; + for my $f (sort $foo->docfiles) { + print " $f"; + my $dfd = $foo->docfiledata; + if (defined($dfd->{$f})) { + for my $k (keys %{$dfd->{$f}}) { + print " $k=\"", $dfd->{$f}->{$k}, '"'; + } + } + print "\n"; + } + } + # in case we have them + if ($foo->allbinfiles) { + print "bin files (all platforms):\n"; + for my $f (sort $foo->allbinfiles) { print " $f\n"; } + } + } + } + print "\n"; + } + return; +} + + + +# taxonomy subroutines +# +sub load_taxonomy_datafile { + init_local_db(); + my $taxonomy; + my $fpath = $localtlpdb->root + . "/texmf/scripts/texlive/var/texcatalogue.keywords"; + if (! -r $fpath) { + tlwarn("tlmgr: taxonomy file $fpath not readable: $!\n"); + return; + } + if (!open (TAXF, $fpath)) { + tlwarn("tlmgr: taxonomy file $fpath cannot be opened: $!\n"); + return; + } + # suck in the whole file contents + my @foo = <TAXF>; + close(TAXF); + my $foo = "@foo"; + no strict "vars"; + # the no strict "vars" is *ABSOLUTELY* necessary otherwise the file is + # not evaluated, no idea why! + eval "$foo"; + use strict "vars"; + return $taxonomy; +} + +sub walk_level_tree { + my $cp = shift; + my $prestring = shift; + my $print_packages = shift; + if (defined($cp->{'_packages_'})) { + print "$prestring\n"; + if ($print_packages) { + my @pkgs = sort @{$cp->{'_packages_'}}; + print "\t@pkgs\n"; + } + } + for my $cz (keys %$cp) { + if ($cz ne '_packages_') { + my $nextstring = "$prestring > $cz"; + my $np = $cp->{$cz}; + &walk_level_tree($np,$nextstring); + } + } +} + +# SEARCH +# +sub action_search { + my $r = shift @ARGV; + my $ret = ""; + my $tlpdb; + my $taxonomy; + # + if (!$opts{"list"} && (!defined($r) || !$r)) { + + tlwarn("tlmgr: nothing to search for.\n"); + return; + } + if ($opts{"extended"}) { + tlwarn("tlmgr: sorry, extended searching not implemented by now.\n"); + return; + } + # check the arguments + my $search_type_nr = 0; + $search_type_nr++ if $opts{"file"}; + $search_type_nr++ if $opts{"taxonomy"}; + $search_type_nr++ if $opts{"characterization"}; + $search_type_nr++ if $opts{"functionality"}; + $search_type_nr++ if $opts{"keyword"}; + $search_type_nr++ if $opts{"all"}; + if ($search_type_nr > 1) { + tlwarn("tlmgr: please specify only one thing to search for!\n"); + return; + } + init_local_db(); + if ($opts{"global"}) { + init_tlmedia_or_die(); + $tlpdb = $remotetlpdb; + } else { + $tlpdb = $localtlpdb; + } + my $search_characterization = + $opts{"characterization"} || $opts{"taxonomy"} || $opts{"all"}; + my $search_functionality = + $opts{"functionality"} || $opts{"taxonomy"} || $opts{"all"}; + my $search_keyword = + $opts{"keyword"} || $opts{"taxonomy"} || $opts{"all"}; + my $search_tlpdb = + $opts{"all"} || + !($opts{"taxonomy"} || $opts{"characterization"} || + $opts{"functionality"} || $opts{"keyword"}); + if ($opts{"all"} || $opts{"taxonomy"} || $opts{"characterization"} + || $opts{"functionality"} || $opts{"keyword"}) { + $taxonomy = load_taxonomy_datafile(); + if (!defined($taxonomy)) { + tlwarn("tlmgr: Cannot load taxonomy file;", + " searching/listing for taxonomies not supported.\n"); + return; + } + if ($opts{"list"}) { + if ($search_keyword) { + print "\f Keywords:\n"; + for (sort keys %{$taxonomy->{'by-taxonomy'}{'keyword'}}) { + print "\t$_\n"; + } + print "\n"; + } + if ($search_functionality) { + print "\f Functionalities:\n"; + &walk_level_tree($taxonomy->{'by-taxonomy'}{'functionality'}, "", 0); + print "\n"; + } + if ($search_characterization) { + # Assume all possible characterizations occur under the primary ones! + print "\f Characterizations:\n"; + &walk_level_tree($taxonomy->{'by-taxonomy'}{'primary'}, "", 0); + print "\n"; + } + return; + } + } + foreach my $pkg ($tlpdb->list_packages) { + my $tlp = $tlpdb->get_package($pkg); + if ($opts{"file"}) { + my @files = $tlp->all_files; + if ($tlp->relocated) { + for (@files) { s:^$RelocPrefix/:$RelocTree/:; } + } + my @ret = grep(m;$r;, @files); + if (@ret) { + print "$pkg:\n"; + foreach (@ret) { + print "\t$_\n"; + } + } + } else { + next if ($pkg =~ m/\./); + # the other searching is done together + my $t = ""; + if ($search_keyword) { + $t = $t . join('\n', @{$taxonomy->{'by-package'}{'keyword'}{$pkg}}) + if (defined($taxonomy->{'by-package'}{'keyword'}{$pkg})); + } + if ($search_functionality) { + $t = $t.join('\n', @{$taxonomy->{'by-package'}{'functionality'}{$pkg}}) + if (defined($taxonomy->{'by-package'}{'functionality'}{$pkg})); + } + if ($search_characterization) { + $t = "$t$taxonomy->{'by-package'}{'primary'}{$pkg}\n" + if (defined($taxonomy->{'by-package'}{'primary'}{$pkg})); + $t = "$t$taxonomy->{'by-package'}{'secondary'}{$pkg}\n" + if (defined($taxonomy->{'by-package'}{'secondary'}{$pkg})); + } + if ($search_tlpdb) { + $t .= "$pkg\n"; + $t = "$t" . $tlp->shortdesc . "\n" + if (defined($tlp->shortdesc)); + $t = "$t" . $tlp->longdesc . "\n" + if (defined($tlp->longdesc)); + } + my $shortdesc = $tlp->shortdesc; + $shortdesc |= ""; + my $pat = $r; + if ($opts{"word"}) { + $pat = '\W' . $r . '\W'; + } + if ($t =~ m/$pat/i) { + $ret .= " $pkg - $shortdesc\n"; + } + } + } + print $ret; + return; +} + + +# RESTORE +# +# read the directory and check what files/package/rev are available +# for restore +sub get_available_backups { + my $bd = shift; + my $do_stat = shift; + # initialize the hash(packages) of hash(revisions) + my %backups; + opendir (DIR, $bd) || die "opendir($bd) failed: $!"; + my @dirents = readdir (DIR); + closedir (DIR) || warn "closedir($bd) failed: $!"; + # + # see below for explanation, this has effects only on W32 + my $oldwsloppy = ${^WIN32_SLOPPY_STAT}; + ${^WIN32_SLOPPY_STAT} = 1; + # + for my $dirent (@dirents) { + next if (-d $dirent); + next if ($dirent !~ m/^(.*)\.r([0-9]+)\.tar\.xz$/); + if (!$do_stat) { + $backups{$1}->{$2} = 1; + next; + } + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, + $atime,$mtime,$ctime,$blksize,$blocks) = stat("$bd/$dirent"); + # times: as we want to be portable we try the following times: + # - first choice is ctime which hopefully works nicely + # - on UFS (OSX) ctime is not supported, so use mtime + # furthermore, if we are on W32 we want to be fast and make only + # a sloppy stat + # for more on that please see man perlport + my $usedt = $ctime; + if (!$usedt) { + # can happen on + $usedt = $mtime; + } + if (!$usedt) { + # stat failed, set key to -1 as a sign that there is a backup + # but we cannot stat it + $backups{$1}->{$2} = -1; + } else { + $backups{$1}->{$2} = $usedt; + } + } + # reset the original value of the w32 sloppy mode for stating files + ${^WIN32_SLOPPY_STAT} = $oldwsloppy; + return %backups; +} + +sub restore_one_package { + my ($pkg, $rev, $bd) = @_; + # first remove the package, then reinstall it + # this way we get rid of useless files + my $restore_file = "$bd/${pkg}.r${rev}.tar.xz"; + if (! -r $restore_file) { + tlwarn("Cannot read $restore_file, no action taken\n"); + return; + } + $localtlpdb->remove_package($pkg); + TeXLive::TLPDB->_install_package($restore_file , 0, [] ,$localtlpdb); + logpackage("restore: $pkg ($rev)"); + # now we have to read the .tlpobj file and add it to the DB + my $tlpobj = TeXLive::TLPOBJ->new; + $tlpobj->from_file($localtlpdb->root . "/tlpkg/tlpobj/$pkg.tlpobj"); + $localtlpdb->add_tlpobj($tlpobj); + TeXLive::TLUtils::announce_execute_actions("enable", + $localtlpdb->get_package($pkg)); + $localtlpdb->save; +} + +sub check_backupdir_selection { + my $warntext = ""; + if ($opts{"backupdir"}) { + my $ob = abs_path($opts{"backupdir"}); + $ob && ($opts{"backupdir"} = $ob); + if (! -d $opts{"backupdir"}) { + $warntext .= "tlmgr: backupdir argument\n"; + $warntext .= " $opts{'backupdir'}\n"; + $warntext .= "is not a directory.\n"; + return (0, $warntext); + } + } else { + # no argument, check for presence in TLPDB + init_local_db(1); + $opts{"backupdir"} = norm_tlpdb_path($localtlpdb->option("backupdir")); + if (!$opts{"backupdir"}) { + return (0, "tlmgr: No way to determine backupdir.\n"); + } + # we are still here, there is something set in tlpdb + my $ob = abs_path($opts{"backupdir"}); + $ob && ($opts{"backupdir"} = $ob); + if (! -d $opts{"backupdir"}) { + $warntext = "tlmgr: backupdir as set in tlpdb\n"; + $warntext .= " $opts{'backupdir'}\n"; + $warntext .= "is not a directory.\n"; + return (0, $warntext); + } + } + return 1; +} + +sub action_restore { + # tlmgr restore [--backupdir dir] --all + # restores of all packages found in backupdir the latest version + # tlmgr restore --backupdir dir + # lists all packages with all revisions + # tlmgr restore --backupdir dir pkg + # lists all revisions of pkg + # tlmgr restore --backupdir dir pkg rev + # restores pkg to revision rev + # check the backup dir argument + + { + my ($a, $b) = check_backupdir_selection(); + if (!$a) { + # in all these cases we want to terminate in the non-gui mode + tlwarn($b); + tlwarn("Exiting.\n"); + exit 1; + } + } + info("restore: dry run, no changes will be made\n") if $opts{"dry"}; + + # initialize the hash(packages) of hash(revisions), do stat files! (the 1) + my %backups = get_available_backups($opts{"backupdir"}, 1); + my ($pkg, $rev) = @ARGV; + if (defined($pkg) && $opts{"all"}) { + tlwarn("Do you want to restore all packages or only $pkg?\n"); + tlwarn("Terminating.\n"); + exit 1; + } + if ($opts{"all"}) { + init_local_db(1); + return if !check_on_writable(); + if (!$opts{"force"}) { + print "Do you really want to restore all packages to the latest revision found in\n\t$opts{'backupdir'}\n===> (y/N): "; + my $yesno = <STDIN>; + if ($yesno !~ m/^y(es)?$/i) { + print "Ok, cancelling the restore!\n"; + finish(0); + } + } + for my $p (sort keys %backups) { + my @tmp = sort {$b <=> $a} (keys %{$backups{$p}}); + my $rev = $tmp[0]; + print "Restoring $p, $rev from $opts{'backupdir'}/${p}.r${rev}.tar.xz\n"; + if (!$opts{"dry"}) { + # first remove the package, then reinstall it + # this way we get rid of useless files + restore_one_package($p, $rev, $opts{"backupdir"}); + } + } + # localtlpdb already saved, so we are finished + return; + } + # + # intermediate sub + sub report_backup_revdate { + my $p = shift; + my %revs = @_; + my @rs = sort {$b <=> $a} (keys %revs); + for my $rs (@rs) { + my $dstr; + if ($revs{$rs} == -1) { + $dstr = "unknown"; + } else { + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = + localtime($revs{$rs}); + # localtime returns dates starting from 1900, and the month is 0..11 + $dstr = sprintf "%04d-%02d-%02d %02d:%02d", + $year+1900, $mon+1, $mday, $hour, $min; + } + print "$rs ($dstr) "; + } + } + # end sub + if (!defined($pkg)) { + if (keys %backups) { + print "Available backups:\n"; + foreach my $p (sort keys %backups) { + print "$p: "; + report_backup_revdate($p, %{$backups{$p}}); + print "\n"; + } + } else { + print "No backups available in $opts{'backupdir'}\n"; + } + finish(0); + } + if (!defined($rev)) { + print "Available backups for $pkg: "; + report_backup_revdate($pkg, %{$backups{$pkg}}); + print "\n"; + finish(0); + } + # we did arrive here, so we try to restore ... + if (defined($backups{$pkg}->{$rev})) { + return if !check_on_writable(); + if (!$opts{"force"}) { + print "Do you really want to restore $pkg to revision $rev (y/N): "; + my $yesno = <STDIN>; + if ($yesno !~ m/^y(es)?$/i) { + print "Ok, cancelling the restore!\n"; + finish(0); + } + } + print "Restoring $pkg, $rev from $opts{'backupdir'}/${pkg}.r${rev}.tar.xz\n"; + if (!$opts{"dry"}) { + init_local_db(1); + # first remove the package, then reinstall it + # this way we get rid of useless files + restore_one_package($pkg, $rev, $opts{"backupdir"}); + } + } else { + print "revision $rev for $pkg is not present in $opts{'backupdir'}\n"; + } +} + +sub action_backup { + init_local_db(1); + # --clean argument + # can be either -1 ... don't clean + # 0 ... remove all backups + # N ... keep only N backups + # that parallels the value of autoclean in the configuration + # we have to be careful, because if simply --clean is given, we should + # check for the value saved in the tlpdb, and if that is not present + # do nothing. + # We have set clean to clean:-99 which makes -99 the default value + # if only --clean is given without any argument + # !defined($opts{"clean"}) -> no --clean given + # $opts{"clean"} = -99 -> --clean without argument given, check tlpdb + # $opts{"clean"} = -1, 0, N -> --clean=N given, check argument + # + my $clean_mode = 0; + $clean_mode = 1 if defined($opts{"clean"}); + if ($clean_mode) { + if ($opts{"clean"} == -99) { + # we need to check the tlpdb + my $tlpdb_option = $localtlpdb->option("autobackup"); + if (!defined($tlpdb_option)) { + tlwarn ("--clean given without an argument, but no default clean\n"); + tlwarn ("mode specified in the tlpdb, terminating.\n"); + exit 1; + } + $opts{"clean"} = $tlpdb_option; + } + # now $opts{"clean"} is something, but maybe not a number, check for + # validity + if ($opts{"clean"} =~ m/^(-1|[0-9]+)$/) { + # get rid of leading zeros etc etc + $opts{"clean"} = $opts{"clean"} + 0; + } else { + tlwarn ("clean mode as specified on the command line or as given by default\n"); + tlwarn ("must be an integer larger or equal than -1, terminating.\n"); + exit 1; + } + } + # check the backup dir argument + { + my ($a, $b) = check_backupdir_selection(); + if (!$a) { + # in all these cases we want to terminate in the non-gui mode + tlwarn($b); + tlwarn("Exiting.\n"); + exit 1; + } + } + + # if we do --clean --all we also want to remove packages that + # are not present anymore in the tlpdb, so use the readdir mode + # to determine backups + if ($opts{"all"} && $clean_mode) { + # initialize the hash(packages) of hash(revisions) + # no need to stat the files + my %backups = get_available_backups($opts{"backupdir"}, 0); + init_local_db(1); + for my $p (sort keys %backups) { + clear_old_backups ($p, $opts{"backupdir"}, $opts{"clean"}, $opts{"dry-run"}); + } + return 1; + } + + # in case we are not cleaning or cleaning only specific packages + # use the one-by-one mode + my @todo; + if ($opts{"all"}) { + @todo = $localtlpdb->list_packages; + } else { + @todo = @ARGV; + @todo = $localtlpdb->expand_dependencies("-only-arch", $localtlpdb, @todo); + } + if (!@todo) { + printf "tlmgr backup takes either a list of packages or --all\n"; + } + foreach my $pkg (@todo) { + if ($clean_mode) { + clear_old_backups ($pkg, $opts{"backupdir"}, $opts{"clean"}, $opts{"dry-run"}); + } else { + my $tlp = $localtlpdb->get_package($pkg); + info("saving current status of $pkg to $opts{'backupdir'}/${pkg}.r" . + $tlp->revision . ".tar.xz\n"); + if (!$opts{"dry-run"}) { + $tlp->make_container("xz", $localtlpdb->root, + $opts{"backupdir"}, "${pkg}.r" . $tlp->revision); + } + } + } +} + +# ===================================================================== +# INFRASTRUCTURE UPDATE ON WINDOWS +# ===================================================================== +# Infrastructure files cannot be updated directly from the +# tlmgr.pl script due to file locking problem on Windows - files that +# are in use (either open or executing) cannot be removed or replaced. +# For that reason the update process is performed by a batch script +# outside of tlmgr.pl. +# There are three pieces involved in the update: tlmgr.bat +# launcher, write_w32_updater subroutine below and a batch +# updater script. Their roles are as follows: +# * tlmgr.bat is a watchdog, it launches tlmgr.pl and watches for +# the updater script that is to be executed. If the updater script +# exists before tlmgr.pl is launched, it will be removed or +# tlmgr.bat will abort if it fails to do so. This means that the +# updater script has to be created by the current invocation of +# tlmgr.pl. Futhermore, the updater script is renamed from +# updater-w32 to updater-w32.bat just before it is run, and thus +# it can be executed only once. +# * write_w32_updater subroutine in tlmgr.pl prepares the update +# and writes the updater script. Packages in .xz archives are +# dowloaded/copied and uncompressed to .tar files. Also .tar +# backups of the current packages are made. If everything is +# successful, the update script is created from the template. +# Otherwise the update is aborted. +# * updater-w32[.bat] batch script, triggers and executes the actual +# update. It first restarts itself in a separate instance of cmd.exe +# (and in a new console window in gui mode) and runs the update +# from there. The update is run with echo on and all output is +# logged to a file (or stderr in verbose mode). After successful +# infrastructure update, tlmgr is optionally restarted if update +# of other packages is asked for. +# The infrastructure update itself proceeds as follows: +# (1) untar all package archives +# (2) include .tlpobj files into tlpdb +# (3) print update info to console +# Any error during (1) or (2) triggers the rollback sequence: +# (1) print failed update info to console +# (2) untar all package backups +# (3) include .tlpobj files (from backup) into tlpdb +# (4) print restore info to console +# Any error during (2) or (3) and we go into panic state. At this +# point there is no guarantee that the installation is still working. +# There is not much we can do but to print failed restore info and +# give instructions to download and run 'update-tlmgr-latest.exe' +# to repair the installation. +# ===================================================================== +# +sub write_w32_updater { + my ($restart_tlmgr, $ref_files_to_be_removed, @w32_updated) = @_; + my @infra_files_to_be_removed = @$ref_files_to_be_removed; + # TODO do something with these files TODO + my $media = $remotetlpdb->media; + # we have to download/copy also the src/doc files if necessary! + my $container_src_split = $remotetlpdb->config_src_container; + my $container_doc_split = $remotetlpdb->config_doc_container; + # get options about src/doc splitting from $totlpdb + # TT: should we use local options to decide about install of doc & src? + my $opt_src = $localtlpdb->option("install_srcfiles"); + my $opt_doc = $localtlpdb->option("install_docfiles"); + my $root = $localtlpdb->root; + my $temp = "$root/temp"; + TeXLive::TLUtils::mkdirhier($temp); + tlwarn("Backup option not implemented for infrastructure update.\n") if ($opts{"backup"}); + if ($media eq 'local_uncompressed') { + tlwarn("Creating updater from local_uncompressed currently not implemented!\n"); + tlwarn("But it should not be necessary!\n"); + return 1; # abort + } + my (@upd_tar, @upd_tlpobj, @upd_info, @rst_tar, @rst_tlpobj, @rst_info); + foreach my $pkg (@w32_updated) { + my $repo; + my $mediatlp; + if ($media eq "virtual") { + my $maxtlpdb; + (undef, undef, $mediatlp, $maxtlpdb) = + $remotetlpdb->virtual_candidate($pkg); + $repo = $maxtlpdb->root . "/$Archive"; + } else { + $mediatlp = $remotetlpdb->get_package($pkg); + $repo = $remotetlpdb->root . "/$Archive"; + } + my $localtlp = $localtlpdb->get_package($pkg); + my $oldrev = $localtlp->revision; + my $newrev = $mediatlp->revision; + # we do install documenation files for category Documentation even if + # option("install_docfiles") is false + my $opt_real_doc = ($mediatlp->category =~ m/documentation/i) ? 1 : $opt_doc; + my @pkg_parts = ($pkg); + push(@pkg_parts, "$pkg.source") if ($container_src_split && $opt_src && $mediatlp->srcfiles); + push(@pkg_parts, "$pkg.doc") if ($container_doc_split && $opt_real_doc && $mediatlp->docfiles); + foreach my $pkg_part (@pkg_parts) { + push (@upd_tar, "$pkg_part.tar"); + push (@upd_tlpobj, "tlpkg\\tlpobj\\$pkg_part.tlpobj"); + } + push (@upd_info, "$pkg ^($oldrev -^> $newrev^)"); + push (@rst_tar, "__BACKUP_$pkg.r$oldrev.tar"); + push (@rst_tlpobj, "tlpkg\\tlpobj\\$pkg.tlpobj"); + push (@rst_info, "$pkg ^($oldrev^)"); + next if ($opts{"dry-run"}); + # create backup; make_container expects file name in a format: some-name.r[0-9]+ + my ($size, $md5, $fullname) = $localtlp->make_container("tar", $root, $temp, "__BACKUP_$pkg.r$oldrev"); + if ($size <= 0) { + tlwarn("Creation of backup container of $pkg failed.\n"); + return 1; # backup failed? abort + } + foreach my $pkg_part (@pkg_parts) { + if ($media eq 'local_compressed') { + copy("$repo/$pkg_part.tar.xz", "$temp"); + } else { # net + TeXLive::TLUtils::download_file("$repo/$pkg_part.tar.xz", "$temp/$pkg_part.tar.xz"); + } + # now we should have the file present + if (!-r "$temp/$pkg_part.tar.xz") { + tlwarn("Couldn't get $pkg_part.tar.xz, that is bad\n"); + return 1; # abort + } + # unpack xz archive + my $sysret = system("$::progs{'xzdec'} < \"$temp/$pkg_part.tar.xz\" > \"$temp/$pkg_part.tar\""); + if ($sysret) { + tlwarn("Couldn't unpack $pkg_part.tar.xz\n"); + return 1; # unpack failed? abort + } + unlink("$temp/$pkg_part.tar.xz"); # we don't need that archive anymore + } + } + + # prepare updater script + my $respawn_cmd = "cmd.exe /e:on/v:off/d/c"; + $respawn_cmd = "start /wait $respawn_cmd" if ($::gui_mode); + my $gui_pause = ($::gui_mode ? "pause" : "rem"); + my $upd_log = ($::opt_verbosity ? "STDERR" : '"%~dp0update-self.log"'); + my $std_handles_redir = ($::opt_verbosity ? "1^>^&2" : "2^>$upd_log 1^>^&2"); + my $pkg_log = ($packagelogfile ? "\"$packagelogfile\"" : "nul"); + my $post_update_msg = "You may now close this window."; + my $rerun_tlmgr = "rem"; + if ($restart_tlmgr) { + $post_update_msg = "About to restart tlmgr to complete update ..."; + # quote all arguments for tlmgr restart in case of spaces + $rerun_tlmgr = join (" ", map ("\"$_\"", @::SAVEDARGV) ); + $rerun_tlmgr = "if not errorlevel 1 tlmgr.bat $rerun_tlmgr"; + } + my $batch_script = <<"EOF"; +:: This file is part of an automated update process of +:: infrastructure files and should not be run standalone. +:: For more details about the update process see comments +:: in tlmgr.pl (subroutine write_w32_updater). + + if [%1]==[:doit] goto :doit + if not exist "%~dp0tar.exe" goto :notar + $respawn_cmd call "%~f0" :doit $std_handles_redir + $rerun_tlmgr + goto :eof + +:notar + echo %~nx0: cannot run without "%~dp0tar.exe" + findstr "^::" <"%~f0" + exit /b 1 + +:doit + set prompt=TL\$G + title TeX Live Manager $TeXLive::TLConfig::ReleaseYear Update + set PERL5LIB=$root/tlpkg/tlperl/lib + >con echo DO NOT CLOSE THIS WINDOW! + >con echo TeX Live infrastructure update in progress ... + >con echo Detailed command logging to $upd_log + chdir /d "%~dp0.." + if not errorlevel 1 goto :update + >con echo Could not change working directory to "%~dp0.." + >con echo Aborting infrastructure update, no changes have been made. + >con $gui_pause + exit /b 1 + +:update + for %%I in (@upd_tar) do ( + temp\\tar.exe -xmf temp\\%%I + if errorlevel 1 goto :rollback + ) + tlpkg\\tlperl\\bin\\perl.exe .\\texmf\\scripts\\texlive\\tlmgr.pl _include_tlpobj @upd_tlpobj + if errorlevel 1 goto :rollback + >>$pkg_log echo [%date% %time%] self update: @upd_info + >con echo self update: @upd_info + del "%~dp0*.tar" "%~dp0tar.exe" + >con echo Infrastructure update finished successfully. + >con echo $post_update_msg + >con $gui_pause + exit /b 0 + +:rollback + >>$pkg_log echo [%date% %time%] failed self update: @upd_info + >con echo failed self update: @upd_info + >con echo Rolling back to previous version ... + for %%I in (@rst_tar) do ( + temp\\tar.exe -xmf temp\\%%I + if errorlevel 1 goto :panic + ) + tlpkg\\tlperl\\bin\\perl.exe .\\texmf\\scripts\\texlive\\tlmgr.pl _include_tlpobj @rst_tlpobj + if errorlevel 1 goto :panic + >>$pkg_log echo [%date% %time%] self restore: @rst_info + >con echo self restore: @rst_info + >con echo Infrastructure update failed. Previous version has been restored. + >con $gui_pause + exit /b 1 + +:panic + >>$pkg_log echo [%date% %time%] failed self restore: @rst_info + >con echo failed self restore: @rst_info + >con echo FATAL ERROR: + >con echo Infrastructure update failed and backup recovery failed too. + >con echo To repair your TeX Live installation download and run: + >con echo $TeXLive::TLConfig::TeXLiveURL/update-tlmgr-latest.exe + >con $gui_pause + exit /b 666 +EOF + + ddebug("\n:: UPDATER BATCH SCRIPT ::\n$batch_script\n:: END OF FILE ::\n"); + if ($opts{"dry-run"}) { + my $upd_info = "self update: @upd_info"; + $upd_info =~ s/\^//g; + info($upd_info); + } else { + copy("$root/tlpkg/installer/tar.exe", "$temp"); + # make sure copied tar is working + if (system("\"$temp/tar.exe\" --version >nul")) { + tlwarn("Could not copy tar.exe, that is bad.\n"); + return 1; # abort + } + open UPDATER, ">$temp/updater-w32" or die "Cannot create updater script: $!"; + print UPDATER $batch_script; + close UPDATER; + } + return 0; +} + + +# UPDATE + +# compute the list of auto-install, auto-remove, forcibly-removed +# packages from the list of packages to be installed +# the list of packages passed in is already expanded +sub auto_remove_install_force_packages { + my @todo = @_; + my %removals_full; + my %forcermpkgs_full; + my %newpkgs_full; + my %new_pkgs_due_forcerm_coll; + # check for new/removed/forcibly removed packages. + # we start from the list of installed collections in the local tlpdb + # which are also present in the remote database + # and expand this list once with expand_dependencies in the local tlpdb + # and once in the tlmedia tlpdb. Then we compare the lists + # let A = set of local expansions + # B = set of remote expansions + # then we should(?) have + # B \ A set of new packages + # A \ B set of packages removed on the server + # A \cup B set of packages which should be checked for forcible removal + # + my @all_schmscolls = (); + for my $p ($localtlpdb->schemes) { + push (@all_schmscolls, $p) if defined($remotetlpdb->get_package($p)); + } + for my $p ($localtlpdb->collections) { + push (@all_schmscolls, $p) if defined($remotetlpdb->get_package($p)); + } + my @localexpansion_full = + $localtlpdb->expand_dependencies($localtlpdb, @all_schmscolls); + my @remoteexpansion_full = + $remotetlpdb->expand_dependencies($localtlpdb, @all_schmscolls); + + # compute new/remove/forcerm based on the full expansions + for my $p (@remoteexpansion_full) { + $newpkgs_full{$p} = 1; + } + for my $p (@localexpansion_full) { + delete($newpkgs_full{$p}); + $removals_full{$p} = 1; + } + for my $p (@remoteexpansion_full) { + delete($removals_full{$p}); + } + # in a first round we check only for forcibly removed collections + # this is necessary to NOT declare a package that is contained + # in a forcibly removed collections as auto-install since it appears + # in the @remoteexpansion_full, but not in @localexpansion_full. + for my $p (@localexpansion_full) { + # intersection, don't check A\B and B\A + next if $newpkgs_full{$p}; + next if $removals_full{$p}; + my $remotetlp = $remotetlpdb->get_package($p); + if (!defined($remotetlp)) { + tlwarn("Strange, $p mentioned but not found anywhere!\n"); + next; + } + next if ($remotetlp->category ne "Collection"); + my $tlp = $localtlpdb->get_package($p); + if (!defined($tlp)) { + if ($opts{"reinstall-forcibly-removed"}) { + $newpkgs_full{$p} = 1; + } else { + $forcermpkgs_full{$p} = 1; + } + } + } + # now we have in %forcermpkgs_full only collections that have been + # forcibly removed. Again, expand those against the remote tlpdb + # and remove the expanded packages from the list of localexpansion. + my @pkgs_from_forcerm_colls = + $remotetlpdb->expand_dependencies($localtlpdb, keys %forcermpkgs_full); + # + # the package in @pkgs_from_forcerm_colls would be auto-installed, so + # check for that: + for my $p (keys %newpkgs_full) { + if (member($p, @pkgs_from_forcerm_colls)) { + delete $newpkgs_full{$p}; + $new_pkgs_due_forcerm_coll{$p} = 1; + } + } + # + # now create the final list of forcerm packages by checking against + # all packages + for my $p (@localexpansion_full) { + # intersection, don't check A\B and B\A + next if $newpkgs_full{$p}; + next if $removals_full{$p}; + my $tlp = $localtlpdb->get_package($p); + if (!defined($tlp)) { + if ($opts{"reinstall-forcibly-removed"}) { + $newpkgs_full{$p} = 1; + } else { + $forcermpkgs_full{$p} = 1; + } + } + } + # + # for some packages (texworks, psview, ...) we only have w32 packages + # in the repository, but it is possible that alternative repositories + # ship binaries for some platforms (like texworks for linux on tlcontrib) + # currently updating from tlnet will remove these alternative .ARCH + # packages because they are not listed anywhere locally, so they + # are considered as disappearing. + # We remove here packages PKG.ARCH if the main package PKG is found + # here and is *not* disappearing, from the removal hash + for my $p (keys %removals_full) { + if ($p =~ m/^([^.]*)\./) { + my $mpkg = $1; + if (!defined($removals_full{$mpkg})) { + delete($removals_full{$p}); + } + } + } + # + # now take only the subset of packages that is in @todo + # note that @todo is already expanded in action_updated according + # to the --no-depends and --no-depends-at-all options + # + my %removals; + my %forcermpkgs; + my %newpkgs; + for my $p (@todo) { + $removals{$p} = 1 if defined($removals_full{$p}); + $forcermpkgs{$p} = 1 if defined($forcermpkgs_full{$p}); + $newpkgs{$p} = 1 if defined($newpkgs_full{$p}); + } + debug ("tlmgr: new pkgs: " . join("\n\t",keys %newpkgs) . "\n"); + debug ("tlmgr: deleted : " . join("\n\t",keys %removals) . "\n"); + debug ("tlmgr: forced : " . join("\n\t",keys %forcermpkgs) . "\n"); + + return (\%removals, \%newpkgs, \%forcermpkgs, \%new_pkgs_due_forcerm_coll); +} + +# tlmgr update foo +# if foo is of type Package|Documentation it will update only foo +# and the respective .ARCH dependencies +# if foo is of type Collection|Scheme it will update itself AND +# will check all depending packs of type NOT(COllection|Scheme) +# for necessary updates +# +# tlmgr update --no-depends foo +# as above, but will not check for depends of Collections/Schemes +# but it will still update .ARCH deps +# +# tlmgr update --no-depends-at-all foo +# will absolutely only update foo not even taking .ARCH into account +# +# TLPDB->install_package INSTALLS ONLY ONE PACKAGE, no deps whatsoever +# anymore. That has all to be done by hand. +# +sub machine_line { + my ($flag1) = @_; + my $ret = 0; + if ($flag1 eq "-ret") { + $ret = 1; + shift; + } + my ($pkg, $flag, $lrev, $rrev, $size, $runtime, $esttot, $tag) = @_; + $lrev ||= "-"; + $rrev ||= "-"; + $flag ||= "?"; + $size ||= "-"; + $runtime ||= "-"; + $esttot ||= "-"; + $tag ||= "-"; + my $str = join("\t", $pkg, $flag, $lrev, $rrev, $size, $runtime, $esttot, $tag); + $str .= "\n"; + return($str) if $ret; + print $str; +} + +sub upd_info { + my ($pkg, $kb, $lrev, $mrev, $txt) = @_; + my $flen = 25; + my $kbstr = ($kb >= 0 ? " [${kb}k]" : ""); + my $kbstrlen = length($kbstr); + my $pkglen = length($pkg); + my $is = sprintf("%-9s ", "$txt:"); + if ($pkglen + $kbstrlen > $flen) { + $is .= "$pkg$kbstr: "; + } else { + $is .= sprintf ('%*2$s', $pkg, -($flen-$kbstrlen)); + $is .= "$kbstr: "; + } + $is .= sprintf("local: %8s, source: %8s", + $lrev, $mrev); + info("$is\n"); +} + +sub action_update { + init_local_db(1); + $opts{"no-depends"} = 1 if $opts{"no-depends-at-all"}; + + # make a quick check on command line arguments to avoid loading + # the remote db uselessly. + # we require: + # if no --list is given: either --self or --all or <pkgs> + # if --list is given: nothing + # other options just change the behaviour + if (!($opts{"list"} || @ARGV || $opts{"all"} || $opts{"self"})) { + tlwarn("tlmgr update: specify --list, --all, --self, or a list of package names.\n"); + return; + } + + init_tlmedia_or_die(); + info("update: dry run, no changes will be made\n") if $opts{"dry-run"}; + + my @excluded_pkgs = (); + if ($opts{"exclude"}) { + @excluded_pkgs = @{$opts{"exclude"}}; + } + + if (!$opts{"list"}) { + return if !check_on_writable(); + } + + # check for updates to tlmgr and die unless either --force or --list or --self + # is given + my @critical = check_for_critical_updates($localtlpdb, $remotetlpdb); + my $dry_run_cont = $opts{"dry-run"} && ($opts{"dry-run"} < 0); + if ( !$dry_run_cont && !$opts{"self"} && @critical) { + critical_updates_warning(); + if ($opts{"force"}) { + tlwarn("$prg: Continuing due to --force.\n"); + } elsif ($opts{"list"}) { + # do not warn here + } else { + if ($::gui_mode) { + # return here and don't do any updates + return; + } else { + die "$prg: Exiting, please read above warning.\n"; + } + } + } + + my $autobackup = 0; + # check for the tlpdb option autobackup, and if present and true (!= 0) + # assume we are doing backups + if (!$opts{"backup"}) { + $autobackup = $localtlpdb->option("autobackup"); + if ($autobackup) { + # check the format, we currently allow only natural numbers, and -1 + if ($autobackup eq "-1") { + debug ("Automatic backups activated, keeping all backups.\n"); + $opts{"backup"} = 1; + } elsif ($autobackup eq "0") { + debug ("Automatic backups disabled.\n"); + } elsif ($autobackup =~ m/^[0-9]+$/) { + debug ("Automatic backups activated, keeping $autobackup backups.\n"); + $opts{"backup"} = 1; + } else { + tlwarn ("Option autobackup can only be an integer >= -1.\n"); + tlwarn ("Disabling auto backups.\n"); + $localtlpdb->option("autobackup", 0); + $autobackup = 0; + } + } + } + + # cmd line --backup, we check for --backupdir, and if that is not given + # we try to get the default from the tlpdb. If that doesn't work, exit. + if ($opts{"backup"}) { + my ($a, $b) = check_backupdir_selection(); + if (!$a) { + # in all these cases we want to terminate in the non-gui mode + tlwarn($b); + tlwarn("Exiting.\n"); + exit 1; + } + } + + # finally, if we have --backupdir, but no --backup, just enable it + $opts{"backup"} = 1 if $opts{"backupdir"}; + + info("tlmgr: saving backups to $opts{'backupdir'}\n") + if $opts{"backup"} && !$::machinereadable; + + # these two variables are used throughout this function + my $root = $localtlpdb->root; + my $temp = "$root/temp"; + + # remove old _BACKUP packages that have piled up in temp + # they can be recognized by their name starting with __BACKUP_ + for my $f (<$temp/__BACKUP_*>) { + unlink($f) unless $opts{"dry-run"}; + } + + + my @todo; + if ($opts{"list"}) { + if ($opts{"all"}) { + @todo = $localtlpdb->list_packages; + } elsif ($opts{"self"}) { + @todo = @critical; + } else { + if (@ARGV) { + @todo = @ARGV; + } else { + @todo = $localtlpdb->list_packages; + } + } + } elsif ($opts{"self"} && @critical) { + @todo = @critical; + } elsif ($opts{"all"}) { + @todo = $localtlpdb->list_packages; + } else { + @todo = @ARGV; + } + # don't do anything if we have been invoced in a strange way + if (!@todo) { + if ($opts{"self"}) { + info("tlmgr: no updates for tlmgr present.\n"); + } else { + tlwarn("tlmgr update: please specify a list of packages, --all, or --self.\n"); + } + } + + if (!($opts{"self"} && @critical) || ($opts{"self"} && $opts{"list"})) { + # update all .ARCH dependencies, too, unless $opts{"no-depends-at-all"}: + @todo = $remotetlpdb->expand_dependencies("-only-arch", $localtlpdb, @todo) + unless $opts{"no-depends-at-all"}; + # + # update general deps unless $opts{"no-depends"}: + @todo = $remotetlpdb->expand_dependencies("-no-collections",$localtlpdb,@todo) + unless $opts{"no-depends"}; + # + # filter out critical packages + @todo = grep (!m/$CriticalPackagesRegexp/, @todo) + unless $opts{"list"}; + } + + my ($remref, $newref, $forref, $new_due_to_forcerm_coll_ref) = + auto_remove_install_force_packages(@todo); + my %removals = %$remref; + my %forcermpkgs = %$forref; + my %newpkgs = %$newref; + my %new_due_to_forcerm_coll = %$new_due_to_forcerm_coll_ref; + + # check that the --exclude options do not conflict with the + # options --no-auto-remove, --no-auto-install, --reinstall-forcibly-removed + my @option_conflict_lines = (); + my $in_conflict = 0; + if (!$opts{"no-auto-remove"} && $config{"auto-remove"}) { + for my $pkg (keys %removals) { + for my $ep (@excluded_pkgs) { + if ($pkg eq $ep || $pkg =~ m/^$ep\./) { + push @option_conflict_lines, "$pkg: excluded but scheduled for auto-removal\n"; + $in_conflict = 1; + last; # of the --exclude for loop + } + } + } + } + if (!$opts{"no-auto-install"}) { + for my $pkg (keys %newpkgs) { + for my $ep (@excluded_pkgs) { + if ($pkg eq $ep || $pkg =~ m/^$ep\./) { + push @option_conflict_lines, "$pkg: excluded but scheduled for auto-install\n"; + $in_conflict = 1; + last; # of the --exclude for loop + } + } + } + } + if ($opts{"reinstall-forcibly-removed"}) { + for my $pkg (keys %forcermpkgs) { + for my $ep (@excluded_pkgs) { + if ($pkg eq $ep || $pkg =~ m/^$ep\./) { + push @option_conflict_lines, "$pkg: excluded but scheduled for reinstall\n"; + $in_conflict = 1; + last; # of the --exclude for loop + } + } + } + } + if ($in_conflict) { + tlwarn("Conflicts have been found:\n"); + for (@option_conflict_lines) { tlwarn(" $_"); } + tlwarn("Please resolve these conflicts!\n"); + exit 1; + } + + # + # we first collect the list of packages to be actually updated or installed + my %updated; + my @new; + my @addlines; + + TODO: foreach my $pkg (sort @todo) { + next if ($pkg =~ m/^00texlive/); + for my $ep (@excluded_pkgs) { + if ($pkg eq $ep || $pkg =~ m/^$ep\./) { + info("Skipping excluded package $pkg\n"); + next TODO; + } + } + my $tlp = $localtlpdb->get_package($pkg); + if (!defined($tlp)) { + # if the user has forcibly removed (say) bin-makeindex, then the + # loop above has no way to add bin-makeindex.ARCH into the + # %forcermpkgs hash, but the .ARCH will still be in the dependency + # expansion. So try both with and without the .ARCH extension. + (my $pkg_noarch = $pkg) =~ s/\.[^.]*$//; + my $forcerm_coll = $forcermpkgs{$pkg} || $forcermpkgs{$pkg_noarch}; + + # similarly for new packages. If latexmk is new, latexmk.ARCH + # will be in the dependency expansion, and we want it. + my $newpkg_coll = $newpkgs{$pkg} || $newpkgs{$pkg_noarch}; + if ($forcerm_coll) { + if ($::machinereadable) { + # TODO should we add a revision number + push @addlines, + machine_line("-ret", $pkg, $FLAG_FORCIBLE_REMOVED, "-", "-", "-"); + } else { + info("skipping forcibly removed package $pkg\n"); + } + next; + } elsif ($newpkg_coll) { + # do nothing here, it will be reported below. + } elsif (defined($removals{$pkg})) { + # skipping this package, it has been removed due to server removal + # and has already been removed + next; + } elsif (defined($new_due_to_forcerm_coll{$pkg})) { + debug("tlmgr: $pkg seems to be contained in a forcibly removed" . + " collection, not auto-installing it!\n"); + next; + } else { + tlwarn("\ntlmgr: $pkg mentioned, but neither new nor forcibly removed\n"); + next; + } + # install new packages + my $mediatlp = $remotetlpdb->get_package($pkg); + if (!defined($mediatlp)) { + tlwarn("\nShould not happen: $pkg not found in $location\n"); + next; + } + my $mediarev = $mediatlp->revision; + push @new, $pkg; + next; + } + my $rev = $tlp->revision; + my $mediatlp; + my $maxtag; + if ($remotetlpdb->is_virtual) { + ($maxtag, undef, $mediatlp, undef) = + $remotetlpdb->virtual_candidate($pkg); + } else { + $mediatlp = $remotetlpdb->get_package($pkg); + } + if (!defined($mediatlp)) { + debug("$pkg cannot be found in $location\n"); + next; + } + my $mediarev = $mediatlp->revision; + my $mediarevstr = $mediarev; + my @addargs = (); + if ($remotetlpdb->is_virtual) { + push @addargs, $maxtag; + $mediarevstr .= "\@$maxtag"; + } + if ($rev < $mediarev) { + $updated{$pkg} = 0; # will be changed to one on successful update + } elsif ($rev > $mediarev) { + if ($::machinereadable) { + push @addlines, + machine_line("-ret", $pkg, $FLAG_REVERSED_UPDATE, $rev, $mediarev, "-", @addargs); + } else { + if ($opts{"list"}) { + # not issueing anything if we keep a package + upd_info($pkg, -1, $rev, $mediarevstr, "keep"); + } + } + } + } + my @updated = sort keys %updated; + for my $i (sort @new) { + debug("$i new package\n"); + } + for my $i (@updated) { + debug("$i upd package\n"); + } + + # number calculation + # without w32 special packages, those are dealt with in the updater batch + # script + my $totalnr = $#updated + 1; + my @alltodo = @updated; + my $nrupdated = 0; + my $currnr = 1; + + # we have to remove all the stuff before we install other packages + # to support moving of files from one package to another. + # remove the packages that have disappeared: + # we add that only to the list of total packages do be worked on + # when --all is given, because we remove packages only on --all + if (!$opts{"no-auto-remove"} && $config{"auto-remove"}) { + my @foo = keys %removals; + $totalnr += $#foo + 1; + } + if (!$opts{"no-auto-install"}) { + $totalnr += $#new + 1; + push @alltodo, @new; + } + + # sizes_of_packages returns the sizes of *all* packages if nothing + # is passed over, so if @new and @updated both are empty we will + # get something wrong back, namely the total size of all packages + # the third argument is undef to compute *all* platforms + my %sizes; + if (@alltodo) { + %sizes = %{$remotetlpdb->sizes_of_packages( + $localtlpdb->option("install_srcfiles"), + $localtlpdb->option("install_docfiles"), undef, @alltodo)}; + } else { + $sizes{'__TOTAL__'} = 0; + } + + print "total-bytes\t$sizes{'__TOTAL__'}\n" if $::machinereadable; + print "end-of-header\n" if $::machinereadable; + + # print deferred machine-readable lines after the header + for (@addlines) { print; } + + # + # compute the list of moved files from %removals, @new, @updated + # + my %do_warn_on_move; + { + # keep all these vars local to this block + my @removals = keys %removals; + my %old_files_to_pkgs; + my %new_files_to_pkgs; + # first save for each file in the currently installed packages + # to be updated the packages it is contained it (might be more!) + # + for my $p (@updated, @removals) { + my $pkg = $localtlpdb->get_package($p); + tlwarn("Should not happen: $p not found in local tlpdb\n") if (!$pkg); + next; + for my $f ($pkg->all_files) { + push @{$old_files_to_pkgs{$f}}, $p; + } + } + for my $p (@updated, @new) { + my $pkg = $remotetlpdb->get_package($p); + tlwarn("Should not happen: $p not found in $location\n") if (!$pkg); + next; + for my $f ($pkg->all_files) { + if ($pkg->relocated) { + $f =~ s:^$RelocPrefix/:$RelocTree/:; + } + push @{$new_files_to_pkgs{$f}}, $p; + } + } + # + # the idea of supressing warnings is simply that if a file is present + # in more than one package either in the beginning or after a full + # update then this should give a warning. In all other cases + # the warning should be supressed. + for my $f (keys %old_files_to_pkgs) { + my @a = @{$old_files_to_pkgs{$f}}; + $do_warn_on_move{$f} = 1 if ($#a > 0) + } + for my $f (keys %new_files_to_pkgs) { + my @a = @{$new_files_to_pkgs{$f}}; + $do_warn_on_move{$f} = 1 if ($#a > 0) + } + } + + # parameters for field width + my $totalnrdigits = length("$totalnr"); + + # + # ORDER OF PACKAGE ACTIONS + # 1. removals + # 2. updates + # 3. auto-install + # that way if a file has been moved from one to another package it + # removing the old version after the new package has been installed + # will not give a warning about files being included somewhere else + # + + # + # REMOVALS + # + for my $p (keys %removals) { + if ($opts{"no-auto-remove"} || !$config{"auto-remove"}) { + info("not removing $p due to -no-auto-remove or config file option (removed on server)\n"); + } else { + &ddebug("removing package $p\n"); + my $pkg = $localtlpdb->get_package($p); + if (! $pkg) { + # This happened when a collection was removed by the user, + # and then renamed on the server, e.g., collection-langarab -> + # collection-langarabic; Luecking report 20 July 2009. + &ddebug(" get_package($p) failed, ignoring"); + next; + } + my $rev = $pkg->revision; + if ($opts{"list"}) { + if ($::machinereadable) { + machine_line($p, $FLAG_REMOVE, $rev, "-", "-", "-"); + } else { + upd_info($p, -1, $rev, "<absent>", "autorm"); + } + $currnr++; + } else { + # new we are sure that: + # - $opts{"no-auto-remove"} is *not* set + # - $opts{"list"} is *not* set + # we have to check in addition that + # - $opts{"dry-run"} is not set + if ($::machinereadable) { + machine_line($p, $FLAG_REMOVE, $rev, "-", "-", "-"); + } else { + info("[" . sprintf ('%*2$s', $currnr, $totalnrdigits) . + "/$totalnr] auto-remove: $p ... "); + } + if (!$opts{"dry-run"}) { + if ($opts{"backup"}) { + $pkg->make_container("xz", $root, + $opts{"backupdir"}, + "${p}.r" . $pkg->revision, + $pkg->relocated); + if ($autobackup) { + # in case we do auto backups we remove older backups + clear_old_backups($p, $opts{"backupdir"}, $autobackup); + } + } + $localtlpdb->remove_package($p); + logpackage("remove: $p"); + } + info("done\n") unless $::machinereadable; + $currnr++; + } + } + } + + + my $starttime = time(); + my $donesize = 0; + my $totalsize = $sizes{'__TOTAL__'}; + + + # + # UPDATES AND NEW PACKAGES + # + # order: + # - update normal packages + # - install new normal packages + # - update collections + # - install new collections + # - update schemes + # - install new schemes (? will not happen?) + # + # this makes sure that only if all depending packages are installed + # the collection is updated, which in turn makes sure that + # if the installation of a new package does break it will not be + # counted as forcibly removed later on. + # + my @inst_packs; + my @inst_colls; + my @inst_schemes; + for my $pkg (@updated) { + # we do name checking here, not to load all tlpobj again and again + if ($pkg =~ m/^scheme-/) { + push @inst_schemes, $pkg; + } elsif ($pkg =~ m/^collection-/) { + push @inst_colls, $pkg; + } else { + push @inst_packs, $pkg; + } + } + @inst_packs = sort packagecmp @inst_packs; + + my @new_packs; + my @new_colls; + my @new_schemes; + for my $pkg (sort @new) { + # we do name checking here, not to load all tlpobj again and again + if ($pkg =~ m/^scheme-/) { + push @new_schemes, $pkg; + } elsif ($pkg =~ m/^collection-/) { + push @new_colls, $pkg; + } else { + push @new_packs, $pkg; + } + } + @new_packs = sort packagecmp @new_packs; + my %is_new; + for my $pkg (@new_packs, @new_colls, @new_schemes) { + $is_new{$pkg} = 1; + } + + # + # TODO idea + # currently this big loop contains a long if then for new packages + # and updated package. That *could* be merged into one so that + # some things like the logging has not been written two times. + # OTOH, the control flow in the "new package" part is much simpler + # and following it after the change would make it much harder + # + foreach my $pkg (@inst_packs, @new_packs, @inst_colls, @new_colls, @inst_schemes, @new_schemes) { + + if (!$is_new{$pkg}) { + # skip this loop if infra update on w32 + next if ($pkg =~ m/^00texlive/); + my $tlp = $localtlpdb->get_package($pkg); + # we checked already that this package is present! + # but our checks seem to be wrong, no idea why + # ahhh, it seems that it can happen due to a stupid incident, a bug + # on the server: + # - remove a package from a collection + # - at the same time increase its version number + # then what happens is: + # - first the package is removed (auto-remove!) + # - then it is tried to be updated here, which is not working! + # report that and ask for report + if (!defined($tlp)) { + tlwarn("tlmgr: inconsistency on the server:\n"); + tlwarn("tlmgr: tlp for package $pkg cannot be found, please report.\n"); + next; + } + my $unwind_package; + my $remove_unwind_container = 0; + my $rev = $tlp->revision; + my $mediatlp; + my $maxtag; + if ($remotetlpdb->is_virtual) { + ($maxtag, undef, $mediatlp, undef) = + $remotetlpdb->virtual_candidate($pkg); + } else { + $mediatlp = $remotetlpdb->get_package($pkg); + } + if (!defined($mediatlp)) { + debug("$pkg cannot be found in $location\n"); + next; + } + my $mediarev = $mediatlp->revision; + my $mediarevstr = $mediarev; + my @addargs = (); + if ($remotetlpdb->is_virtual) { + push @addargs, $maxtag; + $mediarevstr .= "\@$maxtag"; + } + $nrupdated++; + if ($opts{"list"}) { + if ($::machinereadable) { + machine_line($pkg, $FLAG_UPDATE, $rev, $mediarev, $sizes{$pkg}, "-", "-", @addargs); + } else { + my $kb = int($sizes{$pkg} / 1024) + 1; + upd_info($pkg, $kb, $rev, $mediarevstr, "update"); + if ($remotetlpdb->is_virtual) { + my @cand = $remotetlpdb->candidates($pkg); + shift @cand; # remove the top element + if (@cand) { + print "\tother candidates: "; + for my $a (@cand) { + my ($t,$r) = split(/\//, $a, 2); + print $r . '@' . $t . " "; + } + print "\n"; + } + } + } + $updated{$pkg} = 1; + next; + } elsif (win32() && ($pkg =~ m/$CriticalPackagesRegexp/)) { + # we pretend that the update happened + # in order to calculate file changes properly + $updated{$pkg} = 1; + next; + } + + # older tlmgr forgot to clear the relocated bit when saving a tlpobj + # into the local tlpdb, although the paths were rewritten. + # We have to clear this bit otherwise the make_container calls below + # for creating an unwind container will create some rubbish + # TODO for user mode we should NOT clear this bit! + if ($tlp->relocated) { + debug("tlmgr: warn, relocated bit set for $pkg, but that is wrong!\n"); + $tlp->relocated(0); + } + + if ($opts{"backup"} && !$opts{"dry-run"}) { + $tlp->make_container("xz", $root, + $opts{"backupdir"}, "${pkg}.r" . $tlp->revision, + $tlp->relocated); + $unwind_package = + "$opts{'backupdir'}/${pkg}.r" . $tlp->revision . ".tar.xz"; + + if ($autobackup) { + # in case we do auto backups we remove older backups + clear_old_backups($pkg, $opts{"backupdir"}, $autobackup); + } + } + + my ($estrem, $esttot); + if (!$opts{"list"}) { + ($estrem, $esttot) = TeXLive::TLUtils::time_estimate($totalsize, + $donesize, $starttime); + } + + if ($::machinereadable) { + machine_line($pkg, $FLAG_UPDATE, $rev, $mediarev, $sizes{$pkg}, $estrem, $esttot, @addargs); + } else { + my $kb = int ($sizes{$pkg} / 1024) + 1; + info("[" . sprintf ('%*2$s', $currnr, $totalnrdigits) . + "/$totalnr, $estrem/$esttot] update: $pkg [${kb}k] ($rev -> $mediarevstr)"); + } + $donesize += $sizes{$pkg}; + $currnr++; + + if ($opts{"dry-run"}) { + info("\n") unless $::machinereadable; + $updated{$pkg} = 1; + next; + } else { + info(" ... ") unless $::machinereadable; # more to come + } + + if (!$unwind_package) { + # no backup was made, so let us create a temporary .tar file + # of the package + my $tlp = $localtlpdb->get_package($pkg); + my ($s, $m, $fullname) = $tlp->make_container("tar", $root, $temp, + "__BACKUP_${pkg}.r" . $tlp->revision, + $tlp->relocated); + if ($s <= 0) { + tlwarn("\n$prg: Creation of backup container of $pkg failed.\n"); + tlwarn("Continuing to update other packages, please retry...\n"); + # we should try to update other packages at least + next; + } + $remove_unwind_container = 1; + $unwind_package = "$fullname"; + } + # first remove the package, then reinstall it + # this way we get rid of useless files + # force the deinstallation since we will reinstall it + # + # the remove_package should also remove empty dirs in case + # a dir is changed into a file + if ($pkg =~ m/$CriticalPackagesRegexp/) { + debug("Not removing critical package $pkg\n"); + } else { + $localtlpdb->remove_package($pkg, + "remove-warn-files" => \%do_warn_on_move); + } + if ($remotetlpdb->install_package($pkg, $localtlpdb)) { + # installation succeeded because we got a reference + logpackage("update: $pkg ($rev -> $mediarevstr)"); + unlink($unwind_package) if $remove_unwind_container; + # remember successful update + $updated{$pkg} = 1; + # + # if we updated a .ARCH package we have to announce the postactions + # of the parent package so that formats are rebuild + if ($pkg =~ m/^([^.]*)\./) { + my $parent = $1; + if (!TeXLive::TLUtils::member($parent, @inst_packs, @new_packs, @inst_colls, @new_colls, @inst_schemes, @new_schemes)) { + # ok, nothing happens with the parent package, so we have to + # find it and execute the postactions + my $parentobj = $localtlpdb->get_package($parent); + if (!defined($parentobj)) { + # well, in this case we might have hit a package that only + # has .ARCH package, like psv.win32, so do nothing + debug("tlmgr: .ARCH package without parent, not announcing postaction\n"); + } else { + debug("tlmgr: announcing parent execute action for $pkg\n"); + TeXLive::TLUtils::announce_execute_actions("enable", $parentobj); + } + } + } + } else { + # install_package returned a scalar, so error. + # now in fact we should do some cleanup, removing files and + # dirs from the new package before re-installing the old one. + # TODO + logpackage("failed update: $pkg ($rev -> $mediarevstr)"); + tlwarn("\n\nInstallation of new version of $pkg did fail, trying to unwind.\n"); + if (win32()) { + # w32 is notorious for not releasing a file immediately + # we experienced permission denied errors + my $newname = $unwind_package; + $newname =~ s/__BACKUP/___BACKUP/; + copy ("-f", $unwind_package, $newname); + # try to remove the file if has been created by us + unlink($unwind_package) if $remove_unwind_container; + # and make sure that the temporary file is removed in any case + $remove_unwind_container = 1; + $unwind_package = $newname; + } + my $instret = TeXLive::TLPDB->_install_package("$unwind_package", 0, + [], $localtlpdb); + if ($instret) { + # now we have to include the tlpobj + my $tlpobj = TeXLive::TLPOBJ->new; + $tlpobj->from_file($root . "/tlpkg/tlpobj/$pkg.tlpobj"); + $localtlpdb->add_tlpobj($tlpobj); + $localtlpdb->save; + logpackage("restore: $pkg ($rev)"); + tlwarn("Restoring old package state succeeded.\n"); + } else { + logpackage("failed restore: $pkg ($rev)"); + tlwarn("Restoring of old package did NOT succeed.\n"); + tlwarn("Most likely repair: run tlmgr install $pkg and hope.\n"); + } + unlink($unwind_package) if $remove_unwind_container; + } + info("done\n") unless $::machinereadable; + } else { # $is_new{$pkg} is true!!! + # + # NEW PACKAGES + # + if ($opts{"no-auto-install"}) { + info("not auto-installing $pkg due to -no-auto-install (new on server)\n") + unless $::machinereadable; + } else { + # install new packages + my $mediatlp; + my $maxtag; + if ($remotetlpdb->is_virtual) { + ($maxtag, undef, $mediatlp, undef) = + $remotetlpdb->virtual_candidate($pkg); + } else { + $mediatlp = $remotetlpdb->get_package($pkg); + } + if (!defined($mediatlp)) { + tlwarn("\nShould not happen: $pkg not found in $location\n"); + next; + } + my $mediarev = $mediatlp->revision; + my $mediarevstr = $mediarev; + my @addargs; + if ($remotetlpdb->is_virtual) { + $mediarevstr .= "\@$maxtag"; + push @addargs, $maxtag; + } + my ($estrem, $esttot); + if (!$opts{"list"}) { + ($estrem, $esttot) = TeXLive::TLUtils::time_estimate($totalsize, + $donesize, $starttime); + } + if ($::machinereadable) { + my @maargs = ($pkg, $FLAG_AUTOINSTALL, "-", $mediatlp->revision, $sizes{$pkg}); + if (!$opts{"list"}) { + push @maargs, $estrem, $esttot; + } else { + push @maargs, undef, undef; + } + machine_line(@maargs, @addargs); + } else { + my $kb = int($sizes{$pkg} / 1024) + 1; + if ($opts{"list"}) { + upd_info($pkg, $kb, "<absent>", $mediarevstr, "autoinst"); + } else { + info("[$currnr/$totalnr, $estrem/$esttot] auto-install: $pkg ($mediarevstr) [${kb}k] ... "); + } + } + $currnr++; + $donesize += $sizes{$pkg}; + next if ($opts{"dry-run"} || $opts{"list"}); + if ($remotetlpdb->install_package($pkg, $localtlpdb)) { + # installation succeeded because we got a reference + logpackage("auto-install new: $pkg ($mediarevstr)"); + $nrupdated++; + info("done\n") unless $::machinereadable; + } else { + tlwarn("$prg: couldn't install new package $pkg\n"); + } + } + } + } + + # + # special check for depending format updates: + # if one of latex or tex has been updated, we rebuild the formats + # defined in packages *depending* on these packages. + if (!$opts{"list"}) { + TeXLive::TLUtils::announce_execute_actions("latex-updated") if ($updated{"latex"}); + TeXLive::TLUtils::announce_execute_actions("tex-updated") if ($updated{"tex"}); + } + + print "end-of-updates\n" if $::machinereadable; + + # + # check that if updates to the critical packages are present all of + # them have been successfully updated + my $infra_update_done = 1; + my @infra_files_to_be_removed; + if ($opts{"list"}) { + $infra_update_done = 0; + } else { + for my $pkg (@critical) { + next unless (defined($updated{$pkg})); + $infra_update_done &&= $updated{$pkg}; + my $oldtlp; + my $newtlp; + if ($updated{$pkg}) { + $oldtlp = $localtlpdb->get_package($pkg); + $newtlp = $remotetlpdb->get_package($pkg); + } else { + # update failed but we could introduce new files, that + # should be removed now as a part of restoring backup + $oldtlp = $remotetlpdb->get_package($pkg); + $newtlp = $localtlpdb->get_package($pkg); + } + die ("That shouldn't happen: $pkg not found in tlpdb") if !defined($newtlp); + die ("That shouldn't happen: $pkg not found in tlpdb") if !defined($oldtlp); + my @old_infra_files = $oldtlp->all_files; + my @new_infra_files = $newtlp->all_files; + my %del_files; + @del_files{@old_infra_files} = (); + delete @del_files{@new_infra_files}; + for my $k (keys %del_files) { + my @found_pkgs = $localtlpdb->find_file($k); + if ($#found_pkgs >= 0) { + my $bad_file = 1; + if (win32()) { + # on w32 the packages have not been removed already, + # so we check that the only package listed in @found_pkgs + # is the one we are working on ($pkg) + if ($#found_pkgs == 0 && $found_pkgs[0] =~ m/^$pkg:/) { + # only one package has been returned and it + # matches the current package followed by a colon + # remember the TLPDB->find_file returns + # $pkg:$file + # in this case we can ignore it + $bad_file = 0; + } + } + if ($bad_file) { + tlwarn("The file $k has disappeared from the critical" . + "package $pkg but is still present in @found_pkgs\n"); + } else { + push @infra_files_to_be_removed, $k; + } + } else { + push @infra_files_to_be_removed, $k; + } + } + } + + if (!win32()) { + for my $f (@infra_files_to_be_removed) { + # TODO actually unlink the stuff + #unlink("$Master/$f"); + debug("removing disappearing file $f\n"); + } + } + } # end of if ($opts{"list"}) ... else part + + # check if any additional updates are asked for + my $other_updates_asked_for = 0; + if ($opts{"all"}) { + $other_updates_asked_for = 1; + } else { + foreach my $p (@ARGV) { + if ($p !~ m/$CriticalPackagesRegexp/) { + $other_updates_asked_for = 1; + last; + } + } + } + + my $restart_tlmgr = 0; + if ($opts{"self"} && @critical && + $infra_update_done && $other_updates_asked_for) { + # weed out the --self argument from the saved arguments + @::SAVEDARGV = grep (!m/^-?-self$/, @::SAVEDARGV); + $restart_tlmgr = 1; + } + + # infra update and tlmgr restart on w32 is done by the updater batch script + if (win32() && !$opts{"list"} && @critical) { + info("Preparing TeX Live infrastructure update...\n"); + for my $f (@infra_files_to_be_removed) { + debug("file scheduled for removal $f\n"); + } + my $ret = write_w32_updater($restart_tlmgr, + \@infra_files_to_be_removed, @critical); + if ($ret) { + tlwarn ("Aborting infrastructure update.\n"); + $restart_tlmgr = 0 if ($opts{"dry-run"}); + } + } + + # only when we are not dry-running we restart the program + if (!win32() && $restart_tlmgr && !$opts{"dry-run"} && !$opts{"list"}) { + info ("Restarting tlmgr to complete update ...\n"); + debug("restarting tlmgr @::SAVEDARGV\n"); + exec("tlmgr", @::SAVEDARGV); + die "cannot restart tlmgr, please retry update"; + } + + # for --dry-run we cannot restart tlmgr (no way to fake successful infra update) + # instead we call action_update() again and signal this by $opts{"dry-run"} = -1 + if ($opts{"dry-run"} && !$opts{"list"} && $restart_tlmgr) { + $opts{"self"} = 0; + $opts{"dry-run"} = -1; + $localtlpdb = undef; + $remotetlpdb = undef; + info ("Restarting tlmgr to complete update ...\n"); + action_update(); + return; + } + + # if a real update from default disk location didn't find anything, + # warn if nothing is updated. + if (!(@new || @updated)) { + info("tlmgr: no updates available\n"); + if ($remotetlpdb->media ne "NET" + && $remotetlpdb->media ne "virtual" + && !$opts{"dry-run"} + && !$opts{"repository"} + ) { + tlwarn(<<END_DISK_WARN); +tlmgr: Your installation is set up to look on the disk for updates. +To install from the Internet for this one time only, run: + tlmgr -repository $TeXLiveURL ACTION ARG... +where ACTION is install, update, etc.; see tlmgr -help if needed. + +To change the default for all future updates, run: + tlmgr option repository $TeXLiveURL +END_DISK_WARN + } + } +} + + +# INSTALL +# +# tlmgr install foo bar baz +# will create the closure under dependencies of {foo,bar,baz}, i.e. all +# dependencies recursively down to the last package, and install all +# the packages that are necessary +# +# tlmgr install --no-depends foo bar baz +# will *only* install these three packages (if they are not already installed +# but it will STILL INSTALL foo.ARCH if they are necessary. +# +# tlmgr install --no-depends-at-all foo bar baz +# will absolutely only install these three packages, and will not even +# take .ARCH deps into account +# +# tlmgr install --reinstall ... +# behaves exactely like without --reinstall BUT the following two +# differences: +# . dependencies are not expanded from collection to collection, so +# if you reinstall a collection then all its dependencies of type +# Package will be reinstalled, too, but not the dependencies on +# other collection, because that would force the full reinstallation +# of the whole installation +# . it does not care for whether a package seems to be installed or +# not (that is the --reinstall) +# +# TLPDB->install_package does ONLY INSTALL ONE PACKAGE, no deps whatsoever +# anymore! That has all to be done by the caller. +# +sub action_install { + init_local_db(1); + return if !check_on_writable(); + # initialize the TLPDB from $location + $opts{"no-depends"} = 1 if $opts{"no-depends-at-all"}; + init_tlmedia_or_die(); + + # check for updates to tlmgr itself, and die unless --force is given + if (check_for_critical_updates( $localtlpdb, $remotetlpdb)) { + critical_updates_warning(); + if ($opts{"force"}) { + tlwarn("Continuing due to --force\n"); + } else { + if ($::gui_mode) { + # return here and don't do any updates + return; + } else { + die "tlmgr: Not continuing, please see warning above!\n"; + } + } + } + + # + # installation from a .tar.xz + if ($opts{"file"}) { + return $localtlpdb->install_package_files(@ARGV); + } + + $opts{"no-depends"} = 1 if $opts{"no-depends-at-all"}; + info("install: dry run, no changes will be made\n") if $opts{"dry-run"}; + + my @packs = @ARGV; + # first expand the .ARCH dependencies unless $opts{"no-depends-at-all"} + @packs = $remotetlpdb->expand_dependencies("-only-arch", $localtlpdb, @ARGV) unless $opts{"no-depends-at-all"}; + # now expand all others unless $opts{"no-depends"} + # if $opts{"reinstall"} do not collection->collection dependencies + if ($opts{"reinstall"}) { + @packs = $remotetlpdb->expand_dependencies("-no-collections", $localtlpdb, @packs) unless $opts{"no-depends"}; + } else { + @packs = $remotetlpdb->expand_dependencies($localtlpdb, @packs) unless $opts{"no-depends"}; + } + # + # expand dependencies returns a list pkg@tag in case of a virtual + # remote db. + my %packs; + for my $p (@packs) { + my ($pp, $aa) = split('@', $p); + $packs{$pp} = (defined($aa) ? $aa : 0); + } + # + # installation order of packages: + # first all normal packages, then collections, then schemes + # isn't already installed, but the collection already updated, it will + # be reported as forcibly removed. + my @inst_packs; + my @inst_colls; + my @inst_schemes; + for my $pkg (sort keys %packs) { + # we do name checking here, not to load all tlpobj again and again + if ($pkg =~ m/^scheme-/) { + push @inst_schemes, $pkg; + } elsif ($pkg =~ m/^collection-/) { + push @inst_colls, $pkg; + } else { + push @inst_packs, $pkg; + } + } + @inst_packs = sort packagecmp @inst_packs; + + my $starttime = time(); + # count packages + my $totalnr = 0; + my %revs; + my @todo; + for my $pkg (@inst_packs, @inst_colls, @inst_schemes) { + my $pkgrev = 0; + # if the package name is asked from a specific repository, use + # that one, otherwise leave the decision to $remotetlpdb by not + # giving a final argument + my $mediatlp = $remotetlpdb->get_package($pkg, + ($packs{$pkg} ? $packs{$pkg} : undef)); + if (!defined($mediatlp)) { + tlwarn("package $pkg not present in package repository.\n"); + next; + } + if (defined($localtlpdb->get_package($pkg))) { + if ($opts{"reinstall"}) { + $totalnr++; + $revs{$pkg} = $mediatlp->revision; + push @todo, $pkg; + } else { + debug("already installed: $pkg\n"); + } + } else { + $totalnr++; + $revs{$pkg} = $mediatlp->revision; + push @todo, $pkg; + } + } + # return if there is nothing to install! + return if (!@todo); + + my $currnr = 1; + # undef here is a ref to array of platforms, if undef all are used + my %sizes = %{$remotetlpdb->sizes_of_packages( + $localtlpdb->option("install_srcfiles"), + $localtlpdb->option("install_docfiles"), undef, @todo)}; + defined($sizes{'__TOTAL__'}) || ($sizes{'__TOTAL__'} = 0); + my $totalsize = $sizes{'__TOTAL__'}; + my $donesize = 0; + + print "total-bytes\t$sizes{'__TOTAL__'}\n" if $::machinereadable; + print "end-of-header\n" if $::machinereadable; + + foreach my $pkg (@todo) { + my $flag = $FLAG_INSTALL; + my $re = ""; + if (defined($localtlpdb->get_package($pkg))) { + if ($opts{"reinstall"}) { + $re = "re"; + $flag = $FLAG_REINSTALL; + } else { + debug("already installed (but didn't we say that already?): $pkg\n"); + next; + } + } + my ($estrem, $esttot) = TeXLive::TLUtils::time_estimate($totalsize, + $donesize, $starttime); + my $kb = int($sizes{$pkg} / 1024) + 1; + my @addargs = (); + my $tagstr = ""; + if ($remotetlpdb->is_virtual) { + if ($packs{$pkg} ne "0") { + push @addargs, $packs{$pkg}; + $tagstr = " \@" . $packs{$pkg}; + } else { + my ($maxtag,undef,undef,undef) = $remotetlpdb->virtual_candidate($pkg); + push @addargs, $maxtag; + $tagstr = " \@" . $maxtag; + } + } + if ($::machinereadable) { + machine_line($pkg, $flag, "-", $revs{$pkg}, $sizes{$pkg}, $estrem, $esttot, @addargs); + } else { + info("[$currnr/$totalnr, $estrem/$esttot] ${re}install: $pkg$tagstr [${kb}k]\n"); + } + if (!$opts{"dry-run"}) { + $remotetlpdb->install_package($pkg, $localtlpdb, + ($packs{$pkg} ? $packs{$pkg} : undef) ); + logpackage("${re}install: $pkg$tagstr"); + } + $donesize += $sizes{$pkg}; + $currnr++; + } + print "end-of-updates\n" if $::machinereadable; + if ($opts{"dry-run"}) { + # stop here, don't do any postinstall actions + return(0); + } +} + +sub show_list_of_packages { + init_local_db(); + # make sure that the @ARGV hash is not changed in case we switch to + # show mode + my ($what) = @_; + $what = "" if !$what; + my $tlm; + if ($opts{"only-installed"}) { + $tlm = $localtlpdb; + } else { + init_tlmedia_or_die(); + $tlm = $remotetlpdb; + } + my @whattolist; + if ($what =~ m/^collections/i) { + @whattolist = $tlm->collections; + } elsif ($what =~ m/^schemes/i) { + @whattolist = $tlm->schemes; + } else { + if ($tlm->is_virtual) { + @whattolist = $tlm->list_packages("-all"); + } else { + @whattolist = $tlm->list_packages; + } + } + foreach (@whattolist) { + next if ($_ =~ m/^00texlive/); + if (defined($localtlpdb->get_package($_))) { + print "i "; + } else { + print " "; + } + my $tlp = $tlm->get_package($_); + if (!$tlp) { + if ($remotetlpdb->is_virtual) { + # we might have the case that a package is present in a + # subsidiary repository, but not pinned, so it will + # not be found by ->get_package + # In this case we list all repositories shipping it, + # but warn that it is not pinned and thus not reachable. + my @cand = $remotetlpdb->candidates($_); + if (@cand) { + my $first = shift @cand; + if (defined($first)) { + tlwarn("strange, we have a first candidate but no tlp: $_\n"); + next; + } + # already shifted away the first element + if ($#cand >= 0) { + print "$_: --- no installable candidate found, \n"; + print " but present in subsidiary repositories without a pin.\n"; + print " This package is not reachable without pinning.\n"; + print " Repositories containing this package:\n"; + for my $a (@cand) { + my ($t,$r) = split(/\//, $a, 2); + my $tlp = $remotetlpdb->get_package($_, $t); + my $foo = $tlp->shortdesc; + print " $t: ", defined($foo) ? $foo : "(shortdesc missing)" , "\n"; + } + next; + } else { + tlwarn("strange, package listed but no residual candidates: $_\n"); + next; + } + } else { + tlwarn("strange, package listed but no candidates: $_\n"); + next; + } + } else { + tlwarn("strange, package cannot be found in remote tlpdb: $_\n"); + next; + } + } + my $foo = $tlp->shortdesc; + print "$_: ", defined($foo) ? $foo : "(shortdesc missing)" , "\n"; + } + return; +} + +# PINNING +# +# this action manages the pinning file +# of course it can be edited by hand, but we want to make this +# easier for people to use +# tlmgr pinning show +# tlmgr pinning check +# tlmgr pinning add <repo> <pkgglob> [<pkgglob> ...] +# tlmgr pinning remove <repo> <pkgglob> [<pkgglob> ...] +# tlmgr pinning remove <repo> --all +sub action_pinning { + my $what = shift @ARGV; + $what || ($what = 'show'); + init_local_db(); + init_tlmedia_or_die(); + if (!$remotetlpdb->is_virtual) { + tlwarn("$prg: only one repository configured, " + . "pinning actions not supported.\n"); + return; + } + my $pinref = $remotetlpdb->virtual_pindata(); + my $pf = $remotetlpdb->virtual_pinning(); + + if ($what =~ m/^show$/i) { + my @pins = @$pinref; + if (!@pins) { + tlwarn("$prg: no pinning data present.\n"); + return 0; + } + info("$prg: this pinning data is defined:\n"); + for my $p (@pins) { + info(" ", $p->{'repo'}, ":", $p->{'glob'}, "\n"); + } + return 1; + + } elsif ($what =~ m/^check$/i) { + tlwarn("$prg: not implemented yet, sorry!\n"); + return 0; + + } elsif ($what =~ m/^add$/i) { + # we need at least two more arguments + if (@ARGV < 2) { + tlwarn("$prg: need at least two arguments to pinning add\n"); + return; + } + my $repo = shift @ARGV; + my @new = (); + my @ov = $pf->value($repo); + for my $n (@ARGV) { + if (member($n, @ov)) { + info("$prg: already pinned to $repo: $n\n"); + } else { + push (@ov, $n); + push (@new, $n); + } + } + $pf->value($repo, @ov); + $remotetlpdb->virtual_update_pins(); + $pf->save; + info("$prg: new pinning data for $repo: @new\n") if @new; + return 1; + + } elsif ($what =~ m/^remove$/i) { + my $repo = shift @ARGV; + if (!defined($repo)) { + tlwarn("$prg: missing repository argument to pinning remove\n"); + return 0; + } + if ($opts{'all'}) { + if (@ARGV) { + tlwarn("$prg: additional argument(s) not allowed with --all: @ARGV\n"); + return 0; + } + $pf->delete_key($repo); + $remotetlpdb->virtual_update_pins(); + $pf->save; + info("$prg: all pinning data removed for repository $repo\n"); + return 1; + } + # complicated case, we want to remove only one setting + my @ov = $pf->value($repo); + my @nv; + for my $pf (@ov) { + push (@nv, $pf) if (!member($pf, @ARGV)); + } + if ($#ov == $#nv) { + info("$prg: no changes in pinning data for $repo\n"); + return 1; + } + if (@nv) { + $pf->value($repo, @nv); + } else { + $pf->delete_key($repo); + } + $remotetlpdb->virtual_update_pins(); + $pf->save; + info("$prg: removed pinning data for repository $repo: @ARGV\n"); + return 1; + + } else { + tlwarn("$prg: unknown argument for pinning action: $what\n"); + return 0; + } + # $pin{'repo'} = $repo; + # $pin{'glob'} = $glob; + # $pin{'re'} = $re; + # $pin{'line'} = $line; # for debug/warning purpose + return 0; +} + +# REPOSITORY +# +# this action manages the list of repositories +# tlmgr repository list -> lists repositories +# tlmgr repository list path|tag -> lists content of repo path|tag +# tlmgr repository add path [tag] -> add repository with optional tag +# tlmgr repository remove [path|tag] -> removes repository or tag +# tlmgr repository set path[#tag] [path[#tag] ...] -> sets the list +# + +sub array_to_repository { + my %r = @_; + my @ret; + my @k = keys %r; + if ($#k == 0) { + # only one repo, don't write any tag + return $r{$k[0]}; + } + for my $k (keys %r) { + my $v = $r{$k}; + if ($k ne $v) { + $v = "$v#$k"; + } + # encode spaces and % in the path and tags + $v =~ s/%/%25/g; + $v =~ s/ /%20/g; + push @ret, $v; + } + return "@ret"; +} +sub repository_to_array { + my $r = shift; + my %r; + my @repos = split ' ', $r; + if ($#repos == 0) { + # only one repo, this is the main one! + $r{'main'} = $repos[0]; + return %r; + } + for my $rr (@repos) { + my $tag; + my $url; + # decode spaces and % in reverse order + $rr =~ s/%20/ /g; + $rr =~ s/%25/%/g; + $tag = $url = $rr; + if ($rr =~ m/^([^#]+)#(.*)$/) { + $tag = $2; + $url = $1; + } + $r{$tag} = $url; + } + return %r; +} +sub merge_sub_packages { + my %pkgs; + for my $p (@_) { + if ($p =~ m/^(.*)\.([^.]*)$/) { + my $n = $1; + my $a = $2; + if ($p eq "texlive.infra") { + push @{$pkgs{$p}}, "all"; + } else { + push @{$pkgs{$n}}, $a; + } + } else { + push @{$pkgs{$p}}, "all"; + } + } + return %pkgs; +} +sub action_repository { + init_local_db(); + my $what = shift @ARGV; + $what = "list" if !defined($what); + my %repos = repository_to_array($localtlpdb->option("location")); + if ($what =~ m/^list$/i) { + if (@ARGV) { + # list what is in a repository + for my $repo (@ARGV) { + my $loc = $repo; + if (defined($repos{$repo})) { + $loc = $repos{$repo}; + } + my ($tlpdb, $errormsg) = setup_one_remotetlpdb($loc); + if (!defined($tlpdb)) { + tlwarn("cannot get TLPDB from location $loc\n\n"); + } else { + print "Packages at $loc:\n"; + my %pkgs = merge_sub_packages($tlpdb->list_packages); + for my $p (sort keys %pkgs) { + next if ($p =~ m/00texlive/); + print " $p"; + if (!$opts{'with-platforms'}) { + print "\n"; + } else { + my @a = @{$pkgs{$p}}; + if ($#a == 0) { + if ($a[0] eq "all") { + # no further information necessary + print "\n"; + } else { + print ".$a[0]\n"; + } + } else { + print " (@{$pkgs{$p}})\n"; + } + } + } + } + } + } else { + print "List of repositories (with tags if set):\n"; + for my $k (keys %repos) { + my $v = $repos{$k}; + print "\t$v"; + if ($k ne $v) { + print " ($k)"; + } + print "\n"; + } + } + return; + } + if ($what eq "add") { + my $p = shift @ARGV; + if (!defined($p)) { + tlwarn("$prg: no repository given (to add)\n"); + return; + } + # check if it is either url or absolute path + if (($p !~ m!^(http|ftp)://!i) && + !File::Spec->file_name_is_absolute($p)) { + tlwarn("$prg: neither http/ftp URL nor absolute path, no action: $p\n"); + return; + } + my $t = shift @ARGV; + $t = $p if (!defined($t)); + if (defined($repos{$t})) { + tlwarn("$prg: repository or its tag already defined, no action: $p\n"); + return; + } + # TODO more checks needed? + # if there was till now only *one* repository and that without + # a tag, we give that one the "main" tag which is necessary + # for proper operation! + my @tags = keys %repos; + if ($#tags == 0) { + # we have only one repository, check if it has the main tag + my $maintag = $tags[0]; + if ($maintag ne 'main') { + $repos{'main'} = $repos{$maintag}; + delete $repos{$maintag}; + } + } + $repos{$t} = $p; + $localtlpdb->option("location", array_to_repository(%repos)); + $localtlpdb->save; + if ($t eq $p) { + print "$prg: added repository: $p\n"; + } else { + print "$prg: added repository with tag $t: $p\n"; + } + return; + } + if ($what eq "remove") { + my $p = shift @ARGV; + if (!defined($p)) { + tlwarn("$prg: no repository given (to remove)\n"); + return; + } + my $found = 0; + for my $k (keys %repos) { + if ($k eq $p || $repos{$k} eq $p) { + $found = 1; + delete $repos{$k}; + } + } + if (!$found) { + tlwarn("$prg: repository not defined, cannot remove: $p\n"); + } else { + $localtlpdb->option("location", array_to_repository(%repos)); + $localtlpdb->save; + print "$prg: removed repository: $p\n"; + } + return; + } + if ($what eq "set") { + # TODO TODO + # we have to make sure that there is ONE main repository!!! + %repos = repository_to_array("@ARGV"); + $localtlpdb->option("location", array_to_repository(%repos)); + $localtlpdb->save; + return; + } + # we are still here, unknown command to repository + tlwarn("$prg: unknown subaction for tlmgr repository: $what\n"); + return; +} + +sub action_candidates { + my $what = shift @ARGV; + if (!defined($what)) { + tlwarn("$prg: candidates needs a package name as argument\n"); + return; + } + init_local_db(); + init_tlmedia_or_die(); + my @cand = $remotetlpdb->candidates($what); + if (@cand) { + my $first = shift @cand; + if (defined($first)) { + my ($t,$r) = split(/\//, $first, 2); + print "Install candidate for $what from $t ($r)\n"; + } else { + print "No install candidate for $what found.\n"; + } + # already shifted away the first element + if ($#cand >= 0) { + print "Other repositories providing this package:\n"; + for my $a (@cand) { + my ($t,$r) = split(/\//, $a, 2); + print "$t ($r)\n"; + } + } + } else { + print "Package $what not found.\n"; + } + return; +} + +# OPTION +# +sub action_option { + my $what = shift @ARGV; + $what = "show" unless defined($what); + init_local_db(); + if ($what =~ m/^show$/i) { + for my $o (keys %{$localtlpdb->options}) { + # ignore some things which are w32 specific + next if ($o eq "desktop_integration" && !win32()); + next if ($o eq "file_assocs" && !win32()); + next if ($o eq "w32_multi_user" && !win32()); + if (win32()) { + next if ($o =~ m/^sys_/); + } + if (defined $TLPDBOptions{$o}) { + if ($::machinereadable) { + print "$TLPDBOptions{$o}->[2]\t", $localtlpdb->option($o), "\n"; + } else { + info("$TLPDBOptions{$o}->[3] ($TLPDBOptions{$o}->[2]): " . + $localtlpdb->option($o) . "\n"); + } + } else { + tlwarn ("option $o not supported\n"); + } + } + } elsif ($what =~ m/^showall$/i) { + my %loc = %{$localtlpdb->options}; + for my $o (sort keys %TLPDBOptions) { + if ($::machinereadable) { + print "$TLPDBOptions{$o}->[2]\t", + (defined($loc{$o}) ? $loc{$o} : "(not set)"), "\n"; + } else { + info("$TLPDBOptions{$o}->[3] ($TLPDBOptions{$o}->[2]): " . + (defined($loc{$o}) ? $loc{$o} : "(not set)") . "\n"); + } + } + } else { + if ($what eq "location") { + # rewrite location -> repository + $what = "repository"; + } + my $found = 0; + for my $opt (keys %TLPDBOptions) { + if ($what eq $TLPDBOptions{$opt}->[2]) { + $found = 1; + # the option argument matches the name + my $val = shift @ARGV; + if (defined($val)) { + return if !check_on_writable(); + # set new value + # here we have to care for some special cases + if ($what eq $TLPDBOptions{"location"}->[2]) { + # support "ctan" on the cmd line + if ($val =~ m/^ctan$/i) { + $val = "$TeXLive::TLConfig::TeXLiveURL"; + } + info("tlmgr: setting default package repository to $val\n"); + $localtlpdb->option($opt, $val); + } elsif ($what eq $TLPDBOptions{"backupdir"}->[2]) { + info("tlmgr: setting option $what to $val.\n"); + if (! -d $val) { + info("tlmgr: the directory $val does not exists, it has to be created\n"); + info("tlmgr: before backups can be done automatically.\n"); + } + $localtlpdb->option($opt, $val); + } elsif ($what eq $TLPDBOptions{"w32_multi_user"}->[2]) { + # when running w32 do not allow that a non-admin users sets + # this from false to true + my $do_it = 0; + if (win32()) { + if (admin()) { + $do_it = 1; + } else { + if ($val) { + # non admin and tries to set to true, warn + tlwarn("tlmgr: non-admin user cannot set $TLPDBOptions{'w32_multi_user'}->[2] option to true\n"); + } else { + $do_it = 1; + } + } + } else { + $do_it = 1; + } + if ($do_it) { + if ($val) { + info("tlmgr: setting option $what to 1.\n"); + $localtlpdb->option($opt, 1); + } else { + info("tlmgr: setting option $what to 0.\n"); + $localtlpdb->option($opt, 0); + } + } + } else { + # default case, switch for different types + if ($TLPDBOptions{$opt}->[0] eq "b") { + if ($val) { + info("tlmgr: setting option $what to 1.\n"); + $localtlpdb->option($opt, 1); + } else { + info("tlmgr: setting option $what to 0.\n"); + $localtlpdb->option($opt, 0); + } + } elsif ($TLPDBOptions{$opt}->[0] eq "p") { + info("tlmgr: setting option $what to $val.\n"); + $localtlpdb->option($opt, $val); + } elsif ($TLPDBOptions{$opt}->[0] eq "u") { + info("tlmgr: setting option $what to $val.\n"); + $localtlpdb->option($opt, $val); + } elsif ($TLPDBOptions{$opt}->[0] =~ m/^n(:((-)?\d+)?..((-)?\d+)?)?$/) { + my $isgood = 1; + my $n = int($val); + my $low; + my $up; + if (defined($1)) { + # range given + if (defined($2)) { + # lower border + if ($2 > $n) { + tlwarn("value $n for $what out of range ($TLPDBOptions{$opt}->[0])\n"); + $isgood = 0; + } + } + if (defined($4)) { + # upper border + if ($4 < $n) { + tlwarn("value $n for $what out of range ($TLPDBOptions{$opt}->[0])\n"); + $isgood = 0; + } + } + } + if ($isgood) { + info("tlmgr: setting option $what to $n.\n"); + $localtlpdb->option($opt, $n); + } + } else { + tlwarn ("Unknown type of option $opt: $TLPDBOptions{$opt}->[0]\n"); + } + } + $localtlpdb->save; + # now also save the TLPOBJ of 00texlive.installation + my $tlpo = $localtlpdb->get_package("00texlive.installation"); + if ($tlpo) { + if (open(TOFD, ">$Master/tlpkg/tlpobj/00texlive.installation.tlpobj")) { + $tlpo->writeout(\*TOFD); + close(TOFD); + } else { + tlwarn("Cannot save 00texlive.installation to $Master/tlpkg/tlpobj/00texlive.installation.tlpobj\n"); + } + } + } else { + # show current value + if ($::machinereadable) { + print "$TLPDBOptions{$opt}->[2]\t", $localtlpdb->option($opt), "\n"; + } else { + info ("$TLPDBOptions{$opt}->[3] ($TLPDBOptions{$opt}->[2]): " . + $localtlpdb->option($opt) . "\n"); + } + } + last; + } + } + if (!$found) { + tlwarn("tlmgr: option $what not supported!\n"); + } + } + return; +} + + +# ARCH +# +sub action_platform { + my @extra_w32_packs = qw/tlperl.win32 tlgs.win32 tlpsv.win32 + collection-wintools + dviout.win32 wintools.win32/; + if ($^O=~/^MSWin(32|64)$/i) { + warn("action `platform' not supported on Windows\n"); + return(); + } + my $what = shift @ARGV; + init_local_db(1); + info("platform: dry run, no changes will be made\n") if $opts{"dry-run"}; + $what || ($what = "list"); + if ($what =~ m/^list$/i) { + # list the available platforms + # initialize the TLPDB from $location + init_tlmedia_or_die(); + my @already_installed_arch = $localtlpdb->available_architectures; + print "Available platforms:\n"; + foreach my $a ($remotetlpdb->available_architectures) { + if (member($a,@already_installed_arch)) { + print "(i) $a\n"; + } else { + print " $a\n"; + } + } + print "Already installed platforms are marked with (i)\n"; + print "You can add new platforms with: tlmgr platform add ARCH1 ARCH2...\n"; + finish(0); + } elsif ($what =~ m/^add$/i) { + return if !check_on_writable(); + init_tlmedia_or_die(); + my @already_installed_arch = $localtlpdb->available_architectures; + my @available_arch = $remotetlpdb->available_architectures; + my @todoarchs; + foreach my $a (@ARGV) { + if (TeXLive::TLUtils::member($a, @already_installed_arch)) { + print "Platform $a is already installed\n"; + next; + } + if (!TeXLive::TLUtils::member($a, @available_arch)) { + print "Platform $a not available, use 'tlmgr platform list'!\n"; + next; + } + push @todoarchs, $a; + } + foreach my $pkg ($localtlpdb->list_packages) { + next if ($pkg =~ m/^00texlive/); + my $tlp = $localtlpdb->get_package($pkg); + foreach my $dep ($tlp->depends) { + if ($dep =~ m/^(.*)\.ARCH$/) { + # we have to install something + foreach my $a (@todoarchs) { + if ($remotetlpdb->get_package("$pkg.$a")) { + info("install: $pkg.$a\n"); + $remotetlpdb->install_package("$pkg.$a", $localtlpdb) + if (!$opts{"dry-run"}); + } + } + } + } + } + if (TeXLive::TLUtils::member('win32', @todoarchs)) { + # install the necessary w32 stuff + for my $p (@extra_w32_packs) { + info("install: $p\n"); + $remotetlpdb->install_package($p, $localtlpdb) if (!$opts{"dry-run"}); + } + } + # update the option("available_architectures") list of installed archs + if (!$opts{"dry-run"}) { + my @larchs = $localtlpdb->setting("available_architectures"); + push @larchs, @todoarchs; + $localtlpdb->setting("available_architectures",@larchs); + $localtlpdb->save; + } + } elsif ($what =~ m/^remove$/i) { + return if !check_on_writable(); + my @already_installed_arch = $localtlpdb->available_architectures; + my @todoarchs; + my $currentarch = $localtlpdb->platform(); + foreach my $a (@ARGV) { + if (!TeXLive::TLUtils::member($a, @already_installed_arch)) { + print "Platform $a not installed, use 'tlmgr platform list'!\n"; + next; + } + if ($currentarch eq $a) { + info("You are running on platform $a, you cannot remove that one!\n"); + next; + } + push @todoarchs, $a; + } + foreach my $pkg ($localtlpdb->list_packages) { + next if ($pkg =~ m/^00texlive/); + my $tlp = $localtlpdb->get_package($pkg); + if (!$tlp) { + # that is a package foobar.$a that has already been remove but + # is still in the list above, so ignore that + next; + } + foreach my $dep ($tlp->depends) { + if ($dep =~ m/^(.*)\.ARCH$/) { + # we have to install something + foreach my $a (@todoarchs) { + if ($localtlpdb->get_package("$pkg.$a")) { + info("remove: $pkg.$a\n"); + $localtlpdb->remove_package("$pkg.$a") if (!$opts{"dry-run"}); + } + } + } + } + } + if (TeXLive::TLUtils::member('win32', @todoarchs)) { + for my $p (@extra_w32_packs) { + info("remove: $p\n"); + $localtlpdb->remove_package($p) if (!$opts{"dry-run"}); + } + } + if (!$opts{"dry-run"}) { + # try to remove bin/$a dirs + for my $a (@todoarchs) { + if (!rmdir("$Master/bin/$a")) { + tlwarn("binary directory $Master/bin/$a not empty after removal of $a.\n"); + } + } + # update the option("available_architectures") list of installed archs + my @larchs = $localtlpdb->setting("available_architectures"); + my @newarchs; + for my $a (@larchs) { + push @newarchs, $a if !member($a, @todoarchs); + } + $localtlpdb->setting("available_architectures",@newarchs); + $localtlpdb->save; + } + } elsif ($what =~ m/^set$/i) { + return if !check_on_writable(); + my $arg = shift @ARGV; + die "Missing argument to platform set" unless defined($arg); + my @already_installed_arch = $localtlpdb->available_architectures; + if ($arg =~ m/^auto$/i) { + info("Setting platform detection to auto mode.\n"); + $localtlpdb->setting('-clear', 'platform'); + $localtlpdb->save; + } else { + if (!TeXLive::TLUtils::member($arg, @already_installed_arch)) { + tlwarn("cannot set platform to a not installed one.\n"); + return; + } + $localtlpdb->setting('platform', $arg); + $localtlpdb->save; + } + } else { + die "Unknown option for platform: $what"; + } +} + + +# GENERATE +# +sub action_generate { + my $what = shift @ARGV; + init_local_db(); + + # we create fmtutil.cnf, language.dat, language.def in TEXMFSYSVAR and + # updmap.cfg in TEXMFDIST. The reason is that we are now using an + # implementation of updmap that supports multiple updmap files. + # Local adaptions should not be made there, but only in TEXMFLOCAL + # or TEXMF(SYS)CONFIG updmap.cfg + # + chomp (my $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`); + chomp (my $TEXMFSYSCONFIG = `kpsewhich -var-value=TEXMFSYSCONFIG`); + chomp (my $TEXMFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`); + chomp (my $TEXMFDIST = `kpsewhich -var-value=TEXMFDIST`); + + # we do generate all config files, treat $opts{"dest"} as pattern + # and make it append the respective extensions + my $append_extension = (($opts{"dest"} && ($what eq "language")) ? 1 : 0); + + if ($what =~ m/^language(\.dat|\.def|\.dat\.lua)?$/i) { + # + # if --rebuild-sys is given *and* --dest we warn that this might not + # work if the destination is not the default one + if ($opts{"rebuild-sys"} && $opts{"dest"}) { + tlwarn("tlmgr generate $what: warning: both --rebuild-sys and --dest\n", + "given; the call to fmtutil-sys can fail if the given\n", + "destination is different from the default.\n"); + } + # + # we have to set TEXMFVAR, TEXMFCONFIG in the environment so that + # searching for language.(dat/def) does search in the right place + if ($what =~ m/^language(\.dat\.lua)?$/i) { + my $dest = $opts{"dest"} || + "$TEXMFSYSVAR/tex/generic/config/language.dat.lua"; + $dest .= ".dat.lua" if $append_extension; + my $localcfg = $opts{"localcfg"} || + "$TEXMFLOCAL/tex/generic/config/language-local.dat.lua"; + debug("$prg: writing language.dat.lua data to $dest\n"); + TeXLive::TLUtils::create_language_lua($localtlpdb, $dest, $localcfg); + if ($opts{"rebuild-sys"}) { + do_cmd_and_check("fmtutil-sys --byhyphen $dest"); + } else { + info("To make the newly-generated language.dat take effect," + . " run fmtutil-sys --byhyphen $dest.\n"); + } + } + if ($what =~ m/^language(\.dat)?$/i) { + my $dest = $opts{"dest"} || + "$TEXMFSYSVAR/tex/generic/config/language.dat"; + $dest .= ".dat" if $append_extension; + my $localcfg = $opts{"localcfg"} || + "$TEXMFLOCAL/tex/generic/config/language-local.dat"; + debug ("$prg: writing language.dat data to $dest\n"); + TeXLive::TLUtils::create_language_dat($localtlpdb, $dest, $localcfg); + if ($opts{"rebuild-sys"}) { + do_cmd_and_check("fmtutil-sys --byhyphen $dest"); + } else { + info("To make the newly-generated language.dat take effect," + . " run fmtutil-sys --byhyphen $dest.\n"); + } + } + if ($what =~ m/^language(\.def)?$/i) { + my $dest = $opts{"dest"} || + "$TEXMFSYSVAR/tex/generic/config/language.def"; + $dest .= ".def" if $append_extension; + my $localcfg = $opts{"localcfg"} || + "$TEXMFLOCAL/tex/generic/config/language-local.def"; + debug("$prg: writing language.def data to $dest\n"); + TeXLive::TLUtils::create_language_def($localtlpdb, $dest, $localcfg); + if ($opts{"rebuild-sys"}) { + do_cmd_and_check("fmtutil-sys --byhyphen $dest"); + } else { + info("To make the newly-generated language.def take effect," + . " run fmtutil-sys --byhyphen $dest.\n"); + } + } + + } elsif ($what =~ m/^fmtutil$/i) { + my $dest = $opts{"dest"} || "$TEXMFSYSVAR/web2c/fmtutil.cnf"; + my $localcfg = $opts{"localcfg"} || "$TEXMFLOCAL/web2c/fmtutil-local.cnf"; + debug("$prg: writing new fmtutil.cnf to $dest\n"); + TeXLive::TLUtils::create_fmtutil($localtlpdb, $dest, $localcfg); + + if ($opts{"rebuild-sys"}) { + do_cmd_and_check("fmtutil-sys --all"); + } else { + info("To make the newly-generated fmtutil.cnf take effect," + . " run fmtutil-sys --all.\n"); + } + + } elsif ($what =~ m/^updmap$/i) { + tlwarn("$prg: generate updmap is no longer needed or supported.\n"); + tlwarn("$prg: Please read the documentation of the `updmap' program.\n"); + tlwarn("$prg: Goodbye.\n"); + exit(1); + + } elsif ($what =~ m/^_updmap$/i) { + my $dest = $opts{"dest"} || "$TEXMFDIST/web2c/updmap.cfg"; + debug("$prg: writing new updmap.cfg to $dest\n"); + TeXLive::TLUtils::create_updmap($localtlpdb, $dest); + + if ($opts{"rebuild-sys"}) { + do_cmd_and_check("updmap-sys"); + } else { + info("To make the newly-generated updmap.cfg take effect," + . " run updmap-sys.\n"); + } + + } else { + die "$prg: Unknown option for generate: $what; try --help if you need it.\n"; + } + + return; +} + + +# GUI +# +sub action_gui { + eval { require Tk; }; + if ($@) { + # that didn't work out, give some usefull error message and stop + my $tkmissing = 0; + if ($@ =~ /^Can\'t locate Tk\.pm/) { + $tkmissing = 1; + } + if ($tkmissing) { + if ($^O=~/^MSWin(32|64)$/i) { + # that should not happen, we are shipping Tk!! + require Win32; + my $msg = "Cannot load Tk, that should not happen as we ship it!\nHow did you start tlmgrgui??\n(Error message: $@)\n"; + Win32::MsgBox($msg, 1|Win32::MB_ICONSTOP(), "Warning"); + } else { + printf STDERR " +$prg: Cannot load Tk, thus the GUI cannot be started! +The Perl/Tk module is not shipped with the TeX Live installation. +You have to install it to get the tlmgr GUI working. +(INC = @INC) + +See http://tug.org/texlive/distro.html#perltk for more details. +Goodbye. +"; + } + } else { + printf STDERR "$prg: unexpected problem loading Tk: $@\n"; + } + exit 1; + } + + # now check that we can actually create a top level window, + # on darwin the X server might not be started, or on unix we are working + # on a console, or whatever. + eval { my $foo = Tk::MainWindow->new; $foo->destroy; }; + if ($@) { + printf STDERR "perl/Tk unusable, cannot create main windows. +That could be a consequence of not having X Windows installed or started! +Error message from creating MainWindow: + $@ +"; + exit 1; + } + + # be sure that sub actions do *not* finish + $::gui_mode = 1; + # also unset the $opts{"gui"} to make recursive calls to action_* not starting + # another GUI instance (or better trying to ...) + $opts{"gui"} = 0; + + require("tlmgrgui.pl"); + # should not be reached + exit(1); +} + + +# UNINSTALL +# +sub action_uninstall { + if (win32()) { + printf STDERR "Please use \"Add/Remove Programs\" from the Control Panel to removing TeX Live!\n"; + finish(1); + } + return if !check_on_writable(); + my $force = defined($opts{"force"}) ? $opts{"force"} : 0; + if (!$force) { + print("If you answer yes here the whole TeX Live installation will be removed!\n"); + print "Remove TeX Live (y/N): "; + my $yesno = <STDIN>; + if ($yesno !~ m/^y(es)?$/i) { + print "Ok, cancelling the removal!\n"; + finish(0); + } + } + print ("Ok, removing the whole installation:\n"); + init_local_db(); + TeXLive::TLUtils::remove_symlinks($localtlpdb->root, + $localtlpdb->platform(), + $localtlpdb->option("sys_bin"), + $localtlpdb->option("sys_man"), + $localtlpdb->option("sys_info")); + # now do remove the rest + system("rm", "-rf", "$Master/texmf-dist"); + system("rm", "-rf", "$Master/texmf-doc"); + system("rm", "-rf", "$Master/texmf-var"); + system("rm", "-rf", "$Master/texmf"); + system("rm", "-rf", "$Master/tlpkg"); + system("rm", "-rf", "$Master/bin"); + system("rm", "-rf", "$Master/readme-html.dir"); + system("rm", "-rf", "$Master/readme-txt.dir"); + for my $f (qw/doc.html index.html LICENSE.CTAN LICENSE.TL README + README.usergroups release-texlive.txt texmf.cnf/) { + system("rm", "-f", "$Master/$f"); + } + if (-d "$Master/temp") { + system("rmdir", "--ignore-fail-on-non-empty", "$Master/temp"); + } + unlink("$Master/install-tl.log"); + # should we do that???? + system("rm", "-rf", "$Master/texmf-config"); + system("rmdir", "--ignore-fail-on-non-empty", "$Master"); +} + + +# RECREATE-TLPDB +# +sub action_recreate_tlpdb { + return if !check_on_writable(); + my $tlpdb = TeXLive::TLPDB->new; + $tlpdb->root($Master); + my $inst = TeXLive::TLPOBJ->new; + $inst->name("00texlive.installation"); + $inst->category("TLCore"); + my @deps; + # options are done further down with $tlpdb->reset_options() + #for my $k (keys %TeXLive::TLConfig::TLPDBOptions) { + # push @deps, "opt_$k:" . $TeXLive::TLConfig::TLPDBOptions{k}->[1]; + #} + # find list of available archs + my @archs; + opendir (DIR, "$Master/bin") || die "opendir($Master/bin) failed: $!"; + my @dirents = readdir (DIR); + closedir (DIR) || warn "closedir($Master/bin) failed: $!"; + for my $dirent (@dirents) { + next if $dirent eq "."; + next if $dirent eq ".."; + next unless -d "$Master/bin/$dirent"; + if (-r "$Master/bin/$dirent/kpsewhich" || -r "$Master/bin/$dirent/kpsewhich.exe") { + push @archs, $dirent; + debug("Skipping directory $Master/bin/$dirent, no kpsewhich there\n"); + } + } + push @deps, "setting_available_architectures:" . join(" ",@archs); + # we have to find out the default arch + # if there is only one dir in $Master/bin then we are settled, + # otherwise we expect the user to pass a correct arch string + if (!TeXLive::TLUtils::member(TeXLive::TLUtils::platform(), @archs)) { + # hmm that is bad, the platform as detected is not in the list + # of installed platforms, so the option --arch has to be given + # if only one is installed use that one + if ($#archs == 0) { + # only one arch available, fine, use it as default + push @deps, "setting_platform:$archs[0]"; + } else { + if (defined($opts{"platform"})) { + if (member($opts{"platform"}, @archs)) { + push @deps, "setting_platform:" . $opts{"platform"}; + } else { + tlwarn("The platform you passed in with --platform is not present in $Master/bin\n"); + tlwarn("Please specify one of the available ones: @archs\n"); + exit(1); + } + } else { + tlwarn("More than one platform available: @archs\n"); + tlwarn("Please pass one as the default you are running on with --platform=...\n"); + exit(1); + } + } + } + $inst->depends(@deps); + # now we have all the stuff for 00texlive.installation done + $tlpdb->add_tlpobj($inst); + # reset the options to default values + $tlpdb->add_default_options(); + # check for location == _MASTER_ + if ($tlpdb->option("location") eq "__MASTER__") { + $tlpdb->option("location", $TeXLive::TLConfig::TeXLiveURL); + } + # add the other stuff in $Master/tlpkg/tlpobj/*.tlpobj + # we can ignore *.{source,doc}.tlpobj because they are already + # included in the *.tlpobj parent one at install time + # (TODO: we should actually REMOVE the *.{source,doc}.tlpobj files + # at package install time) + opendir (DIR, "$Master/tlpkg/tlpobj") or die "opendir($Master/tlpkg/tlpobj) failed: $!"; + my @tlps = readdir(DIR); + closedir (DIR) || warn "closedir($Master/tlpkg/tlpobj) failed: $!"; + for my $t (@tlps) { + next if -d $t; # also does . and .. + next if ($t !~ m/\.tlpobj$/i); + # ignore .source and .doc tlpobjs + next if ($t =~ m/\.(source|doc)\.tlpobj$/i); + my $tlp = TeXLive::TLPOBJ->new; + $tlp->from_file("$Master/tlpkg/tlpobj/$t"); + $tlpdb->add_tlpobj($tlp); + } + # writeout the re-created tlpdb to stdout + $tlpdb->writeout; + return; +} + +# CHECK +# +sub init_tltree { + my $svn = shift; + my $Master = $localtlpdb->root; + my $tltree = TeXLive::TLTREE->new ("svnroot" => $Master); + if ($svn) { + debug("Initializine TLTREE from svn\n"); + $tltree->init_from_svn; + } else { + debug("Initializine TLTREE from find\n"); + $tltree->init_from_files; + } + return($tltree); +} + +sub action_check { + my $svn = defined($opts{"use-svn"}) ? $opts{"use-svn"} : 0; + my $what = shift @ARGV; + $what || ($what = "all"); + init_local_db(); + my $ret = 0; + if ($what =~ m/^all/i) { + my $tltree = init_tltree($svn); + print "Running check files:\n"; + $ret |= check_files($tltree); + print "Running check depends:\n"; + $ret |= check_depends(); + print "Running check executes:\n"; + $ret |= check_executes(); + print "Running check runfiles:\n"; + $ret |= check_runfiles(); + } elsif ($what =~ m/^files/i) { + my $tltree = init_tltree($svn); + $ret |= check_files($tltree); + } elsif ($what =~ m/^collections/i) { + tlwarn("the \"collections\" check is replaced by the \"depends\" check.\n"); + $ret |= check_depends(); + } elsif ($what =~ m/^depends/i) { + $ret |= check_depends(); + } elsif ($what =~ m/^runfiles/i) { + $ret |= check_runfiles(); + } elsif ($what =~ m/^executes/i) { + $ret |= check_executes(); + } else { + print "No idea how to check that: $what\n"; + } + finish($ret); +} + +# check file coverage in both direction. +# +sub check_files { + my $tltree = shift; + my $ret = 0; + my %filetopacks; + my $Master = $localtlpdb->root; + debug("Collecting all files of all packages\n"); + for my $p ($localtlpdb->list_packages()) { + # ignore files in the installer + next if ($p eq "00texlive.installer"); + my $tlp = $localtlpdb->get_package($p); + my @files = $tlp->all_files; + if ($tlp->relocated) { + for (@files) { s:^$RelocPrefix/:$RelocTree/:; } + } + for my $f (@files) { + push @{$filetopacks{$f}}, $p; + } + } + my @multiple = (); + my @missing = (); + debug("Checking for occurrences and existence of all files\n"); + for (keys %filetopacks) { + push @missing, $_ if (! -r "$Master/$_"); + my @foo = @{$filetopacks{$_}}; + if ($#foo < 0) { + warn "that shouldn't happen: $_\n"; + } elsif ($#foo > 0) { + push @multiple, $_; + } + } + if ($#multiple >= 0) { + $ret = 1; + print "\f Multiple included files (relative to $Master):\n"; + for (sort @multiple) { + my @foo = @{$filetopacks{$_}}; + print " $_ (@foo)\n"; + } + print "\n"; + } + if ($#missing >= 0) { + $ret = 1; + print "\f Files mentioned in tlpdb but missing (relative to $Master):\n"; + for my $m (@missing) { + print "\t$m\n"; + } + print "\n"; + } + + # if we are on W32, return (no find). We need -use-svn only for + # checking the live repository on tug, which is not w32. + my $arch = $localtlpdb->platform(); + return $ret if $arch eq "win32"; + + # check that all files in the trees are covered. + # + my @IgnorePatterns = qw! + support/ source/ setuptl/ + texmf-dist/ls-R$ texmf-doc/ls-R$ texmf/ls-R$ + tlpkg/tlpsrc tlpkg/bin tlpkg/lib/ tlpkg/libexec tlpkg/tests/ tlpkg/etc + tlpkg/texlive.tlpdb + tlpkg/tlpobj + texmf-var/ + texmf-config/ + texmf.cnf + install-tl.log + tlpkg/texlive.profile + tlpkg/installer + tlpkg/backups/ + !; + my %tltreefiles = %{$tltree->{'_allfiles'}}; + my @tlpdbfiles = keys %filetopacks; + my @nohit; + for my $f (keys %tltreefiles) { + # if it is mentioned in the tlpdb or is ignored it is considered + # as covered, thus, otherwise we push it onto the nothit list + if (!defined($filetopacks{$f})) { + my $ignored = 0; + for my $p (@IgnorePatterns) { + if ($f =~ m/^$p/) { + $ignored = 1; + last; + } + } + if (!$ignored) { + push @nohit, $f; + } + } + } + if (@nohit) { + $ret = 1; + print "\f Files present but not covered (relative to $Master):\n"; + for my $f (sort @nohit) { + print " $f\n"; + } + print "\n"; + } + return($ret); +} + +# Check for runtime files with the same name but different contents. +# +sub check_runfiles { + my $Master = $localtlpdb->root; + # build a list of all runtime files associated to 'normal' packages + # + (my $non_normal = `ls $Master/bin`) =~ s/\n/\$|/g; # binaries + $non_normal .= '^0+texlive|^bin-|^collection-|^scheme-|^texlive-|^texworks'; + my @runtime_files = (); + # + foreach my $tlpn ($localtlpdb->list_packages) { + next if ($tlpn =~ /$non_normal/); + # + my $tlp = $localtlpdb->get_package($tlpn); + my @files = $tlp->runfiles; + if ($tlp->relocated) { + for (@files) { + s!^$TeXLive::TLConfig::RelocPrefix/!$TeXLive::TLConfig::RelocTree/!; + } + } + # special case for koma-script where doc/src files are in runfiles section + if ($tlpn eq "koma-script") { + @files = grep {!m;^texmf-dist/source/latex/koma-script/;} @files; + @files = grep {!m;^texmf-dist/doc/latex/koma-script/;} @files; + } + push @runtime_files, @files; + } + + # build the duplicates list + # + my @duplicates = (""); # just to use $duplicates[-1] freely + my $prev = ""; + foreach my $f (sort map { TeXLive::TLUtils::basename($_) } @runtime_files) { + push (@duplicates, $f) if (($f eq $prev) and not ($f eq $duplicates[-1])); + $prev = $f; + } + shift @duplicates; # get rid of the fake 1st value + + # @duplicates = ('8r-base.map', 'aer.sty', 'lm-ec.map'); # for debugging + + # check if duplicates are different files + # + foreach my $f (@duplicates) { + # assume tex4ht, xdy, afm stuff is ok, and don't worry about + # Changes, README et al. Other per-format versions. + next if $f =~ /\.(afm|cfg|4hf|htf|xdy)$/; + next if $f + =~ /^((czech|slovak)\.sty + |Changes + |README + |cid2code\.txt + |etex\.src + |kinsoku\.tex + |language\.dat + |language\.def + |libertine\.sty + |m-tex4ht\.tex + |metatex\.tex + |ps2mfbas\.mf + |pstricks\.con + |sample\.bib + |tex4ht\.env + |texutil\.rb + |tlmgrgui\.pl + )$/x; + # + my @copies = grep (/\/$f$/, @runtime_files); + # map files can be duplicated between (but not within) formats. + if ($f =~ /\.map$/) { + my $need_check = 0; + my $prev_dir = ""; + my @cop = @copies; # don't break the outside list + map { s#^texmf-dist/fonts/map/(.*?)/.*#$1# } @cop; + foreach my $dir (sort @cop ) { + last if ($need_check = ($dir eq $prev_dir)); + $prev_dir = $dir; + } + next unless $need_check; + } + # if all copies are identical, ok, else, complain + my $diff = 0; + for (my $i = 1; $i < scalar(@copies); $i++) { + if ($diff = tlcmp("$Master/$copies[$i-1]", "$Master/$copies[$i]")) { + print "# $f\ndiff $Master/$copies[$i-1] $Master/$copies[$i]\n"; + last; + } + } + print join ("\n", @copies), "\n" if ($diff and (scalar(@copies) > 2)); + } +} + +# check executes +# +sub check_executes { + my $Master = $localtlpdb->root; + my (%maps,%langcodes,%fmtlines); + for my $pkg ($localtlpdb->list_packages) { + for my $e ($localtlpdb->get_package($pkg)->executes) { + if ($e =~ m/add(Mixed|Kanji)?Map\s+(.*)$/) { + my $foo = $2; + chomp($foo); + if ($foo !~ m/\@kanjiEmbed@/) { + push @{$maps{$foo}}, $pkg; + } + } elsif ($e =~ m/AddFormat\s+(.*)$/) { + my $foo = $1; + chomp($foo); + push @{$fmtlines{$foo}}, $pkg; + } elsif ($e =~ m/AddHyphen\s+.*\s+file=(\S+)(\s*$|\s+.*)/) { + my $foo = $1; + chomp($foo); + push @{$langcodes{$foo}}, $pkg; + } else { + warn "$pkg: unmatched execute: $e\n"; + } + } + } + my %badmaps; + foreach my $mf (keys %maps) { + my @pkgsfound = @{$maps{$mf}}; + if ($#pkgsfound > 0) { + tlwarn ("map file $mf is referenced in the executes of @pkgsfound\n"); + } else { + # less then 1 occurrences is not possible, so we have only one + # package that contains the reference to that map file + my $pkgfoundexecute = $pkgsfound[0]; + my @found = $localtlpdb->find_file($mf); + if ($#found < 0) { + $badmaps{$mf} = $maps{$mf}; + } elsif ($#found > 0) { + # we want to check for multiple inclusions + my %mapfn; + foreach my $foo (@found) { + $foo =~ m/^(.*):(.*)$/; + push @{$mapfn{$2}}, $1; + } + foreach my $k (keys %mapfn) { + my @bla = @{$mapfn{$k}}; + if ($#bla > 0) { + tlwarn ("map file $mf occurs multiple times (in pkg @bla)!\n"); + } + } + } else { + # only one occurrence found, we check that the map is also contained + # in the right package! + my ($pkgcontained) = ( $found[0] =~ m/^(.*):.*$/ ); + if ($pkgcontained ne $pkgfoundexecute) { + tlwarn("map file $mf: execute in $pkgfoundexecute, map file in $pkgcontained\n"); + } + } + } + } + if (keys %badmaps) { + tlwarn("$prg: mentioned map file not present in any package:\n"); + foreach my $mf (keys %badmaps) { + print "\t$mf (execute in @{$badmaps{$mf}})\n"; + } + } + my %badhyphcodes; + my %problemhyphen; + foreach my $lc (keys %langcodes) { + next if ($lc eq "zerohyph.tex"); + my @found = $localtlpdb->find_file("texmf-dist/tex/generic/hyph-utf8/loadhyph/$lc"); + if ($#found < 0) { + # try again this time search all packages + my @found = $localtlpdb->find_file("$lc"); + if ($#found < 0) { + $badhyphcodes{$lc} = $langcodes{$lc}; + } else { + $problemhyphen{$lc} = [ @found ]; + } + } + } + if (keys %badhyphcodes) { + print "\f mentioned hyphen loaders without file:\n"; + foreach my $mf (keys %badhyphcodes) { + print "\t$mf (execute in @{$badhyphcodes{$mf}})\n"; + } + } + # disable the echoing of problematic hyphens + #if (keys %problemhyphen) { + # print "hyphen files with possible problematic location:\n"; + # foreach my $mf (keys %problemhyphen) { + # print "\t$mf (@{$problemhyphen{$mf}})\n"; + # } + #} + # + # what should be checked for the executes? we could check + # - the existence of the engine in bin/i386-linux or all $arch + # - the existence of the format name link/bat + # - parse the options parameter and check for the inifile + # - rework the format definition that we have inifile=pdflatex.ini + # isn't the * unnecessary? + my %missingbins; + my %missingengines; + my %missinginis; + for (keys %fmtlines) { + my %r = TeXLive::TLUtils::parse_AddFormat_line("$_"); + if (defined($r{"error"})) { + die "$r{'error'}, parsing $_, package(s) @{$fmtlines{$_}}"; + } + my $opt = $r{"options"}; + my $engine = $r{"engine"}; + my $name = $r{"name"}; + my $mode = $r{"mode"}; + # special case for cont-en ... + next if ($name eq "cont-en"); + # we check that the name exist in bin/$arch + for my $a ($localtlpdb->available_architectures) { + my $f = "$Master/bin/$a/$name"; + if (!check_file($a, $f)) { + push @{$missingbins{$_}}, "bin/$a/$name" if $mode; + } + if (!check_file($a, "$Master/bin/$a/$engine")) { + push @{$missingengines{$_}}, "bin/$a/$engine" if $mode; + } + } + # check for the existence of the .ini file + # by using the last word in the options value + my $inifile = $opt; + # $inifile now contains "bla bla bla *file.ini" + # strip initial and trailing " + $inifile =~ s/^"(.*)"$/$1/; + # remove everything before the last space + $inifile =~ s/^.* ([^ ]*)$/$1/; + # remove the optional leading * + $inifile =~ s/^\*//; + my @found = $localtlpdb->find_file("$inifile"); + if ($#found < 0) { + $missinginis{$_} = "$inifile"; + } + } + if (keys %missinginis) { + print "\f mentioned ini files that cannot be found:\n"; + for my $i (keys %missinginis) { + print "\t $missinginis{$i} (execute: $i)\n"; + } + } + if (keys %missingengines) { + print "\f mentioned engine files that cannot be found:\n"; + for my $i (keys %missingengines) { + print "\t @{$missingengines{$i}}\n"; + } + } + if (keys %missingbins) { + print "\f mentioned bin files that cannot be found:\n"; + for my $i (keys %missingbins) { + print "\t @{$missingbins{$i}}\n"; + } + } +} + +sub check_file { + my ($a, $f) = @_; + if (-r $f) { + return 1; + } else { + # not -r, so check for the extensions .bat and .exe on w32 and cygwin + if (($a eq "win32") || ($a eq "i386-cygwin")) { + if (-r "$f.exe" || -r "$f.bat") { + return 1; + } + } + return 0; + } +} + +# check depends +# +sub check_depends { + my $ret = 0; + my $Master = $localtlpdb->root; + my %presentpkg; + for my $pkg ($localtlpdb->list_packages) { + $presentpkg{$pkg} = 1; + } + # list of collections. + my @colls = $localtlpdb->collections; + my @coll_deps = $localtlpdb->expand_dependencies("-no-collections",$localtlpdb,@colls); + my %coll_deps; + @coll_deps{@coll_deps} = (); # initialize hash with keys from list + + my (%wrong_dep, @no_dep); + for my $pkg ($localtlpdb->list_packages) { + # do not check any package starting with 00texlive. + next if $pkg =~ m/^00texlive/; + + # For each package, check that it is a dependency of some collection. + # Whatever is left in %coll_deps after this loop will be the problem + if (! exists $coll_deps{$pkg}) { + # Except that schemes and our special .win32 packages are ok. + push (@no_dep, $pkg) unless $pkg =~/^scheme-|\.win32$/; + } + + # For each dependency, check that we have a package. + for my $d ($localtlpdb->get_package($pkg)->depends) { + next if ($d =~ m/\.ARCH$/); + if (!defined($presentpkg{$d})) { + push (@{$wrong_dep{$d}}, $pkg); + } + } + } + + if (keys %wrong_dep) { + $ret++; + print "\f DEPENDS WITHOUT PACKAGES:\n"; + for my $d (keys %wrong_dep) { + print "$d in: @{$wrong_dep{$d}}\n"; + } + } + + if (@no_dep) { + $ret++; + print "\f PACKAGES NOT IN ANY COLLECTION: @no_dep\n"; + } + + return $ret; +} + +# POSTACTION +# explictly run the various post actions, e.g., +# on a client system or overriding global settings. +# +# tlmgr postaction [--w32mode=user|admin] [--fileassocmode=1|2] [--all] +# [install|remove] [shortcut|fileassoc|script] [<pkg>...] + +sub action_postaction { + my $how = shift @ARGV; + if (!defined($how) || ($how !~ m/^(install|remove)$/i)) { + tlwarn("action postaction needs at least two arguments, first being either 'install' or 'remove'\n"); + return; + } + my $type = shift @ARGV; + my $badtype = 0; + if (!defined($type)) { + $badtype = 1; + } elsif ($type !~ m/^(shortcut|fileassoc|script)$/i) { + $badtype = 1; + } + if ($badtype) { + tlwarn("action postaction needs as second argument one from 'shortcut', 'fileassoc', 'script'\n"); + return; + } + if (win32()) { + if ($opts{"w32mode"}) { + if ($opts{"w32mode"} eq "user") { + if (TeXLive::TLWinGoo::admin()) { + debug("Switching to user mode on user request\n"); + TeXLive::TLWinGoo::non_admin(); + } + # in user mode we also switch TEXMFSYSVAR to TEXMFVAR since + # xetex.pl, but maybe others are writing to TEXMFSYSVAR + chomp($ENV{"TEXMFSYSVAR"} = `kpsewhich -var-value TEXMFVAR`); + } elsif ($opts{"w32mode"} eq "admin") { + if (!TeXLive::TLWinGoo::admin()) { + tlwarn("You don't have the permissions for --w32mode=admin\n"); + return; + } + } else { + tlwarn("action postaction --w32mode can only be 'admin' or 'user'\n"); + return; + } + } + } + my @todo; + if ($opts{"all"}) { + init_local_db(); + @todo = $localtlpdb->list_packages; + } else { + if ($#ARGV < 0) { + tlwarn("action postaction: need either --all or a list of packages\n"); + return; + } + init_local_db(); + @todo = @ARGV; + @todo = $localtlpdb->expand_dependencies("-only-arch", $localtlpdb, @todo); + } + if ($type =~ m/^shortcut$/i) { + if (!win32()) { + tlwarn("action postaction shortcut only works on windows.\n"); + return; + } + for my $p (@todo) { + my $tlp = $localtlpdb->get_package($p); + if (!defined($tlp)) { + tlwarn("$p is not installed, ignoring it.\n"); + } else { + # run all shortcut actions, desktop and menu integration + TeXLive::TLUtils::do_postaction($how, $tlp, 0, 1, 1, 0); + } + } + } elsif ($type =~ m/^fileassoc$/i) { + if (!win32()) { + tlwarn("action postaction fileassoc only works on windows.\n"); + return; + } + my $fa = $localtlpdb->option("file_assocs"); + if ($opts{"fileassocmode"}) { + if ($opts{"fileassocmode"} < 1 || $opts{"fileassocmode"} > 2) { + tlwarn("action postaction: value of --fileassocmode can only be 1 or 2\n"); + return; + } + $fa = $opts{"fileassocmode"}; + } + for my $p (@todo) { + my $tlp = $localtlpdb->get_package($p); + if (!defined($tlp)) { + tlwarn("$p is not installed, ignoring it.\n"); + } else { + TeXLive::TLUtils::do_postaction($how, $tlp, $fa, 0, 0, 0); + } + } + } elsif ($type =~ m/^script$/i) { + for my $p (@todo) { + my $tlp = $localtlpdb->get_package($p); + if (!defined($tlp)) { + tlwarn("$p is not installed, ignoring it.\n"); + } else { + TeXLive::TLUtils::do_postaction($how, $tlp, 0, 0, 0, 1); + } + } + } else { + tlwarn("action postaction needs one of 'shortcut', 'fileassoc', 'script'\n"); + return; + } +} + +# CONF +# tries to mimic texconfig conf but can also set values for both tlmgr +# and texmf conf files. +# +sub action_conf { + my $arg = shift @ARGV; + if (!defined($arg)) { + texconfig_conf_mimic(); + return; + } + if ($arg eq "tlmgr" || $arg eq "texmf") { + my ($fn,$cf); + if ($arg eq "tlmgr") { + chomp (my $TEXMFCONFIG = `kpsewhich -var-value=TEXMFCONFIG`); + $fn = "$TEXMFCONFIG/tlmgr/config"; + $cf = TeXLive::TLConfFile->new($fn, "#", "="); + } else { + $fn = "$Master/texmf.cnf"; + $cf = TeXLive::TLConfFile->new($fn, "[%#]", "="); + } + my ($key,$val) = @ARGV; + if (!defined($key)) { + # show all settings + if ($cf) { + info("$arg configuration values (from $fn):\n"); + for my $k ($cf->keys) { + info("$k = " . $cf->value($k) . "\n"); + } + } else { + info("$arg config file $fn not present\n"); + } + } else { + if (!defined($val)) { + if (defined($cf->value($key))) { + info("$arg $key value: " . $cf->value($key) . " ($fn)\n"); + } else { + info("$key not defined in $arg config file ($fn)\n"); + if ($arg eq "texmf") { + # not in user-specific file, show anything kpsewhich gives us. + chomp (my $defval = `kpsewhich -var-value $key`); + if ($? != 0) { + info("$arg $key default value is unknown"); + } else { + info("$arg $key default value: $defval"); + } + info(" (kpsewhich -var-value)\n"); + } + } + } else { + info("setting $arg $key to $val (in $fn)\n"); + $cf->value($key, $val); + } + } + if ($cf->is_changed) { + $cf->save; + } + } else { + warn "tlmgr: unknown conf arg: $arg (try tlmgr or texmf)\n"; + } +} + +# output various values in same form as texconfig conf. +sub texconfig_conf_mimic { + my $PATH = $ENV{'PATH'}; + info("=========================== version information ==========================\n"); + info(give_version()); + info("==================== executables found by searching PATH =================\n"); + info("PATH: $PATH\n"); + for my $cmd (qw/kpsewhich updmap fmtutil tlmgr tex pdftex mktexpk + dvips dvipdfmx/) { + info("$cmd: " . TeXLive::TLUtils::which($cmd) . "\n"); + } + info("=========================== active config files ==========================\n"); + for my $m (qw/texmf.cnf updmap.cfg fmtutil.cnf config.ps mktex.cnf + pdftexconfig.tex/) { + info("$m: " . `kpsewhich $m`); + } + + #tlwarn("missing finding of XDvi, config!\n"); + + info("============================= font map files =============================\n"); + for my $m (qw/psfonts.map pdftex.map ps2pk.map dvipdfm.map/) { + info("$m: " . `kpsewhich $m`); + } + + info("=========================== kpathsea variables ===========================\n"); + for my $v (qw/TEXMFMAIN TEXMFDIST TEXMFLOCAL TEXMFSYSVAR TEXMFSYSCONFIG TEXMFVAR TEXMFCONFIG TEXMFHOME VARTEXFONTS TEXMF SYSTEXMF TEXMFDBS WEB2C TEXPSHEADERS TEXCONFIG ENCFONTS TEXFONTMAPS/) { + info("$v=" . `kpsewhich -var-value=$v`); + } + + info("==== kpathsea variables from environment only (ok if no output here) ====\n"); + my @envVars = qw/ + AFMFONTS BIBINPUTS BSTINPUTS CMAPFONTS CWEBINPUTS ENCFONTS GFFONTS + GLYPHFONTS INDEXSTYLE LIGFONTS MFBASES MFINPUTS MFPOOL MFTINPUTS + MISCFONTS MPINPUTS MPMEMS MPPOOL MPSUPPORT OCPINPUTS OFMFONTS + OPENTYPEFONTS OPLFONTS OTPINPUTS OVFFONTS OVPFONTS PDFTEXCONFIG PKFONTS + PSHEADERS SFDFONTS T1FONTS T1INPUTS T42FONTS TEXBIB TEXCONFIG TEXDOCS + TEXFONTMAPS TEXFONTS TEXFORMATS TEXINDEXSTYLE TEXINPUTS TEXMFCNF + TEXMFDBS TEXMFINI TEXMFSCRIPTS TEXPICTS TEXPKS TEXPOOL TEXPSHEADERS + TEXSOURCES TFMFONTS TRFONTS TTFONTS VFFONTS WEB2C WEBINPUTS + /; + for my $v (@envVars) { + if (defined($ENV{$v})) { + info("$v=$ENV{$v}\n"); + } + } +} + + +# Subroutines galore. +# +# set global $location variable. +# if we cannot read tlpdb, die if arg SHOULD_I_DIE is true. +# +# if an argument is given and is true init_local_db will die if +# setting up of programs failed. +# +sub init_local_db { + my ($should_i_die) = @_; + # if the localtlpdb is already defined do simply return here already + # to make sure that the settings in the local tlpdb do not overwrite + # stuff changed via the GUI + return if defined $localtlpdb; + $localtlpdb = TeXLive::TLPDB->new ( root => $Master ); + die("cannot setup TLPDB in $Master") unless (defined($localtlpdb)); + # setup the programs, for w32 we need the shipped wget/xz etc, so we + # pass the location of these files to setup_programs. + if (!setup_programs("$Master/tlpkg/installer", $localtlpdb->platform)) { + tlwarn("Couldn't set up the necessary programs.\nInstallation of packages is not supported.\nPlease report to texlive\@tug.org.\n"); + if (defined($should_i_die) && $should_i_die) { + finish(1); + } else { + tlwarn("Continuing anyway ...\n"); + } + } + # let cmd line options override the settings in localtlpdb + my $loc = norm_tlpdb_path($localtlpdb->option("location")); + if (defined($loc)) { + $location = $loc; + } + if (defined($opts{"location"})) { + $location = $opts{"location"}; + } + if (!defined($location)) { + die("No installation source found, nor in the texlive.tlpdb nor on the cmd line.\nPlease specify one!"); + } + if ($location =~ m/^ctan$/i) { + $location = "$TeXLive::TLConfig::TeXLiveURL"; + } + # we normalize the path only if it is + # - a url starting with neither http or ftp + # - if we are on Windows, it does not start with Drive:[\/] + if (! ( $location =~ m!^(http|ftp)://!i || + (win32() && (!(-e $location) || ($location =~ m!^.:[\\/]!) ) ) ) ) { + # seems to be a local path, try to normalize it + my $testloc = abs_path($location); + # however, if we were given a url, that will get "normalized" to the + # empty string, it not being a path. Restore the original value if so. + $location = $testloc if $testloc; + } +} + + +# initialize the global $remotetlpdb object, or die. +# uses the global $location. +# +sub init_tlmedia_or_die { + my ($ret, $err) = init_tlmedia(); + if (!$ret) { + tldie("$prg: $err\n"); + } +} + +sub init_tlmedia +{ + # first check if $location contains multiple locations + # in this case we go to virtual mode + #my %repos = repository_to_array($localtlpdb->option("location")); + my %repos = repository_to_array($location); + my @tags = keys %repos; + # if we have only one repo, but this one contains a name tag #.... + # then we remove it and save the local tlpdb + if ($#tags == 0 && ($location =~ m/#/)) { + $location = $repos{$tags[0]}; + $localtlpdb->option("location", $location); + $localtlpdb->save; + %repos = repository_to_array($location); + } + # check if we are only one tag/repo + if ($#tags == 0) { + # go to normal mode + return _init_tlmedia(); + } + # we are still here, so we have more tags + + # check that there is a main repository + if (!TeXLive::TLUtils::member('main', @tags)) { + return(0, "Cannot find main repository, you have to tag one as main!"); + } + + # TODO TODO + # - abstract the set up of a single media tlpdb + # - make clear how to check for a already loaded remotetlpdb + $remotetlpdb = TeXLive::TLPDB->new(); + $remotetlpdb->make_virtual; + + my $locstr = $repos{'main'}; + my ($tlmdb, $errormsg) = setup_one_remotetlpdb($locstr); + if (!defined($tlmdb)) { + return (0, $errormsg); + } + $remotetlpdb->virtual_add_tlpdb($tlmdb, "main"); + for my $t (@tags) { + if ($t ne 'main') { + my ($tlmdb, $errormsg) = setup_one_remotetlpdb($repos{$t}); + if (!defined($tlmdb)) { + return(0, $errormsg); + } + $remotetlpdb->virtual_add_tlpdb($tlmdb, $t); + $locstr .= " $repos{$t}"; + } + } + + # now check/setup pinning + if (!$opts{"pin-file"}) { + # check for pinning file in TEXMFLOCAL/tlpkg/pinning.txt + chomp (my $TEXMFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`); + debug("trying to load pinning file $TEXMFLOCAL/tlpkg/pinning.txt\n"); + # since we use TLConfFile it does not matter if the file + # is not existing, it will be treated properly in TLConfFile + $opts{"pin-file"} = "$TEXMFLOCAL/tlpkg/pinning.txt"; + } + $pinfile = TeXLive::TLConfFile->new($opts{"pin-file"}, "#", ":", 'multiple'); + $remotetlpdb->virtual_pinning($pinfile); + # this "location-url" line should not be changed since GUI programs + # depend on it: + print "location-url\t$locstr\n" if $::machinereadable; + info("tlmgr: package repositories:\n"); + info("\tmain = " . $repos{'main'} . "\n"); + for my $t (@tags) { + if ($t ne 'main') { + info("\t$t = " . $repos{$t} . "\n"); + } + } + return 1; +} + + + + +sub _init_tlmedia +{ + + # if we are already initialized to the same location, nothing + # needs to be done. + # if we are initialized to a virtual tlpdb, then we have to + # do in any case an initialization + if (defined($remotetlpdb) && !$remotetlpdb->is_virtual && + ($remotetlpdb->root eq $location)) { + # nothing to be done + return 1; + } + + # choose a mirror if we are asked. + if ($location =~ m/^ctan$/i) { + $location = give_ctan_mirror(); + } elsif ($location =~ m,^$TeXLiveServerURL,) { + my $mirrorbase = TeXLive::TLUtils::give_ctan_mirror_base(); + $location =~ s,^$TeXLiveServerURL,$mirrorbase,; + } + + my $errormsg; + ($remotetlpdb, $errormsg) = setup_one_remotetlpdb($location); + if (!defined($remotetlpdb)) { + return(0, $errormsg); + } + + + # this "location-url" line should not be changed since GUI programs + # depend on it: + print "location-url\t$location\n" if $::machinereadable; + info("tlmgr: package repository $location\n"); + return 1; +} + +sub setup_one_remotetlpdb +{ + my $location = shift; + my $remotetlpdb; + + # TODO + # check if that is already loaded!!! + + # choose a mirror if we are asked. + if ($location =~ m/^ctan$/i) { + $location = give_ctan_mirror(); + } elsif ($location =~ m,^$TeXLiveServerURL,) { + my $mirrorbase = TeXLive::TLUtils::give_ctan_mirror_base(); + $location =~ s,^$TeXLiveServerURL,$mirrorbase,; + } + + # if we talk about a net location try to download the hash of the tlpdb + # - if that is possible, check for the locally saved file and if the hash + # agrees load the local copy if present instead of the remote one, + # if the hashes disagree, load the remote tlpdb + # - if that does not work assume we are offline or target not reachable, + # so warn the user and use saved, but note that installation will + # not work + + my $local_copy_tlpdb_used = 0; + if ($location =~ m;^(http|ftp)://;) { + # first check that the saved tlpdb is present at all + my $loc_digest = Digest::MD5::md5_hex($location); + my $loc_copy_of_remote_tlpdb = + "$Master/$InfraLocation/texlive.tlpdb.$loc_digest"; + ddebug("loc_digest = $loc_digest\n"); + ddebug("loc_copy = $loc_copy_of_remote_tlpdb\n"); + if (-r $loc_copy_of_remote_tlpdb) { + ddebug("loc copy found!\n"); + # we found the tlpdb matching the current location + # check for the remote hash + my $path = "$location/$InfraLocation/$DatabaseName.md5"; + ddebug("remote path of digest = $path\n"); + my $fh = TeXLive::TLUtils::download_file($path, "|"); + my $rem_digest; + if (read ($fh, $rem_digest, 32) != 32) { + info(<<END_NO_INTERNET); +Unable to download the remote TeX Live database, +but found a local copy so using that. + +You may want to try specifying an explicit or different CTAN mirror; +see the information and examples for the -repository option at +http://tug.org/texlive/doc/install-tl.html +(or in the output of install-tl --help). + +END_NO_INTERNET + # above text duplicated in install-tl + + $remotetlpdb = TeXLive::TLPDB->new(root => $location, + tlpdbfile => $loc_copy_of_remote_tlpdb); + $local_copy_tlpdb_used = 1; + } else { + ddebug("found remote digest: $rem_digest\n"); + my $rem_copy_digest = TeXLive::TLUtils::tlmd5($loc_copy_of_remote_tlpdb); + ddebug("rem_copy_digest = $rem_copy_digest\n"); + if ($rem_copy_digest eq $rem_digest) { + debug("md5 of local copy identical with remote hash\n"); + $remotetlpdb = TeXLive::TLPDB->new(root => $location, + tlpdbfile => $loc_copy_of_remote_tlpdb); + $local_copy_tlpdb_used = 1; + } + } + } + } + if (!$local_copy_tlpdb_used) { + $remotetlpdb = TeXLive::TLPDB->new(root => $location); + } + if (!defined($remotetlpdb)) { + return(undef, $loadmediasrcerror . $location); + } + # we allow a range of years to be specified by the remote tlpdb + # for which it might work. + # the lower limit is TLPDB->config_minrelease + # the upper limit is TLPDB->config_release + # if the later is not present only the year in config_release is accepted + # checks are done on the first 4 digits only + # Why only the first four places: some optional network distributions + # might use + # release/2009-foobar + # If it should work for 2009 and 2010, please use + # minrelease/2009-foobar + # release/2010-foobar + my $texlive_release = $remotetlpdb->config_release; + my $texlive_minrelease = $remotetlpdb->config_minrelease; + if (!defined($texlive_release)) { + return(undef, "The installation repository does not specify a " + . "release year for which it was prepared, goodbye."); + } + # still here, so we have $texlive_release defined + my $texlive_release_year = $texlive_release; + $texlive_release_year =~ s/^(....).*$/$1/; + if ($texlive_release_year !~ m/^[1-9][0-9][0-9][0-9]$/) { + return(undef, "The installation repository does not specify a " + . "valid release year, goodbye: $texlive_release"); + } + # so $texlive_release_year is numeric, good + if (defined($texlive_minrelease)) { + # we specify a range of years! + my $texlive_minrelease_year = $texlive_minrelease; + $texlive_minrelease_year =~ s/^(....).*$/$1/; + if ($texlive_minrelease_year !~ m/^[1-9][0-9][0-9][0-9]$/) { + return(undef, "The installation repository does not specify a " + . "valid minimal release year, goodbye: $texlive_minrelease"); + } + # ok, all numeric and fine, check for range + if ($TeXLive::TLConfig::ReleaseYear < $texlive_minrelease_year + || $TeXLive::TLConfig::ReleaseYear > $texlive_release_year) { + return (undef, "The TeX Live versions supported by the repository + ($texlive_minrelease_year--$texlive_release_year) +do not include the version of the local installation + ($TeXLive::TLConfig::ReleaseYear)."); + } + } else { + # $texlive_minrelease not defined, so only one year is valid + if ($texlive_release_year != $TeXLive::TLConfig::ReleaseYear) { + return(undef, "The TeX Live versions of the local installation +and the repository being accessed are not compatible: + local: $TeXLive::TLConfig::ReleaseYear + repository: $texlive_release_year +(Perhaps you need to use a different CTAN mirror?)."); + } + } + + # check for being frozen + if ($remotetlpdb->option("frozen")) { + my $frozen_msg = <<FROZEN; +TeX Live $TeXLive::TLConfig::ReleaseYear is frozen forever and will no +longer be updated. This happens in preparation for a new release. + +If you're interested in helping to pretest the new release (when +pretests are available), please read http://tug.org/texlive/pretest.html. +Otherwise, just wait, and the new release will be ready in due time. +FROZEN + # don't die here, we want to allow updates even if tlnet is frozen! + tlwarn($frozen_msg); + } + + # save remote database if it is a net location + # make sure that the writeout of the tlpdb is done in UNIX mode + # since otherwise the sha256 will change. + if (!$local_copy_tlpdb_used && $location =~ m;^(http|ftp)://;) { + my $loc_digest = Digest::MD5::md5_hex($location); + my $loc_copy_of_remote_tlpdb = + "$Master/$InfraLocation/texlive.tlpdb.$loc_digest"; + my $tlfh; + if (!open($tlfh, ">:unix", $loc_copy_of_remote_tlpdb)) { + # that should be only a debug statement, since a user without + # write permission might have done a tlmgr search --global or + # similar + &debug("Cannot save remote TeX Live database to $loc_copy_of_remote_tlpdb: $!\n"); + } else { + &debug("writing out tlpdb to $loc_copy_of_remote_tlpdb\n"); + $remotetlpdb->writeout($tlfh); + close($tlfh); + } + } + + return($remotetlpdb); +} + + + +# finish handles the -pause option (wait for input from stdin), +# and then exits unless the global $::gui_mode is set, in which case we +# merely return. +# +sub finish +{ + my ($ret) = @_; + + if ($ret > 0) { + print "tlmgr: exiting unsuccessfully (status $ret).\n"; + } + + if ($opts{"pause"}) { + print "Press Enter to exit the program.\n"; + <STDIN>; + } + + if ($::gui_mode) { + return($ret); + } else { + exit($ret); + } +} + +# +# config file handling +# config files are located in TEXMFCONFIG/tlmgr/config thus specific +# for each user +# +# format: +# key=value +# +# allowed keys at the moment +# gui-expertmode = 0|1 +# +sub load_config_file +{ + # + # first set default values + # the default for gui-expertmode is 1 since that is what we + # have shipped till now + $config{"gui-expertmode"} = 1; + # + # by default we remove packages + $config{"auto-remove"} = 1; + + chomp (my $TEXMFCONFIG = `kpsewhich -var-value=TEXMFCONFIG`); + my $fn = "$TEXMFCONFIG/tlmgr/config"; + $tlmgr_config_file = TeXLive::TLConfFile->new($fn, "#", "="); + if ($tlmgr_config_file->key_present("gui_expertmode")) { + $tlmgr_config_file->rename_key("gui_expertmode", "gui-expertmode"); + } + for my $key ($tlmgr_config_file->keys) { + my $val = $tlmgr_config_file->value($key); + if ($key eq "gui-expertmode") { + if ($val eq "0") { + $config{"gui-expertmode"} = 0; + } elsif ($val eq "1") { + $config{"gui-expertmode"} = 1; + } else { + tlwarn("Unknown value >$val< for gui-expertmode in $fn\n"); + } + } elsif ($key eq "persistent-downloads") { + if (($val eq "0") || ($val eq "1")) { + $config{'persistent-downloads'} = $val; + } else { + tlwarn("Unknown value $val for persistent-downloads in $fn\n"); + } + } elsif ($key eq "gui-lang") { + $config{'gui-lang'} = $val; + } elsif ($key eq "auto-remove") { + if ($val eq "0") { + $config{"auto-remove"} = 0; + } elsif ($val eq "1") { + $config{"auto-remove"} = 1; + } else { + tlwarn("Unknown value >$val< for auto-remove in $fn\n"); + } + } else { + tlwarn("Unknown key $key in $fn\n"); + } + } +} + +sub write_config_file +{ + if (!defined($tlmgr_config_file)) { + chomp (my $TEXMFCONFIG = `kpsewhich -var-value=TEXMFCONFIG`); + my $dn = "$TEXMFCONFIG/tlmgr"; + my $fn = "$dn/config"; + # create a new one + $tlmgr_config_file = TeXLive::TLConfFile->new($fn, "#", "="); + } + for my $k (keys %config) { + # it doesn't hurt to save all config settings as we check in TLConfFile + # if the value has actually changed + $tlmgr_config_file->value($k, $config{$k}); + } + # make sure that deleted config entries are carried over + for my $k ($tlmgr_config_file->keys) { + if (not(defined($config{$k}))) { + $tlmgr_config_file->delete_key($k); + } + } + if ($tlmgr_config_file->is_changed) { + $tlmgr_config_file->save; + } +} + +# if the packagelog variable is set then write to PACKAGELOG filehandle +# +sub logpackage +{ + if ($packagelogfile) { + $packagelogged++; + my $tim = localtime(); + print PACKAGELOG "[$tim] @_\n"; + } +} + +# resolve relative paths from tlpdb wrt tlroot +sub norm_tlpdb_path +{ + my ($path) = @_; + return if (!defined($path)); + $path =~ s!\\!/!; + # just return if absolute path + return $path if ($path =~ m!^/|:!); + init_local_db() unless defined($localtlpdb); + return $localtlpdb->root . "/$path"; +} + +# clear the backup dir for $pkg and keep only $autobackup packages +# mind that with $autobackup == 0 all packages are cleared +sub clear_old_backups +{ + my ($pkg, $backupdir, $autobackup, $dry) = @_; + + my $dryrun = 0; + $dryrun = 1 if ($dry); + # keep arbitrary many backups + return if ($autobackup == -1); + + opendir (DIR, $backupdir) || die "opendir($backupdir) failed: $!"; + my @dirents = readdir (DIR); + closedir (DIR) || warn "closedir($backupdir) failed: $!"; + my @backups; + for my $dirent (@dirents) { + next if (-d $dirent); + next if ($dirent !~ m/^$pkg\.r([0-9]+)\.tar\.xz$/); + push @backups, $1; + } + my $i = 1; + for my $e (reverse sort {$a <=> $b} @backups) { + if ($i > $autobackup) { + log ("Removing backup $backupdir/$pkg.r$e.tar.xz\n"); + unlink("$backupdir/$pkg.r$e.tar.xz") unless $dryrun; + } + $i++; + } +} + +# check for updates to tlcritical packages +# +sub check_for_critical_updates +{ + my ($localtlpdb, $mediatlpdb) = @_; + + my $criticalupdate = 0; + my @critical = $localtlpdb->expand_dependencies("-no-collections", + $localtlpdb, @CriticalPackagesList); + my @critical_upd; + for my $pkg (sort @critical) { + my $tlp = $localtlpdb->get_package($pkg); + if (!defined($tlp)) { + # that should not happen, we expanded in the localtlpdb so why + # should it not be present, any anyway, those are so fundamental + # so they have to be there + tlwarn("\nFundamental package $pkg not present, uh oh, goodbye"); + die "Serious error, $pkg not found"; + } + my $localrev = $tlp->revision; + my $mtlp = $mediatlpdb->get_package($pkg); + if (!defined($mtlp)) { + debug("Very surprising, $pkg is not present in the remote tlpdb.\n"); + next; + } + my $remoterev = $mtlp->revision; + push (@critical_upd, $pkg) if ($remoterev > $localrev); + } + return(@critical_upd); +} + +sub critical_updates_warning { + tlwarn("=" x 79, "\n"); + tlwarn("Updates for tlmgr itself are present.\n"); + tlwarn("So, please update the package manager first, via either\n"); + tlwarn(" tlmgr update --self\n"); + tlwarn("or by getting the latest updater for Unix-ish systems:\n"); + tlwarn(" $TeXLiveURL/update-tlmgr-latest.sh\n"); + tlwarn("and/or Windows systems:\n"); + tlwarn(" $TeXLiveURL/update-tlmgr-latest.exe\n"); + tlwarn("Then continue with other updates.\n"); + tlwarn("=" x 79, "\n"); +} + +# +# our compare function for package sorting, which makes sure that +# packages with .ARCH names are sorted *before* the main packages +sub packagecmp { + my $aa = $a; + my $bb = $b; + # remove the part after the . if at all present + $aa =~ s/\..*$//; + $bb =~ s/\..*$//; + if ($aa lt $bb) { + return -1; + } elsif ($aa gt $bb) { + return 1; + } else { + # the parts before the . are the same + # sort the .something *before* the ones without + if ($a eq $aa && $b eq $bb) { + return 0; + } elsif ($a eq $aa) { + # so $a = foobar + # and $b = foobar.something + # this is the special case where we want to invert the order + return 1; + } elsif ($b eq $bb) { + # so $a = foobar.something + # and $b = foobar + return -1; + } else { + return ($a cmp $b); + } + } +} + +sub check_on_writable { + if (!TeXLive::TLUtils::dir_writable("$Master/tlpkg")) { + tlwarn("You don't have permission to change the installation in any way,\n"); + tlwarn("specifically, the directory $Master/tlpkg/ is not writable.\n"); + tlwarn("Please run this program as administrator, or contact your local admin.\n"); + if ($opts{"dry-run"}) { + tlwarn("Continuing due to --dry-run\n"); + return 1; + } else { + return 0; + } + } + return 1; +} + +1; +__END__ + +=head1 NAME + +tlmgr - the TeX Live Manager + +=head1 SYNOPSIS + +tlmgr [I<option>]... I<action> [I<option>]... [I<operand>]... + +=head1 DESCRIPTION + +B<tlmgr> manages an existing TeX Live installation, both packages and +configuration options. For information on initially downloading and +installing TeX Live, see L<http://tug.org/texlive/acquire.html>. + +The most up-to-date version of this documentation (updated nightly from +the development sources) is available at +L<http://tug.org/texlive/tlmgr.html>, along with procedures for updating +C<tlmgr> itself and information about test versions. + +TeX Live is organized into a few top-level I<schemes>, each of which is +specified as a different set of I<collections> and I<packages>, where a +collection is a set of packages, and a package is what contains actual +files. Schemes typically contain a mix of collections and packages, but +each package is included in exactly one collection, no more and no less. +A TeX Live installation can be customized and managed at any level. + +See L<http://tug.org/texlive/doc> for all the TeX Live documentation +available. + +=head1 EXAMPLES + +After successfully installing TeX Live, here are a few common operations +with C<tlmgr>: + +=over 4 + +=item C<tlmgr option repository http://mirror.ctan.org/systems/texlive/tlnet> + +Tell C<tlmgr> to use a nearby CTAN mirror for future updates; useful if +you installed TeX Live from the DVD image and want continuing updates. + +=item C<tlmgr update --list> + +Report what would be updated without actually updating anything. + +=item C<tlmgr update --all> + +Make your local TeX installation correspond to what is in the package +repository (typically useful when updating from CTAN). + +=item C<tlmgr info> I<pkg> + +Display detailed information about I<pkg>, such as the installation +status and description. + +=back + +For all the capabilities and details of C<tlmgr>, please read the +following voluminous information. + +=head1 OPTIONS + +The following options to C<tlmgr> are global options, not specific to +any action. All options, whether global or action-specific, can be +given anywhere on the command line, and in any order. The first +non-option argument will be the main action. In all cases, +C<-->I<option> and C<->I<option> are equivalent, and an C<=> is optional +between an option name and its value. + +=over 4 + +=item B<--repository> I<url|path> + +Specifies the package repository from which packages should be installed +or updated, overriding the default package repository found in the +installation's TeX Live Package Database (a.k.a. the TLPDB, defined +entirely in the file C<tlpkg/texlive.tlpdb>). The documentation for +C<install-tl> has more details about this +(L<http://tug.org/texlive/doc/install-tl.html>). + +C<--repository> changes the repository location only for the current +run; to make a permanent change, use C<option repository> (see the +L<option> action). + +For backward compatibility and convenience, C<--location> and C<--repo> +are accepted as aliases for this option. + + +=item B<--gui> [I<action>] + +C<tlmgr> has a graphical interface as well as the command-line +interface. You can give this option, C<--gui>, together with an action +to be brought directly into the respective screen of the GUI. For +example, running + + tlmgr --gui update + +starts you directly at the update screen. Without any action, the +GUI will be started at the main screen. + +=for comment Keep language list in sync with install-tl. + +=item B<--gui-lang> I<llcode> + +By default, the GUI tries to deduce your language from the environment +(on Windows via the registry, on Unix via C<LC_MESSAGES>). If that fails +you can select a different language by giving this option with a +language code (based on ISO 639-1). Currently supported (but not +necessarily completely translated) are: English (en, default), Czech +(cs), German (de), French (fr), Italian (it), Japanese (ja), Dutch (nl), +Polish (pl), Brazilian Portuguese (pt_BR), Russian (ru), Slovak (sk), +Slovenian (sl), Serbian (sr), Vietnamese (vi), simplified Chinese +(zh_CN), and traditional Chinese (zh_TW). + +=item B<--machine-readable> + +Instead of the normal output intended for human consumption, write (to +standard output) a fixed format more suitable for machine parsing. See +the L</"MACHINE-READABLE OUTPUT"> section below. + +=item B<--package-logfile> I<file> + +C<tlmgr> logs all package actions (install, remove, update, failed +updates, failed restores) to a separate log file, by default +C<TEXMFSYSVAR/web2c/tlmgr.log>. This option allows you to specific a +different file for the log. + +=item B<--pause> + +This option makes C<tlmgr> wait for user input before exiting. Useful on +Windows to avoid disappearing command windows. + +=item B<--persistent-downloads> + +=item B<--no-persistent-downloads> + +For network-based installations, this option (on by default) makes +C<tlmgr> try to set up a persistent connection (using the L<Net::LWP> +Perl module). The idea is to open and reuse only one connection per +session between your computer and the server, instead of initiating a +new download for each package. + +If this is not possible, C<tlmgr> will fall back to using C<wget>. To +disable these persistent connections, use C<--no-persistent-downloads>. + +=item B<--no-execute-actions> + +Suppress the execution of the execute actions as defined in the tlpsrc +files. Documented only for completeness, as this is only useful in +debugging. + +=item B<--debug-translation> + +In GUI mode, this switch makes C<tlmgr> report any missing, or more +likely untranslated, messages to standard error. This can help +translators to see what remains to be done. + +=back + +The standard options for TeX Live programs are also accepted: +C<--help/-h/-?>, C<--version>, C<-q> (no informational messages), C<-v> +(debugging messages, can be repeated). For the details about these, see +the L<TeXLive::TLUtils> documentation. + +The C<--version> option shows version information about the TeX Live +release and about the C<tlmgr> script itself. If C<-v> is given as +well, revision number for the used TeX Live Perl modules are shown, too. + +=head1 ACTIONS + +=head2 help + +Gives this help information (same as C<--help>). + +=head2 version + +Gives version information (same as C<--version>). + +If C<-v> has been given the revisions of the used modules are reported, too. + +=head2 backup [--clean[=I<N>]] [--backupdir I<dir>] [--all | I<pkg>]... + +If the C<--clean> option is not specified, this action makes a backup of +the given packages, or all packages given C<--all>. These backups are +saved to the value of the C<--backupdir> option, if that is an existing and +writable directory. If C<--backupdir> is not given, the C<backupdir> +option setting in the TLPDB is used, if present. If both are missing, +no backups are made. + +If the C<--clean> option is specified, backups are pruned (removed) +instead of saved. The optional integer value I<N> may be specified to +set the number of backups that will be retained when cleaning. If C<N> +is not given, the value of the C<autobackup> option is used. If both are +missing, an error is issued. For more details of backup pruning, see +the C<option> action. + +Options: + +=over 4 + +=item B<--backupdir> I<directory> + +Overrides the C<backupdir> option setting in the TLPDB. +The I<directory> argument is required and must specify an existing, +writable directory where backups are to be placed. + +=item B<--all> + +If C<--clean> is not specified, make a backup of all packages in the TeX +Live installation; this will take quite a lot of space and time. If +C<--clean> is specified, all packages are pruned. + +=item B<--clean>[=I<N>] + +Instead of making backups, prune the backup directory of old backups, as +explained above. The optional integer argument I<N> overrides the +C<autobackup> option set in the TLPDB. You must use C<--all> or a list +of packages together with this option, as desired. + +=item B<--dry-run> + +Nothing is actually backed up or removed; instead, the actions to be +performed are written to the terminal. + +=back + + +=head2 candidates + +=over 4 + +=item B<candidates I<pkg>> + +Shows the available candidate repositories for package I<pkg>. +See L</"MULTIPLE REPOSITORIES"> below. + + +=back + +=head2 check [I<option>]... [files|depends|executes|runfiles|all] + +Executes one (or all) check(s) on the consistency of the installation. + +=over 4 + +=item B<files> + +Checks that all files listed in the local TLPDB (C<texlive.tlpdb>) are +actually present, and lists those missing. + +=item B<depends> + +Lists those packages which occur as dependencies in an installed collections, +but are themselves not installed, and those packages that are not +contained in any collection. + +If you call C<tlmgr check collections> this test will be carried out +instead since former versions for C<tlmgr> called it that way. + +=item B<executes> + +Check that the files referred to by C<execute> directives in the TeX +Live Database are present. + +=item B<runfiles> + +List those filenames that are occurring more than one time in the runfiles. + +=back + +Options: + +=over 4 + +=item B<--use-svn> + +Use the output of C<svn status> instead of listing the files; for +checking the TL development repository. + +=back + + +=head2 conf [texmf|tlmgr [I<key> [I<value>]]] + +With only C<conf>, show general configuration information for TeX Live, +including active configuration files, path settings, and more. This is +like the C<texconfig conf> call, but works on all supported platforms. + +With either C<conf texmf> or C<conf tlmgr> given in addition, shows all +key/value pairs (i.e., all settings) as saved in C<ROOT/texmf.cnf> or +the tlmgr configuration file (see below), respectively. + +If I<key> is given in addition, shows the value of only that given +I<key> in the respective file. + +If I<value> is given in addition, I<key> is set to I<value> in the +respective file. I<No error checking is done!> + +Practical application: if the execution of (some or all) system commands +via C<\write18> was left enabled during installation, you can disable +it afterwards: + + tlmgr conf texmf shell_escape 0 + +Warning: The general facility is here, but tinkering with settings in +this way is very strongly discouraged. Again, no error checking is +done, so any sort of breakage is possible. + + +=head2 dump-tlpdb [--local|--remote] + +Dump complete local or remote TLPDB to standard output, as-is. The +output is analogous to the C<--machine-readable> output; see +L<MACHINE-READABLE OUTPUT> section. + +Options: + +=over 4 + +=item B<--local> + +Dump the local tlpdb. + +=item B<--remote> + +Dump the remote tlpdb. + +=back + +Exactly one of C<--local> and C<--remote> must be given. + +In either case, the first line of the output specifies the repository +location, in this format: + + "location-url" "\t" location + +where C<location-url> is the literal field name, followed by a tab, and +I<location> is the file or url to the repository. + +Line endings may be either LF or CRLF depending on the current platform. + + +=head2 generate [I<option>]... I<what> + +=over 4 + +=item B<generate language> + +=item B<generate language.dat> + +=item B<generate language.def> + +=item B<generate language.dat.lua> + +=item B<generate fmtutil> + +=back + +The C<generate> action overwrites any manual changes made in the +respective files: it recreates them from scratch based on the +information of the installed packages, plus local adaptions. +The TeX Live installer and C<tlmgr> routinely call C<generate> for +all of these files. + +For managing your own fonts, please read the C<updmap --help> +information and/or L<http://tug.org/fonts/fontinstall.html>. + +In more detail: C<generate> remakes any of the configuration files +C<language.dat>, C<language.def>, C<language.dat.lua>, and +C<fmtutil.cnf>, from the information present in the local TLPDB, plus +locally-maintained files. + +The locally-maintained files are C<language-local.dat>, +C<language-local.def>, C<language-local.dat.lua>, or +C<fmtutil-local.cnf>, searched for in C<TEXMFLOCAL> in the respective +directories. If local additions are present, the final file is made by +starting with the main file, omitting any entries that the local file +specifies to be disabled, and finally appending the local file. + +(Historical note: The formerly supported C<updmap-local.cfg> is no longer +read, since C<updmap> now supports multiple C<updmap.cfg> files. Thus, +local additions can and should be put into an C<updmap.cfg> file in +C<TEXMFLOCAL>. The C<generate updmap> action no longer exists.) + +Local files specify entries to be disabled with a comment line, namely +one of these: + + #!NAME + %!NAME + --!NAME + +where C<fmtutil.cnf> uses C<#>, C<language.dat> and C<language.def> use +C<%>, and C<language.dat.lua> use C<-->. In all cases, the I<name> is +the respective format name or hyphenation pattern identifier. +Examples: + + #!pdflatex + %!german + --!usenglishmax + +(Of course, you're not likely to actually want to disable those +particular items. They're just examples.) + +After such a disabling line, the local file can include another entry +for the same item, if a different definition is desired. In general, +except for the special disabling lines, the local files follow the same +syntax as the master files. + +The form C<generate language> recreates all three files C<language.dat>, +C<language.def>, and C<language.dat.lua>, while the forms with an +extension recreates only that given language file. + +Options: + +=over 4 + +=item B<--dest> I<output_file> + +specifies the output file (defaults to the respective location in +C<TEXMFSYSVAR>). If C<--dest> is given to C<generate language>, it +serves as a basename onto which C<.dat> will be appended for the name of +the C<language.dat> output file, C<.def> will be appended to the value +for the name of the C<language.def> output file, and C<.dat.lua> to the +name of the C<language.dat.lua> file. (This is just to avoid +overwriting; if you want a specific name for each output file, we +recommend invoking C<tlmgr> twice.) + +=item B<--localcfg> I<local_conf_file> + +specifies the (optional) local additions (defaults to the respective +location in C<TEXMFLOCAL>). + +=item B<--rebuild-sys> + +tells tlmgr to run necessary programs after config files have been +regenerated. These are: +C<fmtutil-sys --all> after C<generate fmtutil>, +C<fmtutil-sys --byhyphen .../language.dat> after C<generate language.dat>, +and +C<fmtutil-sys --byhyphen .../language.def> after C<generate language.def>. + +These subsequent calls cause the newly-generated files to actually take +effect. This is not done by default since those calls are lengthy +processes and one might want to made several related changes in +succession before invoking these programs. + +=back + +The respective locations are as follows: + + tex/generic/config/language.dat (and language-local.dat); + tex/generic/config/language.def (and language-local.def); + tex/generic/config/language.dat.lua (and language-local.dat.lua); + web2c/fmtutil.cnf (and fmtutil-local.cnf); + + +=head2 gui + +Start the graphical user interface. See B<GUI> below. + + +=head2 info [I<option>...] [collections|schemes|I<pkg>...] + +With no argument, lists all packages available at the package +repository, prefixing those already installed with C<i>. + +With the single word C<collections> or C<schemes> as the argument, lists +the request type instead of all packages. + +With any other arguments, display information about I<pkg>: the name, +category, short and long description, installation status, and TeX Live +revision number. If I<pkg> is not locally installed, searches in the +remote installation source. + +It also displays information taken from the TeX Catalogue, namely the +package version, date, and license. Consider these, especially the +package version, as approximations only, due to timing skew of the +updates of the different pieces. By contrast, the C<revision> value +comes directly from TL and is reliable. + +The former actions C<show> and C<list> are merged into this action, +but are still supported for backward compatibility. + +Options: + +=over 4 + +=item B<--list> + +If the option C<--list> is given with a package, the list of contained +files is also shown, including those for platform-specific dependencies. +When given with schemes and collections, C<--list> outputs their +dependencies in a similar way. + +=item B<--only-installed> + +If this options is given, the installation source will +not be used; only locally installed packages, collections, or schemes +are listed. +(Does not work for listing of packages for now) + +=item B<--taxonomy> + +=item B<--keyword> + +=item B<--functionality> + +=item B<--characterization> + +In addition to the normal data displayed, also display information for +given packages from the corresponding taxonomy (or all of them). See +L</"TAXONOMIES"> below for details. + +=back + + +=head2 install [I<option>]... I<pkg>... + +Install each I<pkg> given on the command line. By default this installs +all packages on which the given I<pkg>s are dependent, also. Options: + +=over 4 + +=item B<--file> + +Instead of fetching a package from the installation repository, use +the packages files given on the command line. These files need +to be proper TeX Live package files (with contained tlpobj file). + +=item B<--reinstall> + +Reinstall a package (including dependencies for collections) even if it +seems to be already installed (i.e, is present in the TLPDB). This is +useful to recover from accidental removal of files in the hierarchy. + +When re-installing, only dependencies on normal packages are followed +(not those of category Scheme or Collection). + +=item B<--no-depends> + +Do not install dependencies. (By default, installing a package ensures +that all dependencies of this package are fulfilled.) + +=item B<--no-depends-at-all> + +When you install a package which ships binary files the respective +binary package will also be installed. That is, for a package C<foo>, +the package C<foo.i386-linux> will also be installed on an C<i386-linux> +system. This switch suppresses this behavior, and also implies +C<--no-depends>. Don't use it unless you are sure of what you are +doing. + +=item B<--dry-run> + +Nothing is actually installed; instead, the actions to be performed are +written to the terminal. + +=item B<--force> + +If updates to C<tlmgr> itself (or other parts of the basic +infrastructure) are present, C<tlmgr> will bail out and not perform the +installation unless this option is given. Not recommended. + +=back + + +=head2 option + +=over 4 + +=item B<option [show]> + +=item B<option showall> + +=item B<option I<key> [I<value>]> + +=back + +The first form shows the global TeX Live settings currently saved in the +TLPDB with a short description and the C<key> used for changing it in +parentheses. + +The second form is similar, but also shows options which can be defined +but are not currently set to any value. + +In the third form, if I<value> is not given, the setting for I<key> is +displayed. If I<value> is present, I<key> is set to I<value>. + +Possible values for I<key> are (run C<tlmgr option showall> for +the definitive list): + + repository (default package repository), + formats (create formats at installation time), + postcode (run postinst code blobs) + docfiles (install documentation files), + srcfiles (install source files), + backupdir (default directory for backups), + autobackup (number of backups to keep). + sys_bin (directory to which executables are linked by the path action) + sys_man (directory to which man pages are linked by the path action) + sys_info (directory to which Info files are linked by the path action) + desktop_integration (Windows-only: create Start menu shortcuts) + fileassocs (Windows-only: change file associations) + multiuser (Windows-only: install for all users) + +One common use of C<option> is to permanently change the installation to +get further updates from the Internet, after originally installing from +DVD. To do this, you can run + + tlmgr option repository http://mirror.ctan.org/systems/texlive/tlnet + +The C<install-tl> documentation has more information about the possible +values for C<repository>. (For backward compatibility, C<location> can +be used as alternative name for C<repository>.) + +If C<formats> is set (this is the default), then formats are regenerated +when either the engine or the format files have changed. Disable this +only when you know what you are doing. + +The C<postcode> option controls execution of per-package +postinstallation action code. It is set by default, and again disabling +is not likely to be of interest except perhaps to developers. + +The C<docfiles> and C<srcfiles> options control the installation of +their respective files of a package. By default both are enabled (1). +This can be disabled (set to 0) if disk space is (very) limited. + +The options C<autobackup> and C<backupdir> determine the defaults for +the actions C<update>, C<backup> and C<restore>. These three actions +need a directory in which to read or write the backups. If +C<--backupdir> is not specified on the command line, the C<backupdir> +option value is used (if set). + +The C<autobackup> option (de)activates automatic generation of backups. +Its value is an integer. If the C<autobackup> value is C<-1>, no +backups are removed. If C<autobackup> is 0 or more, it specifies the +number of backups to keep. Thus, backups are disabled if the value is +0. In the C<--clean> mode of the C<backup> action this option also +specifies the number to be kept. + +To setup C<autobackup> to C<-1> on the command line, use either: + + tlmgr option autobackup infty + +or: + + tlmgr option -- autobackup -1 + +The C<--> avoids having the C<-1> treated as an option. (C<--> stops +parsing for options at the point where it appears; this is a general +feature across most Unix programs.) + +The C<sys_bin>, C<sys_man>, and C<sys_info> options are used on +Unix-like systems to control the generation of links for executables, +info files and man pages. See the C<path> action for details. + +The last three options control behaviour on Windows installations. If +C<desktop_integration> is set, then some packages will install items in +a sub-folder of the Start menu for C<tlmgr gui>, documentation, etc. If +C<fileassocs> is set, Windows file associations are made (see also the +C<postaction> action). Finally, if C<multiuser> is set, then adaptions +to the registry and the menus are done for all users on the system +instead of only the current user. All three options are on by default. + + +=head2 paper + +=over 4 + +=item B<paper [a4|letter]> + +=item B<S<[xdvi|pdftex|dvips|dvipdfmx|dvipdfm|context] paper [I<papersize>|--list]>> + +=back + +With no arguments (C<tlmgr paper>), shows the default paper size setting +for all known programs. + +With one argument (e.g., C<tlmgr paper a4>), sets the default for all +known programs to that paper size. + +With a program given as the first argument and no paper size specified +(e.g., C<tlmgr dvips paper>), shows the default paper size for that +program. + +With a program given as the first argument and a paper size as the last +argument (e.g., C<tlmgr dvips paper a4>), set the default for that +program to that paper size. + +With a program given as the first argument and C<--list> given as the +last argument (e.g., C<tlmgr dvips paper --list>), shows all valid paper +sizes for that program. The first size shown is the default. + +Incidentally, this syntax of having a specific program name before the +C<paper> keyword may seem strange. It is inherited from the +longstanding C<texconfig> script, which supports other configuration +settings for some programs, notably C<dvips>. C<tlmgr> does not support +those extra settings at present. + + +=head2 path [--w32mode=user|admin] [add|remove] + +On Unix, merely adds or removes symlinks for binaries, man pages, and +info pages in the system directories specified by the respective options +(see the L<option> description above). Does not change any +initialization files, either system or personal. + +On Windows, the registry part where the binary directory is added or +removed is determined in the following way: + +If the user has admin rights, and the option C<--w32mode> is not given, +the setting I<w32_multi_user> determines the location (i.e., if it is +on then the system path, otherwise the user path is changed). + +If the user has admin rights, and the option C<--w32mode> is given, this +option determines the path to be adjusted. + +If the user does not have admin rights, and the option C<--w32mode> +is not given, and the setting I<w32_multi_user> is off, the user path +is changed, while if the setting I<w32_multi_user> is on, a warning is +issued that the caller does not have enough privileges. + +If the user does not have admin rights, and the option C<--w32mode> +is given, it must be B<user> and the user path will be adjusted. If a +user without admin rights uses the option C<--w32mode admin> a warning +is issued that the caller does not have enough privileges. + + +=head2 pinning + +The C<pinning> action manages the pinning file, see L<Pinning> below. + +=over 4 + +=item C<pinning show> + +Shows the current pinning data. + +=item C<pinning add I<repo> I<pkgglob>... + +Pins the packages matching the I<pkgglob>(s) to the repository +I<repo>. + +=item C<pinning remove I<repo> I<pkgglob>... + +Any packages recorded in the pinning file matching the <pkgglob>s for +the given repository I<repo> are removed. + +=item C<pinning remove I<repo> --all> + +Remove all pinning data for repository I<repo>. + +=back + +=head2 platform list|add|remove I<platform>... + +=head2 platform set I<platform> + +=head2 platform set auto + +C<platform list> lists the TeX Live names of all the platforms +(a.k.a. architectures), (C<i386-linux>, ...) available at the package +repository. + +C<platform add> I<platform>... adds the executables for each given platform +I<platform> to the installation from the repository. + +C<platform remove> I<platform>... removes the executables for each given +platform I<platform> from the installation, but keeps the currently +running platform in any case. + +C<platform set> I<platform> switches TeX Live to always use the given +platform instead of auto detection. + +C<platform set auto> switches TeX Live to auto detection mode for platform. + +Platform detection is needed to select the proper C<xz>, C<xzdec> and +C<wget> binaries that are shipped with TeX Live. + +C<arch> is a synonym for C<platform>. + +Options: + +=over 4 + +=item B<--dry-run> + +Nothing is actually installed; instead, the actions to be performed are +written to the terminal. + +=back + + +=cut + +# keep the following on *ONE* line otherwise Losedows perldoc does +# not show it!!!! + +=pod + +=head2 postaction [--w32mode=user|admin] [--fileassocmode=1|2] [--all] [install|remove] [shortcut|fileassoc|script] [I<pkg>]... + +Carry out the postaction C<shortcut>, C<fileassoc>, or C<script> given +as the second required argument in install or remove mode (which is the +first required argument), for either the packages given on the command +line, or for all if C<--all> is given. + +If the option C<--w32mode> is given the value C<user>, all actions will +only be carried out in the user-accessible parts of the +registry/filesystem, while the value C<admin> selects the system-wide +parts of the registry for the file associations. If you do not have +enough permissions, using C<--w32mode=admin> will not succeed. + +C<--fileassocmode> specifies the action for file associations. If it is +set to 1 (the default), only new associations are added; if it is set to +2, all associations are set to the TeX Live programs. (See also +C<option fileassocs>.) + + +=head2 print-platform + +Print the TeX Live identifier for the detected platform +(hardware/operating system) combination to standard output, and exit. +C<--print-arch> is a synonym. + + +=head2 restore [--backupdir I<dir>] [--all | I<pkg> [I<rev>]] + +Restore a package from a previously-made backup. + +If C<--all> is given, try to restore the latest revision of all +package backups found in the backup directory. + +Otherwise, if neither I<pkg> nor I<rev> are given, list the available backup +revisions for all packages. + +With I<pkg> given but no I<rev>, list all available backup revisions of +I<pkg>. + +When listing available packages tlmgr shows the revision and in +parenthesis the creation time if available (in format yyyy-mm-dd hh:mm). + +With both I<pkg> and I<rev>, tries to restore the package from the +specified backup. + +Options: + +=over 4 + +=item B<--all> + +Try to restore the latest revision of all package backups found in the +backup directory. Additional non-option arguments (like I<pkg>) are not +allowed. + +=item B<--backupdir> I<directory> + +Specify the directory where the backups are to be found. If not given it +will be taken from the configuration setting in the TLPDB. + +=item B<--dry-run> + +Nothing is actually restored; instead, the actions to be performed are +written to the terminal. + +=item B<--force> + +Don't ask questions. + +=back + + +=head2 remove [I<option>]... I<pkg>... + +Remove each I<pkg> specified. Removing a collection removes all package +dependencies (unless C<--no-depends> is specified), but not any +collection dependencies of that collection. However, when removing a +package, dependencies are never removed. Options: + +=over 4 + +=item B<--no-depends> + +Do not remove dependent packages. + +=item B<--no-depends-at-all> + +See above under B<install> (and beware). + +=item B<--force> + +By default, removal of a package or collection that is a dependency of +another collection or scheme is not allowed. With this option, the +package will be removed unconditionally. Use with care. + +A package that has been removed using the C<--force> option because it +is still listed in an installed collection or scheme will not be +updated, and will be mentioned as B<forcibly removed> in the output of +B<tlmgr update --list>. + +=item B<--dry-run> + +Nothing is actually removed; instead, the actions to be performed are +written to the terminal. + +=back + + +=head2 repository + +=over 4 + +=item B<repository list> + +=item B<repository list I<path|tag>> + +=item B<repository add I<path> [I<tag>]> + +=item B<repository remove I<path|tag>> + +=item B<repository set I<path>[#I<tag>] [I<path>[#I<tag>] ...]> + +This action manages the list of repositories. See L</"MULTIPLE +REPOSITORIES"> below for detailed explanations. + +The first form (C<list>) lists all configured repositories and the +respective tags if set. If a path, url, or tag is given after the +C<list> keyword, it is interpreted as source from where to +initialize a TeX Live Database and lists the contained packages. +This can also be an up-to-now not used repository, both locally +and remote. If one pass in addition C<--with-platforms>, for each +package the available platforms (if any) are listed, too. + +The third form (C<add>) adds a repository +(optionally attaching a tag) to the list of repositories. The forth +form (C<remove>) removes a repository, either by full path/url, or by +tag. The last form (C<set>) sets the list of repositories to the items +given on the command line, not keeping previous settings + +In all cases, one of the repositories must be tagged as C<main>; +otherwise, all operations will fail! + +=back + + +=head2 search [I<option>...] I<what> + +=head3 search [I<option>...] --file I<what> + +=head3 search [I<option>...] --taxonomy I<what> + +=head3 search [I<option>...] --keyword I<what> + +=head3 search [I<option>...] --functionality I<what> + +=head3 search [I<option>...] --characterization I<what> + +=head3 search [I<option>...] --all I<what> + +By default, search the names, short descriptions, and long descriptions +of all locally installed packages for the argument I<what>, interpreted +as a regular expression. + +Options: + +=over 4 + +=item B<--global> + +Search the TeX Live Database of the installation medium, instead of the +local installation. + +=item B<--word> + +Restrict the search to match only full words. For example, searching for +C<table> with this option will not output packages containing the +word C<tables> (unless they also contain the word C<table> on its own). + +=item B<--list> + +If a search for any (or all) taxonomies is done, by specifying one of +the taxonomy options below, then instead of searching for packages, list +the entire corresponding taxonomy (or all of them). See +L</"TAXONOMIES"> below. + +=back + +Other search options are selected by specifying one of the following: + +=over 4 + +=item B<--file> + +List all filenames containing I<what>. + +=item B<--taxonomy> + +=item B<--keyword> + +=item B<--functionality> + +=item B<--characterization> + +Search in the corresponding taxonomy (or all) instead of the package +descriptions. See L</"TAXONOMIES"> below. + +=item B<--all> + +Search for package names, descriptions, and taxonomies, but not files. + +=back + + +=head2 uninstall + +Uninstalls the entire TeX Live installation. Options: + +=over 4 + +=item B<--force> + +Do not ask for confirmation, remove immediately. + +=back + + +=head2 update [I<option>]... [I<pkg>]... + +Updates the packages given as arguments to the latest version available +at the installation source. Either C<--all> or at least one I<pkg> name +must be specified. Options: + +=over 4 + +=item B<--all> + +Update all installed packages except for C<tlmgr> itself. Thus, if +updates to C<tlmgr> itself are present, this will simply give an error, +unless also the option C<--force> or C<--self> is given. (See below.) + +In addition to updating the installed packages, during the update of a +collection the local installation is (by default) synchronized to the +status of the collection on the server, for both additions and removals. + +This means that if a package has been removed on the server (and thus +has also been removed from the respective collection), C<tlmgr> will +remove the package in the local installation. This is called +``auto-remove'' and is announced as such when using the option +C<--list>. This auto-removal can be suppressed using the option +C<--no-auto-remove>. + +Analogously, if a package has been added to a collection on the server +that is also installed locally, it will be added to the local +installation. This is called ``auto-install'' and is announced as such +when using the option C<--list>. This auto-installation can be +suppressed using the option C<--no-auto-install>. + +An exception to the collection dependency checks (including the +auto-installation of packages just mentioned) are those that have been +``forcibly removed'' by you, that is, you called C<tlmgr remove --force> +on them. (See the C<remove> action documentation.) To reinstall any +such forcibly removed packages use C<--reinstall-forcibly-removed>. + +If you want to exclude some packages from the current update run (e.g., +due to a slow link), see the C<--exclude> option below. + +=item B<--self> + +Update C<tlmgr> itself (that is, the infrastructure packages) if updates +to it are present. On Windows this includes updates to the private Perl +interpreter shipped inside TeX Live. + +If this option is given together with either C<--all> or a list of +packages, then C<tlmgr> will be updated first and, if this update +succeeds, the new version will be restarted to complete the rest of the +updates. + +In short: + + tlmgr update --self # update infrastructure only + tlmgr update --self --all # update infrastructure and all packages + tlmgr update --force --all # update all packages but *not* infrastructure + # ... this last at your own risk, not recommended! + +=item B<--dry-run> + +Nothing is actually installed; instead, the actions to be performed are +written to the terminal. This is a more detailed report than C<--list>. + +=item B<--list> [I<pkg>] + +Concisely list the packages which would be updated, newly installed, or +removed, without actually changing anything. +If C<--all> is also given, all available updates are listed. +If C<--self> is given, but not C<--all>, only updates to the +critical packages (tlmgr, texlive infrastructure, perl on Windows, etc.) +are listed. +If neither C<--all> nor C<--self> is given, and in addition no I<pkg> is +given, then C<--all> is assumed (thus, C<tlmgr update --list> is the +same as C<tlmgr update --list --all>). +If neither C<--all> nor C<--self> is given, but specific package names are +given, those packages are checked for updates. + +=item B<--exclude> I<pkg> + +Exclude I<pkg> from the update process. If this option is given more +than once, its arguments accumulate. + +An argument I<pkg> excludes both the package I<pkg> itself and all +its related platform-specific packages I<pkg.ARCH>. For example, + + tlmgr update --all --exclude a2ping + +will not update C<a2ping>, C<a2ping.i386-linux>, or +any other C<a2ping.>I<ARCH> package. + +If this option specifies a package that would otherwise be a candidate +for auto-installation, auto-removal, or reinstallation of a forcibly +removed package, C<tlmgr> quits with an error message. Excludes are not +supported in these circumstances. + +=item B<--no-auto-remove> [I<pkg>]... + +Under normal circumstances C<tlmgr> tries to remove packages which have +disappeared on the server, as described above under C<--all>. This +option prevents any such removals, either for all packages (with +C<--all>), or the given I<pkg> names. + +=item B<--no-auto-install> [I<pkg>]... + +Under normal circumstances C<tlmgr> will install packages which are new +on the server, as described above under C<--all>. This option prevents +any such automatic installation, either for all packages (with +C<--all>), or the given I<pkg> names. + +Furthermore, after the C<tlmgr> run using this has finished, the +packages that would have been auto-installed I<will be considered as +forcibly removed>. So, if C<foobar> is the only new package on the +server, then + + tlmgr update --all --no-auto-install + +is equivalent to + + tlmgr update --all + tlmgr remove --force foobar + +=item B<--reinstall-forcibly-removed> + +Under normal circumstances C<tlmgr> will not install packages that have +been forcibly removed by the user; that is, removed with C<remove +--force>, or whose installation was prohibited by C<--no-auto-install> +during an earlier update. + +This option makes C<tlmgr> ignore the forcible removals and re-install +all such packages. This can be used to completely synchronize an +installation with the server's idea of what is available: + + tlmgr update --reinstall-forcibly-removed --all + +=item B<--backup> and B<--backupdir> I<directory> + +These two options control the creation of backups of packages I<before> +updating; that is, backup of packages as currently installed. If +neither of these options are given, no backup package will be saved. If +C<--backupdir> is given and specifies a writable directory then a backup +will be made in that location. If only C<--backup> is given, then a +backup will be made to the directory previously set via the C<option> +action (see below). If both are given then a backup will be made to the +specified I<directory>. + +You can set options via the C<option> action to automatically create +backups for all packages, and/or keep only a certain number of +backups. Please see the C<option> action for details. + +C<tlmgr> always makes a temporary backup when updating packages, in case +of download or other failure during an update. In contrast, the purpose +of this C<--backup> option is to allow you to save a persistent backup +in case the actual I<content> of the update causes problems, e.g., +introduces an incompatibility. + +The C<restore> action explains how to restore from a backup. + +=item B<--no-depends> + +If you call for updating a package normally all depending packages +will also be checked for updates and updated if necessary. This switch +suppresses this behavior. + +=item B<--no-depends-at-all> + +See above under B<install> (and beware). + +=item B<--force> + +Force update of normal packages, without updating C<tlmgr> itself +(unless the C<--self> option is also given). Not recommended. + +Also, C<update --list> is still performed regardless of this option. + +=back + +If the package on the server is older than the package already installed +(e.g., if the selected mirror is out of date), C<tlmgr> does not +downgrade. Also, packages for uninstalled platforms are not installed. + + +=head1 TLMGR CONFIGURATION FILE + +A small subset of the command line options can be set in a config file +for C<tlmgr> which resides in C<TEXMFCONFIG/tlmgr/config>. By default, the +config file is in C<~/.texliveYYYY/texmf-config/tlmgr/config> (replacing +C<YYYY> with the year of your TeX Live installation). This is I<not> +C<TEXMFSYSVAR>, so that the file is specific to a single user. + +In this file, empty lines and lines starting with # are ignored. All +other lines must look like + + key = value + +where the allowed keys are +C<gui-expertmode> (values 0 or 1), +C<persistent-downloads> (values 0 or 1), C<auto-remove> (values 0 or 1), +and C<gui-lang> (values like the command line arguments). +C<persistent-downloads>, C<gui-lang>, and C<auto-remove> correspond to the +respective command line options of the same name. +C<gui-expertmode> switches between the full +GUI and a simplified GUI with only the important and mostly used +settings. + + +=head1 TAXONOMIES + +tlmgr allows searching and listing of various categorizations, which we +call I<taxonomies>, as provided by an enhanced TeX Catalogue (available +for testing at L<http://az.ctan.org>). This is useful when, for +example, you don't know a specific package name but have an idea of the +functionality you need; or when you want to see all packages relating to +a given area. + +There are three different taxonomies, specified by the following +options: + +=over 4 + +=item B<--keyword> + +The keywords, as specified at L<http://az.ctan.org/keyword>. + +=item B<--functionality> + +The ``by-topic'' categorization created by J\"urgen Fenn, as specified +at L<http://az.ctan.org/characterization/by-function>. + +=item B<--characterization> + +Both the primary and secondary functionalities, as specified at +L<http://az.ctan.org/characterization/choose_dimen>. + +=item B<--taxonomy> + +Operate on all the taxonomies. + +=back + +The taxonomies are updated nightly and stored within TeX Live, so +Internet access is not required to search them. + +Examples: + + tlmgr search --taxonomy exercise # check all taxonomies for "exercise" + tlmgr search --taxonomy --word table # check for "table" on its own + tlmgr search --list --keyword # dump entire keyword taxonomy + tlmgr show --taxonomy pdftex # show pdftex package information, + # including all taxonomy entries + + +=head1 MULTIPLE REPOSITORIES + +The main TeX Live repository contains a vast array of packages. +Nevertheless, additional local repositories can be useful to provide +locally-installed resources, such as proprietary fonts and house styles. +Also, alternative package repositories distribute packages that cannot +or should not be included in TeX Live, for whatever reason. + +The simplest and most reliable method is to temporarily set the +installation source to any repository (with the C<-repository> or +C<option repository> command line options), and perform your operations. + +When you are using multiple repositories over a sustained time, however, +explicitly switching between them becomes inconvenient. Thus, it's +possible to tell C<tlmgr> about additional repositories you want to use. +The basic command is C<tlmgr repository add>. The rest of this section +explains further. + +When using multiple repositories, one of them has to be set as the main +repository, which distributes most of the installed packages. When you +switch from a single repository installation to a multiple repository +installation, the previous sole repository will be set as the main +repository. + +By default, even if multiple repositories are configured, packages are +I<still> I<only> installed from the main repository. Thus, simply +adding a second repository does not actually enable installation of +anything from there. You also have to specify which packages should be +taken from the new repository, by specifying so-called ``pinning'' +rules, described next. + +=head2 Pinning + +When a package C<foo> is pinned to a repository, a package C<foo> in any +other repository, even if it has a higher revision number, will not be +considered an installable candidate. + +As mentioned above, by default everything is pinned to the main +repository. Let's now go through an example of setting up a second +repository and enabling updates of a package from it. + +First, check that we have support for multiple repositories, and have +only one enabled (as is the case by default): + + $ tlmgr repository list + List of repositories (with tags if set): + /var/www/norbert/tlnet + +Ok. Let's add the C<tlcontrib> repository (this is a real +repository, hosted at L<http://tlcontrib.metatex.org>, maintained by +Taco Hoekwater et al.), with the tag C<tlcontrib>: + + $ tlmgr repository add http://tlcontrib.metatex.org/2012 tlcontrib + +Check the repository list again: + + $ tlmgr repository list + List of repositories (with tags if set): + http://tlcontrib.metatex.org/2012 (tlcontrib) + /var/www/norbert/tlnet (main) + +Now we specify a pinning entry to get the package C<context> from +C<tlcontrib>: + + $ tlmgr pinning add tlcontrib context + +Check that we can find C<context>: + + $ tlmgr show context + tlmgr: package repositories: + ... + package: context + repository: tlcontrib/26867 + ... + +- install C<context>: + + $ tlmgr install context + tlmgr: package repositories: + ... + [1/1, ??:??/??:??] install: context @tlcontrib [ + +In the output here you can see that the C<context> package has been +installed from the C<tlcontrib> repository (C<@tlcontrib>). + +Finally, C<tlmgr pinning> also supports removing certain or all packages +from a given repository: + + $ tlmgr pinning remove tlcontrib context # remove just context + $ tlmgr pinning remove tlcontrib --all # take nothing from tlcontrib + +A summary of the C<tlmgr pinning> actions is given above. + + +=head1 GUI FOR TLMGR + +The graphical user interface for C<tlmgr> needs Perl/Tk to be installed. +For Windows the necessary modules are shipped within TeX Live, for all +other (i.e., Unix-based) systems Perl/Tk (as well as Perl of course) has +to be installed. L<http://tug.org/texlive/distro.html#perltk> has a +list of invocations for some distros. + +When started with C<tlmgr gui> the graphical user interface will be +shown. The main window contains a menu bar, the main display, and a +status area where messages normally shown on the console are displayed. + +Within the main display there are three main parts: the C<Display +configuration> area, the list of packages, and the action buttons. + +Also, at the top right the currently loaded repository is shown; this +also acts as a button and when clicked will try to load the default +repository. To load a different repository, see the C<tlmgr> menu item. + +Finally, the status area at the bottom of the window gives additional +information about what is going on. + + +=head2 Main display + +=head3 Display configuration area + +The first part of the main display allows you to specify (filter) which +packages are shown. By default, all are shown. Changes here are +reflected right away. + +=over 4 + +=item Status + +Select whether to show all packages (the default), only those installed, +only those I<not> installed, or only those with update available. + +=item Category + +Select which categories are shown: packages, collections, and/or +schemes. These are briefly explained in the L</"DESCRIPTION"> section +above. + +=item Match + +Select packages matching for a specific pattern. By default, this uses +the same algorithm as C<tlmgr search>, i.e., searches everything: +descriptions, taxonomies, and/or filenames. You can also select any +subset for searching. + +=item Selection + +Select packages to those selected, those not selected, or all. Here, +``selected'' means that the checkbox in the beginning of the line of a +package is ticked. + +=item Display configuration buttons + +To the right there are three buttons: select all packages, select none +(a.k.a. deselect all), and reset all these filters to the defaults, +i.e., show all available. + +=back + +=head3 Package list area + +The second are of the main display lists all installed packages. If a +repository is loaded, those that are available but not installed are +also listed. + +Double clicking on a package line pops up an informational window with +further details: the long description, included files, etc. + +Each line of the package list consists of the following items: + +=over 4 + +=item a checkbox + +Used to select particular packages; some of the action buttons (see +below) work only on the selected packages. + +=item package name + +The name (identifier) of the package as given in the database. + +=item local revision (and version) + +If the package is installed the TeX Live revision number for the +installed package will be shown. If there is a catalogue version given +in the database for this package, it will be shown in parentheses. +However, the catalogue version, unlike the TL revision, is not +guaranteed to reflect what is actually installed. + +=item remote revision (and version) + +If a repository has been loaded the revision of the package in the +repository (if present) is shown. As with the local column, if a +catalogue version is provided it will be displayed. And also as with +the local column, the catalogue version may be stale. + +=item short description + +The short description of the package. + +=back + +=head3 Main display action buttons + +Below the list of packages are several buttons: + +=over 4 + +=item Update all installed + +This calls C<tlmgr update --all>, i.e., tries to update all available +packages. Below this button is a toggle to allow reinstallation of +previously removed packages as part of this action. + +The other four buttons only work on the selected packages, i.e., those +where the checkbox at the beginning of the package line is ticked. + +=item Update + +Update only the selected packages. + +=item Install + +Install the selected packages; acts like C<tlmgr install>, i.e., also +installs dependencies. Thus, installing a collection installs all its +constituent packages. + +=item Remove + +Removes the selected packages; acts like C<tlmgr remove>, i.e., it will +also remove dependencies of collections (but not dependencies of normal +packages). + +=item Backup + +Makes a backup of the selected packages; acts like C<tlmgr backup>. This +action needs the option C<backupdir> set (see C<Options -> General>). + +=back + + +=head2 Menu bar + +The following entries can be found in the menu bar: + +=over 4 + +=item B<tlmgr> menu + +The items here load various repositories: the default as specified in +the TeX Live database, the default network repository, the repository +specified on the command line (if any), and an arbitrarily +manually-entered one. Also has the so-necessary C<quit> operation. + +=item B<Options menu> + +Provides access to several groups of options: C<Paper> (configuration of +default paper sizes), C<Platforms> (only on Unix, configuration of the +supported/installed platforms), C<GUI Language> (select language used in +the GUI interface), and C<General> (everything else). + +Several toggles are also here. The first is C<Expert options>, which is +set by default. If you turn this off, the next time you start the GUI a +simplified screen will be shown that display only the most important +functionality. This setting is saved in the configuration file of +C<tlmgr>; see L<CONFIGURATION FILE> for details. + +The other toggles are all off by default: for debugging output, to +disable the automatic installation of new packages, and to disable the +automatic removal of packages deleted from the server. Playing with the +choices of what is or isn't installed may lead to an inconsistent TeX Live +installation; e.g., when a package is renamed. + +=item B<Actions menu> + +Provides access to several actions: update the filename database (aka +C<ls-R>, C<mktexlsr>, C<texhash>), rebuild all formats (C<fmtutil-sys +--all>), update the font map database (C<updmap-sys>), restore from a backup +of a package, and use of symbolic links in system directories (not on +Windows). + +The final action is to remove the entire TeX Live installation (also not +on Windows). + +=item B<Help menu> + +Provides access to the TeX Live manual (also on the web at +L<http://tug.org/texlive/doc.html>) and the usual ``About'' box. + +=back + + +=head1 MACHINE-READABLE OUTPUT + +With the C<--machine-readable> option, C<tlmgr> writes to stdout in the +fixed line-oriented format described here, and the usual informational +messages for human consumption are written to stderr (normally they are +written to stdout). The idea is that a program can get all the +information it needs by reading stdout. + +Currently this option only applies to the +L<update|/"update [I<option>]... [I<pkg>]...">, the +L<install|"install [I<option>]... I<pkg>...">, and the +L<option|"option"> actions. + + +=head2 update and install actions + +The output format is as follows: + + fieldname "\t" value + ... + "end-of-header" + pkgname status localrev serverrev size runtime esttot + ... + "end-of-updates" + other output from post actions, not in machine readable form + +The header section currently has two fields: C<location-url> (the +repository source from which updates are being drawn), and +C<total-bytes> (the total number of bytes to be downloaded). + +The I<localrev> and I<serverrev> fields for each package are the +revision numbers in the local installation and server repository, +respectively. The I<size> field is the number of bytes to be +downloaded, i.e., the size of the compressed tar file for a network +installation, not the unpacked size. The runtime and esttot fields +are only present for updated and auto-install packages, and contain +the currently passed time since start of installation/updates +and the estimated total time. + +Line endings may be either LF or CRLF depending on the current platform. + +=over 4 + +=item C<location-url> I<location> + +The I<location> may be a url (including C<file:///foo/bar/...>), or a +directory name (C</foo/bar>). It is the package repository from which +the new package information was drawn. + +=item C<total-bytes> I<count> + +The I<count> is simply a decimal number, the sum of the sizes of all the +packages that need updating or installing (which are listed subsequently). + +=back + +Then comes a line with only the literal string C<end-of-header>. + +Each following line until a line with literal string C<end-of-updates> +reports on one package. The fields on +each line are separated by a tab. Here are the fields. + +=over 4 + +=item I<pkgname> + +The TeX Live package identifier, with a possible platform suffix for +executables. For instance, C<pdftex> and C<pdftex.i386-linux> are given +as two separate packages, one on each line. + +=item I<status> + +The status of the package update. One character, as follows: + +=over 8 + +=item C<d> + +The package was removed on the server. + +=item C<f> + +The package was removed in the local installation, even though a +collection depended on it. (E.g., the user ran C<tlmgr remove +--force>.) + +=item C<u> + +Normal update is needed. + +=item C<r> + +Reversed non-update: the locally-installed version is newer than the +version on the server. + +=item C<a> + +Automatically-determined need for installation, the package is new on +the server and is (most probably) part of an installed collection. + +=item C<i> + +Package will be installed and isn't present in the local installation +(action install). + +=item C<I> + +Package is already present but will be reinstalled (action install). + +=back + +=item I<localrev> + +The revision number of the installed package, or C<-> if it is not +present locally. + +=item I<serverrev> + +The revision number of the package on the server, or C<-> if it is not +present on the server. + +=item I<size> + +The size in bytes of the package on the server. The sum of all the +package sizes is given in the C<total-bytes> header field mentioned above. + +=item I<runtime> + +The run time since start of installations or updates. + +=item I<esttot> + +The estimated total time. + +=back + +=head2 option action + +The output format is as follows: + + key "\t" value + +If a value is not saved in the database the string C<(not set)> is shown. + +If you are developing a program that uses this output, and find that +changes would be helpful, do not hesitate to write the mailing list. + + +=head1 AUTHORS AND COPYRIGHT + +This script and its documentation were written for the TeX Live +distribution (L<http://tug.org/texlive>) and both are licensed under the +GNU General Public License Version 2 or later. + +=cut + +# to remake HTML version: pod2html --cachedir=/tmp tlmgr.pl >/foo/tlmgr.html. + +### Local Variables: +### perl-indent-level: 2 +### tab-width: 2 +### indent-tabs-mode: nil +### End: +# vim:set tabstop=2 expandtab: # diff --git a/Master/texmf-dist/scripts/texlive/tlmgrgui.pl b/Master/texmf-dist/scripts/texlive/tlmgrgui.pl new file mode 100644 index 00000000000..b6aacb96860 --- /dev/null +++ b/Master/texmf-dist/scripts/texlive/tlmgrgui.pl @@ -0,0 +1,2703 @@ +#!/usr/bin/env perl +# $Id$ +# +# Copyright 2009, 2010, 2011, 2012 Norbert Preining +# This file is licensed under the GNU General Public License version 2 +# or any later version. +# +# GUI for tlmgr +# version 2, completely rewritten GUI +# +# TODO: Fix return codes of execute_action sub items and execute_action +# so that we can give a decent warning window +# TODO: implement path adjustment also for Windows + +$^W = 1; +use strict; + +my $guisvnrev = '$Revision$'; +my $guidatrev = '$Date$'; +my $tlmgrguirevision; +if ($guisvnrev =~ m/: ([0-9]+) /) { + $tlmgrguirevision = $1; +} else { + $tlmgrguirevision = "unknown"; +} +$guidatrev =~ s/^.*Date: //; +$guidatrev =~ s/ \(.*$//; +$tlmgrguirevision .= " ($guidatrev)"; + +use Tk; +use Tk::Dialog; +use Tk::Adjuster; +use Tk::BrowseEntry; +use Tk::ROText; +use Tk::HList; +use Tk::ItemStyle; +use File::Glob; + +use Pod::Text; + +#use TeXLive::Splashscreen; +#use Devel::Leak; + +use TeXLive::TLUtils qw(setup_programs platform_desc win32 debug); +use TeXLive::TLConfig; + +# +# GUI mode +# +our %config; +my $mode_expert = $config{"gui-expertmode"}; + +# +# stuff defined in tlmgr.pl that needs to be our-ed +our $Master; +our $remotetlpdb; +our $localtlpdb; +our $location; +our %opts; +our @update_function_list; + +my $tlpdb_location; +my %tlpdb_repos; +my @tlpdb_tags; +my $cmdline_location; +my @critical_updates = (); + +my $single_repo_mode = 1; +my %repos; +my @tags; + +my $location_button; # uggg, change from far away ... + +# +# shortcuts for padding, expand/fill, and pack sides, anchors +my @p_ii = qw/-padx 2m -pady 2m/; +my @p_iii= qw/-padx 3m -pady 3m/; +my @x_x = qw/-expand 1 -fill x/; +my @x_y = qw/-expand 1 -fill y/; +my @x_xy= qw/-expand 1 -fill both/; +my @left = qw/-side left/; +my @right= qw/-side right/; +my @bot = qw/-side bottom/; +my @a_w = qw/-anchor w/; +my @a_c = qw/-anchor c/; +my @htype = qw/-relief ridge/; + +# +# the list of packages as shown by TixGrid +# +my %Packages; +my $taxonomy; +my $mw; +my $tlmgrrev; +my $menu; +my $menu_file; +my $menu_options; +my $menu_actions; +my $menu_help; + +# default color for background +my $bgcolor; + +# +# GUI elements +# +my $g; # the scrolled list of packages +my $lighttext; +my $darktext; +my $match_entry; +my $loaded_text; +my $loaded_text_button; + +my %settings_label; + +# +# communication between filters and the rest +my $status_all = 0; +my $status_only_installed = 1; +my $status_only_not_installed = 2; +my $status_only_updated = 3; +my $status_value = 0; +my $show_packages = 1; +my $show_collections = 1; +my $show_schemes = 1; +my $match_descriptions = 1; +my $match_filenames = 1; +my $match_taxonomies = 1; +my $match_text = ""; +my $selection_value = 0; + + +# prepare for loading of lang.pl which expects $::lang and $::opt_lang +$::opt_lang = $config{"gui-lang"} if (defined($config{"gui-lang"})); +$::opt_lang = $opts{"gui-lang"} if (defined($opts{"gui-lang"})); +require("TeXLive/trans.pl"); + + +my @archsavail; +my @archsinstalled; +my %archs; +my $currentarch; + +my @fileassocdesc; +$fileassocdesc[0] = __("None"); +$fileassocdesc[1] = __("Only new"); +$fileassocdesc[2] = __("All"); +my %defaults; +my %changeddefaults; + +my %papers; +my %currentpaper; +my %changedpaper; +my %init_paper_subs; +$init_paper_subs{"xdvi"} = \&init_paper_xdvi; +$init_paper_subs{"pdftex"} = \&init_paper_pdftex; +$init_paper_subs{"dvips"} = \&init_paper_dvips; +$init_paper_subs{"context"} = \&init_paper_context; +$init_paper_subs{"dvipdfm"} = \&init_paper_dvipdfm; +$init_paper_subs{"dvipdfmx"} = \&init_paper_dvipdfmx; + + +guimain(); + +############# MAIN FUNCTION ########################## + +sub guimain { + build_initial_gui(); + init_hooks(); + + info(__("Loading local TeX Live database;\nthis may take some time, please be patient ...") . "\n"); + + # call the init function from tlmgr.pl + # with 0 as argument, so that it does not call die on errors. + init_local_db(0); + # before this code was used, which is a duplication, and in addition + # it does not handle auto-loading of $location + #$localtlmedia = TeXLive::TLMedia->new ( $Master ); + #die("cannot setup TLMedia in $Master") unless (defined($localtlmedia)); + #$localtlpdb = $localtlmedia->tlpdb; + #die("cannot find tlpdb!") unless (defined($localtlpdb)); + + # + # init_local_db sets up $location to the winning one: + # cmd line > tlpdb + # save the two possible location for the menu + $tlpdb_location = $localtlpdb->option("location"); + %tlpdb_repos = repository_to_array($tlpdb_location); + @tlpdb_tags = keys %tlpdb_repos; + if (defined($opts{"location"})) { + $cmdline_location = $opts{"location"}; + } + + + push @update_function_list, \&check_location_on_ctan; + push @update_function_list, \&init_install_media; + + # already done by init_local_db above + # setup_programs("$Master/tlpkg/installer", $localtlmedia->platform); + + # + # check that we can actually save the database + # + if (check_on_writable()) { + $::we_can_save = 1; + } else { + $::we_can_save = 0; + # here we should pop up a warning window!!! + } + $::action_button_state = ($::we_can_save ? "normal" : "disabled"); + + $tlmgrrev = give_version(); + chomp($tlmgrrev); + + setup_menu_system(); + $taxonomy = load_taxonomy_datafile(); + if (!defined($taxonomy)) { + info(__("Cannot load taxonomy file") . "\n"); + } + do_rest_of_gui(); + $bgcolor = $loaded_text->cget('-background'); + + setup_list(); + update_grid(); + + + if ($opts{"load"}) { + setup_location($tlpdb_location); + } + + + info(__("... done loading") . ".\n"); + $mw->deiconify; + + + if (!$::we_can_save) { + my $no_write_warn = $mw->Dialog(-title => __("Warning"), + -text => __("You don't have permissions to change the installation in any way,\nspecifically, the directory %s is not writable.\nPlease run this program as administrator, or contact your local admin.\n\nMost buttons will be disabled.", "$Master/tlpkg/"), + -buttons => [ __("Ok") ])->Show(); + } + + Tk::MainLoop(); +} + + +############## GUI ######################## + +sub build_initial_gui { + $mw = MainWindow->new; + $mw->title("TeX Live Manager $TeXLive::TLConfig::ReleaseYear"); + $mw->withdraw; + + # + # default layout definitions + # + # priority 20 = widgetDefault + # see Mastering Perl/Tk, 16.2. Using the Option Database + $mw->optionAdd("*Button.Relief", "ridge", 20); + # + # does not work, makes all buttons exactely 10, which is not a good idea + # I would like to have something like MinWidth 10... + #$mw->optionAdd("*Button.Width", "10", 20); + + # create a progress bar window + $::progressw = $mw->Scrolled("ROText", -scrollbars => "e", -height => 4); + $::progressw->pack(-fill => "x", @bot); +} + +sub do_rest_of_gui { + # This needs to come first as we call update_grid rather early + #my $list_frame = $mw->Labelframe(-text => "Packages"); + my $gf = $mw->Frame; + + #my $list_frame = $mw->Frame; + my $list_frame = $gf->Frame; + $g = $list_frame->Scrolled('HList', -scrollbars => "se", -bd => 0, + -command => \&show_extended_info, # does not work, double click! + -columns => 5, -header => 1, + -borderwidth => 1, #-padx => 0, -pady => 0, + -separator => "/", + -selectmode => "none"); + + my $button_frame = $mw->Frame; + $loaded_text_button = $button_frame->Button(-text => __("Load default"), + -command => sub { setup_location($tlpdb_location); }); + $loaded_text_button->pack( + -anchor => 'e', -padx => 0, -pady => 0, + -ipadx => 0, -ipady => 0, -side => 'right'); + $loaded_text = $button_frame->Label( + -text => __("Loaded repository:") . " " . __("none")); + $loaded_text->pack(-anchor => 'e', -padx => 0, -pady => 0, + -ipadx => 0, -ipady => 0, -side => 'right'); + + #$button_frame->pack(-expand => 1, -fill => 'x', @p_ii); + + #my $top_frame = $mw->Labelframe(-text => __("Display configuration")); + my $top_frame = $gf->Labelframe(-text => __("Display configuration")); + + my $filter_frame = $top_frame->Frame(); + $filter_frame->pack(-expand => 1, -fill => 'both'); + + my $filter_status = $filter_frame->Labelframe(-text => __("Status")); + $filter_status->pack(@left, @x_y, @p_ii); + + $filter_status->Radiobutton(-text => __("all"), -command => \&update_grid, + -variable => \$status_value, -value => $status_all)->pack(@a_w); + $filter_status->Radiobutton(-text => __("installed"), -command => \&update_grid, + -variable => \$status_value, -value => $status_only_installed)->pack(@a_w); + $filter_status->Radiobutton(-text => __("not installed"), -command => \&update_grid, + -variable => \$status_value, -value => $status_only_not_installed)->pack(@a_w); + $filter_status->Radiobutton(-text => __("updates"), -command => \&update_grid, + -variable => \$status_value, -value => $status_only_updated)->pack(@a_w); + + my $filter_category = $filter_frame->Labelframe(-text => __("Category")); + if ($mode_expert) { $filter_category->pack(@left, @x_y, @p_ii); } + $filter_category->Checkbutton(-text => __("packages"), -command => \&update_grid, + -variable => \$show_packages)->pack(@a_w); + $filter_category->Checkbutton(-text => __("collections"), -command => \&update_grid, + -variable => \$show_collections)->pack(@a_w); + $filter_category->Checkbutton(-text => __("schemes"), -command => \&update_grid, + -variable => \$show_schemes)->pack(@a_w); + + my $filter_match = $filter_frame->Labelframe(-text => __("Match")); + $filter_match->pack(@left, @x_y, @p_ii); + $match_entry = + $filter_match->Entry(-width => 15, -validate => 'key', + )->pack(@a_w, -padx => '2m', @x_x); + $filter_match->Checkbutton(-text => __("descriptions"), + -command => \&update_grid, + -variable => \$match_descriptions)->pack(@a_w); + $filter_match->Checkbutton(-text => __("taxonomies"), + -command => \&update_grid, + -state => (defined($taxonomy) ? "normal" : "disabled"), + -variable => \$match_taxonomies)->pack(@a_w); + $filter_match->Checkbutton(-text => __("filenames"), + -command => \&update_grid, + -variable => \$match_filenames)->pack(@a_w); + + $match_entry->configure(-validate => 'key', + -validatecommand => sub { + my ($new_val, undef, $old_val) = @_; + # if (!$new_val) { + # $match_descriptions = 0; + # $match_taxonomies = 0; + # $match_filenames = 0; + # } else { + # # if something is already in the search field don't change selection + # if (!$old_val) { + # $match_descriptions = 1; + # $match_taxonomies = 1 if (defined($taxonomy)); + # $match_filenames = 1; + # } + # } + $match_text = $new_val; + update_grid(); return 1; }); + + my $filter_selection = $filter_frame->Labelframe(-text => __("Selection")); + if ($mode_expert) { $filter_selection->pack(@left, @x_y, @p_ii); } + $filter_selection->Radiobutton(-text => __("all"), -command => \&update_grid, + -variable => \$selection_value, -value => 0)->pack(@a_w); + $filter_selection->Radiobutton(-text => __("selected"), + -command => \&update_grid, -variable => \$selection_value, -value => 1) + ->pack(@a_w); + $filter_selection->Radiobutton(-text => __("not selected"), + -command => \&update_grid, -variable => \$selection_value, -value => 2) + ->pack(@a_w); + + + my $filter_button = $filter_frame->Frame; + $filter_button->pack(@left, @x_y, @p_ii); + if ($mode_expert) { + $filter_button->Button(-text => __("Select all"), + -command => [ \&update_grid, 1 ])->pack(@x_x, @a_c); + $filter_button->Button(-text => __("Select none"), + -command => [ \&update_grid, 0 ])->pack(@x_x, @a_c); + } + + $filter_button->Button(-text => __("Reset filters"), + -command => sub { $status_value = $status_all; + $show_packages = 1; $show_collections = 1; + $show_schemes = 1; + $selection_value = 0; + $match_descriptions = 1; + $match_taxonomies = 1; + $match_filenames = 1; + update_grid(); + })->pack(@x_x, @a_c); + + ########## Packages ####################### + $g->pack(qw/-expand 1 -fill both -padx 3 -pady 3/); + $g->focus; + + $lighttext = $g->ItemStyle('text', -background => 'gray90', + -selectbackground => 'gray90', -selectforeground => 'blue'); + $darktext = $g->ItemStyle('text', -background => 'gray70', + -selectbackground => 'gray70', -selectforeground => 'blue'); + + + $g->headerCreate(0, @htype, -itemtype => 'text', -text => ""); + $g->headerCreate(1, @htype, -itemtype => 'text', -text => __("Package name")); + $g->headerCreate(2, @htype, -itemtype => 'text', -text => __("Local rev. (ver.)")); + $g->headerCreate(3, @htype, -itemtype => 'text', -text => __("Remote rev. (ver.)")); +$g->headerCreate(4, @htype, -itemtype => 'text', -text => __("Short description")); + + $g->columnWidth(0, 40); + $g->columnWidth(2, -char => 20); + $g->columnWidth(3, -char => 20); + + my $bot_frame = $gf->Frame; + #my $bot_frame = $mw->Frame; + + my $actions_frame = $bot_frame->Frame; + $actions_frame->pack(); + + my $with_all_frame = $actions_frame->Frame; + $with_all_frame->pack(@left, -padx => '5m'); + $with_all_frame->Button(-text => __('Update all installed'), + -state => $::action_button_state, + -command => sub { update_all_packages(); } + )->pack(@p_ii); + $with_all_frame->Checkbutton(-text => __("Reinstall previously removed packages"), + -variable => \$opts{"reinstall-forcibly-removed"})->pack(); + + + my $with_sel_frame = $actions_frame->Frame; + $with_sel_frame->pack(@left, -padx => '5m'); + + + # + # disable the with filter applied or not applied, it is too complicated, or? + # + + if ($mode_expert) { + $with_sel_frame->Button(-text => __('Update'), + -state => $::action_button_state, + -command => sub { update_selected_packages(); } + )->pack(@left, @p_ii); + } + $with_sel_frame->Button(-text => __('Install'), + -state => $::action_button_state, + -command => sub { install_selected_packages(); } + )->pack(@left, @p_ii); + $with_sel_frame->Button(-text => __('Remove'), + -state => $::action_button_state, + -command => sub { remove_selected_packages(); } + )->pack(@left, @p_ii); + if ($mode_expert) { + $with_sel_frame->Button(-text => __('Backup'), + -state => $::action_button_state, + -command => sub { backup_selected_packages(); } + )->pack(@left, @p_ii); + } + + $button_frame->pack(-expand => 0, -fill => 'x', @p_ii); + $top_frame->pack(-fill => 'x', -padx => '2m'); + $bot_frame->pack(-fill => 'x', @p_ii, -side => 'bottom'); + $list_frame->pack(@x_xy, @p_ii); + + $mw->Adjuster(-widget => $::progressw, -side => 'bottom') + ->pack(-side => 'bottom', -fill => 'x'); + + $gf->pack(-side => 'top', -fill => 'both', -expand => 1); + +} + +########### LOGGING ETC FUNCTIONS ############# + +sub update_status_box { + update_status(join(" ", @_)); + $mw->update; +} + +sub init_hooks { + push @::info_hook, \&update_status_box; + push @::warn_hook, \&update_status_box; + push @::debug_hook, \&update_status_box; + push @::ddebug_hook, \&update_status_box; + push @::dddebug_hook, \&update_status_box; +} + +sub update_status { + my ($p) = @_; + $::progressw->insert("end", "$p"); + $::progressw->see("end"); +} + +############# GUI CALLBACKS ################## + +sub setup_menu_system { + $menu = $mw->Menu(); + $menu_file = $menu->Menu(); + $menu_options = $menu->Menu(); + $menu_actions = $menu->Menu(); + $menu_help = $menu->Menu(); + $menu->add('cascade', -label => "tlmgr", -menu => $menu_file); + $menu->add('cascade', -label => __("Options"), -menu => $menu_options); + if ($mode_expert) { + $menu->add('cascade', -label => __("Actions"), -menu => $menu_actions); + } + # on win32 people expect to have the Help button on the right side + if (win32()) { $menu->add('separator'); } + $menu->add('cascade', -label => __("Help"), -menu => $menu_help); + + # + # FILE MENU + # + my %foo = repository_to_array($tlpdb_location); + my @bar = keys %foo; + my $tlpdb_location_string = $tlpdb_location; + if ($#bar > 0) { + $tlpdb_location_string = __("multiple repositories"); + } + $menu_file->add('command', + -label => __("Load default repository:") . " $tlpdb_location_string", + -command => sub { setup_location($tlpdb_location); }); + if (defined($cmdline_location)) { + $menu_file->add('command', -label => __("Load cmd line repository:") . " $cmdline_location", + -command => sub { setup_location($cmdline_location); }); + } + $menu_file->add('command', -label => __("Load default net repository:") . " $TeXLiveURL", + -command => sub { setup_location($TeXLiveURL); }); + if ($mode_expert) { + $menu_file->add('command', -label => __("Load other repository ..."), + -command => \&cb_edit_location); + } + $menu_file->add('separator'); + $menu_file->add('command', -label => __("Quit"), + -command => sub { $mw->destroy; exit(0); }); + + # + # OPTIONS MENU + # + $menu_options->add('command', -label => __("General ..."), + -command => sub { do_general_settings(); }); + $menu_options->add('command', -label => __("Paper ..."), + -command => sub { do_paper_settings(); }); + if (!win32() && $mode_expert) { + $menu_options->add('command', -label => __("Platforms ..."), + -command => sub { do_arch_settings(); }); + } + if ($mode_expert) { + $menu_options->add('command', -label => __("GUI Language ..."), + -command => sub { do_gui_language_setting(); }); + } + $menu_options->add('separator'); + $menu_options->add('checkbutton', -label => __("Expert options"), + -variable => \$mode_expert, + -command => sub { do_and_warn_gui_mode_settings(); }); + if ($mode_expert) { + $menu_options->add('checkbutton', -label => __("Enable debugging output"), + -onvalue => ($::opt_verbosity == 0 ? 1 : $::opt_verbosity), + -variable => \$::opt_verbosity); + $menu_options->add('checkbutton', + -label => __("Disable auto-install of new packages"), + -variable => \$opts{"no-auto-install"}); + $menu_options->add('checkbutton', + -label => __("Disable auto-removal of server-deleted packages"), + -variable => \$opts{"no-auto-remove"}); + } + + # + # Actions menu + # + $menu_actions->add('command', -label => __("Update filename database"), + -state => $::action_button_state, + -command => sub { + $mw->Busy(-recurse => 1); + info("Running mktexlsr, this may take some time ...\n"); + info(`mktexlsr 2>&1`); + $mw->Unbusy; + }); + $menu_actions->add('command', -label => __("Rebuild all formats"), + -state => $::action_button_state, + -command => sub { + $mw->Busy(-recurse => 1); + info("Running fmtutil-sys --all, this may take some time ...\n"); + for my $l (`fmtutil-sys --all 2>&1`) { + info($l); + $mw->update; + } + $mw->Unbusy; + }); + $menu_actions->add('command', -label => __("Update font map database"), + -state => $::action_button_state, + -command => sub { + $mw->Busy(-recurse => 1); + info("Running updmap-sys, this may take some time ...\n"); + for my $l (`updmap-sys 2>&1`) { + info($l); + $mw->update; + } + $mw->Unbusy; + }); + + $menu_actions->add('command', + -label => __("Restore packages from backup") . " ...", + -state => $::action_button_state, + -command => \&cb_handle_restore); + + if (!win32()) { + $menu_actions->add('command', + -label => __("Handle symlinks in system dirs") . " ...", + -state => $::action_button_state, + -command => \&cb_handle_symlinks); + } + if (!win32()) { + $menu_actions->add('separator'); + $menu_actions->add('command', -label => __("Remove TeX Live %s ...", $TeXLive::TLConfig::ReleaseYear), + -state => $::action_button_state, + -command => sub { + my $sw = $mw->DialogBox(-title => __("Remove TeX Live %s", $TeXLive::TLConfig::ReleaseYear), + -buttons => [ __("Ok"), __("Cancel") ], + -cancel_button => __("Cancel"), + -command => sub { + my $b = shift; + if ($b eq __("Ok")) { + system("tlmgr", "uninstall", "--force"); + $mw->Dialog(-text => __("Complete removal finished"), -buttons => [ __("Ok") ])->Show; + $mw->destroy; + exit(0); + } + }); + $sw->add("Label", -text => __("Really remove (uninstall) the COMPLETE TeX Live %s installation?\nYour last chance to change your mind!", $TeXLive::TLConfig::ReleaseYear))->pack(@p_iii); + $sw->Show; + }); + } + + + + # + # HELP MENU + $menu_help->add('command', -label => __("Manual"), -command => \&pod_to_text); + $menu_help->add('command', -label => __("About"), + -command => sub { + my $sw = $mw->DialogBox(-title => __("About"), + -buttons => [ __("Ok") ]); + $sw->add("Label", -text => "TeX Live Manager + +tlmgrgui revision $tlmgrguirevision +$tlmgrrev +Copyright 2009-2012 Norbert Preining + +Licensed under the GNU General Public License version 2 or higher +In case of problems, please contact: texlive\@tug.org" + )->pack(@p_iii); + $sw->Show; + }); + + + $mw->configure(-menu => $menu); +} + +sub show_extended_info { + my $p = shift; + $g->selectionClear; + $g->anchorClear; + my $sw = $mw->Toplevel(-title => __("Details on:") . $p, @p_ii); + $sw->transient($mw); + + my $tlp = $Packages{$p}{'tlp'}; + + our $tf = $sw->Frame; + my $bf = $sw->Frame; + $tf->pack; + $bf->pack(-pady => '3m'); + + $tf->Label(-text => __("Package:"))->grid( + $tf->Label(-text => $p), -sticky => "nw"); + $tf->Label(-text => __("Category:"))->grid( + $tf->Label(-text => $tlp->category), -sticky => "nw"); + $tf->Label(-text => __("Short description:"))->grid( + $tf->Label(-wraplength => '500', -justify => 'left', + -text => $tlp->shortdesc), -sticky => "nw"); + # old version with ROText + #my $t = $sw->Scrolled('ROText', -scrollbars => "oe", -height => 10, + # -width => 50, -wrap => 'word', -relief => 'flat'); + #$t->insert("1.0", $tlp->longdesc); + #$sw->Label(-text => "Long Desc:")->grid($t, -sticky => 'nw'); + $tf->Label(-text => __("Long description:"))->grid( + $tf->Label(-wraplength => '500', -justify => 'left', + -text => $tlp->longdesc), -sticky => "nw"); + $tf->Label(-text => __("Installed:"))->grid( + $tf->Label(-text => ($Packages{$p}{'installed'} ? __("Yes") : __("No"))), + -sticky => "nw"); + $tf->Label(-text => __("Local Revision:"))->grid( + $tf->Label(-text => $Packages{$p}{'localrevision'}), + -sticky => "nw"); + if (defined($Packages{$p}{'localcatalogueversion'})) { + $tf->Label(-text => __("Local Catalogue Version:"))->grid( + $tf->Label(-text => $Packages{$p}{'localcatalogueversion'}), + -sticky => "nw"); + } + $tf->Label(-text => __("Remote Revision:"))->grid( + $tf->Label(-text => $Packages{$p}{'remoterevisionstring'}), + -sticky => "nw"); + if (defined($Packages{$p}{'remotecatalogueversion'})) { + $tf->Label(-text => __("Remote Catalogue Version:"))->grid( + $tf->Label(-text => $Packages{$p}{'remotecatalogueversion'}), + -sticky => "nw"); + } + if (defined($Packages{$p}{'keyword'})) { + $tf->Label(-text => __("Keywords:"))->grid( + $tf->Label(-text => $Packages{$p}{'keyword'}), + -sticky => "nw"); + } + if (defined($Packages{$p}{'functionality'})) { + $tf->Label(-text => __("Functionality:"))->grid( + $tf->Label(-text => $Packages{$p}{'functionality'}), + -sticky => "nw"); + } + if (defined($Packages{$p}{'primary'})) { + $tf->Label(-text => __("Primary characterization:"))->grid( + $tf->Label(-text => $Packages{$p}{'primary'}), + -sticky => "nw"); + } + if (defined($Packages{$p}{'secondary'})) { + $tf->Label(-text => __("Secondary characterization:"))->grid( + $tf->Label(-text => $Packages{$p}{'secondary'}), + -sticky => "nw"); + } + if ($remotetlpdb) { + my @colls; + if ($tlp->category ne "Collection" && $tlp->category ne "Scheme") { + @colls = $remotetlpdb->needed_by($tlp->name); + } + @colls = grep {m;^collection-;} @colls; + if (@colls) { + $tf->Label(-text => __("Collection:"))->grid( + $tf->Label(-text => "@colls"), -sticky => "nw"); + } + } + $tf->Label(-text => __("Warning: Catalogue versions might be lagging behind or be simply wrong."))->grid(-stick => "nw", -columnspan => 2); + + our %further_a; + our %further_b; + + @{$further_a{$p}} = (); + @{$further_b{$p}} = (); + + sub add_filelist_text { + my $p = shift; + my $text = shift; + my @files = @_; + if (@files) { + my $t = ""; + for my $f (@files) { $t .= "$f\n"; } + $t =~ s/\n$//; + push @{$further_a{$p}}, $tf->Label(-text => $text); + if ($#files >= 4) { + my $foo = $tf->Scrolled('ROText', -scrollbars => "oe", -height => 5, + -width => 50, -wrap => 'word', -relief => 'flat'); + $foo->insert("1.0", $t); + push @{$further_b{$p}}, $foo; + } else { + push @{$further_b{$p}}, + $tf->Label(-wraplength => '500', -justify => 'left', -text => $t); + } + } + } + my @deps; + my $do_arch; + my @arch_deps; + for my $d ($tlp->depends) { + if ($d eq "$p.ARCH") { + $do_arch = 1; + } else { + push @deps, $d; + } + } + add_filelist_text($p, __("Depends:"), @deps); + if ($do_arch) { + my @archs = $localtlpdb->available_architectures; + @arch_deps = map { "$p.$_"; } @archs; + add_filelist_text($p, __("Binaries' dependencies:"), sort(@arch_deps)); + } + add_filelist_text($p, __("Runfiles:"), $tlp->runfiles); + add_filelist_text($p, __("Docfiles:"), $tlp->docfiles); + add_filelist_text($p, __("Srcfiles:"), $tlp->srcfiles); + my @binf = $tlp->allbinfiles; + if ($do_arch) { + for my $bp (@arch_deps) { + my $tlpb = $localtlpdb->get_package($bp); + if (!$tlpb) { + tlwarn("Cannot find $bp.\n"); + } else { + push @binf, $tlpb->allbinfiles; + } + } + } + add_filelist_text($p, __("Binfiles:"), @binf); + + my $f = $tf->Frame; + my $fb = $f->Button(-padx => 0, -pady => 0, + -text => "+", -borderwidth => 1, -relief => "ridge"); + my $ff = $f->Label(-text => "------ " . __("Further information") . " ------"); + $fb->grid($ff, -sticky => "nw"); + + $f->grid(-sticky => "nw", -columnspan => 2); + my $showdetails = 0; + $fb->configure(-command => + sub { + $showdetails = not($showdetails); + if ($showdetails) { + for my $i (0..$#{$further_a{$p}}) { + ${$further_a{$p}}[$i]->grid(${$further_b{$p}}[$i], -sticky => "nw"); + } + } else { + for my $i (0..$#{$further_a{$p}}) { + ${$further_a{$p}}[$i]->gridForget(${$further_b{$p}}[$i]); + } + } + }); + + + $bf->Button(-text => __("Ok"), -width => 10, + -command => sub { for (@{$further_a{$p}}) { $_->destroy; }; + for (@{$further_b{$p}}) { $_->destroy; }; + $sw->destroy; })->pack; +} + +sub update_grid { + # select code + # if not given just do nothing + # if == 1 select all packages that will be shown + # if == 0 deselect all packages that will be shown + my $selectcode = shift; + + my @schemes; + my @colls; + my @packs; + for my $p (sort keys %Packages) { + if ($Packages{$p}{'category'} eq "Scheme") { + push @schemes, $p; + } elsif ($Packages{$p}{'category'} eq "Collection") { + push @colls, $p; + } else { + push @packs, $p; + } + } + $g->delete('all'); + my $i = 0; + my @displist; + my $crit_match = 0; + if (@critical_updates) { + @displist = @critical_updates; + $crit_match = 1; + $lighttext->configure(-foreground => 'red'); + $darktext->configure(-foreground => 'red'); + } else { + @displist = (@schemes, @colls, @packs); + } + my %match_hit; + for my $p (@displist) { + $match_hit{$p} = 1 if MatchesFilters($p); + } + my @match_keys = keys %match_hit; + for my $p (@displist) { + if ($crit_match || defined($match_hit{$p})) { + if (defined($selectcode)) { + $Packages{$p}{'selected'} = $selectcode; + } + $g->add($p); + my $st = ($i%2 ? $lighttext : $darktext); + $g->itemCreate($p, 0, -itemtype => 'window', + -widget => $Packages{$p}{'cb'}); + $Packages{$p}{'cb'}->configure(-background => ($i%2?'gray90':'gray70')); + $g->itemCreate($p, 1, -itemtype => 'text', -style => $st, + -text => $Packages{$p}{'displayname'}); + my $t = ($Packages{$p}{'localrevision'} || ''); + if ($Packages{$p}{'localcatalogueversion'}) { + $t .= " ($Packages{$p}{'localcatalogueversion'})"; + } + $g->itemCreate($p, 2, -itemtype => 'text', -style => $st, -text => $t); + $t = ($Packages{$p}{'remoterevisionstring'} || ''); + if ($Packages{$p}{'remotecatalogueversion'}) { + $t .= " ($Packages{$p}{'remotecatalogueversion'})"; + } + $g->itemCreate($p, 3, -itemtype => 'text', -style => $st, -text => $t); + $g->itemCreate($p, 4, -itemtype => 'text', -style => $st, + -text => $Packages{$p}{'tlp'}->shortdesc); + $i++; + } + } +} + +sub MatchesFilters { + my $p = shift; + sub maybe_strip_last_plus { + my $v = shift; + if ($v =~ m/\+$/) { + chop($v); + # just for comparison add one to the version of there is a "+" + $v++; + } + return $v; + } + # we have to take care since strings in revision numbers on the remote + # and might contain "+" indicating sub-package updates + # status + if (( ($status_value == $status_all) ) || + ( ($status_value == $status_only_installed) && + (defined($Packages{$p}{'installed'})) && + ($Packages{$p}{'installed'} == 1) ) || + ( ($status_value == $status_only_not_installed) && + ( !defined($Packages{$p}{'installed'}) || + ($Packages{$p}{'installed'} == 0)) ) || + ( ($status_value == $status_only_updated) && + (defined($Packages{$p}{'localrevision'})) && + (defined($Packages{$p}{'remoterevision'})) && + ($Packages{$p}{'localrevision'} < + maybe_strip_last_plus($Packages{$p}{'remoterevision'})))) { + # do nothing, more checks have to be done + } else { + return 0; + } + # category + if (($show_packages && ($Packages{$p}{'category'} eq 'Other')) || + ($show_collections && ($Packages{$p}{'category'} eq 'Collection')) || + ($show_schemes && ($Packages{$p}{'category'} eq 'Scheme')) ) { + # do nothing, more checks have to be done + } else { + return 0; + } + # + # match dealing + # + # * search string empty + # -> true + # * search string non-empty + # + some search targets selected + # -> check + # + no search target selected + # -> show empty list (maybe show warning "select something") + # + if ($match_descriptions || $match_taxonomies || $match_filenames) { + my $found = 0; + my $r = $match_text; + if ($r eq "") { + return 1; + } + # check first for the default search type, the descriptions + # also match the remoterevisionstring to get search for repositories + if ($match_descriptions) { + if ($Packages{$p}{'match_desc'} =~ m/$r/i) { + $found = 1; + } elsif (defined($Packages{$p}{'remoterevisionstring'}) && + $Packages{$p}{'remoterevisionstring'} =~ m/$r/i) { + $found = 1; + } + } + if (!$found) { + if (defined($taxonomy) && $match_taxonomies) { + if ($Packages{$p}{'taxonomy'} =~ m/$r/i) { + $found = 1; + } + } + } + # if we already dound, don't check the next condition! + if (!$found) { + if ($match_filenames) { + if ($Packages{$p}{'match_files'} =~ m/$r/i) { + $found = 1; + } + } + } + if (!$found) { + # not matched in either of the above cases, return 0 immediately + return 0; + } + # otherwise more checks have to be done + } else { + if ($match_text eq "") { + return 1; + } else { + # we could give a warning "select something" but HOW??? + return 0; + } + } + # selection + if ($selection_value == 0) { + # all -> maybe more checks + } elsif ($selection_value == 1) { + # only selected + if ($Packages{$p}{'selected'}) { + # do nothing, maybe more checks + } else { + # not selected package and only selected packages shown + return 0; + } + } else { + # only not selected + if ($Packages{$p}{'selected'}) { + # selected, but only not selected should be shown + return 0; + } # else do nothing + } + # if we come down to here the package matches + return 1; +} + +############# ARCH HANDLING ##################### + +sub init_archs { + if (!defined($remotetlpdb)) { + @archsavail = $localtlpdb->available_architectures; + } else { + @archsavail = $remotetlpdb->available_architectures; + } + $currentarch = $localtlpdb->platform(); + @archsinstalled = $localtlpdb->available_architectures; + foreach my $a (@archsavail) { + $archs{$a} = 0; + if (grep(/^$a$/,@archsinstalled)) { + $archs{$a} = 1; + } + } +} + + +sub do_arch_settings { + my $sw = $mw->Toplevel(-title => __("Select platforms to support")); + my %archsbuttons; + init_archs(); + $sw->transient($mw); + $sw->grab(); + my $subframe = $sw->Labelframe(-text => __("Select platforms to support")); + $subframe->pack(-fill => "both", -padx => "2m", -pady => "2m"); + foreach my $a (sort @archsavail) { + $archsbuttons{$a} = + $subframe->Checkbutton(-command => sub { check_on_removal($sw, $a); }, + -variable => \$archs{$a}, + -text => platform_desc($a) + )->pack(-anchor => 'w'); + } + my $arch_frame = $sw->Frame; + $arch_frame->pack(-padx => "10m", -pady => "5m"); + $arch_frame->Button(-text => __("Apply changes"), + -state => $::action_button_state, + -command => sub { apply_arch_changes(); $sw->destroy; })->pack(-side => 'left', -padx => "3m"); + $arch_frame->Button(-text => __("Cancel"), + -command => sub { $sw->destroy; })->pack(-side => 'left', -padx => "3m"); +} + +sub check_on_removal { + my $arch_frame = shift; + my $a = shift; + if (!$archs{$a} && $a eq $currentarch) { + # removal not supported + $archs{$a} = 1; + $arch_frame->Dialog(-title => __("Warning"), + -text => __("Removals of the main platform not possible!"), + -buttons => [ __("Ok") ])->Show; + } +} + +sub apply_arch_changes { + my @todo_add; + my @todo_remove; + foreach my $a (@archsavail) { + if (!$archs{$a} && grep(/^$a$/,@archsinstalled)) { + push @todo_remove, $a; + next; + } + if ($archs{$a} && !grep(/^$a$/,@archsinstalled)) { + push @todo_add, $a; + next; + } + } + if (@todo_add) { + execute_action_gui ( "platform", "add", @todo_add ); + } + if (@todo_remove) { + execute_action_gui ( "platform", "remove", @todo_remove ); + } + if (@todo_add || @todo_remove) { + reinit_local_tlpdb(); + init_archs(); + } +} + + +######### CONFIG HANDLING ############# + +sub init_defaults_setting { + for my $key (keys %TeXLive::TLConfig::TLPDBOptions) { + if ($TeXLive::TLConfig::TLPDBOptions{$key}->[0] eq "b") { + $defaults{$key} = ($localtlpdb->option($key) ? 1 : 0); + } else { + $defaults{$key} = $localtlpdb->option($key); + } + } + %changeddefaults = (); + for my $k (keys %defaults) { + $changeddefaults{$k}{'changed'} = 0; + $changeddefaults{$k}{'value'} = $defaults{$k}; + if ($TeXLive::TLConfig::TLPDBOptions{$k}->[0] eq "b") { + $changeddefaults{$k}{'display'} = ($defaults{$k} ? __("Yes") : __("No")); + } else { + if ($k eq "file_assocs") { + $changeddefaults{$k}{'display'} = $fileassocdesc[$defaults{$k}]; + } elsif ($k eq "location") { + if ($#tlpdb_tags > 0) { + # we are using multiple repositories + $changeddefaults{$k}{'display'} = __("multiple repositories"); + } else { + $changeddefaults{$k}{'display'} = $defaults{$k}; + } + } else { + $changeddefaults{$k}{'display'} = $defaults{$k}; + } + } + } +} + +sub do_general_settings { + my $sw = $mw->Toplevel(-title => __("General options")); + $sw->transient($mw); + $sw->grab(); + init_defaults_setting(); + + my @config_set_l; + my @config_set_m; + my @config_set_r; + + my $back_config_set = $sw->Labelframe(-text => __("General options")); + my $back_config_buttons = $sw->Frame(); + $back_config_set->pack(-fill => "both", -padx => "2m", -pady => "2m"); + + push @config_set_l, + $back_config_set->Label(-text => __("Default package repository"), -anchor => "w"); + + + $location_button = $back_config_set->Button(-relief => 'flat', + -textvariable => \$changeddefaults{"location"}{'display'}); + + push @config_set_m, $location_button; + push @config_set_r, + $back_config_set->Button(-text => __("Change"), + -command => sub { menu_multi_location($sw); }); + + if ($#tlpdb_tags > 0) { + my @vals = map { "$_:$tlpdb_repos{$_}" } sort sort_main_first @tlpdb_tags; + $location_button->configure( + -command => sub { transient_show_multiple_repos($location_button, @vals); }); + } + + $settings_label{'location'} = $location_button; + + if ($mode_expert) { + push @config_set_l, + $back_config_set->Label(-text => __("Create formats on installation"), -anchor => "w"); + $settings_label{'create_formats'} = $back_config_set->Label(-textvariable => \$changeddefaults{"create_formats"}{'display'}); + push @config_set_m, $settings_label{'create_formats'}; + push @config_set_r, + $back_config_set->Button(-text => __("Toggle"), + -command => sub { toggle_setting("create_formats"); }); + + push @config_set_l, $back_config_set->Label(-text => __("Install macro/font sources"), -anchor => "w"); + $settings_label{'install_srcfiles'} = $back_config_set->Label(-textvariable => \$changeddefaults{"install_srcfiles"}{'display'}); + push @config_set_m, $settings_label{'install_srcfiles'}; + push @config_set_r, + $back_config_set->Button(-text => __("Toggle"), + -command => sub { toggle_setting("install_srcfiles"); }); + + push @config_set_l, $back_config_set->Label(-text => __("Install macro/font docs"), -anchor => "w"); + $settings_label{'install_docfiles'} = $back_config_set->Label(-textvariable => \$changeddefaults{"install_docfiles"}{'display'}); + push @config_set_m, $settings_label{'install_docfiles'}; + push @config_set_r, + $back_config_set->Button(-text => __("Toggle"), + -command => sub { toggle_setting("install_docfiles"); }); + + push @config_set_l, $back_config_set->Label(-text => __("Default backup directory"), -anchor => "w"); + $settings_label{'backupdir'} = $back_config_set->Label(-textvariable => \$changeddefaults{"backupdir"}{'display'}); + push @config_set_m, $settings_label{'backupdir'}; + push @config_set_r, + $back_config_set->Button(-text => __("Change"), + -command => sub { edit_dir_option ($sw, "backupdir"); }); + + push @config_set_l, + $back_config_set->Label(-text => __("Auto backup setting"), -anchor => "w"); + $settings_label{'autobackup'} = $back_config_set->Label(-textvariable => \$changeddefaults{"autobackup"}{'display'}); + push @config_set_m, $settings_label{'autobackup'}; + push @config_set_r, + $back_config_set->Button(-text => __("Change"), + -command => sub { select_autobackup($sw); }); + + if (!win32()) { + push @config_set_l, + $back_config_set->Label(-text => __("Link destination for programs"), -anchor => "w"); + $settings_label{'sys_bin'} = $back_config_set->Label(-textvariable => \$changeddefaults{"sys_bin"}{'display'}); + push @config_set_m, $settings_label{'sys_bin'}; + push @config_set_r, + $back_config_set->Button(-text => __("Change"), + -command => sub { edit_dir_option ($sw, "sys_bin"); }); + + push @config_set_l, + $back_config_set->Label(-text => __("Link destination for info docs"), -anchor => "w"); + $settings_label{'sys_info'} = $back_config_set->Label(-textvariable => \$changeddefaults{"sys_info"}{'display'}); + push @config_set_m, $settings_label{'sys_info'}; + push @config_set_r, + $back_config_set->Button(-text => __("Change"), + -command => sub { edit_dir_option ($sw, "sys_info"); }); + + push @config_set_l, + $back_config_set->Label(-text => __("Link destination for man pages"), -anchor => "w"); + $settings_label{'sys_man'} = $back_config_set->Label(-textvariable => \$changeddefaults{"sys_man"}{'display'}); + push @config_set_m, $settings_label{'sys_man'}; + push @config_set_r, + $back_config_set->Button(-text => __("Change"), + -command => sub { edit_dir_option ($sw, "sys_man"); }); + } + + if (win32()) { + push @config_set_l, + $back_config_set->Label(-text => __("Create shortcuts on the desktop"), -anchor => "w"); + $settings_label{'desktop_integration'} = $back_config_set->Label(-textvariable => \$changeddefaults{"desktop_integration"}{'display'}); + push @config_set_m, $settings_label{'desktop_integration'}; + push @config_set_r, + $back_config_set->Button(-text => __("Toggle"), + -command => sub { toggle_setting("desktop_integration"); }); + + if (admin()) { + push @config_set_l, + $back_config_set->Label(-text => __("Install for all users"), -anchor => "w"); + $settings_label{'w32_multi_user'} = $back_config_set->Label(-textvariable => \$changeddefaults{"w32_multi_user"}{'display'}); + push @config_set_m, $settings_label{'w32_multi_user'}; + push @config_set_r, + $back_config_set->Button(-text => __("Toggle"), + -command => sub { toggle_setting("w32_multi_user"); }); + } + + push @config_set_l, + $back_config_set->Label(-text => __("Change file associations"), -anchor => "w"); + $settings_label{'file_assocs'} = $back_config_set->Label(-textvariable => \$changeddefaults{'file_assocs'}{'display'}); + push @config_set_m, $settings_label{'file_assocs'}; + push @config_set_r, + $back_config_set->Button(-text => __("Change"), + -command => sub { select_file_assocs($sw); }); + + } + } # of $mode_export + + for my $i (0..$#config_set_l) { + $config_set_l[$i]->grid( $config_set_m[$i], $config_set_r[$i], + -padx => "1m", -pady => "1m", -sticky => "nwe"); + } + + $back_config_buttons->pack(-padx => "10m", -pady => "5m"); + $back_config_buttons->Button(-text => __("Apply changes"), + -state => $::action_button_state, + -command => sub { apply_settings_changes(); $sw->destroy; })->pack(-side => 'left', -padx => "3m"); + $back_config_buttons->Button(-text => __("Cancel"), + -command => sub { $sw->destroy; })->pack(-side => 'left', -padx => "3m"); +} + +sub apply_settings_changes { + for my $k (keys %defaults) { + if ($defaults{$k} ne $changeddefaults{$k}{'value'}) { + $localtlpdb->option($k, $changeddefaults{$k}{'value'}); + if ($k eq "location") { + # change interface to program, too + # set default tlpdb location + $tlpdb_location = $changeddefaults{'location'}{'value'}; + # update tlpdb_repos and tlpdb_tags accordingly + %tlpdb_repos = repository_to_array($tlpdb_location); + @tlpdb_tags = keys %tlpdb_repos; + # change the menu entry in File->Load default... + if ($#tlpdb_tags > 0) { + my @vals = map { "$_:$tlpdb_repos{$_}" } + sort sort_main_first keys %tlpdb_repos; + $menu_file->entryconfigure(1, -label => __("Load default repository:") . " " . __("multiple repositories")); + } else { + $menu_file->entryconfigure(1, -label => __("Load default repository:") . " $tlpdb_location"); + } + } + } + } + $localtlpdb->save; +} + + + +########## PAPER HANDLING ################# + +sub init_paper_xdvi { + if (!win32()) { + @{$papers{"xdvi"}} = TeXLive::TLPaper::get_paper_list("xdvi"); + $currentpaper{"xdvi"} = ${$papers{"xdvi"}}[0]; + } +} +sub init_paper_pdftex { + @{$papers{"pdftex"}} = TeXLive::TLPaper::get_paper_list("pdftex"); + $currentpaper{"pdftex"} = ${$papers{"pdftex"}}[0]; +} +sub init_paper_dvips { + @{$papers{"dvips"}} = TeXLive::TLPaper::get_paper_list("dvips"); + $currentpaper{"dvips"} = ${$papers{"dvips"}}[0]; +} +sub init_paper_dvipdfm { + @{$papers{"dvipdfm"}} = TeXLive::TLPaper::get_paper_list("dvipdfm"); + $currentpaper{"dvipdfm"} = ${$papers{"dvipdfm"}}[0]; +} +sub init_paper_context { + if (defined($localtlpdb->get_package("bin-context"))) { + @{$papers{"context"}} = TeXLive::TLPaper::get_paper_list("context"); + $currentpaper{"context"} = ${$papers{"context"}}[0]; + } +} +sub init_paper_dvipdfmx { + @{$papers{"dvipdfmx"}} = TeXLive::TLPaper::get_paper_list("dvipdfmx"); + $currentpaper{"dvipdfmx"} = ${$papers{"dvipdfmx"}}[0]; +} + + +sub init_all_papers { + for my $p (keys %init_paper_subs) { + &{$init_paper_subs{$p}}(); + } +} + + +sub do_paper_settings { + init_all_papers(); + my $sw = $mw->Toplevel(-title => __("Paper options")); + $sw->transient($mw); + $sw->grab(); + + %changedpaper = %currentpaper; + + my $lower = $sw->Frame; + $lower->pack(-fill => "both"); + + my $back_config_pap = $lower->Labelframe(-text => __("Paper options")); + my $back_config_buttons = $sw->Frame(); + + + my $back_config_pap_l1 = $back_config_pap->Label(-text => __("Default paper for all"), -anchor => "w"); + my $back_config_pap_m1 = $back_config_pap->Button(-text => __("a4"), + -command => sub { change_paper("all", "a4"); }); + my $back_config_pap_r1 = $back_config_pap->Button(-text => __("letter"), + -command => sub { change_paper("all", "letter"); }); + + $back_config_pap_l1->grid( $back_config_pap_m1, $back_config_pap_r1, + -padx => "2m", -pady => "2m", -sticky => "nswe"); + + my (%l,%m,%r); + if ($mode_expert) { + foreach my $p (sort keys %papers) { + if (($p eq "context") && !defined($localtlpdb->get_package("bin-context"))) { + next; + } + $l{$p} = $back_config_pap->Label(-text => __("Default paper for") . " $p", -anchor => "w"); + $m{$p} = $back_config_pap->Label(-textvariable => \$changedpaper{$p}, -anchor => "w"); + $settings_label{$p} = $m{$p}; + $r{$p} = $back_config_pap->Button(-text => __("Change"), + -command => sub { select_paper($sw,$p); }, -anchor => "w"); + $l{$p}->grid( $m{$p}, $r{$p}, + -padx => "2m", -pady => "2m", -sticky => "nsw"); + } + } + + $back_config_pap->pack(-side => 'left', -fill => "both", -padx => "2m", -pady => "2m"); + + $back_config_buttons->pack(-padx => "10m", -pady => "5m"); + $back_config_buttons->Button(-text => __("Apply changes"), + -state => $::action_button_state, + -command => sub { apply_paper_changes(); $sw->destroy; })->pack(-side => 'left', -padx => "3m"); + $back_config_buttons->Button(-text => __("Cancel"), + -command => sub { $sw->destroy; })->pack(-side => 'left', -padx => "3m"); +} + +sub do_gui_language_setting { + my $sw = $mw->Toplevel(-title => __("GUI Language")); + my %code_lang = ( + cs => "Czech", + de => "German", + en => "English", + es => "Spanish", + fr => "French", + it => "Italian", + ja => "Japanese", + nl => "Dutch", + pl => "Polish", + "pt_BR" => "Brasilian", + ru => "Russian", + sk => "Slovak", + sl => "Slovenian", + sr => "Serbian", + vi => "Vietnamese", + "zh_CN" => "Simplified Chinese", + "zh_TW" => "Traditional Chinese" + ); + + $sw->transient($mw); + $sw->grab(); + my $var = __("System default"); + $var = $config{"gui-lang"} if (defined($config{"gui-lang"})); + $var = $opts{"gui-lang"} if (defined($opts{"gui-lang"})); + $var = (defined($code_lang{$var}) ? $code_lang{$var} : $var); + my $opt = $sw->BrowseEntry(-label => __("Default language for GUI:"), -variable => \$var); + $opt->insert(0, __("System default")); + my @ll; + foreach my $p (<$Master/tlpkg/translations/*.po>) { + $p =~ s!^.*translations/!!; + $p =~ s!\.po$!!; + push @ll, $p; + } + # add English as possible language! + push @ll, "en"; + foreach my $l (sort @ll) { + my $el = (defined($code_lang{$l}) ? $code_lang{$l} : $l); + $opt->insert("end", $el); + } + $opt->pack(-padx => "2m", -pady => "2m"); + $sw->Label(-text => __("Changes will take effect after restart"))->pack(-padx => "2m", -pady => "2m"); + my $f = $sw->Frame; + my $okbutton = $f->Button(-text => __("Ok"), + -command => sub { + if ($var eq __("System default")) { + # we have to remove the setting in the config file + delete($config{'gui-lang'}); + write_config_file(); + } else { + for my $l (keys %code_lang) { + if ($code_lang{$l} eq $var) { + if (!defined($config{'gui-lang'}) || + (defined($config{'gui-lang'}) && ($config{'gui-lang'} ne $l))) { + $config{'gui-lang'} = $l; + write_config_file(); + } + last; + } + } + } + $sw->destroy; + })->pack(-side => "left", -padx => "2m", -pady => "2m"); + my $cancelbutton = $f->Button(-text => __("Cancel"), -command => sub { $sw->destroy; })->pack(-side => "left", -padx => "2m", -pady => "2m"); + $f->pack; + $sw->bind('<Return>', [ $okbutton, 'Invoke' ]); + $sw->bind('<Escape>', [ $cancelbutton, 'Invoke' ]); +} + +sub do_and_warn_gui_mode_settings { + my $ans = $mw->Dialog(-text => __("Changes will take effect after restart"), + -title => __("Expert options"), + -default_button => 'Ok', + -buttons => [__("Ok"), __("Cancel")])->Show; + if ($ans eq __("Ok")) { + $config{"gui-expertmode"} = $mode_expert; + write_config_file(); + } +} + +sub ask_one_repository { + my ($mw, $title, $info) = @_; + my $val; + my $done; + my $sw = $mw->Toplevel(-title => $title); + $sw->transient($mw); + $sw->withdraw; + $sw->Label(-text => $info)->pack(-padx => "2m", -pady => "2m"); + + my $f1 = $sw->Frame; + my @mirror_list; + push @mirror_list, " " . __("Default remote repository") . ": http://mirror.ctan.org"; + push @mirror_list, TeXLive::TLUtils::create_mirror_list(); + my $entry = $f1->BrowseEntry( + -listheight => 12, + -listwidth => 400, + -width => 50, + -autolistwidth => 1, + -choices => \@mirror_list, + -browsecmd => + sub { + if ($val !~ m/^ /) { + $val = ""; + } elsif ($val =~ m!(http|ftp)://!) { + $val = TeXLive::TLUtils::extract_mirror_entry($val); + } else { + $val =~ s/^\s*//; + } + }, + -variable => \$val)->pack(-side => "left",-padx => "2m", -pady => "2m"); + + #my $entry = $f1->Entry(-text => $val, -width => 50); + #$entry->pack(-side => "left",-padx => "2m", -pady => "2m"); + + my $f2 = $sw->Frame; + $f2->Button(-text => __("Choose Directory"), + -command => sub { + $val = $sw->chooseDirectory; + #if (defined($var)) { + # $entry->delete(0,"end"); + # $entry->insert(0,$var); + #} + })->pack(-side => "left",-padx => "2m", -pady => "2m"); + $f2->Button(-text => __("Default remote repository"), + -command => sub { + #$entry->delete(0,"end"); + #$entry->insert(0,$TeXLiveURL); + $val = $TeXLiveURL; + })->pack(-side => "left",-padx => "2m", -pady => "2m"); + $f1->pack; + $f2->pack; + + my $f = $sw->Frame; + my $okbutton = $f->Button(-text => __("Ok"), + -command => sub { $done = 1; } + )->pack(-side => 'left',-padx => "2m", -pady => "2m"); + my $cancelbutton = $f->Button(-text => __("Cancel"), + -command => sub { $val = undef; $done = 1; } + )->pack(-side => 'right',-padx => "2m", -pady => "2m"); + $f->pack(-expand => 'x'); + $sw->bind('<Return>', [ $okbutton, 'Invoke' ]); + $sw->bind('<Escape>', [ $cancelbutton, 'Invoke' ]); + my $old_focus = $sw->focusSave; + my $old_grab = $sw->grabSave; + $sw->Popup; + $sw->grab; + $sw->waitVariable(\$done); + $sw->grabRelease if Tk::Exists($sw); + $sw->destroy if Tk::Exists($sw); + return $val; +} + +#sub menu_default_location { +# my $mw = shift; +# my $ret = ask_one_repository($mw, __("Change default package repository"), +# __("New default package repository")); +# if (defined($ret)) { +# $changeddefaults{'location'}{'value'} = +# $changeddefaults{'location'}{'display'} = $ret; +# } +#} + +sub sort_main_first { + if ($a eq 'main') { + if ($b eq 'main') { + return 0; + } else { + return -1; + } + } else { + if ($b eq 'main') { + return 1; + } else { + return ($a cmp $b); + } + } +} + +sub menu_multi_location { + my $mw = shift; + my $val; + our $sw = $mw->Toplevel(-title => __("Edit default package repositories")); + $sw->transient($mw); + $sw->grab(); + $sw->Label(-text => __("Specify set of repositories to be used"))->pack(-padx => "2m", -pady => "2m"); + + our $f1 = $sw->Frame; + my @entry_tag; our $tagw = 10; + my @entry_loc; our $locw = 30; + my @entry_del; + my @entry_chg; + + my $addrepo_button; + + + sub add_buttons { + my ($ref) = @_; + my $t = $ref->{'tag'}; + $ref->{'tag_w'} = $f1->Entry(-textvariable => \$ref->{'tag'}, -state => ($t eq "main" ? 'readonly' : 'normal'), -width => $tagw); + $ref->{'val_w'} = $f1->Entry(-textvariable => \$ref->{'val'}, -width => $locw); + $ref->{'del_w'} = $f1->Button(-text => __("Delete"), + -state => ($t eq "main" ? 'disabled' : 'normal'), + -command => sub { + $ref->{'status'} = 0; + $ref->{'tag_w'}->configure(-state => 'disabled'); + $ref->{'val_w'}->configure(-state => 'disabled'); + $ref->{'del_w'}->configure(-state => 'disabled'); + $ref->{'chg_w'}->configure(-state => 'disabled'); + }); + $ref->{'chg_w'} = $f1->Button(-text => __("Change"), + -command => sub { + our $sw; + my $ret = ask_one_repository($sw, + ($t eq "main" ? + __("Change main package repository") : + __("Change subsidiary package repository")), + ($t eq "main" ? + __("Change main package repository") : + __("Change subsidiary package repository"))); + $ref->{'val'} = $ret if (defined($ret)); + }); + } + + my %changed_repos = repository_to_array($changeddefaults{'location'}{'value'}); + + my @edit_repos; + push @edit_repos, { 'tag' => 'main', 'val' => $changed_repos{'main'}, 'status' => 1}; + for my $k (sort keys %changed_repos) { + next if ($k eq "main"); + push @edit_repos, { 'tag'=> $k, 'val' => $changed_repos{$k}, 'status' => 1 }; + } + for my $ref (@edit_repos) { + add_buttons($ref); + } + for my $ref (@edit_repos) { + my %foo = %$ref; + $foo{'tag_w'}->grid($foo{'val_w'}, $foo{'del_w'}, $foo{'chg_w'}, + -padx => "1m", -pady => "1m", -sticky => "nwe"); + } + $addrepo_button = $f1->Button(-text => __("Add repository") . "...", + -command => sub { + my $ret = ask_one_repository($sw, __("Add package repository"), + __("Add package repository")); + if (defined($ret)) { + $addrepo_button->gridForget; + my %foo = ( 'tag' => $ret, 'val' => $ret, 'status' => 1 ); + add_buttons(\%foo); + $foo{'tag_w'}->grid($foo{'val_w'}, $foo{'del_w'}, $foo{'chg_w'}, + -padx => "1m", -pady => "1m", -sticky => "nwe"); + push @edit_repos, \%foo; + } + $addrepo_button->grid(-columnspan => 2, -column => 2); + }); + $addrepo_button->grid(-columnspan => 2, -column => 2); + + $f1->pack; + + my $f = $sw->Frame; + my $okbutton = $f->Button(-text => __("Ok"), + -command => + sub { + # we have to check if something has changed ... and for consistency!!! + my %new_repos; + for my $ref (@edit_repos) { + my %foo = %$ref; + if ($foo{'status'}) { + if (defined($new_repos{$foo{'tag'}})) { + $sw->Dialog(-title => __("Warning"), + -text => __("Repository tag name already used: %s", $foo{'tag'}), -buttons => [ __("Ok") ])->Show; + return; + } + $new_repos{$foo{'tag'}} = $foo{'val'}; + } + } + my $differs = 0; + for my $k (keys %changed_repos) { + if (!defined($new_repos{$k})) { + $differs = 1; + last; + } + if ($changed_repos{$k} ne $new_repos{$k}) { + $differs = 1; + last; + } + } + if (!$differs) { + # do the same the other way round + for my $k (keys %new_repos) { + if (!defined($changed_repos{$k})) { + $differs = 1; + last; + } + if ($changed_repos{$k} ne $new_repos{$k}) { + $differs = 1; + last; + } + } + } + + if ($differs) { + # print "current repos:\n"; + # for my $ref (@edit_repos) { + # print "tag = $ref->{'tag'}\n"; + # print "val = $ref->{'val'}\n"; + # print "act = $ref->{'status'}\n"; + # } + $changeddefaults{'location'}{'value'} = array_to_repository(%new_repos); + my @vals = map { "$_:$new_repos{$_}" } + sort sort_main_first keys %new_repos; + if ($#vals > 0) { + $location_button->configure( + -command => sub { transient_show_multiple_repos($location_button, @vals); }); + $changeddefaults{'location'}{'display'} = __("multiple repositories"); + } else { + $changeddefaults{'location'}{'display'} = $changeddefaults{'location'}{'value'}; + } + } else { + # print "Nothing happend!\n"; + } + $location_button->configure(-background => + ($changeddefaults{'location'}{'value'} eq $defaults{'location'} ? + $bgcolor : 'red')); + $sw->destroy; + })->pack(-side => 'left',-padx => "2m", -pady => "2m"); + my $cancelbutton = $f->Button(-text => __("Cancel"), + -command => sub { $sw->destroy })->pack(-side => 'right',-padx => "2m", -pady => "2m"); + my $resetbutton = $f->Button(-text => __("Revert"), + -command => sub { $sw->destroy; menu_multi_location($mw); })->pack(-side => 'right',-padx => "2m", -pady => "2m"); + $f->pack(-expand => 'x'); + $sw->bind('<Return>', [ $okbutton, 'Invoke' ]); + $sw->bind('<Escape>', [ $cancelbutton, 'Invoke' ]); +} + +sub toggle_setting() { + my ($key) = @_; + my $old = $changeddefaults{$key}{'value'}; + my $new = ($old ? 0 : 1); + $changeddefaults{$key}{'display'} = ($new ? __("Yes") : __("No")); + $changeddefaults{$key}{'value'} = $new; + if (defined($settings_label{$key})) { + if ($defaults{$key} ne $changeddefaults{$key}{'value'}) { + $settings_label{$key}->configure(-background => 'red'); + } else { + $settings_label{$key}->configure(-background => $bgcolor); + } + } +} + + +sub apply_paper_changes { + $mw->Busy(-recurse => 1); + for my $k (keys %changedpaper) { + if ($currentpaper{$k} ne $changedpaper{$k}) { + execute_action_gui ( "paper", $k, "paper", $changedpaper{$k}); + &{$init_paper_subs{$k}}(); + } + } + $mw->Unbusy; +} + +sub change_paper { + my ($prog, $pap) = @_; + if ($prog eq "all") { + for my $k (keys %changedpaper) { + $changedpaper{$k} = $pap; + $settings_label{$k}->configure(-background => + ($changedpaper{$k} eq $currentpaper{$k} ? $bgcolor : 'red')); + } + } else { + $changedpaper{$prog} = $pap; + $settings_label{$prog}->configure(-background => + ($changedpaper{$prog} eq $currentpaper{$prog} ? $bgcolor : 'red')); + } +} + +sub select_paper { + my $back_config = shift; + my $prog = shift; + my $foo = $back_config->Toplevel(-title => __("Select paper format for") . " $prog"); + $foo->transient($back_config); + $foo->grab(); + my $var = $changedpaper{$prog}; + my $opt = $foo->BrowseEntry(-label => __("Default paper for") . " $prog", -variable => \$var); + foreach my $p (sort @{$papers{$prog}}) { + $opt->insert("end",$p); + } + $opt->pack(-padx => "2m", -pady => "2m"); + my $f = $foo->Frame; + my $okbutton = $f->Button(-text => __("Ok"), -command => sub { change_paper($prog,$var); $foo->destroy; })->pack(-side => "left", -padx => "2m", -pady => "2m"); + my $cancelbutton = $f->Button(-text => __("Cancel"), -command => sub { $foo->destroy; })->pack(-side => "left", -padx => "2m", -pady => "2m"); + $f->pack; + $foo->bind('<Return>', [ $okbutton, 'Invoke' ]); + $foo->bind('<Escape>', [ $cancelbutton, 'Invoke' ]); +} + +sub select_autobackup { + my $mw = shift; + my $foo = $mw->Toplevel(-title => __("Auto backup setting")); + $foo->transient($mw); + $foo->grab(); + #my $var = $defaults{"autobackup"}; + my $var = $changeddefaults{"autobackup"}{'value'}; + my $opt = $foo->BrowseEntry(-label => __("Auto backup setting"), + -variable => \$var); + my @al; + push @al, "-1 (" . __("keep arbitrarily many") . ")"; + push @al, "0 (" . __("disable") . ")"; + for my $i (1..100) { + push @al, $i; + } + foreach my $p (@al) { + $opt->insert("end",$p); + } + $opt->pack(-padx => "2m", -pady => "2m"); + my $f = $foo->Frame; + my $okbutton = $f->Button(-text => __("Ok"), + -command => sub { + $var =~ s/ .*$//; + $changeddefaults{"autobackup"}{'value'} = $var; + $changeddefaults{"autobackup"}{'display'} = $var; + $settings_label{'autobackup'}->configure( + -background => + ($var eq $defaults{"autobackup"} ? $bgcolor : 'red')); + $foo->destroy; + } + )->pack(-side => "left", -padx => "2m", -pady => "2m"); + my $cancelbutton = $f->Button(-text => __("Cancel"), -command => sub { $foo->destroy; })->pack(-side => "left", -padx => "2m", -pady => "2m"); + $f->pack; + $foo->bind('<Return>', [ $okbutton, 'Invoke' ]); + $foo->bind('<Escape>', [ $cancelbutton, 'Invoke' ]); +} + + +sub select_file_assocs { + my $sw = shift; + my $foo = $sw->Toplevel(-title => __("Change file associations")); + $foo->transient($mw); + $foo->grab(); + my $var = $defaults{"file_assocs"}; + my $opt = $foo->BrowseEntry(-label => __("Change file associations"), + -variable => \$var); + my @al; + for my $i (0..2) { + push @al, "$i $fileassocdesc[$i]"; + } + foreach my $p (@al) { + $opt->insert("end",$p); + } + $opt->pack(-padx => "2m", -pady => "2m"); + my $f = $foo->Frame; + my $okbutton = $f->Button(-text => __("Ok"), + -command => sub { + $var = substr($var,0,1); + $changeddefaults{"file_assocs"}{'display'} = $fileassocdesc[$var]; + $changeddefaults{"file_assocs"}{'value'} = $var; + + $foo->destroy; + } + )->pack(-side => "left", -padx => "2m", -pady => "2m"); + my $cancelbutton = $f->Button(-text => __("Cancel"), -command => sub { $foo->destroy; })->pack(-side => "left", -padx => "2m", -pady => "2m"); + $f->pack; + $foo->bind('<Return>', [ $okbutton, 'Invoke' ]); + $foo->bind('<Escape>', [ $cancelbutton, 'Invoke' ]); +} + + + +############################ + +sub setup_location { + my $loc = shift; + $location = $loc; + # first check if $location contains multiple locations + # in this case we go to virtual mode + %repos = (); + %repos = repository_to_array($location); + @tags = keys %repos; + if ($#tags == 0) { + $single_repo_mode = 1; + } else { + $single_repo_mode = 0; + } + run_update_functions(); +} + +sub init_install_media { + my $newroot = $location; + if (defined($remotetlpdb) && !$remotetlpdb->is_virtual && + ($remotetlpdb->root eq $newroot)) { + # nothing to be done + } else { + $mw->Busy(-recurse => 1); + my ($ret, $err) = init_tlmedia(); + $mw->Unbusy; + if (!$ret) { + # something went badly wrong, maybe the newroot is wrong? + $mw->Dialog(-title => __("Warning"), + -text => __("Loading of remote database failed.") . "\n" . + __("Error message:") . "\n$err\n\n", + -buttons => [ __("Ok") ])->Show; + $remotetlpdb = undef; + update_list_remote(); + update_grid(); + update_loaded_location_string("none"); + } else { + update_list_remote(); + update_grid(); + update_loaded_location_string($location); + } + } +} + +sub set_text_win { + my ($w, $t) = @_; + $w->delete("0.0", "end"); + $w->insert("0.0", "$t"); + $w->see("0.0"); +} + +sub install_selected_packages { + my @foo = SelectedPackages(); + if (@foo) { + # that doesn't hurt if it is already loaded + init_install_media(); + my @args = qw/install/; + push @args, @foo; + execute_action_gui(@args); + reinit_local_tlpdb(); + # now we check that the installation has succeeded by checking that + # all packages in @_ are installed. Otherwise we pop up a warning window + my $do_warn = 0; + for my $p (@_) { + if (!defined($localtlpdb->get_package($p))) { + $do_warn = 1; + last; + } + } + give_warning_window(__("Installation"), @_) if $do_warn; + } +} + +sub SelectedPackages { + my @ret; + # first select those that are + for my $p (keys %Packages) { + next if !$Packages{$p}{'selected'}; + if (MatchesFilters($p)) { + push @ret, $p; + } + } + return @ret; +} + +sub update_all_packages { + my @args = qw/update/; + if (@critical_updates) { + $opts{"self"} = 1; + } else { + $opts{"all"} = 1; + } + # that doesn't hurt if it is already loaded + init_install_media(); + execute_action_gui(qw/update/); + if (@critical_updates) { + # terminate here immediately so that we are sure the auto-updater + # is run immediately + # make sure we exit in finish(0) + $::gui_mode = 0; + # warn that program will now be terminated + $mw->Dialog(-title => __("Warning"), + -text => __("Critical updates have been installed.\nProgram will terminate now.\nPlease restart if necessary."), + -buttons => [ __("Ok") ])->Show; + # also delete the main window before we kill the process to + # make sure that Tk is happy (segfault on cmd line, email Taco) + $mw->destroy; + finish(0); + } + reinit_local_tlpdb(); +} + +sub update_selected_packages { + my @foo = SelectedPackages(); + if (@foo) { + # that doesn't hurt if it is already loaded + init_install_media(); + my @args = qw/update/; + # argument processing + # in case we have critical updates present we do put the list of + # critical updates into the argument instead of --all + if (@critical_updates) { + $opts{"self"} = 1; + } + push @args, @foo; + execute_action_gui(@args); + if (@critical_updates) { + # terminate here immediately so that we are sure the auto-updater + # is run immediately + # make sure we exit in finish(0) + $::gui_mode = 0; + # warn that program will now be terminated + $mw->Dialog(-title => __("Warning"), + -text => __("Critical updates have been installed.\nProgram will terminate now.\nPlease restart if necessary."), + -buttons => [ __("Ok") ])->Show; + # also delete the main window before we kill the process to + # make sure that Tk is happy (segfault on cmd line, email Taco) + $mw->destroy; + finish(0); + } + reinit_local_tlpdb(); + } +} + +sub remove_selected_packages { + my @foo = SelectedPackages(); + if (@foo) { + my @args = qw/remove/; + push @args, @foo; + execute_action_gui(@args); + reinit_local_tlpdb(); + my $do_warn = 0; + for my $p (@_) { + if (defined($localtlpdb->get_package($p))) { + $do_warn = 1; + last; + } + } + give_warning_window(__("Remove"), @_) if $do_warn; + } +} + +sub backup_selected_packages { + my @foo = SelectedPackages(); + if (@foo) { + my @args = qw/backup/; + push @args, @foo; + execute_action_gui(@args); + } +} + +sub reinit_local_tlpdb { + $mw->Busy(-recurse => 1); + $localtlpdb = TeXLive::TLPDB->new ("root" => "$Master"); + die("cannot find tlpdb!") unless (defined($localtlpdb)); + setup_list(); + update_grid(); + $mw->Unbusy; +} + +# +# sub populate_Packages +# +sub populate_Packages { + my ($mode, $tlp, $maxtag) = @_; + my $p = $tlp->name; + $Packages{$p}{'displayname'} = $p; + if ($mode eq "local") { + $Packages{$p}{'localrevision'} = $tlp->revision; + $Packages{$p}{'installed'} = 1; + $Packages{$p}{'selected'} = 0; + delete($Packages{$p}{'tlp'}) if defined($Packages{$p}{'tlp'}); + $Packages{$p}{'tlp'} = $tlp; + } else { + $Packages{$p}{'remoterevision'} = $tlp->revision; + $Packages{$p}{'remoterevisionstring'} = $tlp->revision; + if ($remotetlpdb->is_virtual) { + $Packages{$p}{'remoterevisionstring'} .= "\@$maxtag"; + } + $Packages{$p}{'selected'} = 0 + unless defined $Packages{$p}{'selected'}; + if (!defined($Packages{$p}{'tlp'})) { + $Packages{$p}{'tlp'} = $tlp; + } + } + $Packages{$p}{'match_desc'} = "$p\n"; + $Packages{$p}{'match_desc'} .= ($tlp->shortdesc || ""); + $Packages{$p}{'match_desc'} .= "\n"; + $Packages{$p}{'match_desc'} .= ($tlp->longdesc || ""); + # + # taxonomy matching + if (defined($taxonomy)) { + $Packages{$p}{'taxonomy'} = ""; + if (defined($taxonomy->{'by-package'}{'keyword'}{$p})) { + $Packages{$p}{'keyword'} = + join(", ", @{$taxonomy->{'by-package'}{'keyword'}{$p}}); + $Packages{$p}{'taxonomy'} .= + join('\n', @{$taxonomy->{'by-package'}{'keyword'}{$p}}); + $Packages{$p}{'taxonomy'} .= '\n'; + } + if (defined($taxonomy->{'by-package'}{'functionality'}{$p})) { + $Packages{$p}{'functionality'} = + join(' > ', @{$taxonomy->{'by-package'}{'functionality'}{$p}}); + $Packages{$p}{'taxonomy'} .= + join('\n', @{$taxonomy->{'by-package'}{'functionality'}{$p}}); + $Packages{$p}{'taxonomy'} .= '\n'; + } + if (defined($taxonomy->{'by-package'}{'primary'}{$p})) { + $Packages{$p}{'primary'} = $taxonomy->{'by-package'}{'primary'}{$p}; + $Packages{$p}{'taxonomy'} .= $taxonomy->{'by-package'}{'primary'}{$p}; + $Packages{$p}{'taxonomy'} .= "\n"; + } + if (defined($taxonomy->{'by-package'}{'secondary'}{$p})) { + $Packages{$p}{'secondary'} = $taxonomy->{'by-package'}{'secondary'}{$p}; + $Packages{$p}{'taxonomy'} .= $taxonomy->{'by-package'}{'secondary'}{$p}; + $Packages{$p}{'taxonomy'} .= "\n"; + } + } + # + # file matching + my @all_f = $tlp->all_files; + if ($tlp->relocated) { for (@all_f) { s:^$RelocPrefix/:$RelocTree/:; } } + $Packages{$p}{'match_files'} = "@all_f"; + if ($mode eq "local") { + $Packages{$p}{'cb'}->destroy() if defined($Packages{$p}{'cb'}); + $Packages{$p}{'cb'} = $g->Checkbutton(-variable => \$Packages{$p}{'selected'}); + } else { + $Packages{$p}{'cb'} = $g->Checkbutton(-variable => \$Packages{$p}{'selected'}) + unless defined $Packages{$p}{'cb'}; + } + if (($tlp->category eq "Collection") || + ($tlp->category eq "Scheme")) { + $Packages{$p}{'category'} = $tlp->category; + } else { + $Packages{$p}{'category'} = "Other"; + } + if (defined($tlp->cataloguedata->{'version'})) { + if ($mode eq "local") { + $Packages{$p}{'localcatalogueversion'} = $tlp->cataloguedata->{'version'}; + } else { + $Packages{$p}{'remotecatalogueversion'} = $tlp->cataloguedata->{'version'}; + } + } +} + +# +# creates/updates the list of packages as shown in tix grid +# +sub setup_list { + my @do_later; + for my $p ($localtlpdb->list_packages()) { + # skip 00texlive packages + next if ($p =~ m!^00texlive!); + # collect packages containing a . for later + # we want to ignore them in most cases but those where there is + # no father package (without .) + if ($p =~ m;\.;) { + push @do_later, $p; + next; + } + my $tlp = $localtlpdb->get_package($p); + populate_Packages("local", $tlp); + } + my @avail_arch = $localtlpdb->available_architectures; + for my $p (@do_later) { + my ($mp, $ma) = ($p =~ m/^(.*)\.([^.]*)$/); + if (!defined($mp)) { + tlerror("very strange, above it matched and now not anymore?!?! $p\n"); + next; + } + if (!defined($Packages{$mp})) { + my $tlp = $localtlpdb->get_package($p); + populate_Packages("local", $tlp); + } else { + # two cases: + # - $mp.$ma where $ma is in available_archs + # check if $pkg itself has been update present, otherwise + # add a "+" to the revision number of the upstream package + # but do NOT show the sub package + # + # this has to be deferred to later processing as we don't have + # this information at hand at this time + # + # - $pkg.$arch where $arch is NOT in available_arch + # thus it was installed by the user, show it + # + if (!TeXLive::TLUtils::member($ma, @avail_arch)) { + my $tlp = $localtlpdb->get_package($p); + populate_Packages("local", $tlp); + } + } + } + update_list_remote(); +} + +sub update_list_remote { + my @do_later_media; + #my $handle; + #Devel::Leak::NoteSV($handle); + # clear old info from remote media + for my $p (keys %Packages) { + if (!$Packages{$p}{'installed'}) { + $Packages{$p}{'cb'}->destroy() if defined($Packages{$p}{'cb'}); + delete($Packages{$p}{'tlp'}) if defined($Packages{$p}{'tlp'}); + delete $Packages{$p}; + next; + } + delete $Packages{$p}{'remoterevision'}; + delete $Packages{$p}{'remoterevisionstring'}; + delete $Packages{$p}{'remotecatalogueversion'}; + } + if (defined($remotetlpdb)) { + for my $p ($remotetlpdb->list_packages()) { + # skip 00texlive packages + next if ($p =~ m!^00texlive!); + if ($p =~ m;\.;) { + push @do_later_media, $p; + next; + } + my $tlp; + my $maxtag; + if ($remotetlpdb->is_virtual) { + ($maxtag, undef, $tlp, undef) = + $remotetlpdb->virtual_candidate($p); + } else { + $tlp = $remotetlpdb->get_package($p); + } + populate_Packages("remote", $tlp, $maxtag); + } + } + my @avail_arch = $localtlpdb->available_architectures; + for my $p (@do_later_media) { + my ($mp, $ma) = ($p =~ m/^(.*)\.([^.]*)$/); + if (!defined($mp)) { + tlerror("very strange, above it matched and now not anymore?!?! $p\n"); + next; + } + my $tlp; + my $maxtag; + if ($remotetlpdb->is_virtual) { + ($maxtag, undef, $tlp, undef) = + $remotetlpdb->virtual_candidate($p); + } else { + $tlp = $remotetlpdb->get_package($p); + } + if (!defined($Packages{$mp})) { + populate_Packages("remote", $tlp, $maxtag); + } else { + # two cases: + # - $mp.$ma where $ma is in available_archs + # check if $pkg itself has been update present, otherwise + # add a "+" to the revision number of the upstream package + # but do NOT show the sub package + # We have to make sure that the remote version does not get + # TWO times a + added. This can happen if you have multiple + # architectures installed, and all of the .ARCH packages (more + # than 1) are updated, but not the main package + # + if (TeXLive::TLUtils::member($ma, @avail_arch)) { + if (defined($Packages{$mp}{'localrevision'}) && + defined($Packages{$mp}{'remoterevision'}) && + # a subpackage was already checked and found to be updated + $Packages{$mp}{'remoterevision'} !~ m/\+$/ && + $Packages{$mp}{'localrevision'} < $Packages{$mp}{'remoterevision'}) { + # the main package is updated, so just do nothing + } else { + if ($Packages{$mp}{'remoterevision'} !~ m/\+$/) { + # if there is an update to a binary sub package mark that with + # a "+" in the remote revision + my $ltlp = $localtlpdb->get_package($p); + if (defined($ltlp) && $ltlp->revision < $tlp->revision) { + $Packages{$mp}{'remoterevision'} .= "+"; + } + } + # no else clause, in this case the main package is not updated, + # but already one subpackage was checked and a + added, so don't + # do anything + } + # - $pkg.$arch where $arch is NOT in available_arch + # thus it was installed by the user, show it + # + } else { + # only show that one if it is locally installed + if (defined($Packages{$p})) { + populate_Packages("remote", $tlp, $maxtag); + } + } + } + } + # + # check for critical updates + my @critical = $localtlpdb->expand_dependencies("-no-collections", + $localtlpdb, @TeXLive::TLConfig::CriticalPackagesList); + @critical_updates = (); + for my $p (@critical) { + if (defined($Packages{$p}) && + defined($Packages{$p}{'localrevision'}) && + defined($Packages{$p}{'remoterevision'}) && + $Packages{$p}{'localrevision'} < $Packages{$p}{'remoterevision'}) { + push @critical_updates, $p; + } + } + # + # + if (@critical_updates) { + # add to the warning text if further updates are available + # compute the number of further updates + # we do NOT make a correct computation here like done in the actual + # tlmgr.pl sub action_update, but only count the numbers of packages + # that would be updated (without any forcibly remove/new counting) + my $min_action = 0; + for my $p (keys %Packages) { + next if member($p, @critical); + if (defined($Packages{$p}{'localrevision'}) && + defined($Packages{$p}{'remoterevision'}) && + $Packages{$p}{'localrevision'} < $Packages{$p}{'remoterevision'}) { + $min_action++; + } + } + # + # create the warning dialog + # + my $sw = $mw->DialogBox(-title => __("Warning"), -buttons => [ __("Ok") ]); + my $t = __("Updates for the tlmgr are present.\nInstallation and upgrades won't work without being forced.\nPlease select \"Update all installed\" button after dismissing this dialogue.\n\nThe program will terminate after the update.\nThen you can restart the program for further updates."); + if ($min_action) { + $t .= "\n\n" . __("At least %s further updates are available after tlmgr has been updated.", $min_action); + } + $t .= "\n\n" . __("Please wait a bit after the program has terminated so that the update can be completed.") if win32(); + $sw->add("Label", -text => $t)->pack(-padx => "3m", -pady => "3m"); + $sw->Show; + } + # change display names + for my $p (keys %Packages) { + if ($p =~ m/^collection-documentation-(.*)$/) { + $Packages{$p}{'displayname'} = "collection-doc-$1"; + } + } + #Devel::Leak::CheckSV($handle); + #warn join(",", currmem()); +} + +sub currmem { + my $pid = shift || $$; + if (open(MAP, "dd if=/proc/$pid/map bs=64k 2>/dev/null |")) { # FreeBSD + my $mem = 0; + my $realmem = 0; + while(<MAP>) { + my(@l) = split /\s+/; + my $delta = (hex($l[1])-hex($l[0])); + $mem += $delta; + if ($l[11] ne 'vnode') { + $realmem += $delta; + } + } + close MAP; + ($mem, $realmem); + } elsif (open(MAP, "/proc/$pid/maps")) { # Linux + my $mem = 0; + my $realmem = 0; + while(<MAP>) { + my(@l) = split /\s+/; + my($start,$end) = split /-/, $l[0]; + my $delta = (hex($end)-hex($start)); + $mem += $delta; + if (!defined $l[5] || $l[5] eq '') { + $realmem += $delta; + } + } + close MAP; + ($mem, $realmem); + } else { + undef; + } +} + +sub cb_handle_restore { + init_defaults_setting(); + # first do the handling of the backup dir selection + { + my ($a, $b) = check_backupdir_selection(); + if (!$a) { + # in all these cases we want to terminate in the non-gui mode + my $sw = $mw->DialogBox(-title => __("Warning"), -buttons => [ __("Ok") ]); + $sw->add("Label", -text => $b)->pack(@p_iii); + $sw->Show; + # delete the backupdir setting it might contain rubbish and + # we want to recheck + delete $opts{'backupdir'}; + return; + } + } + + my $sw = $mw->Toplevel(-title => __("Restore packages from backup")); + $sw->transient($mw); + $sw->grab; + + my $tf = $sw->Frame; + $tf->pack(-ipadx => '3m', -ipady => '3m'); + + my %backups = get_available_backups($opts{"backupdir"}); + + my @pkgbackup = sort keys %backups; + my $lstlen = ($#pkgbackup >= 10 ? 10 : ($#pkgbackup + 1)); + + my $pkg; + my $rev; + + my $restore_dialog = $sw->DialogBox(-title => __("Restore completed"), + -buttons => [ __("Ok") ]); + $restore_dialog->add("Label", -text => __("Restore completed"))->pack(@p_iii); + + + my $revbrowser; + + $tf->Label(-text => __("Select the package to restore, or restore all packages"))->pack(@p_ii); + + $tf->BrowseEntry(-label => __("Package:"), + -listheight => $lstlen, + -autolistwidth => 1, + -choices => \@pkgbackup, + -browsecmd => + sub { my @revlist = sort { $b <=> $a } (keys %{$backups{$pkg}}); + $revbrowser->delete(0,"end"); + for my $r (@revlist) { + $revbrowser->insert("end", $r); + }; + $rev = ""; + }, + -variable => \$pkg)->pack(@p_ii); + + $revbrowser = $tf->BrowseEntry(-label => __("Revision:"), + -listheight => 10, + -variable => \$rev)->pack(@p_ii); + + $tf->pack(-ipadx => '3m', -ipady => '3m'); + $tf->Button(-text => __("Restore selected package"), + -command => sub { + if (!defined($pkg) || !defined($rev) || + !($backups{$pkg}->{$rev})) { + tlwarn("Please select a package and revision first!\n"); + return; + } + $mw->Busy(-recurse => 1); + info("Restoring $pkg, rev $rev from $opts{'backupdir'}/${pkg}.r${rev}.tar.xz\n"); + restore_one_package($pkg, $rev, $opts{"backupdir"}); + reinit_local_tlpdb; + $restore_dialog->Show; + $pkg = ""; + $rev = ""; + $mw->Unbusy; + })->pack(@p_ii); + $tf->Button(-text => __("Restore all package to latest version"), + -command => sub { + $mw->Busy(-recurse => 1); + for my $p (@pkgbackup) { + my @tmp = sort {$b <=> $a} (keys %{$backups{$p}}); + my $r = $tmp[0]; + info("Restoring $p, rev $r from $opts{'backupdir'}/${p}.r${r}.tar.xz\n"); + restore_one_package($p, $r, $opts{"backupdir"}); + } + reinit_local_tlpdb; + $restore_dialog->Show; + $pkg = ""; + $rev = ""; + $mw->Unbusy; + })->pack(@p_ii); + + $tf->Button(-text => __("Close"), + -command => sub { $sw->destroy; }) + ->pack(@p_iii); +} + + +sub cb_handle_symlinks { + my $sw = $mw->Toplevel(-title => __("Handle symlinks in system dirs")); + $sw->transient($mw); + $sw->grab; + init_defaults_setting(); + + my $tp = $sw->Frame; + $tp->pack(-ipadx => '3m', -ipady => '3m'); + $tp->Label(-text => __("Link destination for programs"), @a_w)->grid( + $tp->Label(-textvariable => \$changeddefaults{"sys_bin"}{'display'}, @a_w), + $tp->Button(-text => __("Change"), + -command => sub { edit_dir_option ($sw, "sys_bin"); }), + -sticky => 'w'); + $tp->Label(-text => __("Link destination for info docs"), @a_w)->grid( + $tp->Label(-textvariable => \$changeddefaults{"sys_info"}{'display'}, @a_w), + $tp->Button(-text => __("Change"), + -command => sub { edit_dir_option ($sw, "sys_info"); }), + -sticky => 'w'); + $tp->Label(-text => __("Link destination for man pages"), @a_w)->grid( + $tp->Label(-textvariable => \$changeddefaults{"sys_man"}{'display'}, @a_w), + $tp->Button(-text => __("Change"), + -command => sub { edit_dir_option ($sw, "sys_man"); }), + -sticky => 'w'); + + my $md = $sw->Frame; + $md->pack(-ipadx => '3m', -ipady => '3m'); + $md->Button(-text => __("Update symbolic links"), + -command => sub { + $mw->Busy(-recurse => 1); + info("Updating symlinks ...\n"); + execute_action_gui("path", "add"); + $mw->Unbusy; + })->pack(@left, -padx => '3m'); + $md->Button(-text => __("Remove symbolic links"), + -command => sub { + $mw->Busy(-recurse => 1); + info("Removing symlinks ...\n"); + execute_action_gui("path", "remove"); + $mw->Unbusy; + })->pack(@left, -padx => '3m'); + + my $bt = $sw->Frame; + $bt->pack(-ipadx => '3m', -ipady => '3m'); + $bt->Button(-text => __("Ok"), + -command => sub { apply_settings_changes(); $sw->destroy; }) + ->pack(@left, -padx => '3m'); + $bt->Button(-text => __("Cancel"), + -command => sub { $sw->destroy; })->pack(-side => 'left', -padx => "3m"); +} + +sub edit_dir_option { + my $sw = shift; + my $what = shift; + my $dir = cb_edit_string_or_dir($sw, $what, $changeddefaults{$what}{'value'}); + if (defined($dir)) { + $changeddefaults{$what}{'value'} = $dir; + $changeddefaults{$what}{'display'} = $dir; + $settings_label{$what}->configure( + -background => ($defaults{$what} eq $dir ? $bgcolor : 'red')); + } +} + +sub cb_edit_string_or_dir { + my ($mw, $what, $cur) = @_; + my $done; + my $val; + my $sw = $mw->Toplevel(-title => __("Edit directory")); + $sw->transient($mw); + $sw->withdraw; + $sw->Label(-text => __("New value for") . " $what:")->pack(@p_ii); + my $entry = $sw->Entry(-text => $cur, -width => 30); + $entry->pack(@p_ii); + $sw->Button(-text => __("Choose Directory"), + -command => sub { + my $var = $sw->chooseDirectory(); + if (defined($var)) { + $entry->delete(0,"end"); + $entry->insert(0,$var); + } + })->pack(@p_ii); + my $f = $sw->Frame; + my $okbutton = $f->Button(-text => __("Ok"), + -command => sub { $val = $entry->get; $done = 1; })->pack(@left, @p_ii); + my $cancelbutton = $f->Button(-text => __("Cancel"), + -command => sub { $val = undef; $done = 1 })->pack(@right, @p_ii); + $f->pack(-expand => 1); + $sw->bind('<Return>', [ $okbutton, 'Invoke' ]); + $sw->bind('<Escape>', [ $cancelbutton, 'Invoke' ]); + my $old_focus = $sw->focusSave; + my $old_grab = $sw->grabSave; + $sw->Popup; + $sw->grab; + $sw->waitVariable(\$done); + $sw->grabRelease if Tk::Exists($sw); + $sw->destroy if Tk::Exists($sw); + return $val; +} + +sub cb_edit_location { + my $key = shift; + my $val; + my $sw = $mw->Toplevel(-title => __("Load package repository")); + $sw->transient($mw); + $sw->grab(); + $sw->Label(-text => __("Package repository:"))->pack(@p_ii); + my @mirror_list; + push @mirror_list, TeXLive::TLUtils::create_mirror_list(); + my $entry = $sw->BrowseEntry( + -listheight => 12, + -listwidth => 400, + -width => 50, + -autolistwidth => 1, + -choices => \@mirror_list, + -browsecmd => + sub { + if ($val !~ m/^ /) { + $val = ""; + } elsif ($val =~ m!(http|ftp)://!) { + $val = TeXLive::TLUtils::extract_mirror_entry($val); + } else { + $val =~ s/^\s*//; + } + }, + -variable => \$val); + # end new + $entry->pack(@p_ii); + my $f1 = $sw->Frame; + $f1->Button(-text => __("Choose Directory"), + -command => sub { + my $var = $sw->chooseDirectory(); + if (defined($var)) { + $val = $var; + } + })->pack(@left, @p_ii); + $f1->Button(-text => __("Default net package repository"), + -command => sub { + $val = $TeXLiveURL; + })->pack(@left, @p_ii); + $f1->pack; + my $f = $sw->Frame; + my $okbutton = $f->Button(-text => __("Ok"), + -command => sub { $location = $val; + $sw->destroy; + setup_location($location); + })->pack(@left, @p_ii); + my $cancelbutton = $f->Button(-text => __("Cancel"), + -command => sub { $sw->destroy })->pack(@right, @p_ii); + $f->pack(-expand => 1); + $sw->bind('<Return>', [ $okbutton, 'Invoke' ]); + $sw->bind('<Escape>', [ $cancelbutton, 'Invoke' ]); +} + +sub update_loaded_location_string { + my $arg = shift; + $arg || ($arg = $location); + my %repos = repository_to_array($arg); + my @tags = sort keys %repos; + my @vals; + if ($#tags > 0) { + @vals = map { "$_:$repos{$_}" } sort sort_main_first @tags; + } else { + @vals = ( $arg ); + } + my $locstr; + if ($#tags > 0) { + $locstr = $repos{'main'}; + for my $t (keys %repos) { + if ($t ne 'main') { + $locstr .= " $repos{$t}"; + } + } + $loaded_text_button->configure(-text => __("multiple repositories")); + } else { + $loaded_text_button->configure(-text => $arg); + } + $loaded_text->configure(-text => __("Loaded repository:")); + $loaded_text_button->configure( -command => + sub { transient_show_multiple_repos($loaded_text_button, @vals); }); +} + +sub transient_show_multiple_repos { + my ($ref_widget, @vals) = @_; + my $xx = $ref_widget->rootx; + my $yy = $ref_widget->rooty + $ref_widget->reqheight; + my $sw = $mw->Toplevel(-bd => 2); + $sw->geometry("+$xx+$yy"); + $sw->overrideredirect(1); + $sw->transient($mw); + $sw->grab; + # we want to have a global grab, but that somehow does not work! + #$sw->grabGlobal; + $sw->bind('<1>', sub { $sw->grabRelease; $sw->destroy; }); + my $foo = $sw->Listbox(-height => 0, -width => 0, + -listvariable => \@vals, + -state => 'normal'); + $foo->pack; +} + +sub run_update_functions { + foreach my $f (@update_function_list) { + &{$f}(); + } +} + +sub check_location_on_ctan { + # we want to check that if mirror.ctan.org + # is used that we select a mirror once + if ($location =~ m/$TeXLive::TLConfig::TeXLiveServerURL/) { + $location = TeXLive::TLUtils::give_ctan_mirror(); + } +} + +sub execute_action_gui { + $mw->Busy(-recurse => 1); + info ("Executing action @_\n"); + my $error_code = execute_action(@_); + if ($error_code) { + give_warning_window(@_); + } + info(__("Completed") . ".\n"); + $mw->Unbusy; +} + +sub give_warning_window { + my ($act, @args) = @_; + my $sw = $mw->DialogBox(-title => __("Warning"), -buttons => [ __("Ok") ]); + $sw->add("Label", -text => __("Running %s failed.\nPlease consult the log window for details.", "$act @args") + )->pack(@p_iii); + $sw->Show; +} + +# pod help thing + +sub pod_to_text { + my $txt; + eval { require IO::String; }; + if ($@) { + $txt = " +The Perl Module IO::String is not available. +Without it the documentation cannot be shown. Please install it. + +As an alternative use + tlmgr help +on the command line. +"; + } else { + my $io = IO::String->new($txt); + my $parser = Pod::Text->new (sentence => 0, width => 78); + $parser->parse_from_file("$Master/texmf/scripts/texlive/tlmgr.pl", $io); + } + my $sw = $mw->Toplevel(-title => __("Help")); + $sw->transient($mw); + my $t = $sw->Scrolled("ROText", -scrollbars => "e", + -height => 40, -width => 80); + $t->Contents($txt); + $t->pack; +} + +1; + +__END__ + + +### Local Variables: +### perl-indent-level: 2 +### tab-width: 2 +### indent-tabs-mode: nil +### End: +# vim:set tabstop=2 expandtab: # diff --git a/Master/texmf-dist/scripts/texlive/uninstall-win32.pl b/Master/texmf-dist/scripts/texlive/uninstall-win32.pl new file mode 100644 index 00000000000..7cc60f5223b --- /dev/null +++ b/Master/texmf-dist/scripts/texlive/uninstall-win32.pl @@ -0,0 +1,93 @@ +#!/usr/bin/env perl +# $Id$ +# Copyright 2008, 2010, 2011, 2012 Norbert Preining +# +# GUI for tlmgr + +my $Master; + +BEGIN { + $^W = 1; + $Master = `%COMSPEC% /c kpsewhich -var-value=SELFAUTOPARENT`; + chomp($Master); + unshift (@INC, "$Master/tlpkg"); +} + +use TeXLive::TLWinGoo; +use TeXLive::TLPDB; +use TeXLive::TLPOBJ; +use TeXLive::TLConfig; +use TeXLive::TLUtils; +use Tk; +use Tk::Dialog; + +my $mw = MainWindow->new(-title => "remove tlmgr $TeXLive::TLConfig::ReleaseYear"); + +my $f = $mw->Frame; +my $lab = $f->Label( +# -justify => 'left', + -text => "Do you really want to remove TeX Live $TeXLive::TLConfig::ReleaseYear?"); +$lab->pack(-side => "left", -padx => "12", -pady => "6"); + +$f->pack(# -padx => "10m", + -pady => "12"); + +my $ok = $f->Button(-text => "Ok", + -command => sub { $mw->destroy; doit(); exit(0); }); +my $cancel = $f->Button(-text => "Cancel", + -command => sub { $mw->destroy; exit(1); }); + +$cancel->pack(-side => 'right' , -padx => "12"); +$ok->pack(-side => 'right', -padx => "12"); + +$mw->Label( + -text => "Please make sure that no TeX Live programs are still running!" +)->pack(-padx => "12", -pady => "12"); + +sub doit { + # first we remove the whole bunch of shortcuts and menu entries + # by calling all the post action codes for the installed packages + my $localtlpdb = TeXLive::TLPDB->new ("root" => $Master); + if (!defined($localtlpdb)) { + tlwarn("Cannot load the TLPDB from $Master, are you sure there is an installation?\n"); + } else { + # set the mode for windows uninstall according to the setting in + # tlpdb + if (TeXLive::TLWinGoo::admin() && !$localtlpdb->option("w32_multi_user")) { + non_admin(); + } + for my $pkg ($localtlpdb->list_packages) { + &TeXLive::TLUtils::do_postaction("remove", $localtlpdb->get_package($pkg), + $localtlpdb->option("file_assocs"), + $localtlpdb->option("desktop_integration"), + $localtlpdb->option("desktop_integration"), + $localtlpdb->option("post_code")); + } + } + my $menupath = &TeXLive::TLWinGoo::menu_path(); + $menupath =~ s!/!\\!g; + `rmdir /q "$menupath\\$TeXLive::TLConfig::WindowsMainMenuName" 2>nul`; + + # remove bindir from PATH settings + TeXLive::TLUtils::w32_remove_from_path("$Master/bin/win32", + $localtlpdb->option("w32_multi_user")); + + # unsetenv_reg("TEXBINDIR"); + # unsetenv_reg("TEXMFSYSVAR"); + # unsetenv_reg("TEXMFCNF"); + unregister_uninstaller($localtlpdb->option("w32_multi_user")); + broadcast_env(); + update_assocs(); +} + +Tk::MainLoop(); + +__END__ + + +### Local Variables: +### perl-indent-level: 2 +### tab-width: 2 +### indent-tabs-mode: nil +### End: +# vim:set tabstop=2 expandtab: # diff --git a/Master/texmf-dist/scripts/texlive/var/texcatalogue.keywords b/Master/texmf-dist/scripts/texlive/var/texcatalogue.keywords new file mode 100644 index 00000000000..1ea128496cc --- /dev/null +++ b/Master/texmf-dist/scripts/texlive/var/texcatalogue.keywords @@ -0,0 +1,45008 @@ +$taxonomy = { + 'by-package' => { + 'keyword' => { + 'xytree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities' + ], + 'gitinfo' => [ + 'make, compilation systems' + ], + 'eqell' => [ + 'punctuation' + ], + 'tipa-de' => [ + 'help, documentation, FAQ', + 'symbols, text' + ], + 'biblatex-juradiss' => [ + 'bibliography, formatting', + 'Humanities' + ], + 'ytex' => [ + 'macro programming' + ], + 'dviconcat' => [ + 'DVI file manipulation' + ], + 'tccompat' => [ + 'encodings, Unicode', + 'symbols, text' + ], + 'ltnews' => [ + 'help, documentation, FAQ' + ], + 'trans' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'ifxetex' => [ + 'macro programming' + ], + 'techreport' => [ + 'report style', + 'thesis style' + ], + 'twoside' => [ + 'page styles' + ], + 'epslatex' => [ + 'help, documentation, FAQ' + ], + 'ushort' => [ + 'text decoration (underline, etc.)' + ], + 'scalefnt' => [ + 'font selection' + ], + 'dejavu' => [ + 'fonts, text' + ], + 'ntg' => [ + 'help, documentation, FAQ' + ], + 'dante-book-reviews' => [ + 'help, documentation, FAQ' + ], + 'biblos' => [ + 'bibliography, management' + ], + 'listings-ext' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'tkz-euclide' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Mathematics (the subject)' + ], + 'latex-make' => [ + 'make, compilation systems' + ], + 'txgreeks' => [ + 'font selection', + 'fonts, text' + ], + 'rmannot' => [ + 'output format PDF, PostScript' + ], + 'titletoc' => [ + 'figures, floating matter', + 'table of contents' + ], + 'mtbe' => [ + 'help, documentation, FAQ', + 'macro programming' + ], + 'marginfix' => [ + 'marginal material' + ], + 'aiaa' => [ + 'article style', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'bbm' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'lucold' => [ + 'font selection' + ], + 'gray' => [ + 'MetaFont, Metapost' + ], + 'endnote' => [ + 'footnotes, end notes', + 'macro programming' + ], + 'ot2cyr' => [ + 'font selection' + ], + 'active-conf' => [ + 'article style', + 'collections, proceedings, conferences', + 'document style' + ], + 'sarabian' => [ + 'fonts, text' + ], + 'hpgl2ps' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'chktex' => [ + 'make, compilation systems' + ], + 'pst-spectra' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript', + 'Physics, Chemistry, Biology' + ], + 'mdwlist' => [ + 'macro programming' + ], + 'toc-zar' => [ + 'front matter, end matter' + ], + 'greek4cbc' => [ + 'fonts, mathematics' + ], + 'xtrcode' => [ + 'macro programming' + ], + 'mfpic' => [ + 'make, compilation systems', + 'MetaFont, Metapost' + ], + 'tablor' => [ + 'MetaFont, Metapost', + 'tables' + ], + 'sc21' => [ + 'publisher\'s style', + 'title, maketitle' + ], + 'beamersubframe' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'verbatimbox' => [ + 'computer code, verbatim text', + 'macro programming' + ], + 'sciposter' => [ + 'document style', + 'Physics, Chemistry, Biology' + ], + 'coverpage' => [ + 'front matter, end matter' + ], + 'msg' => [ + 'help, documentation, FAQ', + 'languages other than English' + ], + 'hvmath' => [ + 'font selection' + ], + 'optparams' => [ + 'macro programming' + ], + 'ppchtex' => [ + 'Physics, Chemistry, Biology' + ], + 'pgf-soroban' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'pauldoc' => [ + 'help, documentation, FAQ', + 'languages other than English' + ], + 'IEEEconf' => [ + 'collections, proceedings, conferences' + ], + 'friulan' => [ + 'languages other than English' + ], + 'exercise' => [ + 'exams, exercises, answers' + ], + 'lua2dox' => [ + 'macro programming' + ], + 'logical-markup-utils' => [ + 'languages other than English', + 'macro programming' + ], + 'curves' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'expl3' => [ + 'macro programming' + ], + 'extdash' => [ + 'hyphenation', + 'symbols, mathematical' + ], + 'xecjk' => [ + 'fonts, text', + 'languages other than English' + ], + 'universa' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'pgf-blur' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'midfloat' => [ + 'columns, multiple columns' + ], + 'dates' => [ + 'dates and times' + ], + 'bsheaders' => [ + 'chapters, sectioning' + ], + 'substr' => [ + 'macro programming' + ], + 'pdftex-def' => [ + 'color', + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'losymbol' => [ + 'front matter, end matter', + 'symbols, mathematical', + 'symbols, text' + ], + 'chickenize' => [ + 'macro programming' + ], + 'texperf' => [ + 'word processor conversion' + ], + 'res' => [ + 'vita, CV, resume' + ], + 'Hepunits' => [ + 'Physics, Chemistry, Biology', + 'scientific units' + ], + 'aguplus' => [ + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'context-french' => [ + 'languages other than English', + 'punctuation' + ], + 'mychemistry' => [ + 'Physics, Chemistry, Biology' + ], + 'dvipng' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'subdepth' => [ + 'Mathematics (the subject)' + ], + 'llist' => [ + 'computer code, verbatim text' + ], + 'dinat' => [ + 'bibliography, management', + 'languages other than English' + ], + 'amsppt' => [ + 'article style', + 'document style', + 'Mathematics (the subject)' + ], + 'address' => [ + 'letters, envelopes, labels' + ], + 'kuvio' => [ + 'commutative diagrams', + 'output format PDF, PostScript' + ], + 'moderntimeline' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'vita, CV, resume' + ], + 'crop' => [ + 'proof sheets (typographical)' + ], + 'chemarrow' => [ + 'arrows', + 'MetaFont, Metapost', + 'Physics, Chemistry, Biology' + ], + 'bera' => [ + 'fonts, mathematics' + ], + 'sanskrit-t1' => [ + 'fonts, text' + ], + 'pointruler' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'help, documentation, FAQ' + ], + 'manfnt' => [ + 'font selection', + 'symbols, text' + ], + 'vrb' => [ + 'computer code, verbatim text' + ], + 'rangen' => [ + 'macro programming' + ], + 'maad' => [ + 'help, documentation, FAQ' + ], + 'pst-eucl' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Mathematics (the subject)', + 'output format PDF, PostScript' + ], + 'amsmath-it' => [ + 'help, documentation, FAQ' + ], + 'mylatexformat' => [ + 'macro programming' + ], + 'bitset' => [ + 'macro programming' + ], + 'tex-gyre-math' => [ + 'fonts, mathematics' + ], + 'testeq' => [ + 'MetaFont, Metapost' + ], + 'Punk-LaTeX' => [ + 'font selection' + ], + 'hypdestopt' => [ + 'output format PDF, PostScript', + 'URLs, hyperlinks' + ], + 'tikz-timing' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'latex-course' => [ + 'help, documentation, FAQ', + 'presentations (powerpoint-like, using a beamer)' + ], + 'tweb' => [ + 'literate programming', + 'macro programming' + ], + 'catdvi' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'ruler' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'help, documentation, FAQ' + ], + 'otfinst' => [ + 'font selection' + ], + 'psnfssx-adobe' => [ + 'font selection', + 'output format PDF, PostScript' + ], + 'cool' => [ + 'Mathematics (the subject)' + ], + 'capparmode' => [ + 'dropped letter, often initial letter' + ], + 'check' => [ + 'editing, graphical work environment' + ], + 'fixltx2e' => [ + 'columns, multiple columns', + 'figures, floating matter', + 'footnotes, end notes', + 'headers, footers' + ], + 'context' => [ + 'article style', + 'book style', + 'macro programming', + 'Mathematics (the subject)', + 'output format PDF, PostScript' + ], + 'psbao' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'nomencl' => [ + 'symbols, text' + ], + 'aeb-tilebg' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'adrconv' => [ + 'bibliography, management', + 'exams, exercises, answers' + ], + 'tex-gyre-chorus' => [ + 'fonts, text' + ], + 'initials' => [ + 'dropped letter, often initial letter', + 'fonts, mathematics', + 'paragraph', + 'symbols, mathematical' + ], + 'imprintmtshadow' => [ + 'font selection' + ], + 'acromake' => [ + 'abbreviations, acronyms' + ], + 'orkhun' => [ + 'fonts, text', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'texinfo-latest' => [ + 'help, documentation, FAQ', + 'macro programming' + ], + 'lshort-japanese' => [ + 'help, documentation, FAQ' + ], + 'ithyph' => [ + 'hyphenation' + ], + 'confproc' => [ + 'collections, proceedings, conferences' + ], + 'proof' => [ + 'make, compilation systems' + ], + 'nature' => [ + 'bibliography, formatting', + 'document style', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'kurier' => [ + 'fonts, mathematics' + ], + 'tex2word' => [ + 'word processor conversion' + ], + 'ltxgrid' => [ + 'columns, multiple columns', + 'page styles' + ], + 'pgfmolbio' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'xindy' => [ + 'index, indexing' + ], + 'lgc-examples' => [ + 'help, documentation, FAQ' + ], + 'zhspacing' => [ + 'languages other than English' + ], + 'TeXmacs' => [ + 'editing, graphical work environment' + ], + 'a4wide' => [ + 'paper size, orientation' + ], + 'induni-om' => [ + 'fonts, mathematics' + ], + 'qed' => [ + 'symbols, mathematical' + ], + 'EBONG' => [ + 'languages other than English' + ], + 'pxcjkcat' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'jmb' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'ryethesis' => [ + 'thesis style' + ], + 'pst-sigsys' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'hrefhide' => [ + 'output format PDF, PostScript', + 'URLs, hyperlinks' + ], + 'enumerate' => [ + 'lists, bullets' + ], + 'mlist' => [ + 'macro programming' + ], + 'presentations' => [ + 'help, documentation, FAQ' + ], + 'sfmath' => [ + 'font selection', + 'Mathematics (the subject)' + ], + 'histyle' => [ + 'document style' + ], + 'fntproof' => [ + 'fonts, mathematics', + 'fonts, text' + ], + 'mpcolornames' => [ + 'color', + 'MetaFont, Metapost' + ], + 'bohr' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'coptic' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'lshort-persian' => [ + 'help, documentation, FAQ' + ], + 'gahyph' => [ + 'hyphenation' + ], + 'balancedquotes' => [ + 'quotation, poetry' + ], + 'threeparttable' => [ + 'footnotes, end notes', + 'tables' + ], + 'acs' => [ + 'article style', + 'bibliography, management', + 'Computer Science', + 'publisher\'s style' + ], + 'abstyles-orig' => [ + 'bibliography, management' + ], + 'bigstrut' => [ + 'arrays, matrices', + 'spacing, horizontal or vertical', + 'tables' + ], + 'pdfslide' => [ + 'output format PDF, PostScript', + 'presentations (powerpoint-like, using a beamer)' + ], + 'removefr' => [ + 'macro programming' + ], + 'xypic-tut-pt' => [ + 'help, documentation, FAQ' + ], + 'seuthesis' => [ + 'thesis style' + ], + 'funnelweb' => [ + 'literate programming' + ], + 'fixpdfmag' => [ + 'output format PDF, PostScript', + 'page geometry (margins, etc.)' + ], + 'altverse' => [ + 'quotation, poetry' + ], + 'srcltx' => [ + 'editing, graphical work environment', + 'macro programming' + ], + 'idxtex' => [ + 'index, indexing' + ], + 'ejpecp' => [ + 'article style', + 'publisher\'s style' + ], + 'ec-plain' => [ + 'font selection' + ], + 'jhep' => [ + 'article style', + 'Physics, Chemistry, Biology' + ], + 'dotarrow' => [ + 'arrows' + ], + 'LaTeX-brochure' => [ + 'help, documentation, FAQ' + ], + 'eiad' => [ + 'fonts, mathematics' + ], + 'bg' => [ + 'graphics from outside TeX', + 'symbols, mathematical' + ], + 'lextex' => [ + 'document style' + ], + 'vowel' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities' + ], + 'serbian-date-lat' => [ + 'dates and times', + 'languages other than English' + ], + 'mnras-plain' => [ + 'article style', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'umthesis' => [ + 'thesis style' + ], + 'nar' => [ + 'bibliography, formatting', + 'Physics, Chemistry, Biology' + ], + 'needspace' => [ + 'page breaks' + ], + 'pdcmac' => [ + 'macro programming' + ], + 'gnuplottex' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'plainpkg' => [ + 'macro programming' + ], + 'cassette' => [ + 'document style' + ], + 'bellmac' => [ + 'letters, envelopes, labels' + ], + 'LaTexMng' => [ + 'editing, graphical work environment' + ], + 'fundus-la' => [ + 'font selection' + ], + 'MicroIMP' => [ + 'editing, graphical work environment' + ], + 'frenchquote' => [ + 'symbols, text' + ], + 'eqnarray' => [ + 'equations, subequations' + ], + 'newverbs' => [ + 'computer code, verbatim text' + ], + 'circ' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'wordweb' => [ + 'literate programming' + ], + 'fbithesis' => [ + 'Computer Science', + 'report style', + 'thesis style' + ], + 'DB_process' => [ + 'external programs, interfacing', + 'macro programming' + ], + 'babelbib' => [ + 'bibliography, management', + 'languages other than English' + ], + 'acm' => [ + 'article style', + 'Computer Science', + 'publisher\'s style' + ], + 'ist21' => [ + 'publisher\'s style', + 'title, maketitle' + ], + 'texdoctk' => [ + 'help, documentation, FAQ' + ], + 'oands' => [ + 'fonts, text', + 'Humanities', + 'symbols, text' + ], + 'mf2tex' => [ + 'MetaFont, Metapost' + ], + 'easybmat' => [ + 'arrays, matrices' + ], + 'pdfcolfoot' => [ + 'color', + 'output format PDF, PostScript' + ], + 'rtkinenc' => [ + 'encodings, Unicode' + ], + 'pybib' => [ + 'bibliography, management' + ], + 'luabibentry' => [ + 'bibliography, formatting' + ], + 'realboxes' => [ + 'macro programming' + ], + 'embedfile' => [ + 'include file', + 'output format PDF, PostScript' + ], + 'ftnxtra' => [ + 'footnotes, end notes' + ], + 'romanbar' => [ + 'symbols, text' + ], + 'ecards' => [ + 'exams, exercises, answers', + 'output format PDF, PostScript' + ], + 'draftwatermark' => [ + 'watermark, draftmark' + ], + 'mcaption' => [ + 'caption', + 'marginal material' + ], + 'comicsans' => [ + 'fonts, mathematics' + ], + 'chicago' => [ + 'bibliography, management', + 'Humanities' + ], + 'pitthesis' => [ + 'thesis style' + ], + 'iso10303' => [ + 'document style' + ], + 'noitcrul' => [ + 'Mathematics (the subject)' + ], + 'context-vim' => [ + 'computer code, verbatim text' + ], + 'malayalam-latex' => [ + 'fonts, text', + 'languages other than English' + ], + 'chemfig' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'maybemath' => [ + 'symbols, mathematical' + ], + 'kvsetkeys' => [ + 'macro programming' + ], + 'keyreader' => [ + 'macro programming' + ], + 'askinclude' => [ + 'include file' + ], + 'templates-sommer' => [ + 'help, documentation, FAQ' + ], + 'ibm' => [ + 'font selection' + ], + 'vhistory' => [ + 'make, compilation systems' + ], + 'memo209' => [ + 'document style' + ], + 'algorithm2e' => [ + 'computer code, verbatim text', + 'Computer Science', + 'figures, floating matter' + ], + 'twoup-gen' => [ + 'DVI file manipulation', + 'output format other than PDF (HTML, etc.)' + ], + 'turnthepage' => [ + 'headers, footers' + ], + 'pstricks-examples-en' => [ + 'help, documentation, FAQ' + ], + 'ifmtarg' => [ + 'macro programming' + ], + 'verbatim-pln' => [ + 'computer code, verbatim text' + ], + 'longtable' => [ + 'caption', + 'tables' + ], + 'pagecont' => [ + 'page numbering' + ], + 'fifinddo-info' => [ + 'help, documentation, FAQ' + ], + 'aro-bend' => [ + 'macro programming' + ], + 'fnpara' => [ + 'footnotes, end notes' + ], + 'cmslup' => [ + 'font selection', + 'fonts, mathematics' + ], + 'mathrsfs' => [ + 'font selection', + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'cheq' => [ + 'symbols, mathematical' + ], + 'rtf2latex2e' => [ + 'word processor conversion' + ], + 'ptserif' => [ + 'fonts, text' + ], + 'konwerter' => [ + 'Physics, Chemistry, Biology' + ], + 'hypgotoe' => [ + 'include file', + 'output format PDF, PostScript' + ], + 'etexcmds' => [ + 'macro programming' + ], + 'mt11p' => [ + 'font selection' + ], + 'cleveref' => [ + 'cross references' + ], + 'msym' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'epspdfconversion' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'corridx-latex' => [ + 'index, indexing', + 'Physics, Chemistry, Biology' + ], + 'mslapa' => [ + 'article style', + 'Humanities' + ], + 'bar' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'metainfo' => [ + 'make, compilation systems' + ], + 'decsci' => [ + 'bibliography, management' + ], + 'typehtml' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'pgothic' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'tabls' => [ + 'arrays, matrices', + 'tables' + ], + 'dvgtk' => [ + 'output viewer' + ], + 'trfsigns' => [ + 'symbols, mathematical' + ], + 'pst-pdf' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'ethiop-t1' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'tipa' => [ + 'encodings, Unicode', + 'font selection', + 'fonts, text', + 'Humanities' + ], + 'bigintcalc' => [ + 'macro programming' + ], + 'rangecite' => [ + 'cross references' + ], + 'makeidx' => [ + 'index, indexing' + ], + 'archaic' => [ + 'fonts, mathematics' + ], + 'bashkirian' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'rjlparshap' => [ + 'paragraph' + ], + 'nostarch' => [ + 'book style', + 'document style', + 'publisher\'s style' + ], + 'foiltex' => [ + 'foils, overhead slides' + ], + 'tt2001' => [ + 'fonts, text', + 'symbols, mathematical' + ], + 'subcaption' => [ + 'caption' + ], + 'mpdinbrief' => [ + 'article style', + 'paper size, orientation', + 'publisher\'s style' + ], + 'mfirstuc' => [ + 'glossary, dictionary', + 'macro programming' + ], + 'LamsTeX' => [ + 'macro programming' + ], + 'upref' => [ + 'cross references' + ], + 'mfnfss' => [ + 'font selection' + ], + 'vertex' => [ + 'article style' + ], + 'paralist' => [ + 'lists, bullets' + ], + 'biblatex-fiwi' => [ + 'bibliography, formatting', + 'Humanities' + ], + 'luatex-pkg' => [ + 'macro programming' + ], + 'yt4pdf' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'textgreek' => [ + 'symbols, text' + ], + 'image-gallery' => [ + 'graphics from outside TeX' + ], + 'antp' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'systcontrolletters' => [ + 'article style', + 'publisher\'s style' + ], + 'imsproc' => [ + 'article style' + ], + 'odsfile' => [ + 'external programs, interfacing', + 'tables' + ], + 'la' => [ + 'fonts, mathematics', + 'languages other than English', + 'symbols, mathematical' + ], + 'gnhyph' => [ + 'hyphenation' + ], + 'exteps' => [ + 'MetaFont, Metapost', + 'output format PDF, PostScript' + ], + 'uniquecounter' => [ + 'macro programming' + ], + 'texilikechaps' => [ + 'chapters, sectioning' + ], + 'multenum' => [ + 'columns, multiple columns', + 'exams, exercises, answers', + 'lists, bullets' + ], + 'cherokee' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'XeTeXref' => [ + 'help, documentation, FAQ' + ], + 'todo' => [ + 'cross references', + 'lists, bullets' + ], + 'sirlin' => [ + 'fonts, text', + 'languages other than English' + ], + 'ogham' => [ + 'fonts, text', + 'languages other than English' + ], + 'titling' => [ + 'title, maketitle' + ], + 'hexdump' => [ + 'include file' + ], + 'paragraphs' => [ + 'paragraph' + ], + 'lshort-italian' => [ + 'help, documentation, FAQ' + ], + 'easybib' => [ + 'bibliography, management' + ], + 'twcal' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'settobox' => [ + 'macro programming' + ], + 'regstats' => [ + 'macro programming' + ], + 'renditions' => [ + 'macro programming' + ], + 'inrstex' => [ + 'languages other than English' + ], + 'index' => [ + 'index, indexing' + ], + 'calrsfs' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'rotchiffre' => [ + 'macro programming' + ], + 'abc2mtex' => [ + 'music' + ], + 'mhack' => [ + 'marginal material' + ], + 'compact-symbols' => [ + 'help, documentation, FAQ' + ], + 'svn-prov' => [ + 'make, compilation systems' + ], + 'biblatex-mla' => [ + 'bibliography, management', + 'publisher\'s style' + ], + 'amsopn' => [ + 'Mathematics (the subject)', + 'symbols, mathematical' + ], + 'knst' => [ + 'exams, exercises, answers' + ], + 'translation-array-fr' => [ + 'help, documentation, FAQ' + ], + 'pst-solarsystem' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'kmrhyph' => [ + 'hyphenation' + ], + 'tap' => [ + 'tables' + ], + 'saferef' => [ + 'cross references' + ], + 'ziffer' => [ + 'symbols, mathematical' + ], + 'insbox' => [ + 'wrap around a figure' + ], + 'etoolbox-de' => [ + 'help, documentation, FAQ', + 'macro programming' + ], + 'doc' => [ + 'help, documentation, FAQ', + 'literate programming', + 'macro programming' + ], + 'unswthesis' => [ + 'thesis style' + ], + 'chemstruct' => [ + 'Physics, Chemistry, Biology' + ], + 'pst-coil' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'lcg' => [ + 'macro programming' + ], + 'thaifonts-arundina' => [ + 'font selection', + 'fonts, text' + ], + 'pkuthss' => [ + 'thesis style' + ], + 'grafcet' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'parselines' => [ + 'macro programming' + ], + 'brushscr' => [ + 'fonts, mathematics' + ], + 'chemexec' => [ + 'exams, exercises, answers', + 'Physics, Chemistry, Biology' + ], + 'invoice' => [ + 'document style' + ], + 'mbenotes' => [ + 'footnotes, end notes' + ], + 'epmtfe' => [ + 'editing, graphical work environment' + ], + 'cmcyr' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'kalender-209' => [ + 'dates and times', + 'languages other than English' + ], + 'twoupltx' => [ + 'output format PDF, PostScript' + ], + 'latin2jk' => [ + 'encodings, Unicode' + ], + 'fpl' => [ + 'fonts, mathematics' + ], + 'cmfrak' => [ + 'font selection', + 'MetaFont, Metapost' + ], + 'graphicx' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'refcheck' => [ + 'cross references', + 'make, compilation systems' + ], + 'dectab' => [ + 'tables' + ], + 'MPStoEPS' => [ + 'MetaFont, Metapost', + 'output format PDF, PostScript' + ], + 'breakurl' => [ + 'URLs, hyperlinks' + ], + 'plhyph' => [ + 'hyphenation' + ], + 'urw' => [ + 'fonts, text' + ], + 'sketch' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'ntgclass' => [ + 'article style', + 'report style' + ], + 'coolthms' => [ + 'cross references', + 'lists, bullets', + 'theorems' + ], + 'amstext' => [ + 'equations, subequations', + 'font selection' + ], + 'chemcompounds' => [ + 'Physics, Chemistry, Biology' + ], + 'stdclsdv' => [ + 'chapters, sectioning', + 'macro programming' + ], + 'sapthesis' => [ + 'thesis style' + ], + 'docstrip' => [ + 'help, documentation, FAQ', + 'literate programming', + 'make, compilation systems' + ], + 'vmspell' => [ + 'editing, graphical work environment' + ], + 'idealfonts' => [ + 'output format PDF, PostScript' + ], + 'bold-extra' => [ + 'font selection', + 'fonts, mathematics' + ], + 'pstricks-add' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'biocon' => [ + 'Physics, Chemistry, Biology' + ], + 'makeindex' => [ + 'index, indexing' + ], + 'dogma' => [ + 'font selection' + ], + 'ulthese' => [ + 'thesis style' + ], + 'mwrite' => [ + 'macro programming' + ], + 'lsabon' => [ + 'font selection' + ], + 'shadebox' => [ + 'boxed text, frames', + 'color', + 'output format PDF, PostScript' + ], + 'psu-thesis' => [ + 'thesis style' + ], + 'geophysics' => [ + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'l3dt' => [ + 'macro programming' + ], + 'amsart' => [ + 'article style', + 'Mathematics (the subject)', + 'publisher\'s style' + ], + 'tapir' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'rune' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'philosophersimprint' => [ + 'article style', + 'Humanities', + 'publisher\'s style' + ], + 'hvdashln' => [ + 'arrays, matrices', + 'tables' + ], + 'changebar' => [ + 'changebars' + ], + 'gentium' => [ + 'font selection', + 'fonts, mathematics' + ], + 'filecontents' => [ + 'macro programming' + ], + 'adfsymbols' => [ + 'symbols, text' + ], + 'lyx' => [ + 'editing, graphical work environment' + ], + 'perception' => [ + 'bibliography, formatting' + ], + 'listings' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'astro' => [ + 'symbols, mathematical' + ], + 'mentis' => [ + 'book style', + 'publisher\'s style' + ], + 'envbig' => [ + 'letters, envelopes, labels' + ], + 'C.D.P. Bundle' => [ + 'letters, envelopes, labels' + ], + 'metago' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'context-letter' => [ + 'letters, envelopes, labels' + ], + 'upquote' => [ + 'computer code, verbatim text', + 'symbols, text' + ], + 'popupmenu' => [ + 'output format PDF, PostScript', + 'URLs, hyperlinks' + ], + 'labelmac3' => [ + 'letters, envelopes, labels' + ], + 'uiucthesis' => [ + 'thesis style' + ], + 'karta' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'mactex' => [ + 'distributions, whole systems' + ], + 'emulateapj' => [ + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'futurans' => [ + 'font selection' + ], + 'lmacs' => [ + 'macro programming', + 'make, compilation systems' + ], + 'gmeometric' => [ + 'page geometry (margins, etc.)' + ], + 'pst-pulley' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'shapepar' => [ + 'paragraph' + ], + 'nonumonpart' => [ + 'chapters, sectioning', + 'page numbering' + ], + 'intcalc' => [ + 'macro programming' + ], + 'unisugar' => [ + 'encodings, Unicode' + ], + 'classlist' => [ + 'make, compilation systems' + ], + 'bchart' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'timetab' => [ + 'tables' + ], + 'logic' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'linearA' => [ + 'fonts, text', + 'languages other than English', + 'symbols, text' + ], + 'hlatex' => [ + 'languages other than English' + ], + 'cspsfonts' => [ + 'font selection', + 'languages other than English' + ], + 'biblatex-luh-ipw' => [ + 'bibliography, formatting', + 'Humanities' + ], + 'fontchart' => [ + 'font selection' + ], + 'dirtytalk' => [ + 'quotation, poetry' + ], + 'dvgt' => [ + 'output viewer' + ], + 'MPEdit' => [ + 'editing, graphical work environment' + ], + 'web' => [ + 'literate programming' + ], + 'makeplot' => [ + 'external programs, interfacing', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'holtpolt' => [ + 'symbols, mathematical' + ], + 'alpha' => [ + 'editing, graphical work environment' + ], + 'references' => [ + 'bibliography, management' + ], + 'fix-cm' => [ + 'font selection' + ], + 'easyLaTeX' => [ + 'editing, graphical work environment' + ], + 'mactextras' => [ + 'distributions, whole systems' + ], + 'softmakerfreefont' => [ + 'fonts, text' + ], + 'luatexbase' => [ + 'macro programming' + ], + 'texdiff' => [ + 'changebars', + 'editing, graphical work environment', + 'make, compilation systems' + ], + 'treetex-plain' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'minted' => [ + 'computer code, verbatim text' + ], + 'hpsdiss' => [ + 'thesis style' + ], + 'hhtensor' => [ + 'arrays, matrices' + ], + 'bengali-pandey' => [ + 'languages other than English' + ], + 'texdirflatten' => [ + 'include file', + 'make, compilation systems' + ], + 'pdfcolparallel' => [ + 'color', + 'columns, multiple columns', + 'output format PDF, PostScript' + ], + 'tugboat-plain' => [ + 'article style', + 'publisher\'s style' + ], + 'aurora' => [ + 'output format PDF, PostScript' + ], + 'nextpage' => [ + 'page breaks' + ], + 'exsheets' => [ + 'exams, exercises, answers' + ], + 'dvi2tty' => [ + 'output viewer' + ], + 'greekctr' => [ + 'lists, bullets' + ], + 'memo-pln' => [ + 'document style' + ], + 'closefrm' => [ + 'MetaFont, Metapost' + ], + 'biblatex-musuos' => [ + 'bibliography, formatting', + 'music' + ], + 'outline' => [ + 'lists, bullets' + ], + 'glhyph' => [ + 'hyphenation' + ], + 'chklref' => [ + 'macro programming' + ], + 'translation-moreverb-de' => [ + 'computer code, verbatim text' + ], + 'texdoc' => [ + 'help, documentation, FAQ' + ], + 'pcfonts' => [ + 'fonts, text' + ], + 'setouterhbox' => [ + 'macro programming' + ], + 'hellas' => [ + 'bibliography, management', + 'languages other than English' + ], + 'cropmarks-pt' => [ + 'proof sheets (typographical)' + ], + 'ntsfaq' => [ + 'help, documentation, FAQ' + ], + 'type1ec' => [ + 'font selection' + ], + 'hypht1' => [ + 'hyphenation' + ], + 'DayRoman' => [ + 'fonts, mathematics' + ], + 'cm-mf-extra' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'book-examples' => [ + 'help, documentation, FAQ' + ], + 'oval' => [ + 'boxed text, frames' + ], + 'germdoc' => [ + 'help, documentation, FAQ' + ], + 'aeguill' => [ + 'fonts, mathematics', + 'output format PDF, PostScript' + ], + 'treetex-ltx209' => [ + 'graphics from outside TeX' + ], + 'koma-script-sfs' => [ + 'letters, envelopes, labels' + ], + 'pfnote' => [ + 'footnotes, end notes', + 'page styles' + ], + 'fontinstallationguide' => [ + 'help, documentation, FAQ' + ], + 'impatient' => [ + 'help, documentation, FAQ' + ], + 'mol2chemfig' => [ + 'Physics, Chemistry, Biology' + ], + 'mkpic' => [ + 'MetaFont, Metapost' + ], + 'koma-moderncvclassic' => [ + 'vita, CV, resume' + ], + 'texshell32' => [ + 'editing, graphical work environment' + ], + 'lpw' => [ + 'literate programming' + ], + 'cv' => [ + 'vita, CV, resume' + ], + 'ytableau' => [ + 'Mathematics (the subject)' + ], + 'bgreek' => [ + 'font selection', + 'languages other than English' + ], + 'subfigmat' => [ + 'figures, floating matter' + ], + 'drawstack' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'czhyph' => [ + 'hyphenation' + ], + 'young' => [ + 'Mathematics (the subject)', + 'tables' + ], + 'texemplar' => [ + 'article style', + 'languages other than English' + ], + 'pdftex' => [ + 'output format PDF, PostScript' + ], + 'aaai-named' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'tlc2-examples' => [ + 'help, documentation, FAQ' + ], + 'colordoc' => [ + 'help, documentation, FAQ', + 'literate programming' + ], + 'xpinyin' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'siunitx' => [ + 'scientific units' + ], + 'dow' => [ + 'dates and times' + ], + 'cdcover' => [ + 'document style' + ], + 'newlfm' => [ + 'letters, envelopes, labels' + ], + 'l2x' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'braille' => [ + 'symbols, mathematical' + ], + 'arabicfront' => [ + 'page numbering' + ], + 'niceframe-type1' => [ + 'fonts, text', + 'symbols, mathematical', + 'symbols, text' + ], + 'eehyph' => [ + 'hyphenation' + ], + 'tkz-fct' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Mathematics (the subject)' + ], + 'analogclock' => [ + 'output format PDF, PostScript' + ], + 'xtexcad' => [ + 'editing, graphical work environment', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'gleitobjekte' => [ + 'help, documentation, FAQ' + ], + 'nccstretch' => [ + 'macro programming', + 'spacing, horizontal or vertical' + ], + 'xcite' => [ + 'cross references' + ], + 'marginnote' => [ + 'marginal material' + ], + 'mm' => [ + 'output format PDF, PostScript' + ], + 'nomentbl' => [ + 'symbols, mathematical', + 'symbols, text' + ], + 'minibox' => [ + 'boxed text, frames' + ], + 'program' => [ + 'computer code, verbatim text' + ], + 'dinbrief-gui' => [ + 'editing, graphical work environment', + 'languages other than English', + 'letters, envelopes, labels' + ], + 'swebib' => [ + 'bibliography, formatting', + 'languages other than English' + ], + 'hypdoc' => [ + 'help, documentation, FAQ' + ], + 'tango-weevil' => [ + 'literate programming' + ], + 'vocaltract' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'nlatexdb' => [ + 'external programs, interfacing' + ], + 'biblist' => [ + 'bibliography, management' + ], + 'dateiliste' => [ + 'tables' + ], + 'latex-hlp' => [ + 'help, documentation, FAQ' + ], + 'eledpar' => [ + 'columns, multiple columns', + 'Humanities' + ], + 'code' => [ + 'computer code, verbatim text' + ], + 'alphanum' => [ + 'chapters, sectioning' + ], + 'automagic' => [ + 'chapters, sectioning', + 'equations, subequations', + 'table of contents' + ], + 'ugaritic' => [ + 'symbols, text' + ], + 'imac' => [ + 'collections, proceedings, conferences' + ], + 'translation-tabbing-fr' => [ + 'help, documentation, FAQ' + ], + 'elbioimp' => [ + 'article style', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'xtcapts' => [ + 'languages other than English', + 'macro programming' + ], + 'ntheorem-vn' => [ + 'help, documentation, FAQ', + 'theorems' + ], + 'meta-mode' => [ + 'editing, graphical work environment' + ], + 'acronym' => [ + 'abbreviations, acronyms' + ], + 'backgrnd' => [ + 'changebars', + 'color' + ], + 'bibtex-test' => [ + 'bibliography, management', + 'help, documentation, FAQ' + ], + 'xymtex' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'musixtex-t1fonts' => [ + 'fonts, text', + 'symbols, text' + ], + 'dvipaste' => [ + 'DVI file manipulation' + ], + 'cmextra-latex' => [ + 'font selection', + 'fonts, mathematics' + ], + 'Exam design' => [ + 'exams, exercises, answers' + ], + 'AddTeX2Eps' => [ + 'output format PDF, PostScript' + ], + 'lambda-lists' => [ + 'macro programming' + ], + 'samples' => [ + 'macro programming' + ], + 'tex2tok' => [ + 'macro programming' + ], + 'harnon-cv' => [ + 'vita, CV, resume' + ], + 'ttn' => [ + 'help, documentation, FAQ' + ], + 'barcodes' => [ + 'graphics from outside TeX' + ], + 'xparse' => [ + 'macro programming' + ], + 'concrete' => [ + 'fonts, mathematics' + ], + 'TeX-mag' => [ + 'help, documentation, FAQ' + ], + 'AFMtoPL (Clark)' => [ + 'fonts, mathematics' + ], + 'psmerge' => [ + 'output format PDF, PostScript' + ], + 'mitpress' => [ + 'article style', + 'publisher\'s style' + ], + 'chapref' => [ + 'bibliography, formatting', + 'chapters, sectioning' + ], + 'levy-font' => [ + 'fonts, text', + 'languages other than English' + ], + 'hyphsubst' => [ + 'hyphenation' + ], + 'physe' => [ + 'article style', + 'Physics, Chemistry, Biology' + ], + 'a0poster' => [ + 'fonts, mathematics', + 'page geometry (margins, etc.)' + ], + 'bigtabular' => [ + 'tables' + ], + 'diagxy' => [ + 'commutative diagrams', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'technics' => [ + 'macro programming' + ], + 'texsort' => [ + 'macro programming' + ], + 'texdef' => [ + 'macro programming' + ], + 'mathkit' => [ + 'fonts, mathematics' + ], + 'tex-gyre-pagella' => [ + 'fonts, text' + ], + 'greektex-fd' => [ + 'font selection' + ], + 'chembst' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'dvitty' => [ + 'DVI file manipulation', + 'output format other than PDF (HTML, etc.)' + ], + 'calc' => [ + 'macro programming' + ], + 'vncmr' => [ + 'fonts, text', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'LaTeX-WIDE' => [ + 'editing, graphical work environment' + ], + 'envlab' => [ + 'letters, envelopes, labels' + ], + 'yi4latex' => [ + 'editing, graphical work environment' + ], + 'gothic' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'GuIT-corso' => [ + 'help, documentation, FAQ' + ], + 'fltpage' => [ + 'caption' + ], + 'uptex' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'units' => [ + 'scientific units' + ], + 'tugboat-toc' => [ + 'help, documentation, FAQ' + ], + 'stdpage' => [ + 'page styles' + ], + 'dvipsconfig' => [ + 'output format PDF, PostScript' + ], + 'shsulet' => [ + 'letters, envelopes, labels' + ], + 'textopo' => [ + 'Physics, Chemistry, Biology' + ], + 'syntax-mdw' => [ + 'Computer Science' + ], + 'inversepath' => [ + 'macro programming' + ], + 'pinlabel' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'mathabx-type1' => [ + 'fonts, mathematics', + 'output format PDF, PostScript' + ], + 'titlepage-uni-dortmund' => [ + 'front matter, end matter', + 'page styles', + 'thesis style', + 'title, maketitle' + ], + 'ut-backref' => [ + 'bibliography, formatting', + 'cross references' + ], + 'luatextra' => [ + 'macro programming' + ], + 'uspatent' => [ + 'document style', + 'publisher\'s style' + ], + 'thumbs' => [ + 'marginal material' + ], + 'pst-knot' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'plantslabels' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'CJHebrew' => [ + 'languages other than English' + ], + 'latex4jed' => [ + 'editing, graphical work environment' + ], + 'cascadilla' => [ + 'collections, proceedings, conferences' + ], + 'levy-latex' => [ + 'font selection', + 'languages other than English' + ], + 'extpfeil' => [ + 'symbols, mathematical' + ], + 'babeltools' => [ + 'languages other than English', + 'macro programming' + ], + 'verbtext' => [ + 'computer code, verbatim text', + 'encodings, Unicode' + ], + 'development' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'nbaseprt' => [ + 'macro programming' + ], + 'outerhbox' => [ + 'boxed text, frames' + ], + 'dates209' => [ + 'dates and times' + ], + 'siam' => [ + 'article style', + 'Mathematics (the subject)', + 'publisher\'s style' + ], + 'gv' => [ + 'output format PDF, PostScript', + 'output viewer' + ], + 'drftcite' => [ + 'bibliography, management', + 'cross references' + ], + 'easyeqn' => [ + 'equations, subequations' + ], + 'luatexja' => [ + 'languages other than English' + ], + 'acro' => [ + 'abbreviations, acronyms' + ], + 'pgfkeyx' => [ + 'macro programming' + ], + 'prepr' => [ + 'article style' + ], + 'chronology' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'poetica' => [ + 'font selection' + ], + 'scientificviewer' => [ + 'output viewer' + ], + 'eplain' => [ + 'macro programming' + ], + 'pstricks-examples' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'help, documentation, FAQ' + ], + 'GFS Baskerville' => [ + 'fonts, mathematics' + ], + 'BSR2dvi' => [ + 'DVI file manipulation' + ], + 'typearea' => [ + 'page geometry (margins, etc.)' + ], + 'go' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'register' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'context-lettrine' => [ + 'dropped letter, often initial letter' + ], + 'makeindexk' => [ + 'index, indexing' + ], + 'fwlw' => [ + 'macro programming' + ], + 'amsmath' => [ + 'commutative diagrams', + 'equations, subequations', + 'Mathematics (the subject)', + 'symbols, mathematical', + 'theorems' + ], + 'latexdiff' => [ + 'make, compilation systems' + ], + 'computer-typesetting-using-latex' => [ + 'help, documentation, FAQ' + ], + 'cascover' => [ + 'page styles' + ], + 'hyphenex' => [ + 'hyphenation' + ], + 'perltex' => [ + 'macro programming' + ], + 'ptptex' => [ + 'article style', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'cmpica' => [ + 'fonts, mathematics' + ], + 'anyfontsize' => [ + 'font selection' + ], + 'asyfig' => [ + 'graphics from outside TeX' + ], + 'testflow' => [ + 'make, compilation systems', + 'output format PDF, PostScript' + ], + 'fontch' => [ + 'font selection' + ], + 'fontname' => [ + 'font selection' + ], + 'mhsetup' => [ + 'macro programming' + ], + 'alltt2' => [ + 'computer code, verbatim text' + ], + 'auctex' => [ + 'editing, graphical work environment' + ], + 'NEdit-LaTeX-Extensions' => [ + 'editing, graphical work environment' + ], + 'libgreek' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'cmtest' => [ + 'fonts, mathematics' + ], + 'hyph-utf8' => [ + 'encodings, Unicode', + 'hyphenation' + ], + 'easylist' => [ + 'lists, bullets' + ], + 'caption' => [ + 'caption', + 'figures, floating matter' + ], + 'iagproc' => [ + 'collections, proceedings, conferences', + 'columns, multiple columns', + 'publisher\'s style' + ], + 'makecmds' => [ + 'macro programming' + ], + 'bm' => [ + 'symbols, mathematical' + ], + 'first-latex-doc' => [ + 'help, documentation, FAQ' + ], + 'logfilter' => [ + 'macro programming' + ], + 'fundus' => [ + 'font selection' + ], + 'symbolindex' => [ + 'symbols, mathematical', + 'symbols, text' + ], + 'recycle' => [ + 'fonts, text', + 'MetaFont, Metapost', + 'symbols, text' + ], + 'context-mathsets' => [ + 'Mathematics (the subject)', + 'symbols, mathematical' + ], + 'XteXShell' => [ + 'editing, graphical work environment' + ], + 'quotation' => [ + 'quotation, poetry' + ], + 'calxxxx-yyyy' => [ + 'calendar, schedule' + ], + 'cnoweb' => [ + 'computer code, verbatim text' + ], + 'eforms' => [ + 'output format PDF, PostScript' + ], + 'bbold-type1' => [ + 'fonts, mathematics' + ], + 'newproof' => [ + 'Mathematics (the subject)', + 'proofs' + ], + 'ieeepes' => [ + 'collections, proceedings, conferences' + ], + 'isi2bibtex' => [ + 'bibliography, management' + ], + 'fortran' => [ + 'computer code, verbatim text', + 'Computer Science', + 'include file' + ], + 'topcapt' => [ + 'caption', + 'figures, floating matter', + 'tables' + ], + 'codepage' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'scrindex' => [ + 'encodings, Unicode' + ], + 'pstrees' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities' + ], + 'M-Tx' => [ + 'music' + ], + 'thai-usl' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'moderncv' => [ + 'vita, CV, resume' + ], + 'source2e' => [ + 'literate programming' + ], + 'iso209' => [ + 'document style' + ], + 'accenti' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'hanoi' => [ + 'macro programming' + ], + 'ntg-maps' => [ + 'help, documentation, FAQ' + ], + 'circuit-macros' => [ + 'graphics from outside TeX', + 'Physics, Chemistry, Biology' + ], + 'zed-csp' => [ + 'Computer Science' + ], + 'smflatex' => [ + 'article style', + 'book style', + 'publisher\'s style' + ], + 'courseoutline' => [ + 'document style' + ], + 'texpower' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'yhmath' => [ + 'font selection', + 'fonts, mathematics' + ], + 'belleek' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'texcad32' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'pandora' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'graphfig' => [ + 'figures, floating matter', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'dvistd' => [ + 'help, documentation, FAQ' + ], + 'csfonts' => [ + 'fonts, mathematics', + 'languages other than English', + 'symbols, mathematical' + ], + 'thuthesis' => [ + 'thesis style' + ], + 'lshort-spanish' => [ + 'help, documentation, FAQ' + ], + 'lettergothic' => [ + 'font selection', + 'fonts, text' + ], + 'footnoterange' => [ + 'footnotes, end notes' + ], + 'fancyref' => [ + 'cross references' + ], + 'cases' => [ + 'equations, subequations' + ], + 'l2tabu-french' => [ + 'help, documentation, FAQ' + ], + 'boldline' => [ + 'arrays, matrices', + 'tables' + ], + 'javatex' => [ + 'distributions, whole systems' + ], + 'engpron' => [ + 'Humanities' + ], + 'csx' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'graphics-pln' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'xoptarg' => [ + 'macro programming' + ], + 'iftex' => [ + 'macro programming' + ], + 'hyphenation-greek' => [ + 'hyphenation' + ], + 'dcolumn' => [ + 'tables' + ], + 'bardi' => [ + 'languages other than English' + ], + 'pst-calendar' => [ + 'calendar, schedule' + ], + 'xargs' => [ + 'macro programming' + ], + 'humanist' => [ + 'fonts, mathematics' + ], + 'seceqn' => [ + 'chapters, sectioning', + 'theorems' + ], + 'actuarialangle' => [ + 'symbols, text' + ], + 'youngtab' => [ + 'Mathematics (the subject)', + 'tables' + ], + 'foreign' => [ + 'languages other than English' + ], + 'bangtex' => [ + 'languages other than English' + ], + 'setdeck' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'dot2tex' => [ + 'graphics from outside TeX' + ], + 'forindex' => [ + 'index, indexing' + ], + 'cea' => [ + 'publisher\'s style' + ], + 'esindex' => [ + 'index, indexing', + 'languages other than English' + ], + 'splitbib' => [ + 'bibliography, management' + ], + 'beamer2thesis' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'ocgtools' => [ + 'output format PDF, PostScript' + ], + 'marginote' => [ + 'marginal material' + ], + 'luacode' => [ + 'macro programming' + ], + 'slashbox' => [ + 'tables' + ], + 'pst-text' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'alphanumb' => [ + 'bibliography, management' + ], + 'filehook' => [ + 'include file', + 'macro programming' + ], + 'latex' => [ + 'macro programming' + ], + 'amsmidx' => [ + 'index, indexing' + ], + 'hrhyph' => [ + 'hyphenation' + ], + 'gradback' => [ + 'output format PDF, PostScript', + 'page styles' + ], + 'plain' => [ + 'macro programming' + ], + 'esint-type1' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'interfaces' => [ + 'macro programming' + ], + 'dancers' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'wright' => [ + 'macro programming' + ], + 'latex2e-help-texinfo' => [ + 'help, documentation, FAQ' + ], + 'bibtopicprefix' => [ + 'bibliography, management' + ], + 'TeXbyTopic' => [ + 'help, documentation, FAQ' + ], + 'unamthesis' => [ + 'thesis style' + ], + 'ticket' => [ + 'document style' + ], + 'slatex' => [ + 'languages other than English' + ], + 'refreshpdf' => [ + 'output format PDF, PostScript' + ], + 'shadowtext' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'text decoration (underline, etc.)' + ], + 'semioneside' => [ + 'document style', + 'figures, floating matter', + 'page styles' + ], + 'multiobjective' => [ + 'Mathematics (the subject)', + 'symbols, mathematical' + ], + 'lcyw' => [ + 'fonts, text', + 'languages other than English' + ], + 'exp-testopt' => [ + 'macro programming' + ], + 'classif2' => [ + 'Physics, Chemistry, Biology' + ], + 'classes' => [ + 'article style', + 'collections, proceedings, conferences', + 'document style', + 'macro programming' + ], + 'pmcstex' => [ + 'editing, graphical work environment' + ], + 'genmpage' => [ + 'minipage' + ], + 'fancyhdr-it' => [ + 'headers, footers', + 'help, documentation, FAQ' + ], + 'endnotes' => [ + 'footnotes, end notes' + ], + 'tkhyph' => [ + 'hyphenation' + ], + 'latex2html' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'ar' => [ + 'symbols, mathematical' + ], + 'humannat' => [ + 'bibliography, management', + 'Humanities' + ], + 'draft' => [ + 'cross references', + 'marginal material' + ], + 'bigtable' => [ + 'tables' + ], + 'web2c' => [ + 'literate programming' + ], + 'pst-platon' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'dratex' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'pgfkeys' => [ + 'macro programming' + ], + 'subfloat' => [ + 'figures, floating matter' + ], + 'xcoffins' => [ + 'macro programming' + ], + 'xspace' => [ + 'macro programming' + ], + 'dk-bib' => [ + 'bibliography, formatting', + 'bibliography, management', + 'languages other than English' + ], + 'appendix' => [ + 'appendix' + ], + 'modes' => [ + 'MetaFont, Metapost' + ], + 'mf2ps' => [ + 'MetaFont, Metapost', + 'output format PDF, PostScript' + ], + 'maybeload' => [ + 'include file', + 'macro programming' + ], + 'lgraph' => [ + 'graphics from outside TeX' + ], + 'guia-bibtex' => [ + 'help, documentation, FAQ', + 'languages other than English' + ], + 'rotunda' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'boxit-ltx' => [ + 'boxed text, frames' + ], + 'tabto-generic' => [ + 'paragraph', + 'spacing, horizontal or vertical' + ], + 'omega' => [ + 'encodings, Unicode' + ], + 'greek6cbc' => [ + 'fonts, mathematics' + ], + 'eslides' => [ + 'foils, overhead slides' + ], + 'bigsign' => [ + 'document style' + ], + 'bickham' => [ + 'font selection' + ], + 'auncial-new' => [ + 'fonts, mathematics' + ], + 'knitting' => [ + 'MetaFont, Metapost' + ], + 'iflang' => [ + 'languages other than English', + 'macro programming' + ], + 'EAN' => [ + 'symbols, text' + ], + 'footbib' => [ + 'bibliography, management', + 'footnotes, end notes' + ], + 'typografie' => [ + 'help, documentation, FAQ' + ], + 'ltxfileinfo' => [ + 'macro programming' + ], + 'acmconf' => [ + 'article style', + 'collections, proceedings, conferences', + 'Computer Science', + 'publisher\'s style' + ], + 'tikz-qtree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'ledpar' => [ + 'columns, multiple columns', + 'Humanities', + 'paragraph' + ], + 'memhfixc' => [ + 'document style', + 'URLs, hyperlinks' + ], + 'charter' => [ + 'fonts, mathematics' + ], + 'venndiagram' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'symbols, mathematical' + ], + 'nccpic' => [ + 'graphics from outside TeX' + ], + 'l2picfaq' => [ + 'help, documentation, FAQ' + ], + 'GELLMU' => [ + 'encodings, Unicode' + ], + 'droid' => [ + 'fonts, text' + ], + 'dirtree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'contour' => [ + 'boxed text, frames', + 'color' + ], + 'tcobrowser' => [ + 'help, documentation, FAQ' + ], + 'persian-bib' => [ + 'bibliography, formatting', + 'languages other than English' + ], + 'ldiff' => [ + 'make, compilation systems' + ], + 'lh' => [ + 'font selection', + 'fonts, text', + 'languages other than English' + ], + 'va' => [ + 'fonts, text', + 'symbols, text' + ], + 'amsbook' => [ + 'book style', + 'Mathematics (the subject)', + 'publisher\'s style' + ], + 'jeopardy' => [ + 'output format PDF, PostScript' + ], + 'c2latex' => [ + 'literate programming' + ], + 'LaTable' => [ + 'editing, graphical work environment', + 'tables' + ], + 'bmeps' => [ + 'graphics from outside TeX' + ], + 'cchess' => [ + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'tagging' => [ + 'make, compilation systems' + ], + 'bigfoot' => [ + 'footnotes, end notes', + 'Humanities' + ], + 'fontload' => [ + 'output format PDF, PostScript' + ], + 'colonequals' => [ + 'symbols, mathematical' + ], + 'engrec' => [ + 'macro programming' + ], + 't1-fraktur' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'postcards' => [ + 'letters, envelopes, labels' + ], + 'jsclasses' => [ + 'article style', + 'book style', + 'languages other than English' + ], + 'garrigues' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'texlog_extract' => [ + 'make, compilation systems' + ], + 'rsfso' => [ + 'font selection', + 'symbols, mathematical' + ], + 'pagenote' => [ + 'footnotes, end notes', + 'front matter, end matter' + ], + 'mfpic4ode' => [ + 'Mathematics (the subject)', + 'MetaFont, Metapost' + ], + 'forarray' => [ + 'macro programming' + ], + 'talk' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'prettyref' => [ + 'cross references' + ], + 'cmcyralt-fonts' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'xecyr' => [ + 'languages other than English' + ], + 'lps' => [ + 'article style', + 'publisher\'s style' + ], + 'cm-pk' => [ + 'MetaFont, Metapost' + ], + 'qobitree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'mnsymbol' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'excludeonly' => [ + 'include file' + ], + 'cmdstring' => [ + 'macro programming' + ], + 'corrects' => [ + 'document style' + ], + 'umrand' => [ + 'boxed text, frames', + 'MetaFont, Metapost', + 'output format PDF, PostScript', + 'symbols, text' + ], + 'lgc2-examples' => [ + 'help, documentation, FAQ' + ], + 'citesidx' => [ + 'bibliography, management' + ], + 'numericplots' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'koma-script' => [ + 'article style', + 'book style', + 'caption', + 'chapters, sectioning', + 'dates and times', + 'document style', + 'figures, floating matter', + 'footnotes, end notes', + 'headers, footers', + 'letters, envelopes, labels', + 'lists, bullets', + 'page geometry (margins, etc.)', + 'page styles', + 'report style', + 'table of contents' + ], + 'kelly-greek-font' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'anonchap' => [ + 'chapters, sectioning' + ], + 'texapi' => [ + 'macro programming' + ], + 'JavaBib' => [ + 'bibliography, management', + 'editing, graphical work environment' + ], + 'chicago-annote' => [ + 'bibliography, management', + 'Humanities', + 'publisher\'s style' + ], + 'gettitlestring' => [ + 'chapters, sectioning' + ], + 'geschichtsfrkl' => [ + 'bibliography, formatting' + ], + 'fncylab' => [ + 'cross references' + ], + 'ijmart' => [ + 'article style' + ], + 'acroflex' => [ + 'graphics from outside TeX', + 'Mathematics (the subject)', + 'output format PDF, PostScript' + ], + 'eskdx' => [ + 'languages other than English' + ], + 'ifetex' => [ + 'macro programming' + ], + 'fltpoint' => [ + 'macro programming' + ], + 'arcs' => [ + 'symbols, mathematical' + ], + 'Portable MikTeX' => [ + 'distributions, whole systems', + 'help, documentation, FAQ' + ], + 'polynomial' => [ + 'macro programming', + 'Mathematics (the subject)' + ], + 'fancybox' => [ + 'boxed text, frames' + ], + 'galois' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'card' => [ + 'document style' + ], + 'cursolatex' => [ + 'help, documentation, FAQ' + ], + 'dprogress' => [ + 'macro programming' + ], + 'classicthesis' => [ + 'thesis style' + ], + 'twoopt' => [ + 'macro programming' + ], + 'figplace' => [ + 'figures, floating matter' + ], + 'trajan' => [ + 'fonts, text', + 'MetaFont, Metapost', + 'symbols, text' + ], + 'jabref' => [ + 'bibliography, management' + ], + 'eiad-ltx' => [ + 'font selection' + ], + 'tikz-3dplot' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'igo' => [ + 'fonts, mathematics', + 'graphics from outside TeX' + ], + 'frhyph' => [ + 'hyphenation' + ], + 'mattens' => [ + 'arrays, matrices' + ], + 'extradefs' => [ + 'macro programming' + ], + 'lshort-vietnamese' => [ + 'help, documentation, FAQ' + ], + 'astron' => [ + 'bibliography, formatting', + 'Physics, Chemistry, Biology' + ], + 'pst-vowel' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities', + 'output format PDF, PostScript' + ], + 'spanish' => [ + 'languages other than English' + ], + 'texi2www' => [ + 'help, documentation, FAQ', + 'output format other than PDF (HTML, etc.)' + ], + 'schemabloc' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'verse' => [ + 'quotation, poetry' + ], + 'dingbat' => [ + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'AutoLaTeX' => [ + 'make, compilation systems' + ], + 'portland' => [ + 'page geometry (margins, etc.)' + ], + 'ljmetrics' => [ + 'font selection' + ], + 'GasTeX' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'eqexam' => [ + 'exams, exercises, answers', + 'output format PDF, PostScript' + ], + 'MemoirChapterStyles' => [ + 'help, documentation, FAQ' + ], + 'dutchcal' => [ + 'font selection', + 'fonts, mathematics' + ], + 'cm' => [ + 'fonts, mathematics' + ], + 'texliveonfly' => [ + 'make, compilation systems' + ], + 'georgian' => [ + 'languages other than English' + ], + 'latex-bib-ex' => [ + 'help, documentation, FAQ' + ], + 'is-bst' => [ + 'bibliography, management' + ], + 'docarc' => [ + 'bibliography, management', + 'editing, graphical work environment' + ], + 'piechart' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'feynman' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'bit2spr' => [ + 'external programs, interfacing' + ], + 'svg' => [ + 'graphics from outside TeX' + ], + 'hyacc-cm' => [ + 'hyphenation' + ], + 'yplan' => [ + 'calendar, schedule' + ], + 'shapepatch' => [ + 'editing, graphical work environment', + 'paragraph' + ], + 'parskip' => [ + 'page styles', + 'paragraph' + ], + 'eurosym' => [ + 'fonts, mathematics', + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'texdepend' => [ + 'include file', + 'make, compilation systems' + ], + 'threeparttablex' => [ + 'footnotes, end notes', + 'tables' + ], + 'dlfltxb' => [ + 'book style' + ], + 'punknova' => [ + 'fonts, text' + ], + 'uncial' => [ + 'MetaFont, Metapost', + 'symbols, text' + ], + 'lshort-portuguese-br' => [ + 'help, documentation, FAQ' + ], + 'mlbib' => [ + 'bibliography, formatting', + 'languages other than English' + ], + 'lshort-korean' => [ + 'help, documentation, FAQ' + ], + 'struktex' => [ + 'Computer Science' + ], + 'epstopdf-pkg' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'dnaseq' => [ + 'Physics, Chemistry, Biology' + ], + 'cmoefont' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'LaTeX for Autoconf' => [ + 'make, compilation systems' + ], + 'ttf-howto' => [ + 'help, documentation, FAQ' + ], + 'thinsp' => [ + 'spacing, horizontal or vertical' + ], + 'free-math-font-survey' => [ + 'fonts, mathematics', + 'help, documentation, FAQ' + ], + 'monofill' => [ + 'spacing, horizontal or vertical', + 'tables' + ], + 'beamerthemeJLTree' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'serial' => [ + 'letters, envelopes, labels' + ], + 'javadoc' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'syntax2' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'bmpsize' => [ + 'graphics from outside TeX' + ], + 'texshade' => [ + 'Physics, Chemistry, Biology' + ], + 'subfig' => [ + 'figures, floating matter' + ], + 'mftinc' => [ + 'editing, graphical work environment', + 'MetaFont, Metapost' + ], + 'flushend' => [ + 'columns, multiple columns' + ], + 'epigram' => [ + 'chapters, sectioning' + ], + 'catalanbib' => [ + 'bibliography, management', + 'languages other than English' + ], + 'rerunfilecheck' => [ + 'make, compilation systems' + ], + 'pst-abspos' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'make-env' => [ + 'letters, envelopes, labels' + ], + 'wmaainf' => [ + 'bibliography, formatting', + 'publisher\'s style' + ], + 'wasy2-ps' => [ + 'symbols, text' + ], + 'texref' => [ + 'cross references' + ], + 'undertilde' => [ + 'text decoration (underline, etc.)' + ], + 'NL hyphenation' => [ + 'hyphenation' + ], + 'texi-like cover' => [ + 'page styles' + ], + 'amslatex' => [ + 'fonts, mathematics', + 'Mathematics (the subject)', + 'symbols, mathematical', + 'theorems' + ], + 'processkv' => [ + 'macro programming' + ], + 'tex_it' => [ + 'make, compilation systems' + ], + 'ltxnew' => [ + 'macro programming' + ], + 'cypriot' => [ + 'fonts, mathematics' + ], + 'LaTeXDB' => [ + 'external programs, interfacing' + ], + 'jamtimes' => [ + 'article style', + 'publisher\'s style' + ], + 'chletter' => [ + 'letters, envelopes, labels' + ], + 'nameauth' => [ + 'macro programming' + ], + 'apabst' => [ + 'bibliography, formatting' + ], + 'patgen2-tutorial' => [ + 'help, documentation, FAQ' + ], + 'parcolumns' => [ + 'columns, multiple columns' + ], + 'yfonts' => [ + 'font selection' + ], + 'telprint' => [ + 'languages other than English' + ], + 'nbaskerv' => [ + 'font selection' + ], + 'withesis' => [ + 'thesis style' + ], + 'tie' => [ + 'literate programming' + ], + 'bitstrea' => [ + 'fonts, mathematics' + ], + '3DLDF' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'makerobust209' => [ + 'macro programming' + ], + 'bussproofs' => [ + 'Mathematics (the subject)', + 'proofs' + ], + 'umtypewriter' => [ + 'fonts, text' + ], + 'PDFrack' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'paresse' => [ + 'symbols, mathematical' + ], + 'halftone' => [ + 'MetaFont, Metapost' + ], + 'ConTeXt-cmttbf' => [ + 'fonts, mathematics' + ], + 'suthesis' => [ + 'thesis style' + ], + 'ntheorem' => [ + 'theorems' + ], + 'NCC-LaTeX' => [ + 'article style', + 'book style', + 'document style' + ], + 'faq-de' => [ + 'help, documentation, FAQ' + ], + 'quotmark' => [ + 'symbols, text' + ], + 'comp-fonts-FAQ' => [ + 'help, documentation, FAQ' + ], + 'tsconfig' => [ + 'editing, graphical work environment' + ], + 'directory' => [ + 'bibliography, management' + ], + 'wmf2eps' => [ + 'graphics from outside TeX' + ], + 'subfiles' => [ + 'make, compilation systems' + ], + 'mathcomp' => [ + 'fonts, text', + 'Mathematics (the subject)', + 'symbols, text' + ], + 'xgreek' => [ + 'languages other than English' + ], + 'runtex' => [ + 'make, compilation systems' + ], + 'fragmaster' => [ + 'output format PDF, PostScript' + ], + 'einfuehrung' => [ + 'help, documentation, FAQ' + ], + 'frankenbundle' => [ + 'make, compilation systems' + ], + 'context-typearea' => [ + 'page geometry (margins, etc.)' + ], + 'inhyph' => [ + 'hyphenation' + ], + 'labelcas' => [ + 'cross references', + 'macro programming' + ], + 'leading' => [ + 'page geometry (margins, etc.)', + 'page styles' + ], + 'xpdf' => [ + 'output format PDF, PostScript', + 'output viewer' + ], + 'tex-ewd' => [ + 'Computer Science', + 'proofs' + ], + 'esvect' => [ + 'symbols, mathematical', + 'text decoration (underline, etc.)' + ], + 'arrayjobx' => [ + 'macro programming' + ], + 'boites' => [ + 'boxed text, frames' + ], + 'ECV' => [ + 'vita, CV, resume' + ], + 'fonttable' => [ + 'font selection' + ], + 'mathpazo' => [ + 'fonts, mathematics' + ], + 'telugu' => [ + 'languages other than English', + 'MetaFont, Metapost' + ], + 'cmactex' => [ + 'distributions, whole systems' + ], + 'xpatch' => [ + 'macro programming' + ], + 'latexcheat-ptbr' => [ + 'help, documentation, FAQ', + 'languages other than English', + 'Physics, Chemistry, Biology' + ], + 'protosem' => [ + 'fonts, text' + ], + 'shading' => [ + 'boxed text, frames', + 'color', + 'output format PDF, PostScript' + ], + 'LKproof' => [ + 'Mathematics (the subject)', + 'proofs' + ], + 'boxedminipage' => [ + 'boxed text, frames', + 'minipage' + ], + 'latex-tabellen' => [ + 'help, documentation, FAQ' + ], + 'pi' => [ + 'macro programming', + 'symbols, mathematical' + ], + 'tex-gyre-math-pagella' => [ + 'fonts, mathematics' + ], + 'tex2rtf' => [ + 'output format other than PDF (HTML, etc.)', + 'word processor conversion' + ], + 'cmbright' => [ + 'fonts, mathematics' + ], + 'Exceltex' => [ + 'external programs, interfacing' + ], + 'mafr' => [ + 'exams, exercises, answers', + 'languages other than English' + ], + 'beamerthemenirma' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'cookingsymbols' => [ + 'symbols, text' + ], + 'mkbib' => [ + 'bibliography, management' + ], + 'concrete-macros' => [ + 'font selection', + 'fonts, mathematics' + ], + 'tkz-base' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'susy' => [ + 'Physics, Chemistry, Biology' + ], + 'glosstex' => [ + 'glossary, dictionary' + ], + 'tex-gyre-cursor' => [ + 'fonts, text', + 'symbols, text' + ], + 'ifplatform' => [ + 'macro programming' + ], + 'kerkis' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'grverb' => [ + 'computer code, verbatim text', + 'languages other than English' + ], + 'oriental' => [ + 'languages other than English' + ], + 'icsv' => [ + 'collections, proceedings, conferences' + ], + 'redefine' => [ + 'macro programming' + ], + 'metaobj' => [ + 'MetaFont, Metapost' + ], + 'serbianpart' => [ + 'chapters, sectioning', + 'languages other than English' + ], + 'productbox' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'patchcmd' => [ + 'macro programming' + ], + 'pagereference' => [ + 'cross references', + 'page numbering' + ], + 'blackboard' => [ + 'help, documentation, FAQ' + ], + 'cyklop' => [ + 'fonts, mathematics' + ], + 'china2e' => [ + 'calendar, schedule', + 'fonts, mathematics', + 'languages other than English' + ], + 'epiolmec' => [ + 'font selection', + 'fonts, mathematics', + 'languages other than English' + ], + 'babel-doc' => [ + 'help, documentation, FAQ', + 'languages other than English' + ], + 'lingtrees' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities' + ], + 'cbgreek-complete' => [ + 'fonts, mathematics' + ], + 'tokenizer' => [ + 'macro programming' + ], + 'translation-filecontents-de' => [ + 'macro programming' + ], + 'fig2mf' => [ + 'MetaFont, Metapost' + ], + 'ametsoc' => [ + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'mma2ltx' => [ + 'graphics from outside TeX' + ], + 'baum' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'ccaption' => [ + 'caption', + 'figures, floating matter' + ], + 'svn' => [ + 'make, compilation systems' + ], + 'mf2pt1' => [ + 'fonts, mathematics', + 'fonts, text', + 'MetaFont, Metapost', + 'output format PDF, PostScript' + ], + 'lips' => [ + 'symbols, text' + ], + 'afterpage' => [ + 'macro programming', + 'page breaks' + ], + 'anttvf' => [ + 'fonts, mathematics' + ], + 'WinEdt' => [ + 'editing, graphical work environment' + ], + 'float' => [ + 'figures, floating matter' + ], + 'ada' => [ + 'Computer Science' + ], + 'a2ping' => [ + 'graphics from outside TeX' + ], + 'flashmovie' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'ushyph' => [ + 'hyphenation' + ], + 'kalender' => [ + 'dates and times', + 'languages other than English' + ], + 'How to Package Your LaTeX Package' => [ + 'literate programming', + 'macro programming' + ], + 'objectz' => [ + 'Computer Science' + ], + 'tkz-orm' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'mathdots' => [ + 'Mathematics (the subject)' + ], + 'rule-d' => [ + 'document style', + 'macro programming', + 'page styles' + ], + 'commath' => [ + 'Mathematics (the subject)' + ], + 'tufte-latex' => [ + 'article style', + 'book style' + ], + 'biblio-perl' => [ + 'bibliography, management' + ], + 'ltablex' => [ + 'tables' + ], + 'adobemapping' => [ + 'output format PDF, PostScript' + ], + 'statex' => [ + 'Mathematics (the subject)', + 'presentations (powerpoint-like, using a beamer)' + ], + 'aaai' => [ + 'Computer Science', + 'document style' + ], + 'serbian-apostrophe' => [ + 'languages other than English' + ], + 'translation-biblatex-de' => [ + 'help, documentation, FAQ' + ], + 'rtklage' => [ + 'document style' + ], + 'optional' => [ + 'macro programming' + ], + 'environ' => [ + 'macro programming' + ], + 'pdfbook' => [ + 'output format PDF, PostScript' + ], + 'blkcntrl' => [ + 'footnotes, end notes', + 'macro programming', + 'quotation, poetry' + ], + 'The Comprehensive LaTeX Symbol List.' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'makeprog' => [ + 'literate programming', + 'macro programming' + ], + 'showexpl' => [ + 'computer code, verbatim text' + ], + 'stack' => [ + 'macro programming' + ], + 'lxmail' => [ + 'letters, envelopes, labels' + ], + 'listofsymbols' => [ + 'glossary, dictionary', + 'symbols, mathematical', + 'symbols, text' + ], + 'epspdf-extra' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'biblio' => [ + 'help, documentation, FAQ' + ], + 'preview' => [ + 'macro programming' + ], + 'arrayjob' => [ + 'macro programming' + ], + 'cmdtrack' => [ + 'macro programming' + ], + 'xtem' => [ + 'editing, graphical work environment' + ], + 'pgfopts' => [ + 'macro programming' + ], + 'algorithms' => [ + 'computer code, verbatim text', + 'Computer Science', + 'figures, floating matter' + ], + 'bibtex-examples' => [ + 'bibliography, management', + 'help, documentation, FAQ' + ], + 'auxhook' => [ + 'macro programming' + ], + 'thai-rmit' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'egplot' => [ + 'graphics from outside TeX' + ], + 'sphack' => [ + 'macro programming' + ], + 'vfinst' => [ + 'font selection' + ], + 'latexcheat-esmx' => [ + 'help, documentation, FAQ', + 'languages other than English', + 'Physics, Chemistry, Biology' + ], + 'german' => [ + 'languages other than English' + ], + 'euro' => [ + 'macro programming' + ], + 'csindex' => [ + 'index, indexing', + 'languages other than English' + ], + 'figfrag' => [ + 'output format PDF, PostScript' + ], + 'pybliographer' => [ + 'bibliography, management' + ], + 'aeb-mlink' => [ + 'output format PDF, PostScript', + 'URLs, hyperlinks' + ], + 'drama' => [ + 'document style', + 'Humanities' + ], + 'malvern' => [ + 'fonts, text' + ], + 'thsmc' => [ + 'font selection' + ], + 'bibexport' => [ + 'bibliography, management' + ], + 'xcolor' => [ + 'color' + ], + 'apprends-latex' => [ + 'help, documentation, FAQ' + ], + 'textcomp' => [ + 'font selection', + 'symbols, text' + ], + 'morehype' => [ + 'output format other than PDF (HTML, etc.)', + 'output format PDF, PostScript', + 'presentations (powerpoint-like, using a beamer)', + 'table of contents', + 'URLs, hyperlinks' + ], + 'footmisc' => [ + 'footnotes, end notes' + ], + 'xdvi' => [ + 'output viewer' + ], + 'ulsy-ps' => [ + 'fonts, mathematics', + 'Mathematics (the subject)' + ], + 'epigraph' => [ + 'quotation, poetry' + ], + 'auncial' => [ + 'fonts, mathematics' + ], + 'MetaPlot' => [ + 'external programs, interfacing', + 'MetaFont, Metapost' + ], + 'fweb' => [ + 'literate programming' + ], + 'MathType' => [ + 'editing, graphical work environment' + ], + 'js-misc' => [ + 'macro programming' + ], + 'sidenotes' => [ + 'marginal material' + ], + 'graphicp' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'exam209' => [ + 'article style', + 'exams, exercises, answers' + ], + 'vxu' => [ + 'exams, exercises, answers', + 'thesis style' + ], + 'bahyph' => [ + 'hyphenation', + 'languages other than English' + ], + 'textpath' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'crossreference' => [ + 'cross references' + ], + 'appendixnumberbeamer' => [ + 'appendix', + 'presentations (powerpoint-like, using a beamer)' + ], + 'smalltableof' => [ + 'figures, floating matter', + 'tables' + ], + 'xits' => [ + 'fonts, mathematics', + 'fonts, text' + ], + 'ocr-b-outline' => [ + 'symbols, text' + ], + 'xpunctuate' => [ + 'macro programming', + 'punctuation' + ], + 'pdfescape' => [ + 'output format PDF, PostScript' + ], + 'nicefilelist' => [ + 'macro programming', + 'output format other than PDF (HTML, etc.)' + ], + 'gurmukhi' => [ + 'languages other than English' + ], + 'urw-arial' => [ + 'font selection', + 'fonts, text' + ], + 'duerer-LaTeX' => [ + 'font selection' + ], + 'tangle' => [ + 'literate programming' + ], + 'sidecap' => [ + 'caption', + 'paper size, orientation' + ], + 'noweb' => [ + 'literate programming' + ], + 'mathtime-metrics' => [ + 'font selection' + ], + 'frletter' => [ + 'languages other than English', + 'letters, envelopes, labels' + ], + 'VSliTeX' => [ + 'foils, overhead slides', + 'fonts, text', + 'MetaFont, Metapost' + ], + 'hyphenat' => [ + 'computer code, verbatim text', + 'fonts, mathematics', + 'hyphenation' + ], + 'grffile' => [ + 'macro programming' + ], + 'LigaTeX' => [ + 'spacing, horizontal or vertical' + ], + 'biblatex-caspervector' => [ + 'bibliography, formatting' + ], + 'arphic' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'chngcntr' => [ + 'cross references', + 'macro programming' + ], + 'hp2xx' => [ + 'output viewer' + ], + 'nameref' => [ + 'chapters, sectioning', + 'cross references' + ], + 'metafont-beginners' => [ + 'help, documentation, FAQ', + 'MetaFont, Metapost' + ], + 'citeref' => [ + 'bibliography, management' + ], + 'famt' => [ + 'article style', + 'publisher\'s style' + ], + 'mflogo-font' => [ + 'fonts, text', + 'MetaFont, Metapost', + 'symbols, text' + ], + 'hhline' => [ + 'arrays, matrices', + 'tables' + ], + 'geomsty' => [ + 'document style' + ], + 'ukhyph' => [ + 'hyphenation' + ], + 'gv-savepos' => [ + 'output viewer' + ], + 'chemsym' => [ + 'Physics, Chemistry, Biology' + ], + 'storebox' => [ + 'macro programming' + ], + 'nicetext' => [ + 'computer code, verbatim text', + 'lists, bullets', + 'literate programming', + 'macro programming', + 'punctuation', + 'spacing, horizontal or vertical' + ], + 'Technica' => [ + 'Humanities' + ], + 'fundus-twcal' => [ + 'font selection' + ], + 'threecolumn' => [ + 'columns, multiple columns' + ], + 'statrep' => [ + 'computer code, verbatim text', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'literate programming', + 'page breaks' + ], + 'ijc' => [ + 'article style' + ], + 'addlines' => [ + 'page geometry (margins, etc.)' + ], + 'bibarts' => [ + 'bibliography, management' + ], + 'outlines' => [ + 'lists, bullets' + ], + 'uafthesis' => [ + 'thesis style' + ], + 'pxfonts' => [ + 'fonts, mathematics', + 'fonts, text' + ], + 'jflap2tikz' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'PicTeXsum' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'help, documentation, FAQ' + ], + 'achicago' => [ + 'bibliography, management', + 'Humanities' + ], + 'chemmacros' => [ + 'Physics, Chemistry, Biology' + ], + 'Econometrica' => [ + 'bibliography, management', + 'publisher\'s style' + ], + 'mparhack' => [ + 'marginal material', + 'paragraph' + ], + 'ispell' => [ + 'editing, graphical work environment' + ], + 'calctab' => [ + 'macro programming' + ], + 'floatnohead' => [ + 'headers, footers' + ], + 'asymptote-manual-zh-cn' => [ + 'help, documentation, FAQ' + ], + 'MathSpad' => [ + 'editing, graphical work environment' + ], + 'flashcard' => [ + 'exams, exercises, answers' + ], + 'japanese-otf-uptex' => [ + 'font selection', + 'languages other than English' + ], + 'xyling' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities' + ], + 'taylor' => [ + 'arrows', + 'Mathematics (the subject)' + ], + 'bibcard' => [ + 'bibliography, management' + ], + 'Courier' => [ + 'fonts, mathematics' + ], + 'fontspec' => [ + 'font selection' + ], + 'catalogue' => [ + 'help, documentation, FAQ' + ], + 'context-construction-plan' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'filehdr' => [ + 'editing, graphical work environment' + ], + 'apa6e' => [ + 'article style', + 'Humanities' + ], + 'binomexp' => [ + 'macro programming' + ], + 'cassette-shipunov' => [ + 'document style' + ], + 'mactex-additions' => [ + 'distributions, whole systems' + ], + 'moresize' => [ + 'font selection' + ], + 'gmdoc-enhance' => [ + 'help, documentation, FAQ' + ], + 'latexwizard' => [ + 'editing, graphical work environment' + ], + 'ptex' => [ + 'distributions, whole systems', + 'languages other than English' + ], + 't-angles' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'deproc' => [ + 'page styles', + 'publisher\'s style' + ], + 'refstyle' => [ + 'cross references' + ], + 'GraphicxSP' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'complexity' => [ + 'Computer Science', + 'symbols, mathematical' + ], + 'mciteplus' => [ + 'bibliography, formatting' + ], + 'xltxtra' => [ + 'macro programming' + ], + 'colorinfo' => [ + 'color' + ], + 'bibview-x' => [ + 'bibliography, management' + ], + 'romandeadf' => [ + 'fonts, text' + ], + 'mnttex' => [ + 'languages other than English' + ], + 'bibhtml' => [ + 'bibliography, management', + 'output format other than PDF (HTML, etc.)' + ], + 'delim' => [ + 'Mathematics (the subject)' + ], + 'flowfram' => [ + 'boxed text, frames' + ], + 'multido' => [ + 'macro programming' + ], + 'pst-eucl-translation-bg' => [ + 'help, documentation, FAQ' + ], + 'rake4latex' => [ + 'make, compilation systems' + ], + 'FiNK' => [ + 'include file' + ], + 'sf298' => [ + 'document style', + 'publisher\'s style', + 'report style' + ], + 'hobsub' => [ + 'macro programming' + ], + 'alltt' => [ + 'computer code, verbatim text' + ], + 'fullpage' => [ + 'page geometry (margins, etc.)' + ], + 'hobete' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'format' => [ + 'macro programming' + ], + 'hieroglf' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'dvicopy' => [ + 'DVI file manipulation', + 'font selection' + ], + 'alphabib' => [ + 'bibliography, management' + ], + 'Mid2TeX/Free' => [ + 'music' + ], + 'acroweb' => [ + 'exams, exercises, answers', + 'output format PDF, PostScript' + ], + 'bibdb' => [ + 'bibliography, management' + ], + 'rcs' => [ + 'make, compilation systems' + ], + 'hebtex' => [ + 'languages other than English' + ], + 'cslatex' => [ + 'languages other than English' + ], + 'ocherokee' => [ + 'fonts, text', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'Shaded theorems' => [ + 'boxed text, frames', + 'color', + 'theorems' + ], + 'photo' => [ + 'graphics from outside TeX' + ], + 'biblatex-chicago' => [ + 'bibliography, formatting', + 'Humanities' + ], + 'trace' => [ + 'macro programming' + ], + 'matlabweb' => [ + 'literate programming' + ], + 'bicaption' => [ + 'caption' + ], + 'bibtex' => [ + 'bibliography, management' + ], + 'adami' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'chitex' => [ + 'languages other than English' + ], + 'knuth-lib' => [ + 'MetaFont, Metapost' + ], + 'doi' => [ + 'URLs, hyperlinks' + ], + 'dviout' => [ + 'output viewer' + ], + 'pxgreeks' => [ + 'font selection', + 'fonts, text' + ], + 'CClicenses' => [ + 'symbols, mathematical' + ], + 'tipos' => [ + 'help, documentation, FAQ' + ], + 'mex' => [ + 'fonts, mathematics', + 'fonts, text', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'tocenter' => [ + 'page styles' + ], + 'word2x' => [ + 'word processor conversion' + ], + 'truecols' => [ + 'color', + 'foils, overhead slides' + ], + 'flatten' => [ + 'include file', + 'make, compilation systems' + ], + 'bclogo' => [ + 'boxed text, frames', + 'color', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'stackrel' => [ + 'Mathematics (the subject)' + ], + 'evweek' => [ + 'calendar, schedule' + ], + 'shhyphl' => [ + 'hyphenation' + ], + 'mathtex' => [ + 'Mathematics (the subject)' + ], + 'ftetx' => [ + 'editing, graphical work environment' + ], + 'dox' => [ + 'help, documentation, FAQ', + 'macro programming' + ], + 'ltxutil' => [ + 'macro programming', + 'Physics, Chemistry, Biology' + ], + 'pdf-forms-tutorial' => [ + 'help, documentation, FAQ' + ], + 'apalike2' => [ + 'bibliography, management', + 'Social Science' + ], + 'eepic' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'suanpan' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'xpdfopen' => [ + 'output format PDF, PostScript', + 'output viewer' + ], + 'nnfootnote' => [ + 'footnotes, end notes' + ], + 'fahyph' => [ + 'hyphenation' + ], + 'subeqn' => [ + 'equations, subequations' + ], + 'textcase' => [ + 'text decoration (underline, etc.)' + ], + 'Sikumuna' => [ + 'article style', + 'editing, graphical work environment' + ], + 'bbding' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'memexsupp' => [ + 'macro programming' + ], + 'leawood' => [ + 'font selection' + ], + 'lablst-pkg' => [ + 'cross references' + ], + 'thmtools' => [ + 'theorems' + ], + 'ps2mf' => [ + 'MetaFont, Metapost' + ], + 'mycv' => [ + 'vita, CV, resume' + ], + 'eukdate' => [ + 'dates and times' + ], + 'psnfss-source' => [ + 'font selection', + 'output format PDF, PostScript' + ], + 'trigonometry' => [ + 'macro programming' + ], + 'placeins' => [ + 'figures, floating matter' + ], + 'xfor' => [ + 'macro programming' + ], + 'rmligs' => [ + 'languages other than English', + 'spacing, horizontal or vertical' + ], + 'ltabptch' => [ + 'tables' + ], + 'l3experimental' => [ + 'macro programming' + ], + 'thmbox' => [ + 'thesis style' + ], + 'javascript_TeXed' => [ + 'editing, graphical work environment' + ], + 'feynmf' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost', + 'Physics, Chemistry, Biology' + ], + 'Winfonts' => [ + 'font selection' + ], + 'pst-barcode' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'ecclesiastic' => [ + 'bibliography, management', + 'languages other than English' + ], + 'locality' => [ + 'macro programming' + ], + 'lewis' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'trsym' => [ + 'fonts, mathematics', + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'threecol' => [ + 'columns, multiple columns' + ], + 'lacheck' => [ + 'make, compilation systems' + ], + 'finplain' => [ + 'bibliography, management', + 'languages other than English' + ], + 'amsbsy' => [ + 'fonts, mathematics', + 'Mathematics (the subject)', + 'symbols, mathematical' + ], + 'bibutils' => [ + 'bibliography, management' + ], + 'export' => [ + 'macro programming' + ], + 'myfilist' => [ + 'macro programming', + 'output format other than PDF (HTML, etc.)' + ], + 'split' => [ + 'columns, multiple columns' + ], + 'montex' => [ + 'languages other than English' + ], + 'binhex' => [ + 'macro programming' + ], + 'chem-journal' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'ebib' => [ + 'bibliography, management', + 'editing, graphical work environment' + ], + 'inlinedef' => [ + 'macro programming' + ], + 'glossaries' => [ + 'glossary, dictionary' + ], + 'beton' => [ + 'fonts, mathematics' + ], + 'biblatex-ieee' => [ + 'bibliography, formatting', + 'Physics, Chemistry, Biology' + ], + 'ulem' => [ + 'text decoration (underline, etc.)' + ], + 'isodoc' => [ + 'document style', + 'letters, envelopes, labels' + ], + 'framed' => [ + 'boxed text, frames', + 'color' + ], + 'barkom' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'pst-mirror' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'mathbbol' => [ + 'font selection', + 'fonts, mathematics', + 'Mathematics (the subject)' + ], + 'icelandic' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'pdfcrop' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'chemstyle' => [ + 'Physics, Chemistry, Biology' + ], + 'infpic' => [ + 'graphics from outside TeX', + 'paragraph', + 'wrap around a figure' + ], + 'hatching' => [ + 'MetaFont, Metapost' + ], + 'pigpen' => [ + 'fonts, text', + 'MetaFont, Metapost', + 'symbols, text' + ], + 'clrscode' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'morefloats' => [ + 'figures, floating matter' + ], + 'kpfonts' => [ + 'font selection', + 'fonts, mathematics' + ], + 'wntamil' => [ + 'fonts, text', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'biblatex-historian' => [ + 'bibliography, management', + 'Humanities', + 'publisher\'s style' + ], + 'diagmac' => [ + 'commutative diagrams', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'random' => [ + 'macro programming' + ], + 'findbib' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'sectsty' => [ + 'chapters, sectioning' + ], + 'ocr-latex' => [ + 'font selection' + ], + 'emp' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'MetaFont, Metapost' + ], + 'pbox' => [ + 'boxed text, frames' + ], + 'mathstone' => [ + 'font selection' + ], + 'prv' => [ + 'make, compilation systems', + 'output format PDF, PostScript', + 'output viewer' + ], + 'megatape' => [ + 'document style' + ], + 'calligra' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'dice' => [ + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'euproposal' => [ + 'document style', + 'publisher\'s style' + ], + 'awb' => [ + 'literate programming' + ], + 'sagetex' => [ + 'computer code, verbatim text' + ], + 'hletter' => [ + 'letters, envelopes, labels' + ], + 'theoremref' => [ + 'cross references', + 'theorems' + ], + 'fldigigal' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'cassette209' => [ + 'page styles' + ], + 'byzfonts' => [ + 'fonts, mathematics', + 'MetaFont, Metapost', + 'music', + 'symbols, mathematical' + ], + 'pst-lens' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript', + 'Physics, Chemistry, Biology' + ], + 'pst-asr' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities', + 'symbols, text' + ], + 'drs' => [ + 'Humanities' + ], + 'lucida' => [ + 'font selection' + ], + 'pawpict' => [ + 'graphics from outside TeX', + 'Physics, Chemistry, Biology' + ], + 'fig2mfpic' => [ + 'MetaFont, Metapost' + ], + 'armtex' => [ + 'languages other than English' + ], + 'TVS' => [ + 'make, compilation systems' + ], + 'knuth-dist' => [ + 'distributions, whole systems' + ], + 'context-fixme' => [ + 'marginal material' + ], + 'db' => [ + 'include file' + ], + 'pl-mf' => [ + 'fonts, text' + ], + 'fonts-tlwg' => [ + 'fonts, text', + 'languages other than English' + ], + 'eledform' => [ + 'footnotes, end notes', + 'Humanities' + ], + 'dramatist' => [ + 'document style' + ], + 'inputfile' => [ + 'include file' + ], + 'UML' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'counttexruns' => [ + 'macro programming', + 'make, compilation systems' + ], + 'smartdiagram' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'sectionbox' => [ + 'boxed text, frames', + 'chapters, sectioning' + ], + 'AFMtoPL (Elwell)' => [ + 'fonts, mathematics' + ], + 'burmese' => [ + 'languages other than English' + ], + 'cntdwn' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'Synapsen' => [ + 'bibliography, management' + ], + 'mimetex' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'colourchange' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'unfinished' => [ + 'editing, graphical work environment' + ], + 'titlesec' => [ + 'chapters, sectioning', + 'figures, floating matter', + 'footnotes, end notes', + 'marginal material' + ], + 'epsfx' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'longnamefilelist' => [ + 'alignment', + 'macro programming', + 'output format other than PDF (HTML, etc.)' + ], + 'refman' => [ + 'document style' + ], + 'l2tabu' => [ + 'help, documentation, FAQ' + ], + 'lua-visual-debug' => [ + 'macro programming' + ], + 'bakoma-games' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'turkishintro' => [ + 'help, documentation, FAQ' + ], + 'psnfssx' => [ + 'font selection', + 'output format PDF, PostScript' + ], + 'frame' => [ + 'boxed text, frames' + ], + 'vutex' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'octavo' => [ + 'book style', + 'document style' + ], + 'fancyfolien' => [ + 'help, documentation, FAQ' + ], + 'ebnf' => [ + 'computer code, verbatim text', + 'Computer Science', + 'lists, bullets' + ], + 'ochem' => [ + 'Physics, Chemistry, Biology' + ], + 'apa6' => [ + 'document style', + 'Humanities', + 'publisher\'s style' + ], + 'corelpak' => [ + 'fonts, mathematics' + ], + 'mdvi' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'fundus-startrek' => [ + 'font selection' + ], + 'mathtools' => [ + 'Mathematics (the subject)' + ], + 'jneurosci' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'dfgproposal' => [ + 'document style', + 'languages other than English' + ], + 'impose' => [ + 'output format PDF, PostScript' + ], + 'dhua' => [ + 'abbreviations, acronyms' + ], + 'sgmlcmpt' => [ + 'external programs, interfacing', + 'macro programming' + ], + 'ptsans' => [ + 'font selection', + 'fonts, text', + 'languages other than English' + ], + 'devanagari-omega' => [ + 'languages other than English' + ], + 'listbib' => [ + 'bibliography, management' + ], + 'variations' => [ + 'tables' + ], + 'japanese' => [ + 'languages other than English' + ], + 'xkvview' => [ + 'macro programming' + ], + 'stex' => [ + 'macro programming' + ], + 'hvindex' => [ + 'index, indexing' + ], + 'context-ruby' => [ + 'languages other than English' + ], + 'lshort-polish' => [ + 'help, documentation, FAQ' + ], + 'staves' => [ + 'font selection', + 'fonts, text' + ], + 'swetex' => [ + 'languages other than English' + ], + 'hangcaption' => [ + 'caption' + ], + 'chemcono' => [ + 'Physics, Chemistry, Biology' + ], + 'lshort-bulgarian' => [ + 'help, documentation, FAQ' + ], + 'latexpand' => [ + 'include file' + ], + 'hands' => [ + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'gapfill' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'amsproc' => [ + 'collections, proceedings, conferences', + 'Mathematics (the subject)' + ], + 'bibfile-reformat-pages' => [ + 'bibliography, management' + ], + 'fontinst' => [ + 'font selection' + ], + 'ShLaTeX' => [ + 'make, compilation systems' + ], + 'newinsert' => [ + 'macro programming' + ], + 'hvfloat' => [ + 'caption', + 'figures, floating matter' + ], + 'UK-TeX' => [ + 'help, documentation, FAQ' + ], + 'cc-pl' => [ + 'fonts, mathematics' + ], + 'dtl' => [ + 'DVI file manipulation' + ], + 'vf-howto' => [ + 'help, documentation, FAQ' + ], + 'semaphor' => [ + 'MetaFont, Metapost', + 'symbols, text' + ], + 'pst-graphicx' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'bophook' => [ + 'output format PDF, PostScript' + ], + 'corelpak-contrib' => [ + 'fonts, mathematics' + ], + 'latex-bnf' => [ + 'Computer Science' + ], + 'inslrmin' => [ + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'psnfssx-em' => [ + 'font selection' + ], + 'vc' => [ + 'make, compilation systems' + ], + 'gladtex' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'scientificauthor' => [ + 'editing, graphical work environment' + ], + 'lastpage' => [ + 'cross references', + 'page numbering' + ], + 'texdraw' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'relenc' => [ + 'encodings, Unicode', + 'font selection' + ], + 'csquotes' => [ + 'quotation, poetry' + ], + 'nccthm' => [ + 'theorems' + ], + 'figflow' => [ + 'wrap around a figure' + ], + 'l3kernel' => [ + 'macro programming' + ], + 'tkz-kiviat' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'aastex' => [ + 'article style', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'cm-mf-opt-kern' => [ + 'spacing, horizontal or vertical' + ], + 'pst-infixplot' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'csvtools' => [ + 'external programs, interfacing' + ], + 'vf-knuth' => [ + 'help, documentation, FAQ' + ], + 'testmath' => [ + 'help, documentation, FAQ' + ], + 'pst-dbicons' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'guarani' => [ + 'languages other than English' + ], + 'Finomaton' => [ + 'Computer Science', + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'grchyph' => [ + 'hyphenation' + ], + 'brief_t' => [ + 'editing, graphical work environment' + ], + 'constants' => [ + 'proofs' + ], + 'frege' => [ + 'Humanities', + 'symbols, mathematical' + ], + 'hyperxmp' => [ + 'output format PDF, PostScript' + ], + 'norbib' => [ + 'bibliography, formatting', + 'languages other than English' + ], + 'shavian' => [ + 'fonts, text' + ], + 'fixmath' => [ + 'Mathematics (the subject)', + 'symbols, mathematical' + ], + 'amscd' => [ + 'commutative diagrams', + 'Mathematics (the subject)' + ], + 'jurabib' => [ + 'bibliography, management', + 'Humanities' + ], + 'pstool' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'ps4pdf' => [ + 'macro programming', + 'output format PDF, PostScript' + ], + 'autotoc' => [ + 'table of contents' + ], + 'pictex-autoarea' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'spacing, horizontal or vertical' + ], + 'fnpct' => [ + 'footnotes, end notes', + 'punctuation' + ], + 'bbfig' => [ + 'boxed text, frames', + 'graphics from outside TeX', + 'spacing, horizontal or vertical' + ], + 'sitem' => [ + 'lists, bullets' + ], + 'cryst' => [ + 'fonts, mathematics', + 'Physics, Chemistry, Biology', + 'symbols, mathematical' + ], + 'qtree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'kile' => [ + 'editing, graphical work environment' + ], + 'fundus-pvscript' => [ + 'fonts, text' + ], + 'latex-doc' => [ + 'help, documentation, FAQ' + ], + 'cuted' => [ + 'columns, multiple columns' + ], + 'envelope' => [ + 'letters, envelopes, labels' + ], + 'schemeTeX' => [ + 'literate programming' + ], + 'ibycus-babel' => [ + 'hyphenation', + 'languages other than English' + ], + 'dvips' => [ + 'output format PDF, PostScript' + ], + 'tcvn' => [ + 'languages other than English' + ], + 'polyglossia' => [ + 'languages other than English' + ], + 'letter' => [ + 'letters, envelopes, labels' + ], + 'chextras' => [ + 'document style', + 'letters, envelopes, labels' + ], + 'ut-thesis' => [ + 'thesis style' + ], + 'pdfsync' => [ + 'cross references', + 'editing, graphical work environment', + 'output format PDF, PostScript' + ], + 'yfrak' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'attrib' => [ + 'quotation, poetry' + ], + 'laansort' => [ + 'macro programming' + ], + 'typogrid' => [ + 'page geometry (margins, etc.)', + 'page styles' + ], + 'webfiles' => [ + 'computer code, verbatim text', + 'literate programming' + ], + 'pifont' => [ + 'symbols, text' + ], + 'atenddvi' => [ + 'macro programming' + ], + 'cursor' => [ + 'equations, subequations' + ], + 'genindex' => [ + 'glossary, dictionary', + 'index, indexing' + ], + 'gatech-thesis' => [ + 'thesis style' + ], + 'sltables' => [ + 'tables' + ], + 'listliketab' => [ + 'lists, bullets', + 'tables' + ], + 'textfit' => [ + 'boxed text, frames', + 'macro programming' + ], + 'mathstyle' => [ + 'Mathematics (the subject)' + ], + 'ifdraft' => [ + 'macro programming', + 'make, compilation systems' + ], + 'aramaic-serto' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'Bengali Omega' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'basix' => [ + 'macro programming' + ], + 'fax' => [ + 'document style' + ], + 'mdsymbol' => [ + 'fonts, mathematics', + 'fonts, text', + 'symbols, mathematical', + 'symbols, text' + ], + 'zero' => [ + 'macro programming' + ], + 'yswab' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'watermark' => [ + 'watermark, draftmark' + ], + 'tikzpfeile' => [ + 'arrows', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'pst-circ' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'coursepaper' => [ + 'document style' + ], + 'nag' => [ + 'help, documentation, FAQ' + ], + 'floatrow' => [ + 'figures, floating matter' + ], + 'beletter' => [ + 'letters, envelopes, labels' + ], + 'thesis' => [ + 'thesis style' + ], + 'LaTeXPiX' => [ + 'editing, graphical work environment', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'bguq' => [ + 'symbols, mathematical' + ], + 'dtk' => [ + 'article style', + 'publisher\'s style' + ], + 'biber' => [ + 'bibliography, formatting' + ], + 'translation-dcolumn-fr' => [ + 'help, documentation, FAQ' + ], + 'docmfp' => [ + 'help, documentation, FAQ', + 'MetaFont, Metapost' + ], + 'picins' => [ + 'wrap around a figure' + ], + 'xifthen' => [ + 'macro programming' + ], + 'polynom' => [ + 'macro programming', + 'Mathematics (the subject)' + ], + 'knuth-letter' => [ + 'letters, envelopes, labels' + ], + 'uothesis' => [ + 'thesis style' + ], + 'arrow' => [ + 'commutative diagrams' + ], + 'makedtx' => [ + 'literate programming', + 'macro programming' + ], + 'QCM' => [ + 'exams, exercises, answers' + ], + 'ha-prosper' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'win32-emacs-auctex' => [ + 'editing, graphical work environment' + ], + 'pictex2' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'autonum' => [ + 'cross references', + 'equations, subequations' + ], + 'sr-hyphen-spec' => [ + 'hyphenation', + 'languages other than English' + ], + 'ghyphen' => [ + 'hyphenation' + ], + 'vicentino' => [ + 'MetaFont, Metapost', + 'symbols, text' + ], + 'tensind' => [ + 'Mathematics (the subject)' + ], + 'ftcap' => [ + 'caption', + 'tables' + ], + 'fontbl' => [ + 'fonts, mathematics' + ], + 'mathexam' => [ + 'exams, exercises, answers' + ], + 'context-algorithmic' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'xlop' => [ + 'macro programming' + ], + 'URW-Grotesq' => [ + 'font selection', + 'fonts, text' + ], + 'reotex' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'gmutils' => [ + 'macro programming' + ], + 'authoraftertitle' => [ + 'author', + 'macro programming' + ], + 'drcaps' => [ + 'dropped letter, often initial letter' + ], + 'pdfcprot' => [ + 'output format PDF, PostScript' + ], + 'ftnright' => [ + 'columns, multiple columns', + 'footnotes, end notes' + ], + 'dcounter' => [ + 'macro programming' + ], + 'versions' => [ + 'include file', + 'make, compilation systems' + ], + 'caption2' => [ + 'caption', + 'figures, floating matter' + ], + 'tex2bib' => [ + 'bibliography, management' + ], + 'utorontothesis' => [ + 'thesis style' + ], + 'thumby' => [ + 'chapters, sectioning', + 'marginal material' + ], + 'blacklettert1' => [ + 'fonts, mathematics' + ], + 'bhcexam' => [ + 'exams, exercises, answers' + ], + 'huhyph' => [ + 'hyphenation' + ], + 'cd' => [ + 'document style' + ], + 'blackletter' => [ + 'fonts, mathematics' + ], + 'border' => [ + 'boxed text, frames' + ], + 'occam' => [ + 'editing, graphical work environment', + 'macro programming' + ], + 'tkz-tab' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'tables' + ], + 'wncyr' => [ + 'fonts, text', + 'languages other than English' + ], + 'frcursive' => [ + 'font selection', + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'pst-grad' => [ + 'color', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'plari' => [ + 'document style' + ], + 'ae' => [ + 'fonts, mathematics', + 'output format PDF, PostScript' + ], + 'curve2e' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'cachepic' => [ + 'output format PDF, PostScript' + ], + 'biblatex-bwl' => [ + 'bibliography, formatting' + ], + 'pydocstrip' => [ + 'literate programming' + ], + 'csbulletin' => [ + 'document style' + ], + 'duerer' => [ + 'fonts, mathematics' + ], + 'linegoal' => [ + 'macro programming' + ], + 'gmverse' => [ + 'quotation, poetry' + ], + 'serbian-def-cyr' => [ + 'languages other than English' + ], + 'newapa' => [ + 'bibliography, formatting', + 'document style', + 'Humanities' + ], + 'checkcites' => [ + 'bibliography, management', + 'cross references' + ], + 'uebungsblatt' => [ + 'exams, exercises, answers' + ], + 'natmove' => [ + 'bibliography, formatting' + ], + 'ps_conv' => [ + 'output format PDF, PostScript' + ], + 'probsoln' => [ + 'exams, exercises, answers' + ], + 'typeface' => [ + 'font selection', + 'fonts, mathematics', + 'fonts, text' + ], + 'slovak' => [ + 'languages other than English' + ], + 'multicap' => [ + 'caption', + 'columns, multiple columns', + 'figures, floating matter' + ], + 'realcalc' => [ + 'macro programming' + ], + 'interactiveworkbook' => [ + 'output format PDF, PostScript' + ], + 'ruhyphen' => [ + 'hyphenation' + ], + 'ragged2e' => [ + 'justification' + ], + 'xl2latex' => [ + 'external programs, interfacing', + 'tables' + ], + 'translation-europecv-de' => [ + 'vita, CV, resume' + ], + 'pstdoc' => [ + 'help, documentation, FAQ' + ], + 'pdfcolparcolumns' => [ + 'color', + 'columns, multiple columns' + ], + 'msc' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'floatflt' => [ + 'wrap around a figure' + ], + 'oubraces' => [ + 'equations, subequations', + 'Mathematics (the subject)' + ], + 'bibclean' => [ + 'bibliography, management' + ], + 'xdoc' => [ + 'literate programming' + ], + 'wotree' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'droit-fr' => [ + 'thesis style' + ], + 'urw-garamond' => [ + 'font selection', + 'fonts, text' + ], + 'unixman' => [ + 'document style' + ], + 'urwchancal' => [ + 'fonts, mathematics' + ], + 'syntrace' => [ + 'macro programming' + ], + 'dayofweek' => [ + 'dates and times' + ], + 'repeat' => [ + 'macro programming' + ], + 'piechartmp' => [ + 'MetaFont, Metapost' + ], + 'jlm' => [ + 'editing, graphical work environment' + ], + 'tabvar' => [ + 'Mathematics (the subject)', + 'tables' + ], + 'metre' => [ + 'Humanities', + 'languages other than English' + ], + 'texsis' => [ + 'macro programming', + 'Physics, Chemistry, Biology' + ], + 'pagedraw' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'bibweb' => [ + 'bibliography, management', + 'external programs, interfacing' + ], + 'cm-unicode' => [ + 'encodings, Unicode', + 'fonts, mathematics', + 'fonts, text' + ], + 'turkmen' => [ + 'languages other than English' + ], + 'GFS Porson' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'gb4e' => [ + 'glossary, dictionary', + 'Humanities' + ], + 'redis' => [ + 'fonts, text', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'oesch' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'everypage' => [ + 'macro programming', + 'page styles' + ], + 'bibsort' => [ + 'bibliography, management' + ], + 'xetex-pstricks' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'empheq' => [ + 'equations, subequations' + ], + 'ipa' => [ + 'font selection' + ], + 'biblatex-trad' => [ + 'bibliography, formatting' + ], + 'oldstyle' => [ + 'font selection' + ], + 'bpolynomial' => [ + 'graphics from outside TeX' + ], + 'cdlabeler' => [ + 'document style' + ], + 'gu' => [ + 'Physics, Chemistry, Biology' + ], + 'gcard' => [ + 'document style' + ], + 'lgreek' => [ + 'font selection' + ], + 'font_selection' => [ + 'font selection' + ], + 'lshort-ukr' => [ + 'help, documentation, FAQ' + ], + 'camel' => [ + 'bibliography, management' + ], + 'word2latex' => [ + 'word processor conversion' + ], + 'latex-fonts' => [ + 'fonts, mathematics', + 'fonts, text', + 'MetaFont, Metapost' + ], + 'TeXhax' => [ + 'help, documentation, FAQ' + ], + 'pst-fr3d' => [ + 'boxed text, frames', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'latexcad' => [ + 'editing, graphical work environment', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'listing-pln' => [ + 'computer code, verbatim text' + ], + 'bibfind' => [ + 'bibliography, management' + ], + 'ifnextok' => [ + 'macro programming' + ], + 'EndNote2bib' => [ + 'bibliography, management' + ], + 'substitutefont' => [ + 'font selection' + ], + 'lapdf' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'anleitung' => [ + 'fonts, mathematics', + 'help, documentation, FAQ' + ], + 'cm-afm' => [ + 'fonts, mathematics' + ], + 'psfragx' => [ + 'output format PDF, PostScript' + ], + 'russian-help' => [ + 'help, documentation, FAQ' + ], + 'trig' => [ + 'macro programming' + ], + 'luamplib' => [ + 'MetaFont, Metapost' + ], + 'pgfgantt' => [ + 'graphics from outside TeX', + 'Social Science' + ], + 'nccmath' => [ + 'Mathematics (the subject)' + ], + 'latin' => [ + 'languages other than English' + ], + 'pst-3d' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'text decoration (underline, etc.)' + ], + 'geometry-de' => [ + 'help, documentation, FAQ' + ], + 'currvita' => [ + 'vita, CV, resume' + ], + 'makebox' => [ + 'macro programming' + ], + 'impnattypo' => [ + 'languages other than English' + ], + 'enumspec' => [ + 'lists, bullets' + ], + 'latex2e-reference' => [ + 'help, documentation, FAQ' + ], + 'TeEncontreX' => [ + 'help, documentation, FAQ' + ], + 'osa' => [ + 'article style', + 'Physics, Chemistry, Biology' + ], + 'nccbbb' => [ + 'symbols, mathematical' + ], + 'magicnum' => [ + 'macro programming' + ], + 'AeB Pro' => [ + 'output format PDF, PostScript' + ], + 'gaceta' => [ + 'article style', + 'publisher\'s style' + ], + 'wasy2' => [ + 'symbols, text' + ], + 'longtocline' => [ + 'table of contents' + ], + 'default' => [ + 'macro programming' + ], + 'selinput' => [ + 'encodings, Unicode' + ], + 'mab2bib' => [ + 'bibliography, management' + ], + 'mk' => [ + 'make, compilation systems' + ], + 'mongolian-babel' => [ + 'languages other than English' + ], + 'ifvtex' => [ + 'macro programming' + ], + 'boondox' => [ + 'fonts, mathematics' + ], + 'textmerg' => [ + 'letters, envelopes, labels', + 'macro programming' + ], + 'CM Type3' => [ + 'fonts, mathematics' + ], + 'lifia-th' => [ + 'thesis style' + ], + 'remreset' => [ + 'macro programming' + ], + 'ams2bib' => [ + 'bibliography, management' + ], + 'eqparbox' => [ + 'minipage', + 'spacing, horizontal or vertical' + ], + 'Il sistema PSfrag' => [ + 'help, documentation, FAQ' + ], + 'termlist' => [ + 'equations, subequations', + 'Mathematics (the subject)' + ], + 'diagmac2' => [ + 'commutative diagrams', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'tabulars-e' => [ + 'help, documentation, FAQ' + ], + 'exam' => [ + 'exams, exercises, answers' + ], + 'refcount' => [ + 'cross references', + 'macro programming' + ], + 'jasthesis' => [ + 'thesis style' + ], + 'tikzpagenodes' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript', + 'page geometry (margins, etc.)' + ], + 'badge' => [ + 'document style' + ], + 'amsaddr' => [ + 'article style' + ], + 'de-macro' => [ + 'external programs, interfacing' + ], + 'cite' => [ + 'bibliography, management' + ], + 'ltxdiff' => [ + 'make, compilation systems' + ], + 'coseoul' => [ + 'chapters, sectioning' + ], + 'biblatex-nature' => [ + 'bibliography, formatting', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'crosstex' => [ + 'bibliography, management' + ], + 'nassflow' => [ + 'Computer Science' + ], + 'context-rst' => [ + 'macro programming' + ], + 'chapterbib' => [ + 'bibliography, management', + 'chapters, sectioning', + 'include file' + ], + 'oletex' => [ + 'external programs, interfacing', + 'output format PDF, PostScript' + ], + 'newunicodechar' => [ + 'encodings, Unicode' + ], + 'multibbl' => [ + 'bibliography, formatting' + ], + 'bm2ltx' => [ + 'graphics from outside TeX' + ], + 'bakoma-fonts' => [ + 'fonts, mathematics' + ], + 'protecteddef' => [ + 'macro programming' + ], + 'laletter' => [ + 'letters, envelopes, labels' + ], + 'auto-pst-pdf' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'cjw' => [ + 'letters, envelopes, labels', + 'macro programming' + ], + 'xymatrix' => [ + 'commutative diagrams' + ], + 'expressg' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'phyzzx' => [ + 'Physics, Chemistry, Biology' + ], + 'MFwL' => [ + 'help, documentation, FAQ' + ], + 'cweb-hy' => [ + 'literate programming', + 'URLs, hyperlinks' + ], + 'wnri' => [ + 'fonts, text' + ], + 'ukrhyph' => [ + 'hyphenation' + ], + 'combelow' => [ + 'languages other than English' + ], + 'syllogism' => [ + 'Mathematics (the subject)' + ], + 'delarray' => [ + 'arrays, matrices' + ], + 'mltex-ltx' => [ + 'hyphenation' + ], + 'barcodes-vulis' => [ + 'graphics from outside TeX' + ], + 'deflist' => [ + 'lists, bullets' + ], + 'pict2e' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'silence' => [ + 'macro programming' + ], + 'baskervaldadf' => [ + 'fonts, text' + ], + 'stabular' => [ + 'tables' + ], + 'lpic' => [ + 'figures, floating matter', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'latex-sciences-humaines' => [ + 'help, documentation, FAQ' + ], + 'hyperref' => [ + 'chapters, sectioning', + 'cross references', + 'URLs, hyperlinks' + ], + 'siunits' => [ + 'scientific units' + ], + 'ratexdb' => [ + 'external programs, interfacing' + ], + 'lintex' => [ + 'make, compilation systems' + ], + 'firststeps-xampl' => [ + 'help, documentation, FAQ' + ], + 'context-gantt' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'dviincl' => [ + 'DVI file manipulation', + 'MetaFont, Metapost' + ], + 'webguide' => [ + 'help, documentation, FAQ' + ], + 'evautofl' => [ + 'proof sheets (typographical)' + ], + 'pst-pdgr' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript', + 'Physics, Chemistry, Biology' + ], + 'pkfix' => [ + 'output format PDF, PostScript' + ], + 'ocr-b' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'GuITlogo' => [ + 'symbols, mathematical' + ], + 'fdsymbol' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'evenpage' => [ + 'page numbering' + ], + 'siggraph' => [ + 'collections, proceedings, conferences', + 'Computer Science', + 'publisher\'s style' + ], + 'e-french' => [ + 'languages other than English' + ], + 'serbian-book' => [ + 'article style' + ], + 'miller' => [ + 'Physics, Chemistry, Biology' + ], + 'maltese' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'pandora-latex' => [ + 'font selection' + ], + 'drawing' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'Makor 2' => [ + 'languages other than English' + ], + 'tree-dvips' => [ + 'Humanities', + 'output format PDF, PostScript' + ], + 'arydshln' => [ + 'arrays, matrices' + ], + 'laps' => [ + 'macro programming' + ], + 'ifluatex' => [ + 'macro programming' + ], + 'MakeCirc' => [ + 'MetaFont, Metapost', + 'Physics, Chemistry, Biology' + ], + 'pst-fun' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'esint' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'romanneg' => [ + 'page numbering' + ], + 'plpsfont' => [ + 'fonts, text' + ], + 'pdfrender' => [ + 'output format PDF, PostScript' + ], + 'TeX Converter' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'bizcard' => [ + 'document style' + ], + 'plainyr' => [ + 'bibliography, formatting' + ], + 'fancytooltips' => [ + 'output format PDF, PostScript' + ], + 'progress' => [ + 'make, compilation systems' + ], + 'pst-am' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'secdot' => [ + 'chapters, sectioning' + ], + 'lshort-turkish' => [ + 'help, documentation, FAQ' + ], + 'uwmslide' => [ + 'foils, overhead slides', + 'presentations (powerpoint-like, using a beamer)' + ], + 'asana-math' => [ + 'encodings, Unicode', + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'label-pln' => [ + 'letters, envelopes, labels' + ], + 'digiconfigs' => [ + 'arrays, matrices', + 'Mathematics (the subject)' + ], + 'boldtensors' => [ + 'symbols, mathematical' + ], + 'tex-gyre-heros' => [ + 'fonts, text' + ], + 'mxd' => [ + 'font selection', + 'fonts, text', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'grfguide' => [ + 'graphics from outside TeX', + 'help, documentation, FAQ' + ], + 'chroma' => [ + 'color' + ], + 'dvi2ln3' => [ + 'output viewer' + ], + 'envmath' => [ + 'equations, subequations', + 'Mathematics (the subject)' + ], + 'bib2dvi' => [ + 'bibliography, management' + ], + 'pst-xkey' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'macro programming', + 'output format PDF, PostScript' + ], + 'gloss' => [ + 'glossary, dictionary' + ], + 'cweb-latex' => [ + 'literate programming' + ], + 'wasy' => [ + 'symbols, text' + ], + 'cfr-lm' => [ + 'font selection' + ], + 'grnumalt' => [ + 'lists, bullets' + ], + 'eqmark' => [ + 'equations, subequations' + ], + 'biblatex-science' => [ + 'bibliography, management', + 'publisher\'s style' + ], + 'lshort-german' => [ + 'help, documentation, FAQ' + ], + 'ama' => [ + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'pbsheet' => [ + 'exams, exercises, answers', + 'languages other than English' + ], + 'mmap' => [ + 'output format PDF, PostScript' + ], + 'Orderer' => [ + 'bibliography, formatting' + ], + 'glotex' => [ + 'glossary, dictionary' + ], + 'asymptote-by-example-zh-cn' => [ + 'help, documentation, FAQ' + ], + 'uhthesis' => [ + 'thesis style' + ], + 'pdfjam' => [ + 'output format PDF, PostScript' + ], + 'yannisgr' => [ + 'fonts, text', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'standalone' => [ + 'editing, graphical work environment', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'hypdvips' => [ + 'cross references', + 'output format PDF, PostScript', + 'URLs, hyperlinks' + ], + 'doublecol' => [ + 'columns, multiple columns' + ], + 'iwona' => [ + 'fonts, mathematics' + ], + 'egothic' => [ + 'fonts, mathematics' + ], + 'storecmd' => [ + 'editing, graphical work environment', + 'macro programming' + ], + 'xetal' => [ + 'editing, graphical work environment', + 'output format other than PDF (HTML, etc.)' + ], + 'systeme' => [ + 'equations, subequations', + 'Mathematics (the subject)' + ], + 'epic' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'dictsym' => [ + 'Humanities', + 'symbols, mathematical' + ], + 'smartref' => [ + 'cross references' + ], + 'beamer-fuberlin' => [ + 'presentations (powerpoint-like, using a beamer)', + 'publisher\'s style' + ], + 'texi2roff' => [ + 'help, documentation, FAQ' + ], + 'METATeX' => [ + 'MetaFont, Metapost' + ], + 'weave' => [ + 'literate programming' + ], + 'lsc' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'lettre' => [ + 'letters, envelopes, labels' + ], + 'pst-electricfield' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'underscore' => [ + 'symbols, text' + ], + 'gen' => [ + 'Humanities', + 'MetaFont, Metapost' + ], + 'context-bnf' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'synttree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities' + ], + 'pstricks' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'ratex' => [ + 'languages other than English' + ], + 'pst-eps' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'futhark' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'xkeyval' => [ + 'macro programming' + ], + 'pmxChords' => [ + 'music' + ], + 'fakebold' => [ + 'text decoration (underline, etc.)' + ], + 'basque-date' => [ + 'dates and times', + 'languages other than English' + ], + 'polytable' => [ + 'tables' + ], + 'custom-bib' => [ + 'bibliography, management' + ], + 'simpsons' => [ + 'MetaFont, Metapost' + ], + 'pagecolor' => [ + 'color', + 'page styles' + ], + 'msu-thesis' => [ + 'thesis style' + ], + 'sinhala' => [ + 'languages other than English' + ], + 'sober' => [ + 'article style', + 'book style' + ], + 'block' => [ + 'letters, envelopes, labels' + ], + 'showframe' => [ + 'page geometry (margins, etc.)' + ], + 'ega2mf' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'minionpro' => [ + 'font selection' + ], + 'eskd' => [ + 'font selection', + 'languages other than English' + ], + 'wordlike' => [ + 'document style', + 'word processor conversion' + ], + 'hepnames' => [ + 'Physics, Chemistry, Biology' + ], + 'egameps' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'bodegraph' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'vdm' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'makefonts' => [ + 'MetaFont, Metapost' + ], + 'context-inifile' => [ + 'external programs, interfacing' + ], + 'noTeX' => [ + 'bibliography, formatting', + 'output format other than PDF (HTML, etc.)' + ], + 'ghostscript' => [ + 'output format PDF, PostScript' + ], + 'bnf-plain' => [ + 'Computer Science' + ], + 'ec' => [ + 'fonts, mathematics' + ], + 'annot-pro' => [ + 'include file', + 'output format PDF, PostScript' + ], + 'modref' => [ + 'cross references' + ], + 'schedule209' => [ + 'calendar, schedule' + ], + 'visualFAQ' => [ + 'help, documentation, FAQ' + ], + 'advdate' => [ + 'dates and times', + 'macro programming' + ], + 'ltxtable' => [ + 'columns, multiple columns', + 'tables' + ], + 'colorwav' => [ + 'color' + ], + 'meper' => [ + 'editing, graphical work environment', + 'MetaFont, Metapost', + 'output viewer' + ], + 'gl-tree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'r_und_s' => [ + 'Physics, Chemistry, Biology' + ], + 'greek-makeindex' => [ + 'index, indexing', + 'languages other than English' + ], + 'ccicons' => [ + 'symbols, text' + ], + 'rlepsf' => [ + 'output format PDF, PostScript' + ], + 'langcode' => [ + 'languages other than English', + 'macro programming' + ], + 'findhyph' => [ + 'hyphenation' + ], + 'zref' => [ + 'cross references', + 'macro programming' + ], + 'rcs-pln' => [ + 'make, compilation systems' + ], + 'pst2pdf' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'drac' => [ + 'macro programming' + ], + 'powerdot-fuberlin' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'mltex' => [ + 'hyphenation' + ], + 'l3keys2e' => [ + 'macro programming' + ], + 'jphysiol' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'ugarite' => [ + 'symbols, text' + ], + 'obas' => [ + 'bibliography, management', + 'output format other than PDF (HTML, etc.)' + ], + 'amspell' => [ + 'external programs, interfacing' + ], + 'texmalli' => [ + 'help, documentation, FAQ' + ], + 'opcit' => [ + 'bibliography, formatting' + ], + 'array' => [ + 'arrays, matrices', + 'Mathematics (the subject)' + ], + 'edmargin' => [ + 'footnotes, end notes', + 'Humanities', + 'marginal material' + ], + 'dkhyphen' => [ + 'hyphenation' + ], + 'gcite' => [ + 'footnotes, end notes' + ], + 'morehelp' => [ + 'help, documentation, FAQ' + ], + 'pst-soroban' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'method' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'gridset' => [ + 'columns, multiple columns' + ], + 'CurVe' => [ + 'vita, CV, resume' + ], + 'punk' => [ + 'fonts, text' + ], + 'alphalph' => [ + 'macro programming' + ], + 'teubner' => [ + 'Humanities', + 'languages other than English' + ], + 'pmboxdraw' => [ + 'boxed text, frames', + 'encodings, Unicode', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'linsys' => [ + 'arrays, matrices', + 'equations, subequations', + 'Mathematics (the subject)' + ], + 'pittetd' => [ + 'thesis style' + ], + 'fontbook' => [ + 'fonts, mathematics', + 'fonts, text' + ], + 'mkjobtexmf' => [ + 'make, compilation systems' + ], + 'babel' => [ + 'encodings, Unicode', + 'hyphenation', + 'languages other than English' + ], + 'iTe' => [ + 'editing, graphical work environment' + ], + 'tfmpk' => [ + 'fonts, text', + 'output viewer' + ], + 'ibygrk' => [ + 'font selection', + 'fonts, mathematics', + 'languages other than English' + ], + 'hausarbeit-jura' => [ + 'document style' + ], + 'attachfile' => [ + 'include file', + 'output format PDF, PostScript' + ], + 'ted' => [ + 'macro programming' + ], + 'nolbreaks' => [ + 'boxed text, frames', + 'paragraph' + ], + 'fix2col' => [ + 'columns, multiple columns', + 'headers, footers' + ], + 'winlatex' => [ + 'editing, graphical work environment' + ], + 'junicode' => [ + 'fonts, mathematics', + 'Humanities' + ], + 'pst-osci' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript', + 'Physics, Chemistry, Biology' + ], + 'procIAGssymp' => [ + 'article style', + 'collections, proceedings, conferences', + 'Physics, Chemistry, Biology' + ], + 'logreq' => [ + 'make, compilation systems' + ], + 'pst-optic' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'philex' => [ + 'cross references' + ], + 'akletter' => [ + 'letters, envelopes, labels' + ], + 'pmdpl' => [ + 'help, documentation, FAQ', + 'thesis style' + ], + 'ly1' => [ + 'encodings, Unicode' + ], + 'clefval' => [ + 'macro programming' + ], + 'mdframed' => [ + 'boxed text, frames' + ], + 'dvipdfm' => [ + 'output format PDF, PostScript' + ], + 'ucs' => [ + 'encodings, Unicode' + ], + 'dynblocks' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'lgrind' => [ + 'computer code, verbatim text' + ], + 'shadow' => [ + 'boxed text, frames' + ], + 'assignment' => [ + 'exams, exercises, answers' + ], + 'maketable' => [ + 'external programs, interfacing', + 'tables' + ], + 'slatex_scheme' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'nfssext-cfr' => [ + 'font selection' + ], + 'pst-qtree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'vaucanson-g' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'tmmath-fonts' => [ + 'fonts, mathematics' + ], + 'ePiX' => [ + 'graphics from outside TeX' + ], + 'verbdef' => [ + 'computer code, verbatim text', + 'macro programming' + ], + 'beamer-tut-pt' => [ + 'help, documentation, FAQ', + 'languages other than English', + 'presentations (powerpoint-like, using a beamer)' + ], + 'cptex' => [ + 'encodings, Unicode' + ], + 'margbib' => [ + 'bibliography, formatting', + 'marginal material' + ], + 'eps2pdf' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'gmiflink' => [ + 'URLs, hyperlinks' + ], + 'FourierNC' => [ + 'font selection', + 'fonts, mathematics' + ], + 'countriesofeurope' => [ + 'symbols, text' + ], + 'feyn' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost', + 'Physics, Chemistry, Biology' + ], + 'getoptk' => [ + 'macro programming' + ], + 'pst-fractal' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'latexfileinfo-pkgs' => [ + 'help, documentation, FAQ' + ], + 'ctex-faq' => [ + 'help, documentation, FAQ' + ], + 'lshort-portuguese' => [ + 'help, documentation, FAQ' + ], + 'ledarab' => [ + 'footnotes, end notes', + 'Humanities', + 'languages other than English' + ], + 'synproof' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Mathematics (the subject)' + ], + 'listingsutf8' => [ + 'computer code, verbatim text', + 'Computer Science', + 'encodings, Unicode' + ], + 'atbegshi' => [ + 'macro programming' + ], + 'getrefs' => [ + 'bibliography, management' + ], + 'eulervm' => [ + 'fonts, mathematics' + ], + 'ydoc' => [ + 'help, documentation, FAQ', + 'literate programming', + 'macro programming' + ], + 'esieecv' => [ + 'languages other than English', + 'vita, CV, resume' + ], + 'transparent' => [ + 'color', + 'output format PDF, PostScript' + ], + 'texments' => [ + 'computer code, verbatim text' + ], + 'skak' => [ + 'MetaFont, Metapost', + 'symbols, text' + ], + 'namunsrt' => [ + 'bibliography, formatting', + 'bibliography, management' + ], + 'calendar-Barr' => [ + 'calendar, schedule' + ], + 'doafter' => [ + 'macro programming' + ], + 'tabularx' => [ + 'tables' + ], + 'przechlewski-book' => [ + 'help, documentation, FAQ' + ], + 'layouts' => [ + 'chapters, sectioning', + 'figures, floating matter', + 'headers, footers', + 'help, documentation, FAQ', + 'page geometry (margins, etc.)', + 'table of contents' + ], + 'lshort-zh-cn' => [ + 'help, documentation, FAQ' + ], + 'match_parens' => [ + 'make, compilation systems' + ], + 'gsview' => [ + 'output format PDF, PostScript', + 'output viewer' + ], + 'karnaugh' => [ + 'tables' + ], + 'thrmappendix' => [ + 'appendix', + 'proofs', + 'theorems' + ], + 'incgraph' => [ + 'graphics from outside TeX' + ], + 'foekfont' => [ + 'fonts, mathematics' + ], + 'treesvr' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'a2ac' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'loggates' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'atari-cstex' => [ + 'distributions, whole systems' + ], + 'pdfcol' => [ + 'color', + 'output format PDF, PostScript' + ], + 'parrun' => [ + 'columns, multiple columns' + ], + 'mla-paper' => [ + 'article style', + 'document style', + 'Humanities' + ], + 'antt' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'ifsym' => [ + 'fonts, mathematics', + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'parboxx' => [ + 'boxed text, frames' + ], + 'nowidow' => [ + 'page breaks' + ], + 'calendarweek' => [ + 'calendar, schedule' + ], + 'cmyk-hax' => [ + 'color' + ], + 'dyntree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'tikz-dependency' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'braket' => [ + 'Physics, Chemistry, Biology', + 'symbols, mathematical' + ], + 'hge' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'includex' => [ + 'include file' + ], + 'biblatex-authoryear-icomp-tt' => [ + 'bibliography, management' + ], + 'csplain' => [ + 'languages other than English' + ], + 'lamstex-index' => [ + 'index, indexing' + ], + 'xecolour' => [ + 'color' + ], + 'pageno' => [ + 'headers, footers', + 'page numbering' + ], + 'mtgreek' => [ + 'font selection' + ], + 'fc' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'dvidvi' => [ + 'DVI file manipulation' + ], + 'cpssp' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'JustFontItTE' => [ + 'font selection' + ], + 'allrunes' => [ + 'fonts, mathematics' + ], + 'lwc-examples' => [ + 'help, documentation, FAQ' + ], + 'dvips-shell' => [ + 'help, documentation, FAQ' + ], + 'ps2eps' => [ + 'output format PDF, PostScript' + ], + 'fontwrap' => [ + 'font selection' + ], + 'buscard' => [ + 'document style' + ], + 'sublabel' => [ + 'cross references' + ], + 'skeycommand' => [ + 'macro programming' + ], + 'tex-gyre-schola' => [ + 'fonts, text' + ], + 'pst-bezier' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'bibleref' => [ + 'bibliography, management' + ], + 'uri' => [ + 'URLs, hyperlinks' + ], + 'pracjourn' => [ + 'article style', + 'publisher\'s style' + ], + 'biblatex-apa' => [ + 'bibliography, management', + 'Humanities', + 'publisher\'s style' + ], + 'checklab' => [ + 'macro programming' + ], + 'bibtexmng' => [ + 'bibliography, management' + ], + 'bbm-macros' => [ + 'font selection', + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'tex-gyre-adventor' => [ + 'fonts, text' + ], + 'pst-2dplot' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'abbrevs' => [ + 'abbreviations, acronyms', + 'dates and times' + ], + 'vpe' => [ + 'editing, graphical work environment', + 'output format PDF, PostScript' + ], + 'ctanify' => [ + 'make, compilation systems' + ], + 'grtimes' => [ + 'fonts, mathematics' + ], + 'savetrees' => [ + 'page geometry (margins, etc.)', + 'page styles' + ], + 'autolist' => [ + 'lists, bullets' + ], + 'EUenc' => [ + 'encodings, Unicode' + ], + 'vertbars' => [ + 'changebars', + 'marginal material' + ], + 'nuc' => [ + 'Physics, Chemistry, Biology', + 'symbols, text' + ], + 'catcodes' => [ + 'macro programming' + ], + 'formlett' => [ + 'letters, envelopes, labels' + ], + 'libertine-legacy' => [ + 'font selection' + ], + 'genfam' => [ + 'font selection' + ], + 'quotchap' => [ + 'chapters, sectioning', + 'color', + 'output format PDF, PostScript' + ], + 'msx2msa' => [ + 'fonts, mathematics' + ], + 'inconsolata' => [ + 'fonts, mathematics' + ], + 'fixmetodonotes' => [ + 'marginal material', + 'table of contents', + 'text decoration (underline, etc.)', + 'watermark, draftmark' + ], + 'xunicode' => [ + 'encodings, Unicode' + ], + 'makebarcode' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'latex4wp-it' => [ + 'help, documentation, FAQ' + ], + 'flatex' => [ + 'include file' + ], + 'qsymbols' => [ + 'symbols, mathematical' + ], + 'hyper' => [ + 'URLs, hyperlinks' + ], + 'warning' => [ + 'macro programming' + ], + 'duplicat' => [ + 'page numbering' + ], + 'cmap' => [ + 'output format PDF, PostScript' + ], + 'ksfh-nat' => [ + 'bibliography, formatting' + ], + 'lshort-czech' => [ + 'help, documentation, FAQ' + ], + 'tocloft' => [ + 'front matter, end matter' + ], + 'devanagari' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'idxlayout' => [ + 'index, indexing' + ], + 'phoncard' => [ + 'table of contents' + ], + 'beameraudience' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'iwhdp' => [ + 'publisher\'s style', + 'report style' + ], + 'chkfloat' => [ + 'figures, floating matter' + ], + 'altfont' => [ + 'font selection' + ], + 'mpgraphics' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'scrjrnl' => [ + 'book style' + ], + 'icehyph' => [ + 'hyphenation' + ], + 'context-taspresent' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'txp' => [ + 'MetaFont, Metapost' + ], + 'subeqnarray' => [ + 'equations, subequations' + ], + 'modiagram' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'bibleref-lds' => [ + 'bibliography, formatting' + ], + 'refer' => [ + 'bibliography, management' + ], + 'kvoptions' => [ + 'macro programming' + ], + 'si' => [ + 'scientific units' + ], + 'bbold' => [ + 'fonts, mathematics', + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'tgrind' => [ + 'computer code, verbatim text' + ], + 'plates' => [ + 'book style', + 'color', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'canoniclayout' => [ + 'page styles' + ], + 'code128' => [ + 'symbols, mathematical' + ], + 'bibunits' => [ + 'bibliography, management' + ], + 'ogonek' => [ + 'symbols, text' + ], + 'doc-k' => [ + 'help, documentation, FAQ' + ], + 'zip' => [ + 'letters, envelopes, labels', + 'symbols, text' + ], + 'xtemplate' => [ + 'document style', + 'macro programming', + 'page geometry (margins, etc.)' + ], + 'relsize' => [ + 'font selection' + ], + 'pst-exa' => [ + 'columns, multiple columns', + 'computer code, verbatim text', + 'output format PDF, PostScript' + ], + 'rsfs' => [ + 'fonts, mathematics', + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'epsdice' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'georgian-stanier' => [ + 'fonts, mathematics', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'gates' => [ + 'literate programming', + 'macro programming' + ], + 'hfoldsty' => [ + 'symbols, mathematical' + ], + 'shortlst' => [ + 'lists, bullets' + ], + 'ConTeXt-gnuplot' => [ + 'external programs, interfacing', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'c-pascal' => [ + 'computer code, verbatim text' + ], + 'voss-mathcol' => [ + 'color', + 'help, documentation, FAQ', + 'Mathematics (the subject)' + ], + 'miniltx' => [ + 'macro programming' + ], + 'sffms' => [ + 'article style', + 'publisher\'s style' + ], + 'PNAS' => [ + 'bibliography, formatting', + 'Physics, Chemistry, Biology' + ], + 'drv' => [ + 'Computer Science', + 'MetaFont, Metapost' + ], + 'context-cmscbf' => [ + 'fonts, mathematics' + ], + 'diagramf' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'totcount' => [ + 'macro programming' + ], + 'catechis' => [ + 'document style' + ], + 'elhyphen' => [ + 'hyphenation' + ], + 'colordvi' => [ + 'color', + 'DVI file manipulation' + ], + 'refer-tools' => [ + 'bibliography, management' + ], + 'francais-bst' => [ + 'bibliography, formatting' + ], + 'texdeps' => [ + 'include file', + 'make, compilation systems' + ], + 'insdljs' => [ + 'output format PDF, PostScript' + ], + 'cmsd' => [ + 'fonts, mathematics' + ], + 'psfont' => [ + 'font selection' + ], + 'amsrefs' => [ + 'bibliography, management' + ], + 'grid' => [ + 'columns, multiple columns' + ], + 'lmake' => [ + 'macro programming' + ], + 'uowthesis' => [ + 'thesis style' + ], + 'AeB slicing' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'latex-doc-ptr' => [ + 'help, documentation, FAQ' + ], + 'xecolor' => [ + 'color' + ], + 'casyl' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'lstaddons' => [ + 'computer code, verbatim text' + ], + 'tkz-doc' => [ + 'help, documentation, FAQ' + ], + 'figcaps' => [ + 'caption', + 'tables' + ], + 'aplweb' => [ + 'Computer Science', + 'external programs, interfacing' + ], + 'labelmag' => [ + 'letters, envelopes, labels' + ], + 'lscape' => [ + 'page geometry (margins, etc.)', + 'paper size, orientation' + ], + 'templates-fenn' => [ + 'help, documentation, FAQ' + ], + 'crbox' => [ + 'boxed text, frames' + ], + 'nopageno' => [ + 'page numbering', + 'page styles' + ], + 'utopia' => [ + 'fonts, text' + ], + 'zwgetfdate' => [ + 'macro programming' + ], + 'randtext' => [ + 'macro programming' + ], + 'dvipdfmx' => [ + 'DVI file manipulation', + 'output format PDF, PostScript' + ], + 'endheads' => [ + 'headers, footers' + ], + 'onrannual' => [ + 'report style' + ], + 'drafthead' => [ + 'headers, footers', + 'watermark, draftmark' + ], + 'resizegather' => [ + 'Mathematics (the subject)' + ], + 'ams-cd' => [ + 'commutative diagrams' + ], + 'sfg' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'eqnarray209' => [ + 'equations, subequations' + ], + 'spreadtab' => [ + 'tables' + ], + 'pst-Jtree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities', + 'output format PDF, PostScript' + ], + 'calendar' => [ + 'calendar, schedule' + ], + 'xepersian' => [ + 'fonts, text', + 'languages other than English' + ], + 'pdflscape' => [ + 'output format PDF, PostScript', + 'page geometry (margins, etc.)', + 'paper size, orientation' + ], + 'bibtool' => [ + 'bibliography, management' + ], + 'plain-cm' => [ + 'font selection' + ], + 'bibindex' => [ + 'bibliography, management' + ], + 'printlen' => [ + 'macro programming' + ], + 'tui' => [ + 'thesis style' + ], + 'balanced' => [ + 'columns, multiple columns' + ], + 'footnotebackref' => [ + 'footnotes, end notes', + 'URLs, hyperlinks' + ], + 'GraphConv' => [ + 'graphics from outside TeX' + ], + 'vpp' => [ + 'output format PDF, PostScript', + 'output viewer' + ], + 'spie' => [ + 'collections, proceedings, conferences', + 'publisher\'s style' + ], + 'pdf-mps-supp' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost', + 'output format PDF, PostScript' + ], + 'chomsky' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities' + ], + 'phy-bstyles' => [ + 'bibliography, formatting', + 'Physics, Chemistry, Biology' + ], + 'aeb-mobile' => [ + 'output format PDF, PostScript', + 'page geometry (margins, etc.)' + ], + 'fribrief' => [ + 'languages other than English', + 'letters, envelopes, labels' + ], + 'cellwise' => [ + 'tables' + ], + 'hyphen-spanish' => [ + 'hyphenation' + ], + 'documentation' => [ + 'computer code, verbatim text' + ], + 'prelim2e' => [ + 'headers, footers', + 'watermark, draftmark' + ], + 'fn2end' => [ + 'footnotes, end notes' + ], + 'fontenc' => [ + 'font selection' + ], + 'juraabbrev' => [ + 'Humanities' + ], + 'vak' => [ + 'bibliography, formatting' + ], + 'acmtrans' => [ + 'article style', + 'bibliography, management', + 'Computer Science', + 'publisher\'s style' + ], + 'newcommand' => [ + 'macro programming' + ], + 'm-pictex' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'ascelike' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'hfbright' => [ + 'fonts, mathematics' + ], + 'termcal' => [ + 'calendar, schedule' + ], + 'WP2LaTeX' => [ + 'word processor conversion' + ], + 'magaz' => [ + 'document style', + 'dropped letter, often initial letter' + ], + 'autoview' => [ + 'external programs, interfacing', + 'output viewer' + ], + 'xr' => [ + 'cross references' + ], + 'ltxdoc' => [ + 'literate programming', + 'macro programming' + ], + 'hilowres' => [ + 'graphics from outside TeX' + ], + 'tabularht' => [ + 'arrays, matrices', + 'spacing, horizontal or vertical', + 'tables' + ], + 'screen' => [ + 'output format other than PDF (HTML, etc.)', + 'output viewer', + 'page geometry (margins, etc.)' + ], + 'datenumber' => [ + 'dates and times' + ], + 'gbrief-creator' => [ + 'editing, graphical work environment' + ], + 'fig2sty' => [ + 'document style', + 'editing, graphical work environment' + ], + 'jvlisting' => [ + 'computer code, verbatim text' + ], + 'xmlplay' => [ + 'book style', + 'document style' + ], + 'xeindex' => [ + 'index, indexing' + ], + 'libertine' => [ + 'font selection' + ], + 'showcharinbox' => [ + 'macro programming' + ], + 'harpoon' => [ + 'symbols, mathematical' + ], + 'csname-doc' => [ + 'help, documentation, FAQ' + ], + 'gene-logic' => [ + 'Mathematics (the subject)', + 'proofs' + ], + 'tamil-omega' => [ + 'languages other than English' + ], + 'romaniantex' => [ + 'languages other than English' + ], + 'biblatex-philosophy' => [ + 'bibliography, formatting', + 'Humanities' + ], + 'pmat' => [ + 'arrays, matrices' + ], + 'TeXProject' => [ + 'document style' + ], + 'romansh' => [ + 'languages other than English' + ], + 'midpage' => [ + 'macro programming', + 'page styles' + ], + 'fouridx' => [ + 'symbols, mathematical' + ], + 'varisize' => [ + 'font selection' + ], + 'bm2font' => [ + 'graphics from outside TeX' + ], + 'HPtfm2pl' => [ + 'fonts, mathematics' + ], + 'logsys' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'augie' => [ + 'fonts, mathematics' + ], + 'breakcites' => [ + 'bibliography, management' + ], + 'xypic' => [ + 'commutative diagrams', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'TeXnicCenter' => [ + 'editing, graphical work environment' + ], + 'epsf' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'fibnum' => [ + 'macro programming' + ], + 'webomints' => [ + 'font selection', + 'symbols, text' + ], + 'tib' => [ + 'bibliography, management' + ], + 'bibtopic' => [ + 'bibliography, management' + ], + 'spanish-mx' => [ + 'languages other than English' + ], + 'HEPparticles' => [ + 'Physics, Chemistry, Biology' + ], + 'varindent' => [ + 'paragraph' + ], + 'texinfo' => [ + 'help, documentation, FAQ', + 'macro programming' + ], + 'tex-gyre-termes' => [ + 'fonts, text' + ], + 'tfrupee' => [ + 'symbols, text' + ], + 'listing' => [ + 'computer code, verbatim text' + ], + 'xhfill' => [ + 'justification', + 'macro programming', + 'spacing, horizontal or vertical' + ], + 'jas99_m' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'manyfoot' => [ + 'footnotes, end notes' + ], + 'jbact' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'knuth-base' => [ + 'distributions, whole systems' + ], + 'idverb' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'fullpict' => [ + 'figures, floating matter', + 'page geometry (margins, etc.)' + ], + 'srune' => [ + 'fonts, text' + ], + 'dotlessj' => [ + 'symbols, mathematical' + ], + 'ijcai89' => [ + 'collections, proceedings, conferences' + ], + 'iso' => [ + 'document style', + 'publisher\'s style' + ], + 'varwidth' => [ + 'boxed text, frames', + 'minipage' + ], + 'dowith' => [ + 'macro programming' + ], + 'pphlp' => [ + 'help, documentation, FAQ' + ], + 'algorithmicx' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'highlight' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'pdfcomment' => [ + 'output format PDF, PostScript' + ], + 'duotenzor' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'greekdates' => [ + 'dates and times', + 'languages other than English' + ], + 'pdfpages' => [ + 'include file', + 'output format PDF, PostScript' + ], + 'kdgreek' => [ + 'fonts, mathematics', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'usebib' => [ + 'bibliography, formatting' + ], + 'niceverb' => [ + 'macro programming' + ], + 'dialogl' => [ + 'help, documentation, FAQ', + 'macro programming' + ], + 'gradientframe' => [ + 'boxed text, frames', + 'color' + ], + 'alnumsec' => [ + 'chapters, sectioning', + 'lists, bullets', + 'table of contents' + ], + 'elsarticle' => [ + 'article style', + 'publisher\'s style' + ], + 'sans' => [ + 'font selection' + ], + 'lettrine' => [ + 'dropped letter, often initial letter', + 'paragraph' + ], + 'genealogy' => [ + 'MetaFont, Metapost', + 'symbols, text' + ], + 'catchfile' => [ + 'include file', + 'macro programming' + ], + 'rviewport' => [ + 'graphics from outside TeX' + ], + 'cropmrks' => [ + 'proof sheets (typographical)' + ], + 'sseq' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'psfrag' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'schwell' => [ + 'fonts, text' + ], + 'mcite' => [ + 'bibliography, formatting' + ], + 'coordsys' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'texpictex' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'dinbrief' => [ + 'languages other than English', + 'letters, envelopes, labels' + ], + 'facsimile' => [ + 'document style' + ], + 'formula' => [ + 'Physics, Chemistry, Biology', + 'scientific units' + ], + 'tableauVariations' => [ + 'MetaFont, Metapost', + 'tables' + ], + 'authordate' => [ + 'bibliography, management' + ], + 'boolexpr' => [ + 'macro programming' + ], + 'appelt-chess' => [ + 'symbols, mathematical' + ], + 'c2cweb' => [ + 'computer code, verbatim text', + 'literate programming' + ], + 'enotez' => [ + 'footnotes, end notes' + ], + 'CVsty' => [ + 'vita, CV, resume' + ], + 'r2bib' => [ + 'bibliography, management' + ], + 'Make patterns.' => [ + 'hyphenation' + ], + 'upca' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'symbols, text' + ], + 'plain-ltx' => [ + 'macro programming' + ], + 'slhyph' => [ + 'hyphenation' + ], + 'GFS Artemisia' => [ + 'fonts, mathematics' + ], + 'Eqmlite/Free' => [ + 'distributions, whole systems' + ], + 'iahyphen' => [ + 'hyphenation' + ], + 'wordcount' => [ + 'editing, graphical work environment', + 'make, compilation systems' + ], + 'underlin' => [ + 'headers, footers', + 'text decoration (underline, etc.)' + ], + 'latex4wp' => [ + 'help, documentation, FAQ' + ], + 'libris' => [ + 'font selection', + 'fonts, text' + ], + 'DVItoLN03' => [ + 'DVI file manipulation', + 'output format other than PDF (HTML, etc.)' + ], + 'authorindex' => [ + 'author', + 'bibliography, management' + ], + 'bbcard' => [ + 'graphics from outside TeX' + ], + 'umoline' => [ + 'text decoration (underline, etc.)' + ], + 'multind' => [ + 'index, indexing' + ], + 'flabels' => [ + 'letters, envelopes, labels' + ], + 'pdfcrypt' => [ + 'output format PDF, PostScript' + ], + 'rccol' => [ + 'arrays, matrices', + 'symbols, mathematical' + ], + 'skull' => [ + 'MetaFont, Metapost', + 'symbols, text' + ], + 'biblatex-swiss-legal' => [ + 'bibliography, formatting' + ], + 'tsemlines' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'pdfcolmk' => [ + 'color', + 'output format PDF, PostScript' + ], + 'paper' => [ + 'article style' + ], + 'tex-overview' => [ + 'help, documentation, FAQ' + ], + 'glossaries-accsupp' => [ + 'glossary, dictionary', + 'output format PDF, PostScript' + ], + 'aifont' => [ + 'fonts, mathematics' + ], + 'acroreloadpdf' => [ + 'editing, graphical work environment', + 'output format PDF, PostScript' + ], + 'gentabtex' => [ + 'tables' + ], + 'TpX' => [ + 'editing, graphical work environment', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'newclude' => [ + 'include file' + ], + 'bakoma-mac' => [ + 'distributions, whole systems' + ], + 'verbasef' => [ + 'computer code, verbatim text', + 'figures, floating matter', + 'include file' + ], + 'elpres' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'biblatex' => [ + 'bibliography, management' + ], + 'qbibman' => [ + 'bibliography, management' + ], + 'cm-lgc' => [ + 'fonts, mathematics' + ], + 'treedef' => [ + 'tables' + ], + 'chappg' => [ + 'chapters, sectioning', + 'page numbering' + ], + 'latex2rtf' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'lshort-mongolian' => [ + 'help, documentation, FAQ' + ], + 'bigdelim' => [ + 'arrays, matrices' + ], + 'biblatex-dw' => [ + 'bibliography, management', + 'Humanities' + ], + 'bibtools' => [ + 'bibliography, management' + ], + 'biolist' => [ + 'Physics, Chemistry, Biology' + ], + 'add-wes' => [ + 'book style', + 'publisher\'s style' + ], + 'dvibook' => [ + 'DVI file manipulation' + ], + 'stfloats' => [ + 'figures, floating matter' + ], + 'makeglos' => [ + 'glossary, dictionary' + ], + 'calcage' => [ + 'macro programming' + ], + 'zaccone' => [ + 'caption', + 'figures, floating matter' + ], + 'carolmin-t1' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'bits' => [ + 'chapters, sectioning' + ], + 'papermas' => [ + 'macro programming' + ], + 'GFS Complutum' => [ + 'fonts, mathematics' + ], + 'xbibtex' => [ + 'bibliography, management', + 'editing, graphical work environment' + ], + 'luaotfload' => [ + 'font selection' + ], + 'alphanum-bst' => [ + 'bibliography, formatting' + ], + 'combine' => [ + 'collections, proceedings, conferences' + ], + 'datatool' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'jqt1999' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'labelfig' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'word2tex' => [ + 'editing, graphical work environment', + 'word processor conversion' + ], + 'pb-diagram' => [ + 'commutative diagrams' + ], + 'circle' => [ + 'Mathematics (the subject)', + 'symbols, mathematical' + ], + 'dvdcoll' => [ + 'document style', + 'music' + ], + 'examplep' => [ + 'computer code, verbatim text', + 'help, documentation, FAQ' + ], + 'easytable' => [ + 'tables' + ], + 'shadbox' => [ + 'boxed text, frames', + 'color' + ], + 'changes' => [ + 'changebars', + 'editing, graphical work environment', + 'text decoration (underline, etc.)' + ], + 'rotating' => [ + 'boxed text, frames', + 'figures, floating matter' + ], + 'xpeek' => [ + 'macro programming' + ], + 'xkvltxp' => [ + 'macro programming' + ], + 'pbmtogf' => [ + 'graphics from outside TeX' + ], + 'ifthenx' => [ + 'macro programming' + ], + 'kantlipsum' => [ + 'macro programming', + 'proof sheets (typographical)' + ], + 'colortab' => [ + 'color' + ], + 'bloques' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'comfortaa' => [ + 'fonts, text' + ], + 'footnpag' => [ + 'footnotes, end notes', + 'page styles' + ], + 'l3packages' => [ + 'macro programming' + ], + 'pandora-type1' => [ + 'fonts, text' + ], + 'oldlatin' => [ + 'symbols, text' + ], + 'cellspace' => [ + 'tables' + ], + 'basque-book' => [ + 'book style', + 'languages other than English' + ], + 'fnlineno' => [ + 'cross references', + 'footnotes, end notes' + ], + 'svg-inkscape' => [ + 'graphics from outside TeX', + 'help, documentation, FAQ', + 'output format PDF, PostScript' + ], + 'named' => [ + 'bibliography, formatting' + ], + 'grapher' => [ + 'Computer Science', + 'graphics from outside TeX' + ], + 'overpic' => [ + 'graphics from outside TeX' + ], + 'fac' => [ + 'article style', + 'Computer Science', + 'publisher\'s style' + ], + 'revtex4-1' => [ + 'article style', + 'Physics, Chemistry, Biology' + ], + 'gnu-freefont' => [ + 'fonts, text' + ], + 'bibtex8bit' => [ + 'bibliography, management' + ], + 'anti' => [ + 'Physics, Chemistry, Biology', + 'symbols, mathematical' + ], + 'convert' => [ + 'encodings, Unicode' + ], + 'l2a' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'pclnfss' => [ + 'font selection', + 'output format other than PDF (HTML, etc.)' + ], + 'bibbuild' => [ + 'bibliography, management' + ], + 'juramisc' => [ + 'languages other than English' + ], + 'tpslifonts' => [ + 'font selection', + 'presentations (powerpoint-like, using a beamer)' + ], + 'vita' => [ + 'vita, CV, resume' + ], + 'runic' => [ + 'fonts, text' + ], + 'slashed' => [ + 'Physics, Chemistry, Biology' + ], + 'timing' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost', + 'Physics, Chemistry, Biology' + ], + 'knot' => [ + 'MetaFont, Metapost' + ], + 'arabic' => [ + 'macro programming' + ], + 'ln03dvi' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'ygoth' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'frontespizio' => [ + 'front matter, end matter', + 'languages other than English', + 'thesis style' + ], + 'ascii-cyrillic' => [ + 'languages other than English' + ], + 'beamer' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'mathtime-pln' => [ + 'font selection' + ], + 'tip' => [ + 'help, documentation, FAQ', + 'macro programming' + ], + 'rfc2bib' => [ + 'bibliography, management' + ], + 'delimtxt' => [ + 'external programs, interfacing' + ], + 'hanging' => [ + 'paragraph' + ], + 'layout' => [ + 'help, documentation, FAQ', + 'page geometry (margins, etc.)' + ], + 'nohyphbx' => [ + 'hyphenation' + ], + 'catchfilebetweentags' => [ + 'external programs, interfacing', + 'literate programming', + 'macro programming' + ], + 'bib2xhtml' => [ + 'bibliography, management', + 'output format other than PDF (HTML, etc.)' + ], + 'flippdf' => [ + 'output format PDF, PostScript' + ], + 'graphpap' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'superiors' => [ + 'fonts, text', + 'footnotes, end notes' + ], + 'calligra-type1' => [ + 'fonts, text' + ], + 'antomega' => [ + 'languages other than English' + ], + 'mathematica' => [ + 'font selection' + ], + 'tgothic' => [ + 'MetaFont, Metapost', + 'symbols, text' + ], + 'schedule' => [ + 'calendar, schedule' + ], + 'multienv' => [ + 'macro programming' + ], + 'usenix' => [ + 'collections, proceedings, conferences' + ], + 'rtf2tex' => [ + 'word processor conversion' + ], + 'ascii-chart' => [ + 'symbols, mathematical' + ], + 'ngerman' => [ + 'hyphenation', + 'languages other than English' + ], + 'serbianc' => [ + 'languages other than English' + ], + 'asymptote' => [ + 'graphics from outside TeX' + ], + 'wiki' => [ + 'chapters, sectioning', + 'computer code, verbatim text', + 'font selection', + 'lists, bullets', + 'quotation, poetry' + ], + 'goblin' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'soton' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'ragged' => [ + 'justification' + ], + 'here' => [ + 'figures, floating matter' + ], + 'vita209' => [ + 'vita, CV, resume' + ], + 'tclldoc' => [ + 'literate programming' + ], + 'SIstyle' => [ + 'scientific units' + ], + 'pst-3dplot' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'nofill' => [ + 'spacing, horizontal or vertical' + ], + 'macros2e' => [ + 'help, documentation, FAQ', + 'macro programming' + ], + 'tocbibind' => [ + 'bibliography, formatting', + 'front matter, end matter', + 'index, indexing', + 'table of contents' + ], + 'sphyphb' => [ + 'hyphenation' + ], + 'moreenum' => [ + 'lists, bullets' + ], + 'threeddice' => [ + 'MetaFont, Metapost' + ], + 'shade' => [ + 'boxed text, frames', + 'color', + 'MetaFont, Metapost' + ], + 'mceinleger' => [ + 'document style' + ], + 'sae' => [ + 'article style', + 'publisher\'s style' + ], + 'plnfss' => [ + 'font selection' + ], + 'mdwfonts' => [ + 'font selection' + ], + 'chemnum' => [ + 'Physics, Chemistry, Biology' + ], + 't2' => [ + 'encodings, Unicode' + ], + 'rectopma' => [ + 'title, maketitle' + ], + 'math-into-latex-4' => [ + 'help, documentation, FAQ' + ], + 'emarks' => [ + 'macro programming' + ], + 'manpage' => [ + 'document style' + ], + 'pst-tools' => [ + 'output format PDF, PostScript' + ], + 'spot' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'rotpages' => [ + 'paper size, orientation' + ], + 'lkort' => [ + 'help, documentation, FAQ' + ], + 'tabfigures' => [ + 'fonts, text', + 'symbols, text' + ], + 'inslrmaj' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'codicefiscaleitaliano' => [ + 'Humanities', + 'macro programming' + ], + 'apa' => [ + 'publisher\'s style', + 'Social Science' + ], + 'pstoedit' => [ + 'output format other than PDF (HTML, etc.)', + 'output format PDF, PostScript' + ], + 'metauml' => [ + 'computer code, verbatim text', + 'Computer Science', + 'MetaFont, Metapost' + ], + 'eledmac' => [ + 'book style', + 'Humanities' + ], + 'ebsthesis' => [ + 'Humanities', + 'thesis style' + ], + 'makerobust' => [ + 'macro programming' + ], + 'lhelp' => [ + 'boxed text, frames', + 'scientific units' + ], + 'ttt' => [ + 'languages other than English' + ], + 'dmfonts' => [ + 'fonts, text' + ], + 'aliascnt' => [ + 'macro programming' + ], + 'latexmk' => [ + 'make, compilation systems' + ], + 'mathptmx' => [ + 'font selection', + 'fonts, mathematics', + 'fonts, text' + ], + 'mathinst' => [ + 'fonts, mathematics' + ], + 'acronym209' => [ + 'abbreviations, acronyms' + ], + 'amsthm' => [ + 'Mathematics (the subject)', + 'theorems' + ], + 'texbuch' => [ + 'help, documentation, FAQ' + ], + 'europecv' => [ + 'vita, CV, resume' + ], + 'fixbbl' => [ + 'bibliography, management' + ], + 'splitindex' => [ + 'index, indexing' + ], + 'plcalendar' => [ + 'calendar, schedule' + ], + 'uhc' => [ + 'font selection', + 'fonts, text', + 'languages other than English' + ], + 'simplecv' => [ + 'vita, CV, resume' + ], + 'poligraf' => [ + 'color', + 'output format PDF, PostScript', + 'proof sheets (typographical)' + ], + 'dvipdfmx-def' => [ + 'DVI file manipulation', + 'output format PDF, PostScript' + ], + 'exscale' => [ + 'font selection', + 'symbols, mathematical' + ], + 'Midi2TeX/Free' => [ + 'external programs, interfacing' + ], + 'flacards' => [ + 'exams, exercises, answers' + ], + 'ovalfbox' => [ + 'boxed text, frames' + ], + 'l2tabu-english' => [ + 'help, documentation, FAQ' + ], + 'biblatex-publist' => [ + 'bibliography, formatting' + ], + 'esdiff' => [ + 'Mathematics (the subject)' + ], + 'cancel' => [ + 'equations, subequations' + ], + 'adfathesis' => [ + 'thesis style' + ], + 'covfonts' => [ + 'fonts, mathematics' + ], + 'tex2page' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'mla' => [ + 'bibliography, formatting', + 'Humanities' + ], + 'nabatean' => [ + 'fonts, text', + 'languages other than English' + ], + 'captcont' => [ + 'caption', + 'figures, floating matter' + ], + 'makedoc' => [ + 'help, documentation, FAQ', + 'macro programming' + ], + 'gensymb' => [ + 'symbols, mathematical' + ], + 'syriac' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'biblatex-jura' => [ + 'bibliography, management' + ], + 'maths-symbols' => [ + 'fonts, mathematics', + 'help, documentation, FAQ' + ], + 'editbar' => [ + 'changebars' + ], + 'intro-scientific' => [ + 'help, documentation, FAQ' + ], + 'combinedgraphics' => [ + 'graphics from outside TeX' + ], + 'enparen' => [ + 'symbols, text' + ], + 'moredefs' => [ + 'macro programming' + ], + 'titlepic' => [ + 'figures, floating matter', + 'front matter, end matter', + 'page styles', + 'title, maketitle' + ], + 'tabbing' => [ + 'alignment' + ], + 'pax' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'mathcmd' => [ + 'Mathematics (the subject)' + ], + 'gkpmac' => [ + 'document style' + ], + 'librarian' => [ + 'bibliography, formatting', + 'bibliography, management' + ], + 'textool' => [ + 'DVI file manipulation', + 'output format other than PDF (HTML, etc.)' + ], + 'DTX gallery' => [ + 'help, documentation, FAQ', + 'literate programming', + 'macro programming' + ], + 'xwatermark' => [ + 'watermark, draftmark' + ], + 'tabularborder' => [ + 'tables' + ], + 'aspell' => [ + 'editing, graphical work environment' + ], + 'inputenc' => [ + 'encodings, Unicode' + ], + 'vietnet' => [ + 'languages other than English' + ], + 'parallel' => [ + 'columns, multiple columns' + ], + 'din1505' => [ + 'bibliography, management' + ], + 'lshort' => [ + 'help, documentation, FAQ' + ], + 'pst-tvz' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'poorman' => [ + 'fonts, text', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'vector' => [ + 'arrays, matrices', + 'Mathematics (the subject)' + ], + 'mnras' => [ + 'article style', + 'Physics, Chemistry, Biology' + ], + 'koma-script-examples' => [ + 'help, documentation, FAQ' + ], + 'xmltex' => [ + 'macro programming' + ], + 'twocolumns' => [ + 'columns, multiple columns' + ], + 'gtex-letter' => [ + 'editing, graphical work environment', + 'letters, envelopes, labels' + ], + 'pxtxalfa' => [ + 'fonts, mathematics' + ], + 'adobe-euro' => [ + 'fonts, mathematics' + ], + 'futhorc' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'hackalloc' => [ + 'macro programming' + ], + 'indent' => [ + 'page geometry (margins, etc.)' + ], + 'annotate' => [ + 'bibliography, management' + ], + 'etruscan' => [ + 'fonts, mathematics' + ], + 'hyperlatex' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'skeyval' => [ + 'macro programming' + ], + 'mbboard' => [ + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'bundledoc' => [ + 'make, compilation systems' + ], + 'changepage' => [ + 'page geometry (margins, etc.)', + 'page styles' + ], + 'manual209' => [ + 'document style' + ], + 'menukeys' => [ + 'computer code, verbatim text' + ], + 'randomwalk' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'mathlig' => [ + 'Mathematics (the subject)' + ], + 'sfheaders' => [ + 'chapters, sectioning' + ], + 'TeXbook' => [ + 'help, documentation, FAQ' + ], + 'repeatindex' => [ + 'index, indexing' + ], + 'jfontmaps' => [ + 'font selection' + ], + 'cutwin' => [ + 'paragraph', + 'wrap around a figure' + ], + 'freetype' => [ + 'font selection' + ], + 'hf-tikz' => [ + 'equations, subequations' + ], + 'mathdesign' => [ + 'fonts, mathematics' + ], + 'meetingmins' => [ + 'document style' + ], + 'uwthesis209' => [ + 'thesis style' + ], + 'pst-node' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'secret' => [ + 'marginal material', + 'paragraph' + ], + 'NTS-L' => [ + 'help, documentation, FAQ' + ], + 'mversion' => [ + 'make, compilation systems' + ], + 'slideshow' => [ + 'MetaFont, Metapost', + 'presentations (powerpoint-like, using a beamer)' + ], + 'automata' => [ + 'graphics from outside TeX' + ], + 'card-set' => [ + 'document style', + 'page geometry (margins, etc.)' + ], + 'extract' => [ + 'include file', + 'macro programming' + ], + 'bibentry' => [ + 'bibliography, formatting' + ], + 'oinuit' => [ + 'languages other than English' + ], + 'psfonts' => [ + 'font selection', + 'fonts, text' + ], + 'lshort-mongol' => [ + 'help, documentation, FAQ' + ], + 'urw-antiqua' => [ + 'font selection', + 'fonts, text' + ], + 'thumb' => [ + 'headers, footers' + ], + 'easymat' => [ + 'arrays, matrices' + ], + 'qdtexvpl' => [ + 'font selection' + ], + 'pthyphs' => [ + 'hyphenation' + ], + 'pst-tree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'pstex' => [ + 'graphics from outside TeX' + ], + 'psfonts-tools' => [ + 'font selection' + ], + 'dvipscol' => [ + 'color', + 'output format PDF, PostScript' + ], + 'bbs' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'tdsfrmath' => [ + 'macro programming' + ], + 'casslbl' => [ + 'page styles' + ], + 'translation-booktabs-fr' => [ + 'help, documentation, FAQ' + ], + 'pagerange' => [ + 'page numbering' + ], + 'mil3' => [ + 'help, documentation, FAQ' + ], + 'jmlr' => [ + 'article style', + 'Computer Science', + 'publisher\'s style' + ], + 'magyar' => [ + 'hyphenation' + ], + 'dvi2bitmap' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'braids' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Mathematics (the subject)' + ], + 'bracketkey' => [ + 'Physics, Chemistry, Biology' + ], + 'fotex' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'latin3jk' => [ + 'encodings, Unicode' + ], + 'vntex' => [ + 'languages other than English' + ], + 'multitoc' => [ + 'columns, multiple columns', + 'table of contents' + ], + 'gmp' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'helvet' => [ + 'font selection', + 'fonts, text' + ], + 'nccparskip' => [ + 'paragraph', + 'spacing, horizontal or vertical' + ], + 'svn-multi' => [ + 'make, compilation systems' + ], + 'jmakepdfx' => [ + 'output format PDF, PostScript' + ], + 'tikz-cd' => [ + 'commutative diagrams', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'wrapfig' => [ + 'wrap around a figure' + ], + 'mathspic' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'seqsplit' => [ + 'macro programming' + ], + 'Nath' => [ + 'Mathematics (the subject)' + ], + 'mailing' => [ + 'letters, envelopes, labels' + ], + 'bidi' => [ + 'languages other than English' + ], + 'fp' => [ + 'macro programming' + ], + 'minion2newtx' => [ + 'font selection' + ], + 'apeqnum' => [ + 'equations, subequations' + ], + 'pst-gantt' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'glossary' => [ + 'glossary, dictionary', + 'index, indexing' + ], + 'pmgraph' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'colors' => [ + 'color', + 'output format PDF, PostScript' + ], + 'humanbio' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'latexn' => [ + 'make, compilation systems' + ], + 'translation-ecv-de' => [ + 'vita, CV, resume' + ], + 'carolmin' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'fixfoot' => [ + 'footnotes, end notes' + ], + 'vruler' => [ + 'page styles' + ], + 'nccfancyhdr' => [ + 'headers, footers' + ], + 'fundus-va' => [ + 'fonts, text' + ], + 'nb4latex' => [ + 'word processor conversion' + ], + 'ishyph' => [ + 'hyphenation' + ], + 'mdwtools' => [ + 'macro programming' + ], + 'booktabs' => [ + 'tables' + ], + 'gentl-gr' => [ + 'help, documentation, FAQ' + ], + 'zhmetrics' => [ + 'font selection', + 'languages other than English' + ], + 'bpchem' => [ + 'Physics, Chemistry, Biology' + ], + 'pdfmarginpar' => [ + 'marginal material', + 'output format PDF, PostScript' + ], + 'euro-ce' => [ + 'fonts, mathematics', + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'import' => [ + 'include file' + ], + 'TeXshell' => [ + 'editing, graphical work environment' + ], + 'jtb' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'mboxfill' => [ + 'boxed text, frames' + ], + 'vrbexin' => [ + 'computer code, verbatim text', + 'include file' + ], + 'font-change' => [ + 'font selection' + ], + 'texlive' => [ + 'distributions, whole systems' + ], + 'spotcolor' => [ + 'color' + ], + 'manual' => [ + 'symbols, text' + ], + 'mactotex' => [ + 'output format PDF, PostScript' + ], + 'palladam' => [ + 'fonts, text', + 'languages other than English' + ], + 'niceframe' => [ + 'boxed text, frames' + ], + 'draftcopy' => [ + 'output format PDF, PostScript', + 'watermark, draftmark' + ], + 'york-thesis' => [ + 'thesis style' + ], + 'pst-fill' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'phoenician' => [ + 'fonts, text' + ], + 'pst-blur' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'shortvrb' => [ + 'computer code, verbatim text' + ], + 'fnpara-pln' => [ + 'footnotes, end notes' + ], + 'kpathsea' => [ + 'macro programming' + ], + 'protex' => [ + 'literate programming', + 'output format other than PDF (HTML, etc.)', + 'output format PDF, PostScript' + ], + 'poster-mac' => [ + 'document style', + 'output format PDF, PostScript' + ], + 'utf2any' => [ + 'encodings, Unicode' + ], + 'lahyph' => [ + 'hyphenation' + ], + 'germkorr' => [ + 'languages other than English' + ], + 'harvmac' => [ + 'macro programming' + ], + 'sverb' => [ + 'computer code, verbatim text' + ], + 'numprint' => [ + 'macro programming', + 'tables' + ], + 'ppr-prv' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'boxedart4mac' => [ + 'graphics from outside TeX' + ], + 'lated' => [ + 'editing, graphical work environment', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'RST' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities' + ], + 'Beebe-DVI' => [ + 'DVI file manipulation', + 'output format other than PDF (HTML, etc.)' + ], + 'epstopdf' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'fncychap' => [ + 'chapters, sectioning' + ], + 'turnstile' => [ + 'Mathematics (the subject)', + 'symbols, mathematical' + ], + 'ltx2rtf' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'colortbl' => [ + 'color', + 'tables' + ], + 'psutils' => [ + 'output format PDF, PostScript' + ], + 'pst-math' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'bard' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'aramaic' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'amstex' => [ + 'commutative diagrams', + 'Mathematics (the subject)', + 'symbols, mathematical', + 'theorems' + ], + 'physics' => [ + 'Physics, Chemistry, Biology' + ], + 'PWT' => [ + 'help, documentation, FAQ' + ], + 'context-URWGaramond' => [ + 'font selection' + ], + 'semtrans' => [ + 'languages other than English' + ], + 'nestquot' => [ + 'quotation, poetry' + ], + 'muthesis' => [ + 'thesis style' + ], + 'fancyhdrboxed' => [ + 'headers, footers', + 'help, documentation, FAQ' + ], + 'neufont' => [ + 'help, documentation, FAQ' + ], + 'sfarticle' => [ + 'article style' + ], + 'hypbmsec' => [ + 'URLs, hyperlinks' + ], + 'pbm2tex' => [ + 'graphics from outside TeX' + ], + 'musictex' => [ + 'music' + ], + 'arev' => [ + 'fonts, mathematics' + ], + 'harmony' => [ + 'symbols, mathematical' + ], + 'stix' => [ + 'encodings, Unicode', + 'fonts, text' + ], + 'chronosys' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'savesym' => [ + 'macro programming', + 'symbols, mathematical', + 'symbols, text' + ], + 'path' => [ + 'computer code, verbatim text' + ], + 'csv2latex' => [ + 'external programs, interfacing', + 'tables' + ], + 'xmpincl' => [ + 'output format PDF, PostScript' + ], + 'notoccite' => [ + 'bibliography, formatting', + 'table of contents' + ], + 'mattex' => [ + 'external programs, interfacing' + ], + 'japanese-otf' => [ + 'font selection', + 'languages other than English' + ], + 'fancyhdr' => [ + 'headers, footers' + ], + 'AFMtopl (Wolczko)' => [ + 'fonts, mathematics' + ], + 'components' => [ + 'help, documentation, FAQ' + ], + 'cun' => [ + 'languages other than English', + 'symbols, mathematical' + ], + 'dottex' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'dviasm' => [ + 'DVI file manipulation' + ], + 'powerdot' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'pdf-trans' => [ + 'output format PDF, PostScript' + ], + 'chicagoa' => [ + 'bibliography, management', + 'Humanities', + 'publisher\'s style' + ], + 'hrlatex' => [ + 'languages other than English', + 'thesis style' + ], + 'spverbatim' => [ + 'computer code, verbatim text' + ], + 'prosper' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'ocr-a' => [ + 'fonts, text' + ], + 'dvisvgm' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'zwpagelayout' => [ + 'page geometry (margins, etc.)', + 'page styles' + ], + 'tab4tex' => [ + 'tables' + ], + 'context-degrade' => [ + 'graphics from outside TeX' + ], + 'trivfloat' => [ + 'figures, floating matter' + ], + 'ifthen' => [ + 'macro programming' + ], + 'tex-gyre-math-termes' => [ + 'fonts, mathematics' + ], + 'lm-math' => [ + 'fonts, mathematics' + ], + 'modroman' => [ + 'macro programming' + ], + 'MiniPlot' => [ + 'graphics from outside TeX' + ], + 'bib2ml' => [ + 'bibliography, management' + ], + 'letter1' => [ + 'letters, envelopes, labels' + ], + 'mdwtab' => [ + 'arrays, matrices', + 'tables' + ], + 'macbibtex' => [ + 'bibliography, formatting' + ], + 'sansmathaccent' => [ + 'fonts, mathematics', + 'presentations (powerpoint-like, using a beamer)', + 'symbols, mathematical', + 'symbols, text' + ], + 'frenchpro' => [ + 'languages other than English' + ], + 'cmtt' => [ + 'computer code, verbatim text', + 'font selection' + ], + 'pst-layout' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'hacm' => [ + 'font selection', + 'fonts, text', + 'languages other than English' + ], + 'context-filter' => [ + 'external programs, interfacing' + ], + 'lb2-examples' => [ + 'help, documentation, FAQ' + ], + 'UPmethodology' => [ + 'Computer Science' + ], + 'qm' => [ + 'Physics, Chemistry, Biology', + 'symbols, mathematical' + ], + 'arabi' => [ + 'languages other than English' + ], + 'cmolddig' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'isorot' => [ + 'page geometry (margins, etc.)' + ], + 'ps_view' => [ + 'output viewer' + ], + 'oxford' => [ + 'bibliography, formatting', + 'Humanities' + ], + 'bbl2html' => [ + 'bibliography, management', + 'output format other than PDF (HTML, etc.)' + ], + 'snapshot' => [ + 'make, compilation systems' + ], + 'count1to' => [ + 'macro programming' + ], + 'tram' => [ + 'boxed text, frames' + ], + 'collcell' => [ + 'macro programming', + 'tables' + ], + 'Bibex' => [ + 'bibliography, management' + ], + 'blindtext' => [ + 'proof sheets (typographical)' + ], + 'interpol' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'PicTeX' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'minitoc' => [ + 'table of contents' + ], + 'croatian' => [ + 'fonts, mathematics', + 'hyphenation', + 'MetaFont, Metapost' + ], + 'nrc' => [ + 'article style', + 'document style', + 'Physics, Chemistry, Biology' + ], + 'mftrace' => [ + 'MetaFont, Metapost', + 'output format PDF, PostScript' + ], + 'graphicx-psmin' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'make_latex' => [ + 'make, compilation systems' + ], + 'bitelist' => [ + 'macro programming' + ], + 'reverxii' => [ + 'macro programming' + ], + 'DCpic' => [ + 'commutative diagrams' + ], + 'babyloniannum' => [ + 'fonts, text', + 'Humanities', + 'languages other than English', + 'symbols, text' + ], + 'mactex-basic' => [ + 'distributions, whole systems' + ], + 'compare' => [ + 'macro programming' + ], + 'paracol' => [ + 'columns, multiple columns', + 'languages other than English' + ], + 'autopict' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'latex2man' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'tex4ht' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'pst-func' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'adrlist' => [ + 'letters, envelopes, labels' + ], + 'sasnrdisplay' => [ + 'computer code, verbatim text' + ], + 'bookest' => [ + 'book style' + ], + 'lshort-slovak' => [ + 'help, documentation, FAQ' + ], + 'luasseq' => [ + 'Physics, Chemistry, Biology' + ], + 'MEP article' => [ + 'article style', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'gmdoc' => [ + 'help, documentation, FAQ' + ], + 'cmpj' => [ + 'article style', + 'publisher\'s style' + ], + 'tabsatz' => [ + 'help, documentation, FAQ', + 'tables' + ], + 'addindex' => [ + 'index, indexing' + ], + 'comma' => [ + 'macro programming' + ], + 'doc-pictex' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'help, documentation, FAQ' + ], + 'notes2bib' => [ + 'bibliography, formatting', + 'footnotes, end notes' + ], + 'properties' => [ + 'macro programming' + ], + 'betababel' => [ + 'languages other than English' + ], + 'fancynum' => [ + 'macro programming' + ], + 'aurical' => [ + 'fonts, mathematics' + ], + 'fepslatex' => [ + 'help, documentation, FAQ' + ], + 'yax' => [ + 'macro programming' + ], + 'context-fullpage' => [ + 'page styles' + ], + 'HyPlain' => [ + 'hyphenation', + 'languages other than English' + ], + 'uwthesis' => [ + 'thesis style' + ], + 'JBibtexManager' => [ + 'bibliography, management', + 'editing, graphical work environment' + ], + 'newalg' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'fig2eng' => [ + 'graphics from outside TeX' + ], + 'tesla' => [ + 'Computer Science' + ], + 'multicol' => [ + 'columns, multiple columns' + ], + 'rsc' => [ + 'bibliography, formatting', + 'Physics, Chemistry, Biology' + ], + 'oriya' => [ + 'fonts, text', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'pstricks-calcnotes' => [ + 'help, documentation, FAQ' + ], + 'thepdfnumber' => [ + 'macro programming', + 'Mathematics (the subject)', + 'output format PDF, PostScript' + ], + 'ot-tableau' => [ + 'tables' + ], + 'schemeweb' => [ + 'computer code, verbatim text', + 'external programs, interfacing' + ], + 'biolinum-type1' => [ + 'font selection' + ], + 'GuITbeamer' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'jurarsp' => [ + 'bibliography, management', + 'languages other than English' + ], + 'mylatex' => [ + 'macro programming', + 'make, compilation systems' + ], + 'psboxit' => [ + 'boxed text, frames', + 'graphics from outside TeX', + 'watermark, draftmark' + ], + 'microtype' => [ + 'spacing, horizontal or vertical' + ], + 'wochtag' => [ + 'macro programming' + ], + 'mwe' => [ + 'help, documentation, FAQ' + ], + 'gamebook' => [ + 'document style' + ], + 'bib-greek' => [ + 'bibliography, management', + 'languages other than English' + ], + 'lshort-finnish' => [ + 'help, documentation, FAQ' + ], + 'texpict' => [ + 'editing, graphical work environment', + 'graphics from outside TeX' + ], + 'showtags' => [ + 'bibliography, formatting' + ], + 'persian-modern' => [ + 'fonts, text' + ], + 'fixlatvian' => [ + 'languages other than English' + ], + 'math-e' => [ + 'help, documentation, FAQ' + ], + 'nih' => [ + 'document style', + 'Physics, Chemistry, Biology' + ], + 'ltcaption' => [ + 'caption', + 'tables' + ], + 'mh' => [ + 'Mathematics (the subject)' + ], + 'inputtrc' => [ + 'include file', + 'macro programming' + ], + 'boxedeps' => [ + 'DVI file manipulation', + 'graphics from outside TeX' + ], + 'hardwrap' => [ + 'macro programming' + ], + 'dichokey' => [ + 'Physics, Chemistry, Biology' + ], + 'simplified-latex' => [ + 'help, documentation, FAQ' + ], + 'pst-bspline' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'oscola' => [ + 'bibliography, formatting' + ], + 'mathalfa' => [ + 'font selection', + 'symbols, mathematical' + ], + 'abbr' => [ + 'abbreviations, acronyms' + ], + 'latin1jk' => [ + 'encodings, Unicode' + ], + 'quote' => [ + 'symbols, text' + ], + 'cirth' => [ + 'MetaFont, Metapost' + ], + 'edmac' => [ + 'footnotes, end notes', + 'Humanities' + ], + 'animate' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'tkbibtex' => [ + 'bibliography, management', + 'editing, graphical work environment' + ], + 'testfont' => [ + 'font selection', + 'fonts, text' + ], + 'hvmath-fonts' => [ + 'fonts, mathematics' + ], + 'xetex-greek' => [ + 'hyphenation' + ], + 'ipaex' => [ + 'fonts, text' + ], + 'lshort-russian' => [ + 'help, documentation, FAQ' + ], + 'tablefootnote' => [ + 'footnotes, end notes', + 'tables' + ], + 'bashful' => [ + 'external programs, interfacing' + ], + 'declare' => [ + 'macro programming' + ], + 'pgfplots' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Mathematics (the subject)', + 'Physics, Chemistry, Biology', + 'tables' + ], + 'AcroMemory' => [ + 'output format PDF, PostScript' + ], + 'eso-pic' => [ + 'watermark, draftmark' + ], + 'inscrutable' => [ + 'macro programming' + ], + 'elmath' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'jcc' => [ + 'bibliography, management' + ], + 'pst-labo' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript', + 'Physics, Chemistry, Biology' + ], + 'amsfonts' => [ + 'fonts, mathematics' + ], + 'pst-stru' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'JPicEdt' => [ + 'editing, graphical work environment', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'emptypage' => [ + 'page numbering', + 'page styles' + ], + 'multibox' => [ + 'boxed text, frames', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'ltxindex' => [ + 'index, indexing' + ], + 'wiggly' => [ + 'text decoration (underline, etc.)' + ], + 'mdputu' => [ + 'font selection', + 'fonts, mathematics' + ], + 'flipbook' => [ + 'headers, footers' + ], + 'toc' => [ + 'front matter, end matter' + ], + 'newfloat' => [ + 'figures, floating matter' + ], + 'plfonts' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'outliner' => [ + 'chapters, sectioning' + ], + 'fontaxes' => [ + 'font selection' + ], + 'quoting' => [ + 'quotation, poetry' + ], + 'begriff' => [ + 'Mathematics (the subject)' + ], + 'letter-plain' => [ + 'letters, envelopes, labels' + ], + 'mkbangtex' => [ + 'editing, graphical work environment', + 'encodings, Unicode', + 'languages other than English' + ], + 'itnumpar' => [ + 'languages other than English', + 'macro programming' + ], + 'm3D' => [ + 'MetaFont, Metapost' + ], + 'calxxxx' => [ + 'calendar, schedule' + ], + 'xetexfontinfo' => [ + 'help, documentation, FAQ' + ], + 'pst-ode' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'macro programming' + ], + 'zigaretten' => [ + 'document style' + ], + 'covington' => [ + 'Humanities' + ], + 'breqn' => [ + 'equations, subequations', + 'Mathematics (the subject)' + ], + 'engwar' => [ + 'fonts, mathematics' + ], + 'kvdefinekeys' => [ + 'macro programming' + ], + 'urwvf' => [ + 'font selection' + ], + 'loops' => [ + 'macro programming' + ], + 'ltxkeys' => [ + 'macro programming' + ], + 'srhyphc' => [ + 'hyphenation' + ], + 'spain' => [ + 'bibliography, formatting' + ], + 'concmath' => [ + 'font selection', + 'fonts, mathematics' + ], + 'vmargin' => [ + 'page geometry (margins, etc.)' + ], + 'robustcommand' => [ + 'macro programming' + ], + 'marvosym' => [ + 'fonts, text', + 'symbols, text' + ], + 'LXfonts' => [ + 'fonts, mathematics', + 'fonts, text' + ], + 'ptex-texmf' => [ + 'distributions, whole systems', + 'languages other than English' + ], + 'subscript' => [ + 'symbols, text', + 'text decoration (underline, etc.)' + ], + 'uni-wtal-ger' => [ + 'bibliography, formatting', + 'Humanities' + ], + 'cellular' => [ + 'tables' + ], + 'cmastro' => [ + 'symbols, mathematical' + ], + 'eurosans' => [ + 'font selection' + ], + 'bigints' => [ + 'symbols, mathematical' + ], + 'captdef' => [ + 'caption' + ], + 'tcltexed' => [ + 'editing, graphical work environment' + ], + 'ltxinput' => [ + 'include file', + 'make, compilation systems' + ], + 'interpreter' => [ + 'external programs, interfacing' + ], + 'cfgguide' => [ + 'help, documentation, FAQ' + ], + 'placeins-plain' => [ + 'figures, floating matter' + ], + 'TeX' => [ + 'distributions, whole systems' + ], + 'biokey' => [ + 'Physics, Chemistry, Biology' + ], + 'CJ' => [ + 'bibliography, management', + 'Computer Science', + 'publisher\'s style' + ], + 'epsfview' => [ + 'MetaFont, Metapost', + 'output viewer' + ], + 'historische-zeitschrift' => [ + 'bibliography, management' + ], + 'astyped' => [ + 'computer code, verbatim text' + ], + 'dvipsk' => [ + 'output format PDF, PostScript' + ], + 'faq-fr' => [ + 'help, documentation, FAQ' + ], + 'pedigree-perl' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'french-translations' => [ + 'help, documentation, FAQ', + 'languages other than English' + ], + 'dashbox' => [ + 'boxed text, frames' + ], + 'pst-thick' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'longdiv' => [ + 'Mathematics (the subject)' + ], + 'overword' => [ + 'macro programming' + ], + 'metapost' => [ + 'MetaFont, Metapost' + ], + 'tkdvi' => [ + 'output viewer' + ], + 'sprite' => [ + 'graphics from outside TeX' + ], + 'tkz-linknodes' => [ + 'equations, subequations', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'amslatex-primer' => [ + 'commutative diagrams', + 'cross references', + 'help, documentation, FAQ', + 'Mathematics (the subject)' + ], + 'biblatex-phys' => [ + 'bibliography, formatting' + ], + 'coolstr' => [ + 'macro programming' + ], + 'stables' => [ + 'tables' + ], + 'corelfonts' => [ + 'fonts, mathematics' + ], + 'namespc' => [ + 'macro programming' + ], + 'verbments' => [ + 'computer code, verbatim text' + ], + 'iopart-num' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'truetypemetrics' => [ + 'font selection' + ], + 'mathspec' => [ + 'fonts, mathematics' + ], + 'proofs' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Mathematics (the subject)', + 'proofs' + ], + 'bookform' => [ + 'document style', + 'publisher\'s style' + ], + 'everyshi' => [ + 'macro programming', + 'page styles' + ], + 'sparklines' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'nccboxes' => [ + 'boxed text, frames' + ], + 'zhmCJK' => [ + 'fonts, text', + 'languages other than English' + ], + 'venn' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'aichej' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'cropmark-pu' => [ + 'proof sheets (typographical)' + ], + 'ifpdf' => [ + 'macro programming', + 'output format PDF, PostScript' + ], + 'ghab' => [ + 'boxed text, frames' + ], + 'luacolor' => [ + 'color' + ], + 'cms4talks' => [ + 'editing, graphical work environment' + ], + 'dvichk' => [ + 'DVI file manipulation' + ], + 'btable' => [ + 'tables' + ], + 'abstbook' => [ + 'abstract', + 'collections, proceedings, conferences' + ], + 'aomart' => [ + 'article style' + ], + 'letltxmacro' => [ + 'macro programming' + ], + 'jura' => [ + 'document style', + 'languages other than English' + ], + 'translation-natbib-fr' => [ + 'help, documentation, FAQ' + ], + 'cals' => [ + 'tables' + ], + 'sueterlin' => [ + 'symbols, text' + ], + 'Imake-TeX' => [ + 'make, compilation systems' + ], + 'hycolor' => [ + 'color', + 'URLs, hyperlinks' + ], + 'lametex' => [ + 'output format PDF, PostScript' + ], + 'filemod' => [ + 'external programs, interfacing', + 'macro programming' + ], + 'imakeidx' => [ + 'index, indexing' + ], + 'mathesatz-examples' => [ + 'help, documentation, FAQ' + ], + 'nonfloat' => [ + 'figures, floating matter' + ], + 'ncccropbox' => [ + 'boxed text, frames', + 'spacing, horizontal or vertical' + ], + 'erdc' => [ + 'publisher\'s style', + 'report style' + ], + 'uktug-bask' => [ + 'help, documentation, FAQ' + ], + 'texfilt' => [ + 'macro programming' + ], + 'Metafont book' => [ + 'help, documentation, FAQ', + 'MetaFont, Metapost' + ], + 'l3regex' => [ + 'macro programming' + ], + 'rec-thy' => [ + 'Mathematics (the subject)' + ], + 'at' => [ + 'macro programming' + ], + 'exams' => [ + 'exams, exercises, answers' + ], + 'doipubmed' => [ + 'bibliography, management' + ], + 'jj-game' => [ + 'output format PDF, PostScript' + ], + 'navigator' => [ + 'output format PDF, PostScript' + ], + 'dblfloatfix' => [ + 'columns, multiple columns', + 'figures, floating matter' + ], + 'statistik' => [ + 'macro programming' + ], + 'daytime' => [ + 'dates and times' + ], + 'AkkTeX' => [ + 'article style', + 'document style', + 'Mathematics (the subject)', + 'thesis style' + ], + 'embrac' => [ + 'symbols, text' + ], + 'etex-pkg' => [ + 'macro programming' + ], + 'decorule' => [ + 'symbols, text' + ], + 'stmaryrd' => [ + 'Computer Science', + 'fonts, mathematics' + ], + 'mirr' => [ + 'output format PDF, PostScript' + ], + 'xwpick' => [ + 'graphics from outside TeX' + ], + 'cm-gf' => [ + 'MetaFont, Metapost' + ], + 'epsincl' => [ + 'MetaFont, Metapost', + 'output format PDF, PostScript' + ], + 'realscripts' => [ + 'symbols, mathematical' + ], + 'infwarerr' => [ + 'help, documentation, FAQ', + 'macro programming' + ], + 'sanhyph' => [ + 'hyphenation' + ], + 'texi2dvi-latest' => [ + 'make, compilation systems' + ], + 'eqlist' => [ + 'lists, bullets' + ], + 'proba' => [ + 'Mathematics (the subject)', + 'symbols, mathematical' + ], + 'apasoft' => [ + 'bibliography, management', + 'Social Science' + ], + 'spanglish' => [ + 'languages other than English' + ], + 'sageep' => [ + 'article style', + 'Physics, Chemistry, Biology' + ], + 'sansmath' => [ + 'font selection', + 'symbols, mathematical' + ], + 'docmute' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'boundbox' => [ + 'DVI file manipulation', + 'page geometry (margins, etc.)' + ], + 'rotfloat' => [ + 'figures, floating matter' + ], + 'latexcheat' => [ + 'help, documentation, FAQ', + 'Physics, Chemistry, Biology' + ], + 'text2bib' => [ + 'bibliography, management' + ], + 'sauterfonts' => [ + 'font selection' + ], + 'ghostscript-GPL' => [ + 'output format PDF, PostScript' + ], + 'grafik' => [ + 'help, documentation, FAQ' + ], + 'brclc' => [ + 'macro programming' + ], + 'subsupscripts' => [ + 'symbols, mathematical' + ], + 'usrguide' => [ + 'help, documentation, FAQ' + ], + 'floatpag' => [ + 'figures, floating matter', + 'page styles' + ], + 'stringstrings' => [ + 'macro programming' + ], + 'skb' => [ + 'macro programming' + ], + 'fonteinf' => [ + 'help, documentation, FAQ' + ], + 'memdesign' => [ + 'help, documentation, FAQ' + ], + 'overrightarrow' => [ + 'Mathematics (the subject)' + ], + 'adjmulticol' => [ + 'columns, multiple columns' + ], + 'LaTeX-veryshortguide' => [ + 'help, documentation, FAQ' + ], + 'txfontsb' => [ + 'symbols, text' + ], + 'prerex' => [ + 'editing, graphical work environment', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'verbatim' => [ + 'computer code, verbatim text' + ], + 'ucharclasses' => [ + 'encodings, Unicode', + 'font selection' + ], + 'pst-optexp' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript', + 'Physics, Chemistry, Biology' + ], + 'titleref' => [ + 'chapters, sectioning', + 'cross references', + 'front matter, end matter' + ], + 'ktv-texdata' => [ + 'exams, exercises, answers' + ], + 'dosepsbin' => [ + 'graphics from outside TeX' + ], + 'a5comb' => [ + 'paper size, orientation' + ], + 'etextools' => [ + 'macro programming' + ], + 'verbtim2' => [ + 'computer code, verbatim text' + ], + 'datetime' => [ + 'dates and times' + ], + 'ctable' => [ + 'tables' + ], + 'biihead' => [ + 'headers, footers' + ], + 'inlinebib' => [ + 'bibliography, management' + ], + 'regcount' => [ + 'macro programming' + ], + 'minipage-marginpar' => [ + 'boxed text, frames', + 'marginal material' + ], + 'xgalley' => [ + 'macro programming' + ], + 'committee-font' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'ecltree' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'apacite' => [ + 'bibliography, management', + 'Social Science' + ], + 'localloc' => [ + 'macro programming' + ], + 'luaxml' => [ + 'macro programming' + ], + 'biblatex-chem' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'background' => [ + 'color', + 'watermark, draftmark' + ], + 'chbar' => [ + 'changebars' + ], + 'utthesis' => [ + 'thesis style' + ], + 'lcircuit' => [ + 'Physics, Chemistry, Biology' + ], + 'showdim' => [ + 'macro programming' + ], + 'BiBLE' => [ + 'bibliography, management' + ], + 'afterpackage' => [ + 'macro programming' + ], + 'fbs' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'fihyph' => [ + 'hyphenation' + ], + 'Ultra-TeX' => [ + 'editing, graphical work environment' + ], + 'hungarian' => [ + 'hyphenation' + ], + 'euler' => [ + 'font selection' + ], + 'windvi' => [ + 'output viewer' + ], + 'setspace' => [ + 'page styles' + ], + 'ant-worker-tasks' => [ + 'make, compilation systems' + ], + 'cmoutlines' => [ + 'fonts, mathematics' + ], + 'autotab' => [ + 'external programs, interfacing', + 'tables' + ], + 'xtab' => [ + 'tables' + ], + 'morewrites' => [ + 'external programs, interfacing', + 'macro programming' + ], + 'rcs-multi' => [ + 'make, compilation systems' + ], + 'mathastext' => [ + 'font selection', + 'Mathematics (the subject)', + 'symbols, mathematical' + ], + 'printbib' => [ + 'bibliography, management' + ], + 'web9pt' => [ + 'literate programming' + ], + 'proposal' => [ + 'document style' + ], + 'dblfnote' => [ + 'columns, multiple columns', + 'footnotes, end notes' + ], + 'pst-vue3d' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'compactbib' => [ + 'bibliography, management' + ], + 'arabxetex' => [ + 'languages other than English' + ], + 'yafoot' => [ + 'footnotes, end notes' + ], + 'soulpos' => [ + 'text decoration (underline, etc.)' + ], + 'checkend' => [ + 'macro programming' + ], + 'itrans-processor' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'acroterm' => [ + 'abbreviations, acronyms' + ], + 'showhyphens' => [ + 'hyphenation' + ], + 'fontsmpl' => [ + 'font selection' + ], + 'bartel-chess-fonts' => [ + 'symbols, text' + ], + 'ltt' => [ + 'help, documentation, FAQ' + ], + 'recipecard' => [ + 'document style' + ], + 'pgf' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'munich' => [ + 'bibliography, formatting' + ], + 'verbatim-gen' => [ + 'computer code, verbatim text' + ], + 'epstool' => [ + 'graphics from outside TeX' + ], + 'smartmn' => [ + 'symbols, mathematical', + 'symbols, text' + ], + 'hex' => [ + 'macro programming' + ], + 'annotation' => [ + 'bibliography, management' + ], + 'axodraw' => [ + 'Physics, Chemistry, Biology' + ], + 'wasysym' => [ + 'font selection' + ], + 'lshort-english' => [ + 'help, documentation, FAQ' + ], + 'indxcite' => [ + 'bibliography, management', + 'index, indexing' + ], + 'vispeech' => [ + 'MetaFont, Metapost', + 'symbols, text' + ], + 'timeline' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'luainputenc' => [ + 'encodings, Unicode' + ], + 'show2e' => [ + 'macro programming' + ], + 'mathtime-ltx' => [ + 'font selection' + ], + 'draftmark' => [ + 'watermark, draftmark' + ], + 'arabtex' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'fullblck' => [ + 'letters, envelopes, labels' + ], + 'Birkhaeuser' => [ + 'book style', + 'collections, proceedings, conferences', + 'publisher\'s style' + ], + 'phonetic' => [ + 'fonts, text', + 'MetaFont, Metapost', + 'symbols, text' + ], + 'xfig' => [ + 'editing, graphical work environment', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'WinTeX XP' => [ + 'editing, graphical work environment' + ], + 'physymb' => [ + 'Physics, Chemistry, Biology' + ], + 'FiXme' => [ + 'editing, graphical work environment', + 'marginal material' + ], + 'thumbpdf' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'uaclasses' => [ + 'thesis style' + ], + 'texlogos' => [ + 'symbols, text' + ], + 'mpman-ru' => [ + 'help, documentation, FAQ', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'permute' => [ + 'Mathematics (the subject)' + ], + 'memo2' => [ + 'document style' + ], + 'chapterfolder' => [ + 'chapters, sectioning', + 'include file', + 'make, compilation systems' + ], + 'authblk' => [ + 'author' + ], + 'encguide' => [ + 'help, documentation, FAQ' + ], + 'bidstobibtex' => [ + 'bibliography, management', + 'external programs, interfacing' + ], + 'bytefield' => [ + 'Computer Science' + ], + 'lm' => [ + 'fonts, mathematics', + 'fonts, text' + ], + 'epsfig' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'everyhook' => [ + 'macro programming' + ], + 'hoffset-voffset' => [ + 'page geometry (margins, etc.)' + ], + 'oldprsn' => [ + 'fonts, text', + 'languages other than English' + ], + 'context-notes-zh-cn' => [ + 'help, documentation, FAQ' + ], + 'soyombo' => [ + 'fonts, text', + 'languages other than English' + ], + 'centernot' => [ + 'symbols, mathematical' + ], + 'caesarcm' => [ + 'hyphenation', + 'languages other than English' + ], + 'wnri-latex' => [ + 'font selection' + ], + 'philokalia' => [ + 'font selection' + ], + 'pagesel' => [ + 'page numbering' + ], + 'miktex-portable' => [ + 'distributions, whole systems' + ], + 'chemarr' => [ + 'Physics, Chemistry, Biology', + 'symbols, mathematical' + ], + 'turkish' => [ + 'languages other than English' + ], + 'fnpos' => [ + 'footnotes, end notes' + ], + 'latex-notes-zh-cn' => [ + 'help, documentation, FAQ' + ], + 'lineno' => [ + 'cross references' + ], + 'clsguide' => [ + 'help, documentation, FAQ', + 'macro programming' + ], + 'fitr' => [ + 'output format PDF, PostScript' + ], + 'base' => [ + 'distributions, whole systems', + 'macro programming' + ], + 'pdfscreen' => [ + 'document style', + 'output format PDF, PostScript', + 'presentations (powerpoint-like, using a beamer)' + ], + 'RRGtrees' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities', + 'output format PDF, PostScript' + ], + 'cahyph' => [ + 'hyphenation', + 'languages other than English' + ], + 'around-the-bend' => [ + 'macro programming' + ], + 'u8tex' => [ + 'editing, graphical work environment', + 'encodings, Unicode' + ], + 'eqname' => [ + 'equations, subequations' + ], + 'russ' => [ + 'languages other than English' + ], + 'metafp' => [ + 'help, documentation, FAQ', + 'MetaFont, Metapost' + ], + 'tkz-berge' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'marginal' => [ + 'marginal material' + ], + 'translation-enumitem-de' => [ + 'help, documentation, FAQ' + ], + 'shortcuttool' => [ + 'editing, graphical work environment' + ], + 'endiagram' => [ + 'Physics, Chemistry, Biology' + ], + 'plasTeX' => [ + 'editing, graphical work environment', + 'output format other than PDF (HTML, etc.)' + ], + 'psgreek' => [ + 'font selection', + 'fonts, text', + 'languages other than English' + ], + 'resumemac' => [ + 'vita, CV, resume' + ], + 'psnfss' => [ + 'fonts, text', + 'output format PDF, PostScript' + ], + 'thesis-titlepage-fhac' => [ + 'page styles', + 'thesis style' + ], + 'eukleides' => [ + 'editing, graphical work environment', + 'graphics from outside TeX' + ], + 'auto1' => [ + 'fonts, text' + ], + 'eppstein-trees' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'textoolspro' => [ + 'help, documentation, FAQ', + 'literate programming' + ], + 'grfext' => [ + 'macro programming' + ], + 'ethtex' => [ + 'languages other than English' + ], + 'lshort-slovenian' => [ + 'help, documentation, FAQ' + ], + 'GFS Bodoni' => [ + 'fonts, mathematics' + ], + 'mxedruli' => [ + 'fonts, text', + 'languages other than English' + ], + 'tmmath' => [ + 'font selection' + ], + 'fragments' => [ + 'macro programming' + ], + 'lcd' => [ + 'symbols, text' + ], + 'arsclassica' => [ + 'document style', + 'thesis style' + ], + 'degrade' => [ + 'graphics from outside TeX' + ], + 'weekday' => [ + 'macro programming' + ], + 'python' => [ + 'external programs, interfacing', + 'macro programming' + ], + 'easyvector' => [ + 'arrays, matrices' + ], + 'hobby' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'poltawski' => [ + 'fonts, text' + ], + 'parnotes' => [ + 'footnotes, end notes' + ], + 'transfig' => [ + 'graphics from outside TeX' + ], + 'alterqcm' => [ + 'exams, exercises, answers' + ], + 'tex-ps' => [ + 'output format PDF, PostScript' + ], + 'protext' => [ + 'distributions, whole systems', + 'help, documentation, FAQ' + ], + 'macqassign' => [ + 'exams, exercises, answers' + ], + 'mflogo' => [ + 'macro programming', + 'MetaFont, Metapost' + ], + 'ean13isbn' => [ + 'symbols, mathematical' + ], + 'vrsion' => [ + 'DVI file manipulation' + ], + 'ltoh' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'wallpaper' => [ + 'page styles', + 'watermark, draftmark' + ], + 'venturisADF' => [ + 'fonts, text' + ], + 'mleftright' => [ + 'symbols, mathematical' + ], + 'script-font' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'PBMtoPK' => [ + 'graphics from outside TeX' + ], + 'fundus-calligra' => [ + 'font selection', + 'fonts, text' + ], + 'readprov' => [ + 'include file' + ], + 'titles' => [ + 'bibliography, formatting', + 'front matter, end matter' + ], + 'escapeTeXt' => [ + 'macro programming' + ], + 'jkthesis' => [ + 'thesis style' + ], + 'automatica' => [ + 'bibliography, management' + ], + 'fnbreak' => [ + 'footnotes, end notes' + ], + 'lexikon' => [ + 'glossary, dictionary' + ], + 'lecturer' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'picmac' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'morse' => [ + 'MetaFont, Metapost' + ], + 'fntguide' => [ + 'help, documentation, FAQ' + ], + 'ifmslide' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'libertine-type1' => [ + 'font selection' + ], + 'pst-diffraction' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'capt-of' => [ + 'caption' + ], + 'pagefoots' => [ + 'footnotes, end notes' + ], + 'sobolev' => [ + 'Mathematics (the subject)' + ], + 'ivd2dvi' => [ + 'DVI file manipulation' + ], + 'splines' => [ + 'MetaFont, Metapost' + ], + 'SouthArabian' => [ + 'fonts, text' + ], + 'scale' => [ + 'paper size, orientation' + ], + 'mem' => [ + 'languages other than English' + ], + 'edfnotes' => [ + 'cross references', + 'footnotes, end notes', + 'Humanities' + ], + 'concprog' => [ + 'document style' + ], + 'chbibref' => [ + 'bibliography, management' + ], + 'nccsect' => [ + 'chapters, sectioning', + 'table of contents' + ], + 'visualtex' => [ + 'editing, graphical work environment' + ], + 'pst-ob3d' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'check-parens' => [ + 'editing, graphical work environment' + ], + 'resphilosophica' => [ + 'article style', + 'publisher\'s style' + ], + 'cm-super' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'arXivBib' => [ + 'bibliography, management', + 'external programs, interfacing' + ], + 'tex-implementors' => [ + 'help, documentation, FAQ' + ], + 'opensans' => [ + 'font selection', + 'fonts, text' + ], + 'lualatex-math' => [ + 'Mathematics (the subject)' + ], + 'lithuanian' => [ + 'hyphenation', + 'languages other than English' + ], + 'defstring' => [ + 'macro programming' + ], + 'onlyamsmath' => [ + 'macro programming' + ], + 'frenchponct' => [ + 'punctuation' + ], + 'arosgn' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'yinit' => [ + 'dropped letter, often initial letter', + 'font selection', + 'MetaFont, Metapost', + 'symbols, text' + ], + 'leaflet' => [ + 'document style' + ], + 'a4' => [ + 'page geometry (margins, etc.)' + ], + 'cooltooltips' => [ + 'URLs, hyperlinks' + ], + 'translation-pst-jtree-de' => [ + 'help, documentation, FAQ' + ], + 'cmarrows' => [ + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'savefnmark' => [ + 'footnotes, end notes', + 'tables' + ], + 'jadetex' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'sdrt' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'labtex' => [ + 'MetaFont, Metapost' + ], + 'courier scaled' => [ + 'fonts, mathematics' + ], + 'libertineotf' => [ + 'font selection' + ], + 'cwebbin' => [ + 'literate programming' + ], + 'he-le-na' => [ + 'languages other than English' + ], + 'sauter' => [ + 'font selection', + 'fonts, mathematics', + 'fonts, text' + ], + 'gost' => [ + 'bibliography, management' + ], + 'tablists' => [ + 'lists, bullets' + ], + 'williams' => [ + 'macro programming' + ], + 'suffix' => [ + 'macro programming' + ], + 'flow' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'mathabx' => [ + 'font selection', + 'fonts, mathematics' + ], + 'lua-check-hyphen' => [ + 'hyphenation' + ], + 'cjkpunct' => [ + 'languages other than English' + ], + 'tcolorbox' => [ + 'boxed text, frames' + ], + 'cypriote' => [ + 'fonts, mathematics' + ], + 'tdclock' => [ + 'output format PDF, PostScript', + 'presentations (powerpoint-like, using a beamer)' + ], + 'IEEEannot' => [ + 'bibliography, management' + ], + 'progkeys' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'maple' => [ + 'document style' + ], + 'achemso' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'context-chromato' => [ + 'Physics, Chemistry, Biology' + ], + 'electrumadf' => [ + 'fonts, text' + ], + 'mctex' => [ + 'external programs, interfacing' + ], + 'urlbst' => [ + 'bibliography, formatting' + ], + 'titlepages' => [ + 'front matter, end matter', + 'help, documentation, FAQ', + 'page styles', + 'title, maketitle' + ], + 'pos-at' => [ + 'page geometry (margins, etc.)' + ], + 'pdfx' => [ + 'output format PDF, PostScript' + ], + 'mandel' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'sqrcaps' => [ + 'fonts, text' + ], + 'ltxtools' => [ + 'macro programming' + ], + 'tensor' => [ + 'Mathematics (the subject)', + 'symbols, mathematical' + ], + 'lualatex-doc' => [ + 'help, documentation, FAQ' + ], + 'toolbox' => [ + 'front matter, end matter', + 'index, indexing' + ], + 'TameTheBeast' => [ + 'bibliography, formatting', + 'help, documentation, FAQ' + ], + 'literate' => [ + 'literate programming' + ], + 'color' => [ + 'color' + ], + 'desclist' => [ + 'lists, bullets' + ], + 'cmtiup' => [ + 'font selection', + 'fonts, mathematics' + ], + 'LatexPaper' => [ + 'page geometry (margins, etc.)' + ], + 'shuffle' => [ + 'fonts, mathematics', + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'pacioli' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'numname' => [ + 'macro programming' + ], + 'ginpenc' => [ + 'encodings, Unicode', + 'include file', + 'languages other than English' + ], + 'kix' => [ + 'letters, envelopes, labels' + ], + 'literaturnaya' => [ + 'fonts, text' + ], + 'pst-rubans' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'gtrcrd' => [ + 'music' + ], + 'stampinclude' => [ + 'include file', + 'make, compilation systems' + ], + 'eurofont' => [ + 'macro programming', + 'symbols, mathematical' + ], + 'simplewick' => [ + 'symbols, mathematical' + ], + 'chet' => [ + 'article style' + ], + 'dvi2xx' => [ + 'output viewer' + ], + 'cm-tfm' => [ + 'fonts, mathematics' + ], + 'paratype' => [ + 'fonts, text' + ], + 'trimspaces' => [ + 'macro programming' + ], + 'pst-solides3d' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'bookmark' => [ + 'output format PDF, PostScript', + 'URLs, hyperlinks' + ], + 'techexplorer' => [ + 'external programs, interfacing' + ], + 'showkeys' => [ + 'cross references', + 'macro programming', + 'marginal material' + ], + 'tocvsec2' => [ + 'chapters, sectioning', + 'front matter, end matter' + ], + 'pdftexcmds' => [ + 'macro programming', + 'output format PDF, PostScript' + ], + 'polski' => [ + 'languages other than English' + ], + 'pdf14' => [ + 'output format PDF, PostScript' + ], + 'hershey' => [ + 'fonts, mathematics' + ], + 'abraces' => [ + 'symbols, text' + ], + 'nccfoots' => [ + 'footnotes, end notes' + ], + 'mf2pt3' => [ + 'MetaFont, Metapost', + 'output format PDF, PostScript' + ], + 'enpassant' => [ + 'font selection' + ], + 'icons' => [ + 'graphics from outside TeX' + ], + 'IEEEtran' => [ + 'article style', + 'collections, proceedings, conferences', + 'publisher\'s style' + ], + 'tabu' => [ + 'arrays, matrices', + 'tables' + ], + 'hypcap' => [ + 'caption', + 'URLs, hyperlinks' + ], + 'stellenbosch' => [ + 'thesis style' + ], + 'accents' => [ + 'fonts, mathematics', + 'Mathematics (the subject)' + ], + 'harvard' => [ + 'bibliography, management' + ], + 'collect' => [ + 'macro programming' + ], + 'logpap' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'hep-gen' => [ + 'Physics, Chemistry, Biology' + ], + 'shorttoc' => [ + 'table of contents' + ], + 'abstyles-babel' => [ + 'bibliography, management', + 'languages other than English' + ], + 'linguex' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities' + ], + 'tex-label' => [ + 'headers, footers', + 'page numbering', + 'page styles' + ], + 'exerquiz' => [ + 'exams, exercises, answers', + 'output format PDF, PostScript' + ], + 'verbatimcopy' => [ + 'include file' + ], + 'ebezier' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'bibextract' => [ + 'bibliography, management' + ], + 'SQLTeX' => [ + 'external programs, interfacing' + ], + 'designcon' => [ + 'article style', + 'publisher\'s style' + ], + 'etoolbox' => [ + 'macro programming' + ], + 'wadalab' => [ + 'fonts, text', + 'languages other than English' + ], + 'pst-support' => [ + 'editing, graphical work environment' + ], + 'bghyphen' => [ + 'hyphenation' + ], + 'i-ching' => [ + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'totpages' => [ + 'page numbering' + ], + 'cmcyralt-ltx' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'accsupp' => [ + 'output format PDF, PostScript' + ], + 'ctib4tex' => [ + 'languages other than English' + ], + 'svgcolor' => [ + 'color' + ], + 'robustindex' => [ + 'glossary, dictionary', + 'index, indexing' + ], + 'rawprint' => [ + 'languages other than English' + ], + 'musixtex-fonts' => [ + 'music' + ], + 'tkz-graph' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'noprot' => [ + 'macro programming' + ], + 'fjodor' => [ + 'page styles' + ], + 'pictexwd' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'macro programming' + ], + 'os2tex' => [ + 'distributions, whole systems' + ], + 'apl' => [ + 'Computer Science', + 'fonts, mathematics' + ], + 'lualatex-platform' => [ + 'external programs, interfacing', + 'macro programming' + ], + 'BibTeX Database Generator' => [ + 'bibliography, management', + 'external programs, interfacing' + ], + 'texindex' => [ + 'front matter, end matter', + 'index, indexing' + ], + 'Layaureo' => [ + 'page geometry (margins, etc.)', + 'page styles' + ], + 'scalebar' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'nohyph' => [ + 'hyphenation' + ], + 'indic-type1' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'flexisym' => [ + 'symbols, mathematical' + ], + 'berenisadf' => [ + 'fonts, text' + ], + 'footnote' => [ + 'footnotes, end notes' + ], + 'latexmake' => [ + 'make, compilation systems' + ], + 'atveryend' => [ + 'macro programming' + ], + 'xlatex' => [ + 'editing, graphical work environment' + ], + 'multibib' => [ + 'bibliography, formatting' + ], + 'bez123' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'IMTEKda' => [ + 'thesis style' + ], + 'rustic' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'lamemo' => [ + 'document style' + ], + 'currfile' => [ + 'include file', + 'macro programming' + ], + 'eltex' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'nkarta' => [ + 'fonts, text', + 'MetaFont, Metapost', + 'symbols, text' + ], + 'issuulinks' => [ + 'URLs, hyperlinks' + ], + 'timetable' => [ + 'tables' + ], + 'syngen' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'pagegrid' => [ + 'page geometry (margins, etc.)', + 'page styles', + 'proof sheets (typographical)' + ], + 'texpack' => [ + 'literate programming' + ], + 'dotlessi' => [ + 'symbols, mathematical' + ], + 'metalogo' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'spacing, horizontal or vertical' + ], + 'lshort-french' => [ + 'help, documentation, FAQ' + ], + 'htmlhelp' => [ + 'help, documentation, FAQ' + ], + 'mpattern' => [ + 'MetaFont, Metapost' + ], + 'consdiag' => [ + 'Computer Science' + ], + 'europs' => [ + 'font selection' + ], + 'fc-arith' => [ + 'exams, exercises, answers', + 'output format PDF, PostScript' + ], + 'util-half' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'MetaFont, Metapost', + 'symbols, text' + ], + 'newtx' => [ + 'font selection' + ], + 'mtp2lite' => [ + 'fonts, mathematics' + ], + 'koi8' => [ + 'encodings, Unicode' + ], + 'newfile' => [ + 'include file', + 'macro programming' + ], + 'luaindex' => [ + 'index, indexing' + ], + 'ijqc' => [ + 'bibliography, management' + ], + 'unouter' => [ + 'macro programming' + ], + 'media9' => [ + 'output format PDF, PostScript' + ], + 'bfsymb' => [ + 'symbols, mathematical' + ], + 'toptesi' => [ + 'thesis style' + ], + 'subfigure' => [ + 'figures, floating matter' + ], + 'mf-ps' => [ + 'MetaFont, Metapost', + 'output format PDF, PostScript' + ], + 'latexdraw' => [ + 'editing, graphical work environment', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'SmileTeX' => [ + 'editing, graphical work environment' + ], + 'unicode-math' => [ + 'encodings, Unicode', + 'Mathematics (the subject)' + ], + 'lithuanian-babel' => [ + 'languages other than English' + ], + 'context-simplefonts' => [ + 'font selection' + ], + 'b1encoding' => [ + 'encodings, Unicode', + 'fonts, mathematics' + ], + 'Swimgraf' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'equationauthor' => [ + 'editing, graphical work environment' + ], + 'gincltex' => [ + 'computer code, verbatim text', + 'graphics from outside TeX' + ], + 'romannum' => [ + 'macro programming' + ], + 'newvbtm' => [ + 'computer code, verbatim text' + ], + 'cwebx' => [ + 'literate programming' + ], + 'booklet' => [ + 'document style' + ], + 'attachfile2' => [ + 'include file', + 'output format PDF, PostScript' + ], + 'context-URWGothic' => [ + 'font selection' + ], + 'gentle' => [ + 'help, documentation, FAQ' + ], + 'pst-magneticfield' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'pst-geo' => [ + 'external programs, interfacing', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'voss-mathmode' => [ + 'help, documentation, FAQ' + ], + 'keyval2e' => [ + 'macro programming' + ], + 'dotseqn' => [ + 'equations, subequations' + ], + 'blkarray' => [ + 'arrays, matrices', + 'tables' + ], + 'hcbundle' => [ + 'document style', + 'page styles' + ], + 'ecc' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'pl' => [ + 'literate programming' + ], + 'ofs' => [ + 'font selection' + ], + 'elvish' => [ + 'symbols, text' + ], + 'jpgfdraw' => [ + 'graphics from outside TeX' + ], + 'xcomment' => [ + 'macro programming', + 'presentations (powerpoint-like, using a beamer)' + ], + 'translation-footmisc-de' => [ + 'help, documentation, FAQ' + ], + 'cm-mf' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'latex-essential' => [ + 'help, documentation, FAQ' + ], + 'catoptions' => [ + 'macro programming' + ], + 'blanks' => [ + 'help, documentation, FAQ' + ], + 'textarea' => [ + 'page geometry (margins, etc.)' + ], + 'pst-plot' => [ + 'external programs, interfacing', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'ecta' => [ + 'bibliography, management' + ], + 'hitec' => [ + 'Computer Science', + 'document style' + ], + 'titlefoot' => [ + 'footnotes, end notes', + 'front matter, end matter', + 'title, maketitle' + ], + 'tpcmfont' => [ + 'font selection' + ], + 'alleqno' => [ + 'equations, subequations' + ], + 'todonotes' => [ + 'editing, graphical work environment' + ], + 'LaTeX-Referenz' => [ + 'help, documentation, FAQ' + ], + 'scriptfonts' => [ + 'fonts, mathematics', + 'help, documentation, FAQ', + 'symbols, mathematical' + ], + 'prelim' => [ + 'watermark, draftmark' + ], + 'adobecaslon' => [ + 'font selection', + 'fonts, text' + ], + 'faq-es' => [ + 'help, documentation, FAQ' + ], + 'dviwin' => [ + 'output viewer' + ], + 'colorsep' => [ + 'color', + 'output format PDF, PostScript' + ], + 'encxvlna' => [ + 'languages other than English' + ], + 'cropmark' => [ + 'proof sheets (typographical)' + ], + 'fmp' => [ + 'MetaFont, Metapost' + ], + 'directtex' => [ + 'distributions, whole systems' + ], + 'movie15' => [ + 'output format PDF, PostScript' + ], + 'leftidx' => [ + 'symbols, mathematical' + ], + 'neuron' => [ + 'bibliography, formatting', + 'Physics, Chemistry, Biology' + ], + 'lhcyr' => [ + 'encodings, Unicode' + ], + 'musuos' => [ + 'article style' + ], + 'pcarl' => [ + 'font selection' + ], + 'lato' => [ + 'font selection', + 'fonts, text' + ], + 'dvimerge' => [ + 'DVI file manipulation' + ], + 'undolabl' => [ + 'cross references' + ], + 'ttf2mf' => [ + 'MetaFont, Metapost' + ], + 'dpfloat' => [ + 'figures, floating matter' + ], + 'ifacmtg' => [ + 'collections, proceedings, conferences' + ], + 'topsection' => [ + 'chapters, sectioning' + ], + 'dozenal' => [ + 'macro programming' + ], + 'dvii' => [ + 'DVI file manipulation' + ], + 'mwcls' => [ + 'document style' + ], + 'mil' => [ + 'help, documentation, FAQ' + ], + 'tbe' => [ + 'help, documentation, FAQ' + ], + 'tracking' => [ + 'boxed text, frames', + 'spacing, horizontal or vertical' + ], + 'fixltxhyph' => [ + 'hyphenation' + ], + 'aspectratio' => [ + 'symbols, text' + ], + 'window' => [ + 'wrap around a figure' + ], + 'featpost' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'GFS Solomos' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'modguide' => [ + 'help, documentation, FAQ' + ], + 'svninfo' => [ + 'make, compilation systems' + ], + 'klinz' => [ + 'languages other than English', + 'MetaFont, Metapost' + ], + 'setstrut' => [ + 'macro programming' + ], + 'pst-bar' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'fundus-sueterlin' => [ + 'fonts, text' + ], + 'cyrmemo' => [ + 'help, documentation, FAQ' + ], + 'tinyc2l' => [ + 'computer code, verbatim text' + ], + 'bib-fr' => [ + 'bibliography, management', + 'languages other than English' + ], + 'firefox_ctan_plugins' => [ + 'editing, graphical work environment' + ], + 'RGB' => [ + 'color' + ], + 'mewltx' => [ + 'editing, graphical work environment' + ], + 'script' => [ + 'article style', + 'book style' + ], + 'pst-cox' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'Epigrafica' => [ + 'fonts, mathematics' + ], + 'keycommand' => [ + 'macro programming' + ], + 'dviljk' => [ + 'DVI file manipulation', + 'output format other than PDF (HTML, etc.)' + ], + 'example' => [ + 'computer code, verbatim text', + 'help, documentation, FAQ' + ], + 'Metafont' => [ + 'fonts, mathematics', + 'fonts, text', + 'MetaFont, Metapost' + ], + 'bondgraph' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'endfloat' => [ + 'figures, floating matter' + ], + 'BibTeX-help' => [ + 'bibliography, management', + 'help, documentation, FAQ' + ], + 'getfiledate' => [ + 'macro programming' + ], + 'present' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'lshort-dutch' => [ + 'help, documentation, FAQ' + ], + 'vfware' => [ + 'font selection' + ], + 'fundus-cyr' => [ + 'languages other than English' + ], + 'qstest' => [ + 'make, compilation systems' + ], + 'zhnumber' => [ + 'languages other than English' + ], + 'mrcheckbib' => [ + 'bibliography, management' + ], + 'these' => [ + 'bibliography, formatting' + ], + 'steinmetz' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Mathematics (the subject)', + 'Physics, Chemistry, Biology' + ], + 'acrotex-web' => [ + 'output format PDF, PostScript', + 'page geometry (margins, etc.)' + ], + 'labbook' => [ + 'document style', + 'Physics, Chemistry, Biology' + ], + 'winshell' => [ + 'editing, graphical work environment' + ], + 'sentences' => [ + 'lists, bullets' + ], + 'scyrillic' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'tikzposter' => [ + 'document style' + ], + 'context-top-ten' => [ + 'help, documentation, FAQ' + ], + 'classico' => [ + 'fonts, mathematics' + ], + 'verdana' => [ + 'font selection', + 'fonts, text' + ], + 'cbe' => [ + 'article style', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'booktabs-fr' => [ + 'tables' + ], + 'tqft' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'Array Maker' => [ + 'arrays, matrices', + 'commutative diagrams', + 'external programs, interfacing' + ], + 'sanskrit' => [ + 'fonts, text', + 'languages other than English' + ], + 'Extensive Arrows.' => [ + 'symbols, mathematical' + ], + 'accents-cs' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'ltxcmds' => [ + 'macro programming' + ], + 'pst-poly' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'Pecha' => [ + 'document style', + 'languages other than English' + ], + 'latex-base' => [ + 'macro programming' + ], + 'rotate' => [ + 'output format PDF, PostScript' + ], + 'rmpage' => [ + 'page geometry (margins, etc.)', + 'page styles' + ], + 'greek-inputenc' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'fileinfo' => [ + 'dates and times', + 'include file', + 'macro programming' + ], + 'warpcol' => [ + 'tables' + ], + 'cantarell' => [ + 'fonts, text' + ], + 'wp-conv' => [ + 'help, documentation, FAQ', + 'word processor conversion' + ], + 'economic' => [ + 'bibliography, management' + ], + 'fifinddo' => [ + 'macro programming' + ], + 'miktex_update' => [ + 'distributions, whole systems' + ], + 'time' => [ + 'macro programming' + ], + 'frenchle' => [ + 'languages other than English' + ], + 'gurmukhi-singh' => [ + 'languages other than English' + ], + 'lazylist' => [ + 'macro programming' + ], + 'uk-tex-faq' => [ + 'help, documentation, FAQ' + ], + 'opteng' => [ + 'article style', + 'Physics, Chemistry, Biology' + ], + 'aebXMP' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'bibview' => [ + 'bibliography, management' + ], + 'fonts-sipa-arundina' => [ + 'fonts, text', + 'languages other than English' + ], + 'stringenc' => [ + 'encodings, Unicode' + ], + 'e-TeX' => [ + 'macro programming' + ], + 'isi2bib-vim' => [ + 'bibliography, management' + ], + 'TeXline' => [ + 'help, documentation, FAQ' + ], + 'varsects' => [ + 'chapters, sectioning' + ], + 'version' => [ + 'computer code, verbatim text', + 'include file', + 'make, compilation systems' + ], + 'springer' => [ + 'article style', + 'publisher\'s style' + ], + 'tabularcalc' => [ + 'Mathematics (the subject)', + 'tables' + ], + 'tucv' => [ + 'vita, CV, resume' + ], + 'fillform' => [ + 'document style' + ], + 'tabularkv' => [ + 'tables' + ], + 'tugboat' => [ + 'article style', + 'document style', + 'publisher\'s style' + ], + 'orderrefs' => [ + 'bibliography, formatting' + ], + 'yfonts-t1' => [ + 'fonts, text', + 'output format PDF, PostScript' + ], + 'pst-gr3d' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'suftesi' => [ + 'Humanities', + 'thesis style' + ], + 'fge' => [ + 'symbols, mathematical' + ], + 'etaremune' => [ + 'lists, bullets' + ], + 'varindex' => [ + 'index, indexing' + ], + 'easyfig' => [ + 'graphics from outside TeX' + ], + 'ucdavisthesis' => [ + 'thesis style' + ], + 'tex-font-errors-cheatsheet' => [ + 'help, documentation, FAQ' + ], + 'typedref' => [ + 'cross references' + ], + 'tex-references' => [ + 'help, documentation, FAQ' + ], + 'enumitem-zref' => [ + 'cross references', + 'lists, bullets' + ], + 'fig4latex' => [ + 'figures, floating matter' + ], + 'moreverb' => [ + 'computer code, verbatim text' + ], + 'geometry' => [ + 'page geometry (margins, etc.)' + ], + 'KIXfont' => [ + 'letters, envelopes, labels', + 'MetaFont, Metapost' + ], + 'russian' => [ + 'languages other than English' + ], + 'truchet' => [ + 'MetaFont, Metapost' + ], + 'faltblat' => [ + 'document style' + ], + 'nicefrac' => [ + 'Mathematics (the subject)' + ], + 'mff-util' => [ + 'fonts, mathematics', + 'fonts, text', + 'MetaFont, Metapost' + ], + 'asaetr' => [ + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'isotope' => [ + 'Physics, Chemistry, Biology' + ], + 'sehyph' => [ + 'hyphenation' + ], + 'dot2texi' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'asymptote-faq-zh-cn' => [ + 'graphics from outside TeX', + 'help, documentation, FAQ' + ], + 'typespec' => [ + 'fonts, mathematics', + 'fonts, text', + 'help, documentation, FAQ' + ], + 'progressbar' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'capbas' => [ + 'fonts, mathematics' + ], + 'substances' => [ + 'Physics, Chemistry, Biology' + ], + 'subdocs' => [ + 'make, compilation systems' + ], + 'smalltalk' => [ + 'computer code, verbatim text' + ], + 'bibplain' => [ + 'bibliography, management' + ], + 'uscthesis' => [ + 'thesis style' + ], + 'fnote' => [ + 'footnotes, end notes' + ], + 'oldstandard' => [ + 'fonts, text', + 'Humanities' + ], + 'midnight' => [ + 'macro programming' + ], + 'nth' => [ + 'macro programming' + ], + 'synctex-parser' => [ + 'editing, graphical work environment' + ], + 'ctex' => [ + 'languages other than English' + ], + 'jpsj' => [ + 'document style', + 'Physics, Chemistry, Biology' + ], + 'cprotect' => [ + 'computer code, verbatim text', + 'macro programming' + ], + 'cell' => [ + 'article style', + 'Physics, Chemistry, Biology' + ], + 'boxit' => [ + 'boxed text, frames' + ], + 'ppower4' => [ + 'presentations (powerpoint-like, using a beamer)' + ], + 'adjustbox' => [ + 'macro programming' + ], + 'rcsinfo' => [ + 'make, compilation systems' + ], + 'sugconf' => [ + 'collections, proceedings, conferences', + 'publisher\'s style' + ], + 'topfloat' => [ + 'figures, floating matter' + ], + 'Excel-to-LaTeX' => [ + 'external programs, interfacing', + 'tables' + ], + 'upgreek' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'chgbar' => [ + 'changebars' + ], + 'smallcap' => [ + 'font selection' + ], + 'pst-pad' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript', + 'Physics, Chemistry, Biology' + ], + '12many' => [ + 'macro programming', + 'Mathematics (the subject)' + ], + 'cjk-fonts' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'borceux' => [ + 'commutative diagrams' + ], + 'fonetika' => [ + 'font selection', + 'symbols, mathematical' + ], + 'ledmac' => [ + 'document style', + 'Humanities' + ], + 'randbild' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'marginal material', + 'output format PDF, PostScript' + ], + 'ctie' => [ + 'literate programming' + ], + 'clock' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'pageslts' => [ + 'macro programming', + 'page numbering' + ], + 'bibmods' => [ + 'bibliography, formatting' + ], + 'xbibfile' => [ + 'bibliography, management', + 'editing, graphical work environment' + ], + 'syntonly' => [ + 'make, compilation systems' + ], + 'dehyph-exptl' => [ + 'hyphenation' + ], + 'HLaTeX fonts' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'beginlatex' => [ + 'help, documentation, FAQ' + ], + 'esk' => [ + 'graphics from outside TeX', + 'include file' + ], + 'lookbibtex' => [ + 'bibliography, management' + ], + 'lipsum' => [ + 'macro programming' + ], + 'natbib' => [ + 'bibliography, formatting', + 'Physics, Chemistry, Biology' + ], + 'chemscheme' => [ + 'Physics, Chemistry, Biology' + ], + 'bullcntr' => [ + 'lists, bullets' + ], + 'xfrac' => [ + 'Mathematics (the subject)' + ], + 'texi2html' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'nccfloats' => [ + 'figures, floating matter' + ], + 'multicolpar' => [ + 'columns, multiple columns', + 'Humanities' + ], + 'engtlc' => [ + 'Physics, Chemistry, Biology' + ], + 'gnuplot' => [ + 'graphics from outside TeX' + ], + 'pst-slpe' => [ + 'color', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'mnhyphn' => [ + 'hyphenation' + ], + 'mff' => [ + 'fonts, mathematics', + 'fonts, text', + 'MetaFont, Metapost' + ], + 'list' => [ + 'computer code, verbatim text' + ], + 'articleingud' => [ + 'article style' + ], + 'ps4mf' => [ + 'MetaFont, Metapost' + ], + 'xetex-itrans' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'rvwrite' => [ + 'macro programming' + ], + 'extsizes' => [ + 'document style', + 'font selection' + ], + 'prodint' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'pgf-umlsd' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'gauss' => [ + 'equations, subequations', + 'Mathematics (the subject)' + ], + 'tamefloats' => [ + 'figures, floating matter', + 'macro programming' + ], + 'hypernat' => [ + 'bibliography, management', + 'URLs, hyperlinks' + ], + 'tpic2pdftex' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'functan' => [ + 'Mathematics (the subject)' + ], + 'rawfonts' => [ + 'font selection' + ], + 'ordinalpt' => [ + 'languages other than English', + 'macro programming' + ], + 'ltx3pub' => [ + 'help, documentation, FAQ' + ], + 'fancypar' => [ + 'paragraph' + ], + 'fundus-outline' => [ + 'font selection' + ], + 'tikz-inet' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'esperant' => [ + 'languages other than English' + ], + 'Vancouver' => [ + 'bibliography, formatting', + 'Physics, Chemistry, Biology', + 'publisher\'s style' + ], + 'section' => [ + 'chapters, sectioning' + ], + 'cmcyr-patch' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'tabto for LaTeX.' => [ + 'paragraph', + 'spacing, horizontal or vertical' + ], + 'perpage' => [ + 'macro programming' + ], + 'ethiop' => [ + 'fonts, mathematics', + 'languages other than English', + 'MetaFont, Metapost' + ], + 'chessfss' => [ + 'font selection' + ], + 'swiftex' => [ + 'editing, graphical work environment' + ], + 'isomath' => [ + 'Mathematics (the subject)', + 'Physics, Chemistry, Biology', + 'symbols, mathematical' + ], + 'concmath-fonts' => [ + 'fonts, mathematics' + ], + 'revnum' => [ + 'lists, bullets' + ], + 'settosize' => [ + 'macro programming' + ], + 'Petri-nets' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'verbatim-tub' => [ + 'computer code, verbatim text' + ], + 'boisik' => [ + 'fonts, mathematics' + ], + 'grkfinst' => [ + 'fonts, mathematics' + ], + 'hep' => [ + 'Physics, Chemistry, Biology' + ], + 'musixtex' => [ + 'music' + ], + 'milstd' => [ + 'document style' + ], + 'business-research' => [ + 'article style', + 'Humanities', + 'publisher\'s style' + ], + 'texlipse' => [ + 'editing, graphical work environment' + ], + 'indentfirst' => [ + 'chapters, sectioning', + 'paragraph' + ], + 'KTeXShell' => [ + 'editing, graphical work environment' + ], + 'MetaPost examples' => [ + 'help, documentation, FAQ', + 'MetaFont, Metapost' + ], + 'psnfssx-luc' => [ + 'font selection' + ], + 'cprog' => [ + 'computer code, verbatim text' + ], + 'roundbox' => [ + 'boxed text, frames' + ], + 'tabularew' => [ + 'tables' + ], + 'memoir' => [ + 'document style' + ], + 'side' => [ + 'figures, floating matter', + 'paper size, orientation' + ], + 'facture' => [ + 'document style' + ], + 'varsfromjobname' => [ + 'macro programming' + ], + 'latex-pro-pragmatiky' => [ + 'help, documentation, FAQ' + ], + 'iching' => [ + 'macro programming', + 'MetaFont, Metapost' + ], + 'ucthesis' => [ + 'thesis style' + ], + 'ean' => [ + 'font selection' + ], + 'fenixpar' => [ + 'macro programming' + ], + 'fileerr' => [ + 'macro programming' + ], + 'javaDVI' => [ + 'output viewer' + ], + 'widetable' => [ + 'tables' + ], + 'lshort-thai' => [ + 'help, documentation, FAQ' + ], + 'catalan' => [ + 'hyphenation' + ], + 'greektex' => [ + 'fonts, mathematics', + 'hyphenation' + ], + 'isodate' => [ + 'dates and times' + ], + 'CSTeX' => [ + 'languages other than English' + ], + 'bgteubner' => [ + 'publisher\'s style' + ], + 'esstix' => [ + 'fonts, mathematics' + ], + 'logbox' => [ + 'macro programming' + ], + 'changelayout' => [ + 'page geometry (margins, etc.)', + 'page styles' + ], + 'jablantile' => [ + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'serbian-lig' => [ + 'languages other than English' + ], + 'eolgrab' => [ + 'macro programming' + ], + 'rtsched' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Humanities' + ], + 'euroitc' => [ + 'font selection', + 'symbols, mathematical' + ], + 'GFS Didot' => [ + 'fonts, mathematics' + ], + 'doublestroke' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'tmview' => [ + 'output viewer' + ], + 'mhchem' => [ + 'Physics, Chemistry, Biology' + ], + 'he-she' => [ + 'macro programming' + ], + 'tktexcad' => [ + 'editing, graphical work environment', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'graphics' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'balance' => [ + 'columns, multiple columns' + ], + 'viiptart' => [ + 'article style' + ], + 'cweb' => [ + 'literate programming' + ], + 'faktor' => [ + 'symbols, mathematical' + ], + 'disser' => [ + 'languages other than English', + 'thesis style' + ], + 'euxunicode' => [ + 'encodings, Unicode' + ], + 'alg' => [ + 'computer code, verbatim text', + 'Computer Science' + ], + 'gchords' => [ + 'music' + ], + 'plainmisc' => [ + 'macro programming' + ], + 'ednotes' => [ + 'footnotes, end notes', + 'Humanities' + ], + 'czhyph2e' => [ + 'hyphenation' + ], + 'colortex' => [ + 'color' + ], + 'deleq' => [ + 'equations, subequations' + ], + 'bardiag' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'stubs' => [ + 'page styles' + ], + 'mfware' => [ + 'MetaFont, Metapost' + ], + 'elteikthesis' => [ + 'thesis style' + ], + 'labels' => [ + 'letters, envelopes, labels' + ], + 'xcmr' => [ + 'fonts, text', + 'symbols, text', + 'text decoration (underline, etc.)' + ], + 'poster' => [ + 'graphics from outside TeX' + ], + 'webmacss' => [ + 'literate programming' + ], + 'jtbnew' => [ + 'bibliography, management', + 'Physics, Chemistry, Biology' + ], + 'flashcards' => [ + 'exams, exercises, answers' + ], + 'letterspacing' => [ + 'output format PDF, PostScript', + 'spacing, horizontal or vertical' + ], + 'pdftricks' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'gillcm' => [ + 'fonts, text' + ], + 'fmtcount' => [ + 'macro programming' + ], + 'cbcoptic' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'fchart' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'cyrguide' => [ + 'help, documentation, FAQ' + ], + 'tds' => [ + 'help, documentation, FAQ' + ], + 'computational-complexity' => [ + 'article style', + 'Computer Science', + 'publisher\'s style' + ], + 'grfpaste' => [ + 'DVI file manipulation', + 'graphics from outside TeX' + ], + 'free-math-font-survey-vn' => [ + 'help, documentation, FAQ' + ], + 'l2tabu-italian' => [ + 'help, documentation, FAQ' + ], + 'xstring' => [ + 'macro programming' + ], + 'metatype1' => [ + 'fonts, mathematics', + 'fonts, text', + 'MetaFont, Metapost' + ], + 'mathscinet' => [ + 'bibliography, management' + ], + 'delig' => [ + 'languages other than English' + ], + 'arbeit' => [ + 'exams, exercises, answers' + ], + 'everysel' => [ + 'font selection' + ], + 'dmhgener' => [ + 'cross references', + 'equations, subequations', + 'figures, floating matter' + ], + 'greenpoint' => [ + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'invertedparagraphs' => [ + 'paragraph' + ], + 'wsuipa' => [ + 'fonts, text', + 'symbols, text' + ], + 'picinpar' => [ + 'wrap around a figure' + ], + 'ans' => [ + 'exams, exercises, answers' + ], + 'achicago-bst' => [ + 'bibliography, management', + 'Humanities' + ], + 'petiteannonce' => [ + 'document style' + ], + 'ISO-TeX' => [ + 'editing, graphical work environment', + 'encodings, Unicode', + 'languages other than English' + ], + 'linearb' => [ + 'fonts, text' + ], + 'fourier' => [ + 'fonts, mathematics' + ], + 'URW-base35' => [ + 'fonts, mathematics', + 'fonts, text' + ], + 'ibmres-tex' => [ + 'vita, CV, resume' + ], + 'pst-uml' => [ + 'Computer Science', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'kdgdocs' => [ + 'publisher\'s style', + 'thesis style' + ], + 'csfonts-t1' => [ + 'fonts, mathematics', + 'languages other than English', + 'symbols, mathematical' + ], + 'minutes' => [ + 'document style' + ], + 'phaistos' => [ + 'fonts, text', + 'languages other than English', + 'symbols, text' + ], + 'sepfootnotes' => [ + 'footnotes, end notes' + ], + 'somedefs' => [ + 'macro programming' + ], + 'malayalam-omega' => [ + 'languages other than English' + ], + 'LuxiMono' => [ + 'fonts, text' + ], + 'engord' => [ + 'macro programming', + 'page numbering' + ], + 'semantic' => [ + 'Computer Science' + ], + 'mhequ' => [ + 'equations, subequations' + ], + 'artex' => [ + 'make, compilation systems' + ], + 'yagusylo' => [ + 'symbols, mathematical', + 'symbols, text' + ], + 'ulsy' => [ + 'fonts, mathematics', + 'MetaFont, Metapost' + ], + 'nddiss' => [ + 'thesis style' + ], + 'copyrightbox' => [ + 'caption', + 'figures, floating matter' + ], + 'context-typescripts' => [ + 'font selection' + ], + 'translation-chemsym-de' => [ + 'help, documentation, FAQ' + ], + 'zefonts' => [ + 'fonts, text' + ], + 'gmverb' => [ + 'computer code, verbatim text' + ], + 'GraphTeX' => [ + 'graphics from outside TeX' + ], + 'makeglossariesgui' => [ + 'editing, graphical work environment', + 'glossary, dictionary' + ], + 'truncate' => [ + 'boxed text, frames', + 'spacing, horizontal or vertical' + ], + 'moonphase' => [ + 'MetaFont, Metapost', + 'Physics, Chemistry, Biology', + 'symbols, text' + ], + 'LaTeX-tds' => [ + 'macro programming' + ], + 'metapost-matlab' => [ + 'MetaFont, Metapost' + ], + 'regexpatch' => [ + 'macro programming' + ], + 'isonums' => [ + 'symbols, mathematical' + ], + 'onepagem' => [ + 'page numbering' + ], + 'latex-info' => [ + 'help, documentation, FAQ' + ], + 'espo' => [ + 'languages other than English' + ], + 'l2tabu-spanish' => [ + 'help, documentation, FAQ' + ], + 'ellipsis' => [ + 'spacing, horizontal or vertical', + 'symbols, mathematical' + ], + 'VTeX/Free' => [ + 'distributions, whole systems', + 'output format PDF, PostScript' + ], + 'protocol' => [ + 'document style' + ], + 'fastpictex' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'limap' => [ + 'graphics from outside TeX' + ], + 'zahl2string' => [ + 'macro programming' + ], + 'w32tex' => [ + 'distributions, whole systems', + 'languages other than English' + ], + 'multirow' => [ + 'arrays, matrices', + 'tables' + ], + 'underlin-generic' => [ + 'text decoration (underline, etc.)' + ], + 'finstrut' => [ + 'footnotes, end notes' + ], + 'w-a-schmidt' => [ + 'font selection' + ], + 'psizzl' => [ + 'Physics, Chemistry, Biology' + ], + 'gpdata' => [ + 'MetaFont, Metapost' + ], + 'streetex' => [ + 'Physics, Chemistry, Biology' + ], + 'LEd' => [ + 'editing, graphical work environment' + ], + 'fullwidth' => [ + 'page geometry (margins, etc.)' + ], + 'ncccomma' => [ + 'symbols, mathematical' + ], + 'translation-arsclassica-de' => [ + 'help, documentation, FAQ' + ], + 'compsci' => [ + 'macro programming' + ], + 'cyrillic' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'xindy-persian' => [ + 'index, indexing' + ], + 'abc' => [ + 'music' + ], + 'ANUfinalexam' => [ + 'exams, exercises, answers' + ], + 'fontsampler' => [ + 'help, documentation, FAQ' + ], + 'coollist' => [ + 'macro programming' + ], + 'amiri' => [ + 'fonts, text', + 'languages other than English' + ], + 'emerald' => [ + 'font selection' + ], + 'ssqquote' => [ + 'font selection', + 'quotation, poetry' + ], + 'csvsimple' => [ + 'include file' + ], + 'fancyvrb' => [ + 'computer code, verbatim text' + ], + 'sc21-wg1' => [ + 'document style' + ], + 'volumes' => [ + 'make, compilation systems' + ], + 'starfont' => [ + 'symbols, text' + ], + 'SkakNew' => [ + 'output format PDF, PostScript', + 'symbols, text' + ], + 'huncial' => [ + 'fonts, mathematics' + ], + 'quotes' => [ + 'symbols, text' + ], + 'supertabular' => [ + 'tables' + ], + 'blockdraw_mp' => [ + 'graphics from outside TeX' + ], + 'oca' => [ + 'fonts, text', + 'symbols, text' + ], + 'ionumbers' => [ + 'symbols, mathematical' + ], + 'foilhtml' => [ + 'chapters, sectioning', + 'foils, overhead slides' + ], + 'sines' => [ + 'macro programming' + ], + 'acmproc' => [ + 'collections, proceedings, conferences', + 'Computer Science' + ], + 'Thai LaTeX' => [ + 'languages other than English' + ], + 'btOOL' => [ + 'bibliography, management' + ], + 'hopatch' => [ + 'macro programming' + ], + 'purifyeps' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'dropcaps' => [ + 'dropped letter, often initial letter' + ], + 'viking' => [ + 'symbols, text' + ], + 'tolkienfonts' => [ + 'fonts, text' + ], + 'txfonts' => [ + 'font selection', + 'fonts, mathematics' + ], + 'go-make' => [ + 'make, compilation systems' + ], + 'ifoddpage' => [ + 'macro programming', + 'page numbering' + ], + 'miktex' => [ + 'distributions, whole systems' + ], + 'url' => [ + 'computer code, verbatim text', + 'URLs, hyperlinks' + ], + 'bakoma' => [ + 'distributions, whole systems' + ], + 'ruled-tables' => [ + 'tables' + ], + 'sshdbk10' => [ + 'chapters, sectioning' + ], + 'dPS' => [ + 'macro programming' + ], + 'magic' => [ + 'MetaFont, Metapost', + 'symbols, text' + ], + 'umich-thesis' => [ + 'thesis style' + ], + 'microtype-de' => [ + 'help, documentation, FAQ' + ], + 'glonti' => [ + 'font selection' + ], + 'pst-light3d' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'output format PDF, PostScript' + ], + 'poetrytex' => [ + 'quotation, poetry' + ], + 'ncccropmark' => [ + 'page styles', + 'proof sheets (typographical)' + ], + 'cmll' => [ + 'MetaFont, Metapost', + 'symbols, mathematical' + ], + 'statex2' => [ + 'Mathematics (the subject)' + ], + 'rail' => [ + 'Computer Science' + ], + 'collectbox' => [ + 'macro programming' + ], + 'pseudocode' => [ + 'computer code, verbatim text' + ], + 'boxhandler' => [ + 'caption', + 'figures, floating matter', + 'tables' + ], + 'threed' => [ + 'graphics from outside TeX', + 'MetaFont, Metapost' + ], + 'biblook' => [ + 'bibliography, management' + ], + 'settosize-ltx' => [ + 'macro programming' + ], + 'estcpmm' => [ + 'publisher\'s style', + 'report style' + ], + 'fcltxdoc' => [ + 'help, documentation, FAQ' + ], + 'lfb' => [ + 'fonts, text', + 'MetaFont, Metapost' + ], + 'xesearch' => [ + 'macro programming' + ], + 'hieroglyph' => [ + 'fonts, mathematics', + 'languages other than English' + ], + 'latexMP' => [ + 'MetaFont, Metapost' + ], + 'lettermac' => [ + 'letters, envelopes, labels' + ], + 'sgame' => [ + 'tables' + ], + 'tth' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'izhitsa' => [ + 'font selection', + 'MetaFont, Metapost' + ], + 'tex-gyre-bonum' => [ + 'fonts, text' + ], + 'xr-hyper' => [ + 'cross references', + 'URLs, hyperlinks' + ], + 'rmthm' => [ + 'Mathematics (the subject)' + ], + 'fpTeX' => [ + 'distributions, whole systems' + ], + 'aebenvelope' => [ + 'output format PDF, PostScript' + ], + 'mailmerge' => [ + 'letters, envelopes, labels' + ], + 'poemscol' => [ + 'document style', + 'Humanities', + 'quotation, poetry' + ], + 'soulutf8' => [ + 'encodings, Unicode', + 'hyphenation', + 'text decoration (underline, etc.)' + ], + 'bookhands' => [ + 'symbols, mathematical' + ], + 'histogr' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'LatexRender' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'othello' => [ + 'MetaFont, Metapost' + ], + 'decimal' => [ + 'Mathematics (the subject)', + 'symbols, mathematical' + ], + 'codedoc' => [ + 'computer code, verbatim text', + 'help, documentation, FAQ' + ], + 'slantsc' => [ + 'font selection' + ], + 'piano' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' + ], + 'xnewcommand' => [ + 'macro programming' + ], + 'amslatexdoc-vietnamese' => [ + 'help, documentation, FAQ' + ], + 'varioref' => [ + 'cross references' + ], + 'papertex' => [ + 'document style' + ], + 'textpos' => [ + 'boxed text, frames', + 'page styles' + ], + 'soul' => [ + 'hyphenation', + 'text decoration (underline, etc.)' + ], + 'afthesis' => [ + 'thesis style' + ], + 'g-brief' => [ + 'letters, envelopes, labels' + ], + 'diagbox' => [ + 'tables' + ], + 'eco' => [ + 'symbols, mathematical' + ], + 'dashundergaps' => [ + 'exams, exercises, answers' + ], + 'GFS NeoHellenic' => [ + 'fonts, mathematics' + ], + 'fancychapters' => [ + 'chapters, sectioning', + 'quotation, poetry' + ], + 'keystroke' => [ + 'graphics from outside TeX', + 'symbols, mathematical' + ], + 'circuitikz' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'Physics, Chemistry, Biology' + ], + 'encTeX' => [ + 'encodings, Unicode' + ], + 'marnote' => [ + 'marginal material', + 'output format PDF, PostScript', + 'watermark, draftmark' + ], + 'csquotes-de' => [ + 'help, documentation, FAQ', + 'quotation, poetry' + ], + 'inputenx' => [ + 'encodings, Unicode' + ], + 'answers' => [ + 'exams, exercises, answers' + ], + 'forloop' => [ + 'macro programming' + ], + 'expdlist' => [ + 'lists, bullets' + ], + 'dvitype' => [ + 'DVI file manipulation', + 'help, documentation, FAQ' + ], + 'latexcount' => [ + 'editing, graphical work environment' + ], + 'mathgifg' => [ + 'font selection' + ], + 'backref' => [ + 'bibliography, management', + 'cross references' + ], + 'tableaux' => [ + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'tables' + ], + 'hepthesis' => [ + 'Physics, Chemistry, Biology', + 'thesis style' + ], + 'showlabels' => [ + 'cross references', + 'marginal material' + ], + 'abstract' => [ + 'abstract' + ], + 'pzccal' => [ + 'fonts, mathematics', + 'symbols, mathematical' + ], + 'chscite' => [ + 'bibliography, formatting' + ], + 'xetex-def' => [ + 'color', + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)', + 'graphics from outside TeX' + ], + 'makecell' => [ + 'tables' + ], + 'titleps' => [ + 'page styles' + ], + 'shalom' => [ + 'languages other than English' + ], + 'osmanian' => [ + 'fonts, text', + 'languages other than English' + ], + 'csvtolatex' => [ + 'external programs, interfacing' + ], + 'keyval' => [ + 'macro programming' + ], + 'texshop' => [ + 'editing, graphical work environment', + 'output viewer' + ], + 'amscls' => [ + 'article style', + 'book style', + 'collections, proceedings, conferences', + 'Mathematics (the subject)', + 'publisher\'s style' + ], + 'xetex-devanagari' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'cjk' => [ + 'languages other than English' + ], + 'unitsdef' => [ + 'scientific units' + ], + 'fancytabs' => [ + 'chapters, sectioning', + 'marginal material', + 'page styles' + ], + 'sort-by-letters' => [ + 'bibliography, formatting' + ], + 'firstline' => [ + 'paragraph' + ], + 'ocgx' => [ + 'output format PDF, PostScript' + ], + 'merge' => [ + 'letters, envelopes, labels' + ], + 'unicode' => [ + 'editing, graphical work environment', + 'encodings, Unicode' + ], + 'cep' => [ + 'graphics from outside TeX', + 'output format PDF, PostScript' + ], + 'ftn' => [ + 'footnotes, end notes' + ], + 'tabulary' => [ + 'tables' + ], + 'WordML2LaTeX' => [ + 'editing, graphical work environment', + 'word processor conversion' + ], + 'crudetype' => [ + 'output format other than PDF (HTML, etc.)' + ], + 'picture' => [ + 'macro programming' + ], + 'vwcol' => [ + 'columns, multiple columns' + ], + 'lgrx' => [ + 'encodings, Unicode', + 'languages other than English' + ], + 'calorie' => [ + 'macro programming' + ], + 'scientificpaper' => [ + 'article style', + 'Physics, Chemistry, Biology' + ], + 'mathsci2bibtex' => [ + 'bibliography, management' + ], + 'accfonts' => [ + 'fonts, mathematics' + ], + 'play' => [ + 'document style' + ], + 'biblatex-nejm' => [ + 'bibliography, formatting', + 'publisher\'s style' + ], + 'tabbingbox' => [ + 'boxed text, frames' + ], + 'enumitem' => [ + 'lists, bullets' + ], + 'booktabs-de' => [ + 'tables' + ], + 'sty2dtx' => [ + 'literate programming', + 'macro programming' + ], + 'texlist' => [ + 'computer code, verbatim text' + ], + 'loval' => [ + 'boxed text, frames' + ] + }, + 'functionality' => {}, + 'secondary' => { + 'xytree' => ' + Uncharacterized', + 'eqell' => ' + Uncharacterized', + 'tipa-de' => ' + Uncharacterized', + 'biblatex-juradiss' => 'Subject-specific typesetting + > Other', + 'ytex' => ' + Uncharacterized', + 'dviconcat' => ' + Uncharacterized', + 'tccompat' => ' + Uncharacterized', + 'ltnews' => ' + Uncharacterized', + 'trans' => ' + Uncharacterized', + 'ifxetex' => ' + Uncharacterized', + 'techreport' => ' + Uncharacterized', + 'softmaker-iceberg' => ' + Uncharacterized', + 'twoside' => ' + Uncharacterized', + 'epslatex' => ' + Uncharacterized', + 'ushort' => ' + Uncharacterized', + 'scalefnt' => ' + Uncharacterized', + 'ntg' => ' + Uncharacterized', + 'dante-book-reviews' => ' + Uncharacterized', + 'biblos' => ' + Uncharacterized', + 'alatex' => ' + Uncharacterized', + 'listings-ext' => ' + Uncharacterized', + 'tkz-euclide' => ' + Uncharacterized', + 'latex-make' => ' + Uncharacterized', + 'txgreeks' => ' + Uncharacterized', + 'rmannot' => ' + Uncharacterized', + 'titletoc' => ' + Uncharacterized', + 'obsolete' => ' + Uncharacterized', + 'mtbe' => ' + Uncharacterized', + 'marginfix' => ' + Uncharacterized', + 'aiaa' => ' + Uncharacterized', + 'bbm' => ' + Uncharacterized', + 'lucold' => ' + Uncharacterized', + 'guitar' => ' + Uncharacterized', + 'gray' => ' + Uncharacterized', + 'endnote' => ' + Uncharacterized', + 'softmaker-broadway' => ' + Uncharacterized', + 'ot2cyr' => ' + Uncharacterized', + 'active-conf' => ' + Uncharacterized', + 'sarabian' => ' + Uncharacterized', + 'hpgl2ps' => ' + Uncharacterized', + 'chktex' => ' + Uncharacterized', + 'pst-spectra' => ' + Uncharacterized', + 'mdwlist' => ' + Uncharacterized', + 'toc-zar' => ' + Uncharacterized', + 'greek4cbc' => ' + Uncharacterized', + 'xtrcode' => ' + Uncharacterized', + 'mfpic' => ' + Uncharacterized', + 'tablor' => ' + Uncharacterized', + 'sc21' => ' + Uncharacterized', + 'verbatimbox' => ' + Uncharacterized', + 'tabverb' => ' + Uncharacterized', + 'sciposter' => ' + Uncharacterized', + 'coverpage' => ' + Uncharacterized', + 'msg' => ' + Uncharacterized', + 'hvmath' => ' + Uncharacterized', + 'optparams' => ' + Uncharacterized', + 'ppchtex' => ' + Uncharacterized', + 'qms' => ' + Uncharacterized', + 'pgf-soroban' => ' + Uncharacterized', + 'pauldoc' => ' + Uncharacterized', + 'IEEEconf' => ' + Uncharacterized', + 'exercise' => ' + Uncharacterized', + 'logical-markup-utils' => ' + Uncharacterized', + 'dashrule' => ' + Uncharacterized', + 'curves' => ' + Uncharacterized', + 'extdash' => ' + Uncharacterized', + 'xecjk' => 'Fonts > + Other', + 'universa' => ' + Uncharacterized', + 'midfloat' => ' + Uncharacterized', + 'dates' => ' + Uncharacterized', + 'bsheaders' => ' + Uncharacterized', + 'substr' => ' + Uncharacterized', + 'pdftex-def' => ' + Uncharacterized', + 'losymbol' => ' + Uncharacterized', + 'texperf' => ' + Uncharacterized', + 'res' => ' + Uncharacterized', + 'Hepunits' => ' + Uncharacterized', + 'anysize' => ' + Uncharacterized', + 'aguplus' => ' + Uncharacterized', + 'context-french' => ' + Uncharacterized', + 'mychemistry' => ' + Uncharacterized', + 'dvipng' => ' + Uncharacterized', + 'subdepth' => ' + Uncharacterized', + 'llist' => ' + Uncharacterized', + 'dinat' => ' + Uncharacterized', + 'amsppt' => ' + Uncharacterized', + 'address' => ' + Uncharacterized', + 'kuvio' => ' + Uncharacterized', + 'moderntimeline' => 'Document types > + Curriculum Vita', + 'ghostscript-afpl' => ' + Uncharacterized', + 'png2pdf' => 'Tools > PDF + tools', + 'preprint' => ' + Uncharacterized', + 'crop' => ' + Uncharacterized', + 'chemarrow' => ' + Uncharacterized', + 'bera' => ' + Uncharacterized', + 'sanskrit-t1' => ' + Uncharacterized', + 'pointruler' => ' + Uncharacterized', + 'manfnt' => ' + Uncharacterized', + 'vrb' => ' + Uncharacterized', + 'rangen' => ' + Uncharacterized', + 'maad' => ' + Uncharacterized', + '2in1' => ' + Uncharacterized', + 'pst-eucl' => ' + Uncharacterized', + 'amsmath-it' => ' + Uncharacterized', + 'undertilde-gen' => ' + Uncharacterized', + 'mylatexformat' => ' + Uncharacterized', + 'bitset' => ' + Uncharacterized', + 'pmx' => ' + Uncharacterized', + 'testeq' => ' + Uncharacterized', + 'Punk-LaTeX' => ' + Uncharacterized', + 'hypdestopt' => ' + Uncharacterized', + 'tikz-timing' => ' + Uncharacterized', + 'latex-course' => ' + Uncharacterized', + 'tweb' => ' + Uncharacterized', + 'catdvi' => ' + Uncharacterized', + 'ruler' => ' + Uncharacterized', + 'otfinst' => ' + Uncharacterized', + 'psnfssx-adobe' => ' + Uncharacterized', + 'cool' => ' + Uncharacterized', + 'capparmode' => ' + Uncharacterized', + 'check' => ' + Uncharacterized', + 'sauerj' => ' + Uncharacterized', + 'ltxmisc' => ' + Uncharacterized', + 'fixltx2e' => ' + Uncharacterized', + 'context' => ' + Uncharacterized', + 'psbao' => ' + Uncharacterized', + 'nomencl' => ' + Uncharacterized', + 'aeb-tilebg' => ' + Uncharacterized', + 'adrconv' => ' + Uncharacterized', + 'tex-gyre-chorus' => ' + Uncharacterized', + 'initials' => ' + Uncharacterized', + 'acromake' => ' + Uncharacterized', + 'orkhun' => ' + Uncharacterized', + 'texinfo-latest' => ' + Uncharacterized', + 'comment-pln' => ' + Uncharacterized', + 'lshort-japanese' => ' + Uncharacterized', + 'ithyph' => ' + Uncharacterized', + 'confproc' => ' + Uncharacterized', + 'proof' => ' + Uncharacterized', + 'nature' => ' + Uncharacterized', + 'kurier' => ' + Uncharacterized', + 'tex2word' => ' + Uncharacterized', + 'ltxgrid' => ' + Uncharacterized', + 'pgfmolbio' => 'Subject-specific typesetting + > Other natural sciences', + 'xindy' => ' + Uncharacterized', + 'time-gen' => ' + Uncharacterized', + 'lgc-examples' => ' + Uncharacterized', + 'knuth-local' => ' + Uncharacterized', + 'zhspacing' => ' + Uncharacterized', + 'TeXmacs' => ' + Uncharacterized', + 'a4wide' => ' + Uncharacterized', + 'induni-om' => ' + Uncharacterized', + 'qed' => ' + Uncharacterized', + 'chessboard' => ' + Uncharacterized', + 'EBONG' => ' + Uncharacterized', + 'tables' => ' + Uncharacterized', + 'jmb' => ' + Uncharacterized', + 'ryethesis' => ' + Uncharacterized', + 'pst-sigsys' => ' + Uncharacterized', + 'hrefhide' => ' + Uncharacterized', + 'enumerate' => ' + Uncharacterized', + 'mlist' => ' + Uncharacterized', + 'presentations' => ' + Uncharacterized', + 'sfmath' => ' + Uncharacterized', + 'histyle' => ' + Uncharacterized', + 'fntproof' => ' + Uncharacterized', + 'mpcolornames' => 'Page-focused > + Color', + 'bohr' => 'Graphics > Inside + TeX', + 'coptic' => ' + Uncharacterized', + 'lshort-persian' => ' + Uncharacterized', + 'gahyph' => ' + Uncharacterized', + 'balancedquotes' => ' + Uncharacterized', + 'threeparttable' => ' + Uncharacterized', + 'acs' => ' + Uncharacterized', + 'abstyles-orig' => ' + Uncharacterized', + 'bigstrut' => ' + Uncharacterized', + 'pdfslide' => ' + Uncharacterized', + 'bsf' => ' + Uncharacterized', + 'removefr' => ' + Uncharacterized', + 'xypic-tut-pt' => ' + Uncharacterized', + 'seuthesis' => ' + Uncharacterized', + 'funnelweb' => ' + Uncharacterized', + 'fixpdfmag' => 'Tools > PDF + tools', + 'altverse' => ' + Uncharacterized', + 'srcltx' => ' + Uncharacterized', + 'softmaker-moab' => ' + Uncharacterized', + 'idxtex' => ' + Uncharacterized', + 'ec-plain' => ' + Uncharacterized', + 'jhep' => ' + Uncharacterized', + 'eurotex' => ' + Uncharacterized', + 'dotarrow' => ' + Uncharacterized', + 'xskak' => ' + Uncharacterized', + 'LaTeX-brochure' => ' + Uncharacterized', + 'eiad' => ' + Uncharacterized', + 'bg' => ' + Uncharacterized', + 'lextex' => ' + Uncharacterized', + 'vowel' => 'Subject-specific typesetting + > Linguistics', + 'serbian-date-lat' => 'Programming in TeX > Date + and time', + 'mnras-plain' => ' + Uncharacterized', + 'umthesis' => ' + Uncharacterized', + 'nar' => ' + Uncharacterized', + 'needspace' => ' + Uncharacterized', + 'pdcmac' => ' + Uncharacterized', + 'gnuplottex' => ' + Uncharacterized', + 'cassette' => ' + Uncharacterized', + 'pfm2afm' => ' + Uncharacterized', + 'bellmac' => ' + Uncharacterized', + 'LaTexMng' => ' + Uncharacterized', + 'latexinfo' => ' + Uncharacterized', + 'fundus-la' => ' + Uncharacterized', + 'MicroIMP' => ' + Uncharacterized', + 'frenchquote' => ' + Uncharacterized', + 'eqnarray' => ' + Uncharacterized', + 'newverbs' => ' + Uncharacterized', + 'circ' => ' + Uncharacterized', + 'slides' => ' + Uncharacterized', + 'wordweb' => ' + Uncharacterized', + 'fbithesis' => ' + Uncharacterized', + 'DB_process' => ' + Uncharacterized', + 'babelbib' => ' + Uncharacterized', + 'acm' => ' + Uncharacterized', + 'ist21' => ' + Uncharacterized', + 'texdoctk' => ' + Uncharacterized', + 'oands' => ' + Uncharacterized', + 'mf2tex' => ' + Uncharacterized', + 'easybmat' => ' + Uncharacterized', + 'pdfcolfoot' => ' + Uncharacterized', + 'rtkinenc' => ' + Uncharacterized', + 'pybib' => ' + Uncharacterized', + 'embedfile' => ' + Uncharacterized', + 'ftnxtra' => ' + Uncharacterized', + 'tex-gpc' => ' + Uncharacterized', + 'ecards' => ' + Uncharacterized', + 'draftwatermark' => ' + Uncharacterized', + 'mcaption' => ' + Uncharacterized', + 'comicsans' => ' + Uncharacterized', + 'chicago' => ' + Uncharacterized', + 'pitthesis' => ' + Uncharacterized', + 'iso10303' => ' + Uncharacterized', + 'noitcrul' => ' + Uncharacterized', + 'lua-alt-getopt' => ' + Uncharacterized', + 'context-vim' => 'Subject-specific typesetting + > Computer science', + 'hyphen-accent' => ' + Uncharacterized', + 'malayalam-latex' => ' + Uncharacterized', + 'softmaker-newcastle' => ' + Uncharacterized', + 'chemfig' => ' + Uncharacterized', + 'maybemath' => ' + Uncharacterized', + 'kvsetkeys' => ' + Uncharacterized', + 'askinclude' => ' + Uncharacterized', + 'templates-sommer' => ' + Uncharacterized', + 'ibm' => ' + Uncharacterized', + 'vhistory' => ' + Uncharacterized', + 'memo209' => ' + Uncharacterized', + 'algorithm2e' => ' + Uncharacterized', + 'twoup-gen' => ' + Uncharacterized', + 'turnthepage' => ' + Uncharacterized', + 'ifmtarg' => ' + Uncharacterized', + 'hexgame' => ' + Uncharacterized', + 'verbatim-pln' => ' + Uncharacterized', + 'longtable' => ' + Uncharacterized', + 'pagecont' => ' + Uncharacterized', + 'aro-bend' => ' + Uncharacterized', + 'fnpara' => ' + Uncharacterized', + 'cmslup' => ' + Uncharacterized', + 'mathrsfs' => ' + Uncharacterized', + 'cheq' => ' + Uncharacterized', + 'rtf2latex2e' => ' + Uncharacterized', + 'ptserif' => ' + Uncharacterized', + 'konwerter' => ' + Uncharacterized', + 'hypgotoe' => ' + Uncharacterized', + 'etexcmds' => ' + Uncharacterized', + 'psbox' => ' + Uncharacterized', + 'mt11p' => ' + Uncharacterized', + 'cleveref' => ' + Uncharacterized', + 'msym' => ' + Uncharacterized', + 'epspdfconversion' => 'Tools > PDF + tools', + 'corridx-latex' => ' + Uncharacterized', + 'mslapa' => ' + Uncharacterized', + 'bar' => ' + Uncharacterized', + 'metainfo' => ' + Uncharacterized', + 'decsci' => ' + Uncharacterized', + 'typehtml' => ' + Uncharacterized', + 'pgothic' => ' + Uncharacterized', + 'tabls' => ' + Uncharacterized', + 'dvgtk' => ' + Uncharacterized', + 'trfsigns' => ' + Uncharacterized', + 'pst-pdf' => ' + Uncharacterized', + 'ethiop-t1' => ' + Uncharacterized', + 'tipa' => ' + Uncharacterized', + 'bigintcalc' => ' + Uncharacterized', + 'rangecite' => ' + Uncharacterized', + 'makeidx' => ' + Uncharacterized', + 'archaic' => ' + Uncharacterized', + 'bashkirian' => ' + Uncharacterized', + 'rjlparshap' => ' + Uncharacterized', + 'nostarch' => ' + Uncharacterized', + 'foiltex' => ' + Uncharacterized', + 'tt2001' => ' + Uncharacterized', + 'mpdinbrief' => ' + Uncharacterized', + 'mfirstuc' => ' + Uncharacterized', + 'LamsTeX' => ' + Uncharacterized', + 'upref' => ' + Uncharacterized', + 'mfnfss' => ' + Uncharacterized', + 'mmtools' => ' + Uncharacterized', + 'vertex' => ' + Uncharacterized', + 'paralist' => ' + Uncharacterized', + 'luatex-pkg' => ' + Uncharacterized', + 'yt4pdf' => 'Tools > PDF + tools', + 'textgreek' => ' + Uncharacterized', + 'image-gallery' => ' + Uncharacterized', + 'antp' => ' + Uncharacterized', + 'systcontrolletters' => ' + Uncharacterized', + 'ltx2x' => ' + Uncharacterized', + 'odsfile' => 'Tools > Convert + formats', + 'la' => ' + Uncharacterized', + 'gnhyph' => ' + Uncharacterized', + 'exteps' => ' + Uncharacterized', + 'uniquecounter' => ' + Uncharacterized', + 'texilikechaps' => ' + Uncharacterized', + 'multenum' => ' + Uncharacterized', + 'cherokee' => ' + Uncharacterized', + 'XeTeXref' => ' + Uncharacterized', + 'todo' => ' + Uncharacterized', + 'sirlin' => ' + Uncharacterized', + 'ogham' => ' + Uncharacterized', + 'titling' => ' + Uncharacterized', + 'hexdump' => ' + Uncharacterized', + 'paragraphs' => ' + Uncharacterized', + 'lshort-italian' => ' + Uncharacterized', + 'easybib' => ' + Uncharacterized', + 'twcal' => ' + Uncharacterized', + 'settobox' => ' + Uncharacterized', + 'regstats' => ' + Uncharacterized', + 'renditions' => ' + Uncharacterized', + 'inrstex' => ' + Uncharacterized', + 'index' => ' + Uncharacterized', + 'calrsfs' => ' + Uncharacterized', + 'rotchiffre' => ' + Uncharacterized', + 'abc2mtex' => ' + Uncharacterized', + 'mhack' => ' + Uncharacterized', + 'compact-symbols' => ' + Uncharacterized', + 'svn-prov' => ' + Uncharacterized', + 'biblatex-mla' => ' + Uncharacterized', + 'amsopn' => ' + Uncharacterized', + 'knst' => ' + Uncharacterized', + 'numalg' => ' + Uncharacterized', + 'kmrhyph' => ' + Uncharacterized', + 'tap' => ' + Uncharacterized', + 'saferef' => ' + Uncharacterized', + 'ziffer' => ' + Uncharacterized', + 'insbox' => ' + Uncharacterized', + 'etoolbox-de' => ' + Uncharacterized', + 'doc' => ' + Uncharacterized', + 'unswthesis' => ' + Uncharacterized', + 'chemstruct' => ' + Uncharacterized', + 'pst-coil' => ' + Uncharacterized', + 'lcg' => ' + Uncharacterized', + 'eddi4tex' => ' + Uncharacterized', + 'thaifonts-arundina' => 'Fonts > Support + files', + 'grafcet' => ' + Uncharacterized', + 'parselines' => ' + Uncharacterized', + 'brushscr' => ' + Uncharacterized', + 'chemexec' => ' + Uncharacterized', + 'invoice' => ' + Uncharacterized', + 'mbenotes' => ' + Uncharacterized', + 'epmtfe' => ' + Uncharacterized', + 'cmcyr' => ' + Uncharacterized', + 'kalender-209' => ' + Uncharacterized', + 'twoupltx' => ' + Uncharacterized', + 'latin2jk' => ' + Uncharacterized', + 'fpl' => ' + Uncharacterized', + 'cmfrak' => ' + Uncharacterized', + 'adforn' => ' + Uncharacterized', + 'graphicx' => ' + Uncharacterized', + 'germbib' => ' + Uncharacterized', + 'refcheck' => ' + Uncharacterized', + 'dectab' => ' + Uncharacterized', + 'MPStoEPS' => ' + Uncharacterized', + 'breakurl' => ' + Uncharacterized', + 'plhyph' => ' + Uncharacterized', + 'urw' => ' + Uncharacterized', + 'sketch' => ' + Uncharacterized', + 'ntgclass' => ' + Uncharacterized', + 'amstext' => ' + Uncharacterized', + 'chemcompounds' => ' + Uncharacterized', + 'stdclsdv' => ' + Uncharacterized', + 'docstrip' => ' + Uncharacterized', + 'vmspell' => ' + Uncharacterized', + 'idealfonts' => ' + Uncharacterized', + 'bold-extra' => ' + Uncharacterized', + 'pstricks-add' => ' + Uncharacterized', + 'biocon' => ' + Uncharacterized', + 'makeindex' => ' + Uncharacterized', + 'dogma' => ' + Uncharacterized', + 'mwrite' => ' + Uncharacterized', + 'preview-latex' => ' + Uncharacterized', + 'shadebox' => ' + Uncharacterized', + 'psu-thesis' => ' + Uncharacterized', + 'geophysics' => ' + Uncharacterized', + 'amsart' => ' + Uncharacterized', + 'tapir' => ' + Uncharacterized', + 'rune' => ' + Uncharacterized', + 'philosophersimprint' => ' + Uncharacterized', + 'seminar' => ' + Uncharacterized', + 'hvdashln' => ' + Uncharacterized', + 'changebar' => ' + Uncharacterized', + 'gentium' => ' + Uncharacterized', + 'filecontents' => ' + Uncharacterized', + 'adfsymbols' => ' + Uncharacterized', + 'lyx' => ' + Uncharacterized', + 'perception' => ' + Uncharacterized', + 'listings' => ' + Uncharacterized', + 'astro' => ' + Uncharacterized', + 'selectpage' => ' + Uncharacterized', + 'har2nat' => ' + Uncharacterized', + 'mentis' => ' + Uncharacterized', + 'envbig' => ' + Uncharacterized', + 'C.D.P. Bundle' => ' + Uncharacterized', + 'metago' => ' + Uncharacterized', + 'context-letter' => ' + Uncharacterized', + 'upquote' => ' + Uncharacterized', + 'popupmenu' => ' + Uncharacterized', + 'labelmac3' => ' + Uncharacterized', + 'uiucthesis' => ' + Uncharacterized', + 'karta' => ' + Uncharacterized', + 'mactex' => ' + Uncharacterized', + 'emulateapj' => ' + Uncharacterized', + 'futurans' => ' + Uncharacterized', + 'gmeometric' => ' + Uncharacterized', + 'shapepar' => ' + Uncharacterized', + 'nonumonpart' => ' + Uncharacterized', + 'intcalc' => ' + Uncharacterized', + 'unisugar' => ' + Uncharacterized', + 'classlist' => ' + Uncharacterized', + 'timetab' => ' + Uncharacterized', + 'logic' => ' + Uncharacterized', + 'linearA' => ' + Uncharacterized', + 'hlatex' => ' + Uncharacterized', + 'cspsfonts' => ' + Uncharacterized', + 'fontchart' => ' + Uncharacterized', + 'dirtytalk' => ' + Uncharacterized', + 'dvgt' => ' + Uncharacterized', + 'MPEdit' => ' + Uncharacterized', + 'web' => ' + Uncharacterized', + 'makeplot' => ' + Uncharacterized', + 'holtpolt' => ' + Uncharacterized', + 'alpha' => ' + Uncharacterized', + 'references' => ' + Uncharacterized', + 'fix-cm' => ' + Uncharacterized', + 'easyLaTeX' => ' + Uncharacterized', + 'mactextras' => ' + Uncharacterized', + 'softmakerfreefont' => ' + Uncharacterized', + 'easy-todo' => ' + Uncharacterized', + 'luatexbase' => ' + Uncharacterized', + 'texdiff' => ' + Uncharacterized', + 'treetex-plain' => ' + Uncharacterized', + 'minted' => ' + Uncharacterized', + 'hpsdiss' => ' + Uncharacterized', + 'hhtensor' => ' + Uncharacterized', + 'bengali-pandey' => ' + Uncharacterized', + 'zed' => ' + Uncharacterized', + 'texdirflatten' => ' + Uncharacterized', + 'pdfcolparallel' => ' + Uncharacterized', + 'tugboat-plain' => ' + Uncharacterized', + 'aurora' => ' + Uncharacterized', + 'nextpage' => ' + Uncharacterized', + 'dvi2tty' => ' + Uncharacterized', + 'greekctr' => ' + Uncharacterized', + 'memo-pln' => ' + Uncharacterized', + 'closefrm' => ' + Uncharacterized', + 'outline' => ' + Uncharacterized', + 'glhyph' => ' + Uncharacterized', + 'chklref' => ' + Uncharacterized', + 'texdoc' => ' + Uncharacterized', + 'pcfonts' => ' + Uncharacterized', + 'setouterhbox' => ' + Uncharacterized', + 'hellas' => ' + Uncharacterized', + 'cropmarks-pt' => ' + Uncharacterized', + 'ntsfaq' => ' + Uncharacterized', + 'type1ec' => ' + Uncharacterized', + 'hypht1' => ' + Uncharacterized', + 'malayalam-obsolete' => ' + Uncharacterized', + 'DayRoman' => ' + Uncharacterized', + 'cm-mf-extra' => ' + Uncharacterized', + 'book-examples' => ' + Uncharacterized', + 'oval' => ' + Uncharacterized', + 'germdoc' => ' + Uncharacterized', + 'aeguill' => ' + Uncharacterized', + 'treetex-ltx209' => ' + Uncharacterized', + 'koma-script-sfs' => ' + Uncharacterized', + 'pfnote' => ' + Uncharacterized', + 'fontinstallationguide' => ' + Uncharacterized', + 'impatient' => ' + Uncharacterized', + 'mkpic' => ' + Uncharacterized', + 'koma-moderncvclassic' => ' + Uncharacterized', + 'texshell32' => ' + Uncharacterized', + 'lpw' => ' + Uncharacterized', + 'cv' => ' + Uncharacterized', + 'ytableau' => ' + Uncharacterized', + 'bgreek' => ' + Uncharacterized', + 'subfigmat' => ' + Uncharacterized', + 'passivetex' => ' + Uncharacterized', + 'drawstack' => ' + Uncharacterized', + 'czhyph' => ' + Uncharacterized', + 'young' => ' + Uncharacterized', + 'texemplar' => ' + Uncharacterized', + 'pdftex' => 'Tools > PDF + tools', + 'nlctdoc' => ' + Uncharacterized', + 'aaai-named' => ' + Uncharacterized', + 'tlc2-examples' => ' + Uncharacterized', + 'colordoc' => ' + Uncharacterized', + 'siunitx' => ' + Uncharacterized', + 'dow' => ' + Uncharacterized', + 'cdcover' => ' + Uncharacterized', + 'newlfm' => ' + Uncharacterized', + 'l2x' => ' + Uncharacterized', + 'braille' => ' + Uncharacterized', + 'arabicfront' => ' + Uncharacterized', + 'niceframe-type1' => ' + Uncharacterized', + 'eehyph' => ' + Uncharacterized', + 'tkz-fct' => ' + Uncharacterized', + 'analogclock' => ' + Uncharacterized', + 'xtexcad' => ' + Uncharacterized', + 'gleitobjekte' => ' + Uncharacterized', + 'nccstretch' => ' + Uncharacterized', + 'hwkatakana' => ' + Uncharacterized', + 'marginnote' => ' + Uncharacterized', + 'mm' => ' + Uncharacterized', + 'nomentbl' => ' + Uncharacterized', + 'minibox' => ' + Uncharacterized', + 'eijkhout' => ' + Uncharacterized', + 'pkfix-helper' => ' + Uncharacterized', + 'old-fontch' => ' + Uncharacterized', + 'program' => ' + Uncharacterized', + 'dinbrief-gui' => ' + Uncharacterized', + 'swebib' => ' + Uncharacterized', + 'hypdoc' => ' + Uncharacterized', + 'tango-weevil' => ' + Uncharacterized', + 'nlatexdb' => 'Tools > + Other', + 'biblist' => ' + Uncharacterized', + 'dateiliste' => ' + Uncharacterized', + 'latex-hlp' => ' + Uncharacterized', + 'eledpar' => 'Document types > + Books', + 'code' => ' + Uncharacterized', + 'alphanum' => ' + Uncharacterized', + 'automagic' => ' + Uncharacterized', + 'ugaritic' => ' + Uncharacterized', + 'imac' => ' + Uncharacterized', + 'elbioimp' => ' + Uncharacterized', + 'xtcapts' => ' + Uncharacterized', + 'ntheorem-vn' => ' + Uncharacterized', + 'meta-mode' => ' + Uncharacterized', + 'acronym' => ' + Uncharacterized', + 'backgrnd' => ' + Uncharacterized', + 'bibtex-test' => ' + Uncharacterized', + 'xymtex' => ' + Uncharacterized', + 'musixtex-t1fonts' => ' + Uncharacterized', + 'dvipaste' => ' + Uncharacterized', + 'cmextra-latex' => ' + Uncharacterized', + 'Exam design' => ' + Uncharacterized', + 'AddTeX2Eps' => ' + Uncharacterized', + 'lambda-lists' => ' + Uncharacterized', + 'samples' => ' + Uncharacterized', + 'tex2tok' => ' + Uncharacterized', + 'ttn' => ' + Uncharacterized', + 'barcodes' => ' + Uncharacterized', + 'xparse' => ' + Uncharacterized', + 'concrete' => ' + Uncharacterized', + 'recipe' => ' + Uncharacterized', + 'TeX-mag' => ' + Uncharacterized', + 'AFMtoPL (Clark)' => ' + Uncharacterized', + 'psmerge' => ' + Uncharacterized', + 'piff' => ' + Uncharacterized', + 'mitpress' => ' + Uncharacterized', + 'chapref' => ' + Uncharacterized', + 'levy-font' => ' + Uncharacterized', + 'hyphsubst' => ' + Uncharacterized', + 'physe' => ' + Uncharacterized', + 'a0poster' => ' + Uncharacterized', + 'bigtabular' => ' + Uncharacterized', + 'diagxy' => ' + Uncharacterized', + 'technics' => ' + Uncharacterized', + 'bibcheck' => ' + Uncharacterized', + 'texsort' => ' + Uncharacterized', + 'texdef' => ' + Uncharacterized', + 'mathkit' => ' + Uncharacterized', + 'tex-gyre-pagella' => ' + Uncharacterized', + 'greektex-fd' => ' + Uncharacterized', + 'chembst' => ' + Uncharacterized', + 'dvitty' => ' + Uncharacterized', + 'calc' => ' + Uncharacterized', + 'vncmr' => ' + Uncharacterized', + 'LaTeX-WIDE' => ' + Uncharacterized', + 'jeep' => ' + Uncharacterized', + 'envlab' => ' + Uncharacterized', + 'yi4latex' => ' + Uncharacterized', + 'gothic' => ' + Uncharacterized', + 'GuIT-corso' => ' + Uncharacterized', + 'fltpage' => ' + Uncharacterized', + 'fi2t1' => ' + Uncharacterized', + 'units' => ' + Uncharacterized', + 'tugboat-toc' => ' + Uncharacterized', + 'stdpage' => ' + Uncharacterized', + 'dvipsconfig' => ' + Uncharacterized', + 'shsulet' => ' + Uncharacterized', + 'textopo' => ' + Uncharacterized', + 'syntax-mdw' => ' + Uncharacterized', + 'inversepath' => ' + Uncharacterized', + 'pinlabel' => ' + Uncharacterized', + 'mathabx-type1' => ' + Uncharacterized', + 'titlepage-uni-dortmund' => ' + Uncharacterized', + 'mmafm' => ' + Uncharacterized', + 'ut-backref' => ' + Uncharacterized', + 'luatextra' => ' + Uncharacterized', + 'thumbs' => ' + Uncharacterized', + 'pst-knot' => ' + Uncharacterized', + 'plantslabels' => ' + Uncharacterized', + 'CJHebrew' => ' + Uncharacterized', + 'latex4jed' => ' + Uncharacterized', + 'levy-latex' => ' + Uncharacterized', + 'extpfeil' => ' + Uncharacterized', + 'babeltools' => ' + Uncharacterized', + 'verbtext' => ' + Uncharacterized', + 'development' => ' + Uncharacterized', + 'nbaseprt' => ' + Uncharacterized', + 'XeT-TeX' => ' + Uncharacterized', + 'outerhbox' => ' + Uncharacterized', + 'dates209' => ' + Uncharacterized', + 'siam' => ' + Uncharacterized', + 'gv' => ' + Uncharacterized', + 'drftcite' => ' + Uncharacterized', + 'easyeqn' => ' + Uncharacterized', + 'prepr' => ' + Uncharacterized', + 'excalibur' => ' + Uncharacterized', + 'jspell' => ' + Uncharacterized', + 'chronology' => ' + Uncharacterized', + 'poetica' => ' + Uncharacterized', + 'fancyheadings' => ' + Uncharacterized', + 'scientificviewer' => ' + Uncharacterized', + 'eplain' => ' + Uncharacterized', + 'pstricks-examples' => ' + Uncharacterized', + 'GFS Baskerville' => ' + Uncharacterized', + 'BSR2dvi' => ' + Uncharacterized', + 'typearea' => ' + Uncharacterized', + 'go' => ' + Uncharacterized', + 'register' => ' + Uncharacterized', + 'context-lettrine' => ' + Uncharacterized', + 'makeindexk' => ' + Uncharacterized', + 'fwlw' => ' + Uncharacterized', + 'amsmath' => ' + Uncharacterized', + 'latexdiff' => ' + Uncharacterized', + 'cascover' => ' + Uncharacterized', + 'hyphenex' => ' + Uncharacterized', + 'perltex' => ' + Uncharacterized', + 'ptptex' => ' + Uncharacterized', + 'cmpica' => ' + Uncharacterized', + 'anyfontsize' => ' + Uncharacterized', + 'asyfig' => ' + Uncharacterized', + 'testflow' => ' + Uncharacterized', + 'fontch' => ' + Uncharacterized', + 'fontname' => ' + Uncharacterized', + 'mhsetup' => ' + Uncharacterized', + 'alltt2' => ' + Uncharacterized', + 'auctex' => ' + Uncharacterized', + 'NEdit-LaTeX-Extensions' => ' + Uncharacterized', + 'libgreek' => ' + Uncharacterized', + 'cmtest' => ' + Uncharacterized', + 'hyph-utf8' => ' + Uncharacterized', + 'easylist' => ' + Uncharacterized', + 'caption' => ' + Uncharacterized', + 'iagproc' => ' + Uncharacterized', + 'makecmds' => ' + Uncharacterized', + 'liturg' => ' + Uncharacterized', + 'bm' => ' + Uncharacterized', + 'softmaker-sunset' => ' + Uncharacterized', + 'first-latex-doc' => ' + Uncharacterized', + 'logfilter' => ' + Uncharacterized', + 'fundus' => ' + Uncharacterized', + 'rplain' => ' + Uncharacterized', + 'symbolindex' => ' + Uncharacterized', + 'recycle' => ' + Uncharacterized', + 'context-mathsets' => ' + Uncharacterized', + 'XteXShell' => ' + Uncharacterized', + 'quotation' => ' + Uncharacterized', + 'calxxxx-yyyy' => ' + Uncharacterized', + 'cnoweb' => ' + Uncharacterized', + 'eforms' => ' + Uncharacterized', + 'bbold-type1' => ' + Uncharacterized', + 'newproof' => ' + Uncharacterized', + 'ieeepes' => ' + Uncharacterized', + 'isi2bibtex' => ' + Uncharacterized', + 'fortran' => ' + Uncharacterized', + 'topcapt' => ' + Uncharacterized', + 'codepage' => ' + Uncharacterized', + 'scrindex' => ' + Uncharacterized', + 'pstrees' => ' + Uncharacterized', + 'thai-usl' => ' + Uncharacterized', + 'moderncv' => ' + Uncharacterized', + 'source2e' => ' + Uncharacterized', + 'iso209' => ' + Uncharacterized', + 'accenti' => ' + Uncharacterized', + 'ntg-maps' => ' + Uncharacterized', + 'circuit-macros' => ' + Uncharacterized', + 'zed-csp' => ' + Uncharacterized', + 'smflatex' => ' + Uncharacterized', + 'courseoutline' => ' + Uncharacterized', + 'texpower' => ' + Uncharacterized', + 'yhmath' => ' + Uncharacterized', + 'belleek' => ' + Uncharacterized', + 'beamerposter' => ' + Uncharacterized', + 'texcad32' => ' + Uncharacterized', + 'pandora' => ' + Uncharacterized', + 'graphfig' => ' + Uncharacterized', + 'dvistd' => ' + Uncharacterized', + 'csfonts' => ' + Uncharacterized', + 'thuthesis' => ' + Uncharacterized', + 'lshort-spanish' => ' + Uncharacterized', + 'lettergothic' => ' + Uncharacterized', + 'fancyref' => ' + Uncharacterized', + 'cases' => ' + Uncharacterized', + 'texspell' => ' + Uncharacterized', + 'l2tabu-french' => ' + Uncharacterized', + 'boldline' => ' + Uncharacterized', + 'javatex' => ' + Uncharacterized', + 'engpron' => ' + Uncharacterized', + 'csx' => ' + Uncharacterized', + 'graphics-pln' => ' + Uncharacterized', + 'xoptarg' => ' + Uncharacterized', + 'iftex' => ' + Uncharacterized', + 'hyphenation-greek' => ' + Uncharacterized', + 'dcolumn' => ' + Uncharacterized', + 'bardi' => ' + Uncharacterized', + 'pst-calendar' => ' + Uncharacterized', + 'xargs' => ' + Uncharacterized', + 'softmaker-delanocaps' => ' + Uncharacterized', + 'humanist' => ' + Uncharacterized', + 'seceqn' => ' + Uncharacterized', + 'youngtab' => ' + Uncharacterized', + 'bangtex' => ' + Uncharacterized', + 'dot2tex' => ' + Uncharacterized', + 'forindex' => ' + Uncharacterized', + 'cea' => ' + Uncharacterized', + 'esindex' => ' + Uncharacterized', + 'splitbib' => ' + Uncharacterized', + 'softmaker-grenoble' => ' + Uncharacterized', + 'beamer2thesis' => ' + Uncharacterized', + 'ocgtools' => ' + Uncharacterized', + 'marginote' => ' + Uncharacterized', + 'luacode' => ' + Uncharacterized', + 'chess' => ' + Uncharacterized', + 'slashbox' => ' + Uncharacterized', + 'pst-text' => ' + Uncharacterized', + 'alphanumb' => ' + Uncharacterized', + 'filehook' => ' + Uncharacterized', + 'latex' => ' + Uncharacterized', + 'hrhyph' => ' + Uncharacterized', + 'gradback' => ' + Uncharacterized', + 'plain' => ' + Uncharacterized', + 'esint-type1' => ' + Uncharacterized', + 'interfaces' => ' + Uncharacterized', + 'dancers' => ' + Uncharacterized', + 'wright' => ' + Uncharacterized', + 'latex2e-help-texinfo' => ' + Uncharacterized', + 'bibtopicprefix' => ' + Uncharacterized', + 'TeXbyTopic' => ' + Uncharacterized', + 'unamthesis' => ' + Uncharacterized', + 'ticket' => ' + Uncharacterized', + 'slatex' => ' + Uncharacterized', + 'refreshpdf' => 'Tools > PDF + tools', + 'semioneside' => ' + Uncharacterized', + 'multiobjective' => ' + Uncharacterized', + 'lcyw' => ' + Uncharacterized', + 'exp-testopt' => ' + Uncharacterized', + 'classif2' => ' + Uncharacterized', + 'classes' => ' + Uncharacterized', + 'pmcstex' => ' + Uncharacterized', + 'genmpage' => ' + Uncharacterized', + 'fancyhdr-it' => ' + Uncharacterized', + 'vvcode' => ' + Uncharacterized', + 'softmaker-oldblackletter' => ' + Uncharacterized', + 'endnotes' => ' + Uncharacterized', + 'aleph' => ' + Uncharacterized', + 'tkhyph' => ' + Uncharacterized', + 'latex2html' => ' + Uncharacterized', + 'ar' => ' + Uncharacterized', + 'humannat' => ' + Uncharacterized', + 'draft' => ' + Uncharacterized', + 'comment' => ' + Uncharacterized', + 'bigtable' => ' + Uncharacterized', + 'web2c' => ' + Uncharacterized', + 'pst-platon' => ' + Uncharacterized', + 'dratex' => ' + Uncharacterized', + 'pgfkeys' => ' + Uncharacterized', + 'subfloat' => ' + Uncharacterized', + 'landscape' => ' + Uncharacterized', + 'xcoffins' => ' + Uncharacterized', + 'FigSize' => ' + Uncharacterized', + 'xspace' => ' + Uncharacterized', + 'dk-bib' => 'Non-English languages > + Other', + 'appendix' => ' + Uncharacterized', + 'numline' => ' + Uncharacterized', + 'modes' => ' + Uncharacterized', + 'mf2ps' => ' + Uncharacterized', + 'maybeload' => ' + Uncharacterized', + 'lgraph' => ' + Uncharacterized', + 'guia-bibtex' => ' + Uncharacterized', + 'rotunda' => ' + Uncharacterized', + 'boxit-ltx' => ' + Uncharacterized', + 'tex-math' => ' + Uncharacterized', + 'tabto-generic' => ' + Uncharacterized', + 'omega' => ' + Uncharacterized', + 'greek6cbc' => ' + Uncharacterized', + 'eslides' => ' + Uncharacterized', + 'bigsign' => ' + Uncharacterized', + 'auncial-new' => ' + Uncharacterized', + 'knitting' => ' + Uncharacterized', + 'xarticle' => ' + Uncharacterized', + 'iflang' => ' + Uncharacterized', + 'footbib' => ' + Uncharacterized', + 'typografie' => ' + Uncharacterized', + 'ltxfileinfo' => ' + Uncharacterized', + 'acmconf' => ' + Uncharacterized', + 'TrueTypeToType42' => ' + Uncharacterized', + 'tikz-qtree' => ' + Uncharacterized', + 'ledpar' => ' + Uncharacterized', + 'memhfixc' => ' + Uncharacterized', + 'charter' => ' + Uncharacterized', + 'venndiagram' => 'Subject-specific typesetting + > Mathematics > Other', + 'nccpic' => ' + Uncharacterized', + 'l2picfaq' => ' + Uncharacterized', + 'GELLMU' => ' + Uncharacterized', + 'droid' => ' + Uncharacterized', + 'dirtree' => ' + Uncharacterized', + 'contour' => ' + Uncharacterized', + 'tcobrowser' => ' + Uncharacterized', + 'persian-bib' => ' + Uncharacterized', + 'ldiff' => ' + Uncharacterized', + 'lh' => ' + Uncharacterized', + 'va' => ' + Uncharacterized', + 'amsbook' => ' + Uncharacterized', + 'jeopardy' => ' + Uncharacterized', + 'c2latex' => ' + Uncharacterized', + 'LaTable' => ' + Uncharacterized', + 'icomma' => ' + Uncharacterized', + 'bmeps' => ' + Uncharacterized', + 'cchess' => ' + Uncharacterized', + 'bigfoot' => ' + Uncharacterized', + 'fontload' => ' + Uncharacterized', + 'colonequals' => ' + Uncharacterized', + 'engrec' => ' + Uncharacterized', + 't1-fraktur' => ' + Uncharacterized', + 'postcards' => ' + Uncharacterized', + 'jsclasses' => ' + Uncharacterized', + 'garrigues' => ' + Uncharacterized', + 'texlog_extract' => ' + Uncharacterized', + 'rsfso' => ' + Uncharacterized', + 'pagenote' => ' + Uncharacterized', + 'mfpic4ode' => ' + Uncharacterized', + 'forarray' => ' + Uncharacterized', + 'talk' => ' + Uncharacterized', + 'prettyref' => ' + Uncharacterized', + 'cmcyralt-fonts' => ' + Uncharacterized', + 'xecyr' => ' + Uncharacterized', + 'lps' => ' + Uncharacterized', + 'cm-pk' => ' + Uncharacterized', + 'qobitree' => ' + Uncharacterized', + 'mnsymbol' => ' + Uncharacterized', + 'excludeonly' => ' + Uncharacterized', + 'cmdstring' => ' + Uncharacterized', + 'corrects' => ' + Uncharacterized', + 'umrand' => ' + Uncharacterized', + 'lgc2-examples' => ' + Uncharacterized', + 'citesidx' => ' + Uncharacterized', + 'numericplots' => ' + Uncharacterized', + 'koma-script' => ' + Uncharacterized', + 'kelly-greek-font' => ' + Uncharacterized', + 'anonchap' => ' + Uncharacterized', + 'texapi' => ' + Uncharacterized', + 'JavaBib' => ' + Uncharacterized', + 'chicago-annote' => ' + Uncharacterized', + 'gettitlestring' => ' + Uncharacterized', + 'geschichtsfrkl' => 'Subject-specific typesetting + > Social sciences', + 'fncylab' => ' + Uncharacterized', + 'ijmart' => ' + Uncharacterized', + 'acroflex' => ' + Uncharacterized', + 'eskdx' => ' + Uncharacterized', + 'fltpoint' => ' + Uncharacterized', + 'arcs' => ' + Uncharacterized', + 'Portable MikTeX' => ' + Uncharacterized', + 'polynomial' => ' + Uncharacterized', + 'fancybox' => ' + Uncharacterized', + 'galois' => ' + Uncharacterized', + 'card' => ' + Uncharacterized', + 'cursolatex' => ' + Uncharacterized', + 'dprogress' => ' + Uncharacterized', + 'classicthesis' => ' + Uncharacterized', + 'twoopt' => ' + Uncharacterized', + 'figplace' => ' + Uncharacterized', + 'trajan' => ' + Uncharacterized', + 'jabref' => ' + Uncharacterized', + 'switcheml' => ' + Uncharacterized', + 'softmaker-flagstaff' => ' + Uncharacterized', + 'eiad-ltx' => ' + Uncharacterized', + 'tikz-3dplot' => ' + Uncharacterized', + 'NTS' => ' + Uncharacterized', + 'igo' => ' + Uncharacterized', + 'frhyph' => ' + Uncharacterized', + 'backrefx' => ' + Uncharacterized', + 'mattens' => ' + Uncharacterized', + 'extradefs' => ' + Uncharacterized', + 'lshort-vietnamese' => ' + Uncharacterized', + 'astron' => ' + Uncharacterized', + 'pst-vowel' => ' + Uncharacterized', + 'spanish' => ' + Uncharacterized', + 'texi2www' => ' + Uncharacterized', + 'schemabloc' => ' + Uncharacterized', + 'verse' => ' + Uncharacterized', + 'dingbat' => ' + Uncharacterized', + 'AutoLaTeX' => ' + Uncharacterized', + 'portland' => ' + Uncharacterized', + 'ljmetrics' => ' + Uncharacterized', + 'bsl' => ' + Uncharacterized', + 'GasTeX' => ' + Uncharacterized', + 'eqexam' => ' + Uncharacterized', + 'MemoirChapterStyles' => ' + Uncharacterized', + 'cm' => ' + Uncharacterized', + 'georgian' => ' + Uncharacterized', + 'latex-bib-ex' => ' + Uncharacterized', + 'is-bst' => ' + Uncharacterized', + 'docarc' => ' + Uncharacterized', + 'piechart' => ' + Uncharacterized', + 'feynman' => ' + Uncharacterized', + 'bit2spr' => ' + Uncharacterized', + 'hyacc-cm' => ' + Uncharacterized', + 'yplan' => ' + Uncharacterized', + 'shapepatch' => ' + Uncharacterized', + 'parskip' => ' + Uncharacterized', + 'eurosym' => ' + Uncharacterized', + 'texdepend' => ' + Uncharacterized', + 'threeparttablex' => ' + Uncharacterized', + 'dlfltxb' => ' + Uncharacterized', + 'cite-bundle' => ' + Uncharacterized', + 'punknova' => ' + Uncharacterized', + 'uncial' => ' + Uncharacterized', + 'lshort-portuguese-br' => ' + Uncharacterized', + 'mlbib' => ' + Uncharacterized', + 'lshort-korean' => ' + Uncharacterized', + 'trademarks' => ' + Uncharacterized', + 'struktex' => ' + Uncharacterized', + 'epstopdf-pkg' => 'Tools > PDF + tools', + 'dnaseq' => ' + Uncharacterized', + 'cmoefont' => ' + Uncharacterized', + 'LaTeX for Autoconf' => ' + Uncharacterized', + 'ttf-howto' => ' + Uncharacterized', + 'thinsp' => ' + Uncharacterized', + 'free-math-font-survey' => ' + Uncharacterized', + 'beamerthemeJLTree' => ' + Uncharacterized', + 'tools' => ' + Uncharacterized', + 'serial' => ' + Uncharacterized', + 'javadoc' => ' + Uncharacterized', + 'syntax2' => ' + Uncharacterized', + 'bmpsize' => ' + Uncharacterized', + 'texshade' => ' + Uncharacterized', + 'subfig' => ' + Uncharacterized', + 'mftinc' => ' + Uncharacterized', + 'flushend' => ' + Uncharacterized', + 'epigram' => ' + Uncharacterized', + 'catalanbib' => ' + Uncharacterized', + 'rerunfilecheck' => ' + Uncharacterized', + 'pst-abspos' => ' + Uncharacterized', + 'make-env' => ' + Uncharacterized', + 'wmaainf' => ' + Uncharacterized', + 'wasy2-ps' => ' + Uncharacterized', + 'texref' => ' + Uncharacterized', + 'undertilde' => ' + Uncharacterized', + 'NL hyphenation' => ' + Uncharacterized', + 'texi-like cover' => ' + Uncharacterized', + 'amslatex' => ' + Uncharacterized', + 'fourproject' => ' + Uncharacterized', + 'processkv' => ' + Uncharacterized', + 'tex_it' => ' + Uncharacterized', + 'ltxnew' => ' + Uncharacterized', + 'cypriot' => ' + Uncharacterized', + 'LaTeXDB' => ' + Uncharacterized', + 'jamtimes' => ' + Uncharacterized', + 'chletter' => ' + Uncharacterized', + 'apabst' => ' + Uncharacterized', + 'patgen2-tutorial' => ' + Uncharacterized', + 'parcolumns' => ' + Uncharacterized', + 'yfonts' => ' + Uncharacterized', + 'telprint' => ' + Uncharacterized', + 'nbaskerv' => ' + Uncharacterized', + 'withesis' => ' + Uncharacterized', + 'tie' => ' + Uncharacterized', + 'cooking' => ' + Uncharacterized', + 'bitstrea' => ' + Uncharacterized', + '3DLDF' => ' + Uncharacterized', + 'makerobust209' => ' + Uncharacterized', + 'bussproofs' => ' + Uncharacterized', + 'umtypewriter' => ' + Uncharacterized', + 'vplutils' => ' + Uncharacterized', + 'PDFrack' => 'Tools > PDF + tools', + 'paresse' => ' + Uncharacterized', + 'halftone' => ' + Uncharacterized', + 'ConTeXt-cmttbf' => ' + Uncharacterized', + 'suthesis' => ' + Uncharacterized', + 'ntheorem' => ' + Uncharacterized', + 'NCC-LaTeX' => ' + Uncharacterized', + 'faq-de' => ' + Uncharacterized', + 'quotmark' => ' + Uncharacterized', + 'comp-fonts-FAQ' => ' + Uncharacterized', + 'tsconfig' => ' + Uncharacterized', + 'directory' => ' + Uncharacterized', + 'wmf2eps' => ' + Uncharacterized', + 'subfiles' => ' + Uncharacterized', + 'mathcomp' => ' + Uncharacterized', + 'xgreek' => ' + Uncharacterized', + 'runtex' => ' + Uncharacterized', + 'fragmaster' => ' + Uncharacterized', + 'catdoc' => ' + Uncharacterized', + 'frankenbundle' => ' + Uncharacterized', + 'context-typearea' => ' + Uncharacterized', + 'inhyph' => ' + Uncharacterized', + 'labelcas' => ' + Uncharacterized', + 'qfonts' => ' + Uncharacterized', + 'leading' => ' + Uncharacterized', + 'AcroSort' => ' + Uncharacterized', + 'xpdf' => 'Tools > PDF + tools', + 'tex-ewd' => ' + Uncharacterized', + 'esvect' => ' + Uncharacterized', + 'arrayjobx' => ' + Uncharacterized', + 'boites' => ' + Uncharacterized', + 'knit' => ' + Uncharacterized', + 'ECV' => ' + Uncharacterized', + 'fonttable' => ' + Uncharacterized', + 'mathpazo' => ' + Uncharacterized', + 'Carlisle' => ' + Uncharacterized', + 'telugu' => ' + Uncharacterized', + 'cmactex' => ' + Uncharacterized', + 'softmaker-bonita' => ' + Uncharacterized', + 'latexcheat-ptbr' => ' + Uncharacterized', + 'protosem' => ' + Uncharacterized', + 'shading' => ' + Uncharacterized', + 'LKproof' => ' + Uncharacterized', + 'boxedminipage' => ' + Uncharacterized', + 'blue' => ' + Uncharacterized', + 'latex-tabellen' => ' + Uncharacterized', + 'pi' => ' + Uncharacterized', + 'tex2rtf' => ' + Uncharacterized', + 'eemeir' => ' + Uncharacterized', + 'cmbright' => ' + Uncharacterized', + 'Exceltex' => ' + Uncharacterized', + 'mafr' => ' + Uncharacterized', + 'beamerthemenirma' => ' + Uncharacterized', + 'concrete-macros' => ' + Uncharacterized', + 'fig2vect' => ' + Uncharacterized', + 'tkz-base' => ' + Uncharacterized', + 'susy' => ' + Uncharacterized', + 'glosstex' => ' + Uncharacterized', + 'tex-gyre-cursor' => ' + Uncharacterized', + 'ifplatform' => ' + Uncharacterized', + 'kerkis' => ' + Uncharacterized', + 'grverb' => ' + Uncharacterized', + 'toil' => ' + Uncharacterized', + 'oriental' => ' + Uncharacterized', + 'icsv' => ' + Uncharacterized', + 'redefine' => ' + Uncharacterized', + 'tgrind209' => ' + Uncharacterized', + 'ncctools' => ' + Uncharacterized', + 'metaobj' => ' + Uncharacterized', + 'serbianpart' => 'Non-English languages > + Other', + 'productbox' => ' + Uncharacterized', + 'patchcmd' => ' + Uncharacterized', + 'macfont' => ' + Uncharacterized', + 'pagereference' => ' + Uncharacterized', + 'blackboard' => ' + Uncharacterized', + 'cyklop' => ' + Uncharacterized', + 'china2e' => ' + Uncharacterized', + 'epiolmec' => ' + Uncharacterized', + 'babel-doc' => ' + Uncharacterized', + 'lingtrees' => ' + Uncharacterized', + 'cbgreek-complete' => ' + Uncharacterized', + 'tokenizer' => ' + Uncharacterized', + 'fig2mf' => ' + Uncharacterized', + 'ametsoc' => ' + Uncharacterized', + 'mma2ltx' => ' + Uncharacterized', + 'psgo' => ' + Uncharacterized', + 'baum' => ' + Uncharacterized', + 'ccaption' => ' + Uncharacterized', + 'svn' => ' + Uncharacterized', + 'mf2pt1' => ' + Uncharacterized', + 'lips' => ' + Uncharacterized', + 'afterpage' => ' + Uncharacterized', + 'anttvf' => ' + Uncharacterized', + 'WinEdt' => ' + Uncharacterized', + 'float' => ' + Uncharacterized', + 'ada' => ' + Uncharacterized', + 'asc2tex' => ' + Uncharacterized', + 'a2ping' => ' + Uncharacterized', + 'flashmovie' => ' + Uncharacterized', + 'figsinltx' => ' + Uncharacterized', + 'ushyph' => ' + Uncharacterized', + 'kalender' => ' + Uncharacterized', + 'How to Package Your LaTeX Package' => ' + Uncharacterized', + 'objectz' => ' + Uncharacterized', + 'tkz-orm' => ' + Uncharacterized', + 'mathdots' => ' + Uncharacterized', + 'commath' => ' + Uncharacterized', + 'tufte-latex' => ' + Uncharacterized', + 'biblio-perl' => ' + Uncharacterized', + 'ltablex' => ' + Uncharacterized', + 'adobemapping' => ' + Uncharacterized', + 'statex' => ' + Uncharacterized', + 'sorhyph' => ' + Uncharacterized', + 'aaai' => ' + Uncharacterized', + 'TFMPKtest' => ' + Uncharacterized', + 'rtklage' => ' + Uncharacterized', + 'optional' => ' + Uncharacterized', + 'environ' => ' + Uncharacterized', + 'pdfbook' => 'Output > PDF, + PostScript', + 'blkcntrl' => ' + Uncharacterized', + 'The Comprehensive LaTeX Symbol List.' => ' + Uncharacterized', + 'makeprog' => ' + Uncharacterized', + 'showexpl' => ' + Uncharacterized', + 'stack' => ' + Uncharacterized', + 'rnototex' => ' + Uncharacterized', + 'lxmail' => ' + Uncharacterized', + 'listofsymbols' => ' + Uncharacterized', + 'epspdf-extra' => 'Tools > PDF + tools', + 'biblio' => ' + Uncharacterized', + 'preview' => ' + Uncharacterized', + 'arrayjob' => ' + Uncharacterized', + 'cmdtrack' => ' + Uncharacterized', + 'xtem' => ' + Uncharacterized', + 'softmaker-congress' => ' + Uncharacterized', + 'pgfopts' => ' + Uncharacterized', + 'algorithms' => ' + Uncharacterized', + 'thirteen' => ' + Uncharacterized', + 'bibtex-examples' => ' + Uncharacterized', + 'auxhook' => ' + Uncharacterized', + 'thai-rmit' => ' + Uncharacterized', + 'slemph' => ' + Uncharacterized', + 'egplot' => ' + Uncharacterized', + 'sphack' => ' + Uncharacterized', + 'vfinst' => ' + Uncharacterized', + 'latexcheat-esmx' => ' + Uncharacterized', + 'german' => ' + Uncharacterized', + 'euro' => ' + Uncharacterized', + 'csindex' => ' + Uncharacterized', + 'figfrag' => ' + Uncharacterized', + 'pybliographer' => ' + Uncharacterized', + 'crossword' => ' + Uncharacterized', + 'aeb-mlink' => ' + Uncharacterized', + 'drama' => ' + Uncharacterized', + 'malvern' => ' + Uncharacterized', + 'thsmc' => ' + Uncharacterized', + 'formular' => ' + Uncharacterized', + 'bibexport' => ' + Uncharacterized', + 'xcolor' => ' + Uncharacterized', + 'apprends-latex' => ' + Uncharacterized', + 'textcomp' => ' + Uncharacterized', + 'morehype' => 'Programming in TeX > + Programming structures', + 'footmisc' => ' + Uncharacterized', + 'xdvi' => ' + Uncharacterized', + 'ulsy-ps' => ' + Uncharacterized', + 'epigraph' => ' + Uncharacterized', + 'auncial' => ' + Uncharacterized', + 'MetaPlot' => ' + Uncharacterized', + 'fweb' => ' + Uncharacterized', + 'MathType' => ' + Uncharacterized', + 'js-misc' => ' + Uncharacterized', + 'graphicp' => ' + Uncharacterized', + 'exam209' => ' + Uncharacterized', + 'vxu' => ' + Uncharacterized', + 'bahyph' => ' + Uncharacterized', + 'textpath' => ' + Uncharacterized', + 'crossreference' => ' + Uncharacterized', + 'appendixnumberbeamer' => 'Document parts > + Appendix', + 'smalltableof' => ' + Uncharacterized', + 'xits' => ' + Uncharacterized', + 'ocr-b-outline' => ' + Uncharacterized', + 'pdfescape' => ' + Uncharacterized', + 'gurmukhi' => ' + Uncharacterized', + 'urw-arial' => ' + Uncharacterized', + 'duerer-LaTeX' => ' + Uncharacterized', + 'tangle' => ' + Uncharacterized', + 'sidecap' => ' + Uncharacterized', + 'noweb' => ' + Uncharacterized', + 'mathtime-metrics' => ' + Uncharacterized', + 'frletter' => ' + Uncharacterized', + 'VSliTeX' => ' + Uncharacterized', + 'hyphenat' => ' + Uncharacterized', + 'grffile' => ' + Uncharacterized', + 'LigaTeX' => ' + Uncharacterized', + 'arphic' => ' + Uncharacterized', + 'chngcntr' => ' + Uncharacterized', + 'hp2xx' => ' + Uncharacterized', + 'nameref' => ' + Uncharacterized', + 'metafont-beginners' => ' + Uncharacterized', + 'citeref' => ' + Uncharacterized', + 'mflogo-font' => ' + Uncharacterized', + 'hhline' => ' + Uncharacterized', + 'geomsty' => ' + Uncharacterized', + 'ukhyph' => ' + Uncharacterized', + 'gv-savepos' => ' + Uncharacterized', + 'chemsym' => ' + Uncharacterized', + 'storebox' => 'Output > PDF, + PostScript', + 'nicetext' => 'Page-focused > + Verbatim', + 'ltxdockit' => ' + Uncharacterized', + 'Technica' => ' + Uncharacterized', + 'wsuipa2tipa' => ' + Uncharacterized', + 'fundus-twcal' => ' + Uncharacterized', + 'threecolumn' => ' + Uncharacterized', + 'statrep' => 'Page-focused > + Verbatim', + 'musixtex-egler' => ' + Uncharacterized', + 'ijc' => ' + Uncharacterized', + 'addlines' => ' + Uncharacterized', + 'bibarts' => ' + Uncharacterized', + 'outlines' => ' + Uncharacterized', + 'uafthesis' => ' + Uncharacterized', + 'pxfonts' => ' + Uncharacterized', + 'collref' => ' + Uncharacterized', + 'jflap2tikz' => ' + Uncharacterized', + 'PicTeXsum' => ' + Uncharacterized', + 'achicago' => ' + Uncharacterized', + 'chemmacros' => ' + Uncharacterized', + 'Econometrica' => ' + Uncharacterized', + 'mparhack' => ' + Uncharacterized', + 'ispell' => ' + Uncharacterized', + 'calctab' => ' + Uncharacterized', + 'floatnohead' => ' + Uncharacterized', + 'dvips-os2' => ' + Uncharacterized', + 'asymptote-manual-zh-cn' => ' + Uncharacterized', + 'MathSpad' => ' + Uncharacterized', + 'mif2xfig' => ' + Uncharacterized', + 'flashcard' => ' + Uncharacterized', + 'japanese-otf-uptex' => 'Non-English languages > + Chinese, Japanese, Korean', + 'xyling' => ' + Uncharacterized', + 'taylor' => ' + Uncharacterized', + 'bibcard' => ' + Uncharacterized', + 'Courier' => ' + Uncharacterized', + 'fontspec' => ' + Uncharacterized', + 'catalogue' => ' + Uncharacterized', + 'context-construction-plan' => ' + Uncharacterized', + 'filehdr' => ' + Uncharacterized', + 'acrotex' => ' + Uncharacterized', + 'apa6e' => ' + Uncharacterized', + 'binomexp' => ' + Uncharacterized', + 'cassette-shipunov' => ' + Uncharacterized', + 'mactex-additions' => ' + Uncharacterized', + 'moresize' => ' + Uncharacterized', + 'gmdoc-enhance' => ' + Uncharacterized', + 'latexwizard' => ' + Uncharacterized', + 'ptex' => ' + Uncharacterized', + 't-angles' => ' + Uncharacterized', + 'deproc' => ' + Uncharacterized', + 'refstyle' => ' + Uncharacterized', + 'GraphicxSP' => ' + Uncharacterized', + 'complexity' => ' + Uncharacterized', + 'mciteplus' => ' + Uncharacterized', + 'xltxtra' => ' + Uncharacterized', + 'colorinfo' => ' + Uncharacterized', + 'bibview-x' => ' + Uncharacterized', + 'romandeadf' => ' + Uncharacterized', + 'mnttex' => ' + Uncharacterized', + 'bibhtml' => ' + Uncharacterized', + 'flowfram' => ' + Uncharacterized', + 'multido' => ' + Uncharacterized', + 'pst-eucl-translation-bg' => ' + Uncharacterized', + 'rake4latex' => ' + Uncharacterized', + 'FiNK' => ' + Uncharacterized', + 'sf298' => ' + Uncharacterized', + 'hobsub' => ' + Uncharacterized', + 'alltt' => ' + Uncharacterized', + 'fullpage' => ' + Uncharacterized', + 'format' => ' + Uncharacterized', + 'hieroglf' => ' + Uncharacterized', + 'dvicopy' => ' + Uncharacterized', + 'alphabib' => ' + Uncharacterized', + 'Mid2TeX/Free' => ' + Uncharacterized', + 'acroweb' => ' + Uncharacterized', + 'bibdb' => ' + Uncharacterized', + 'rcs' => ' + Uncharacterized', + 'hebtex' => ' + Uncharacterized', + 'cslatex' => ' + Uncharacterized', + 'ocherokee' => ' + Uncharacterized', + 'Shaded theorems' => ' + Uncharacterized', + 'photo' => ' + Uncharacterized', + 'biblatex-chicago' => ' + Uncharacterized', + 'trace' => ' + Uncharacterized', + 'matlabweb' => ' + Uncharacterized', + 'jpeg2ps' => ' + Uncharacterized', + 'bibtex' => ' + Uncharacterized', + 'adami' => ' + Uncharacterized', + 'chitex' => ' + Uncharacterized', + 'knuth-lib' => ' + Uncharacterized', + 'doi' => ' + Uncharacterized', + 'dviout' => ' + Uncharacterized', + 'pxgreeks' => ' + Uncharacterized', + 'CClicenses' => ' + Uncharacterized', + 'tipos' => ' + Uncharacterized', + 'mex' => ' + Uncharacterized', + 'piff-ams' => ' + Uncharacterized', + 'tocenter' => ' + Uncharacterized', + 'word2x' => ' + Uncharacterized', + 'truecols' => ' + Uncharacterized', + 'flatten' => ' + Uncharacterized', + 'bclogo' => ' + Uncharacterized', + 'stackrel' => ' + Uncharacterized', + 'evweek' => ' + Uncharacterized', + 'shhyphl' => ' + Uncharacterized', + 'mathtex' => ' + Uncharacterized', + 'ftetx' => ' + Uncharacterized', + 'dox' => ' + Uncharacterized', + 'ltxutil' => ' + Uncharacterized', + 'pdf-forms-tutorial' => ' + Uncharacterized', + 'apalike2' => ' + Uncharacterized', + 'Manuscript' => ' + Uncharacterized', + 'floatfig' => ' + Uncharacterized', + 'eepic' => ' + Uncharacterized', + 'ttf2pfb' => ' + Uncharacterized', + 'suanpan' => ' + Uncharacterized', + 'nnfootnote' => ' + Uncharacterized', + 'fahyph' => ' + Uncharacterized', + 'subeqn' => ' + Uncharacterized', + 'textcase' => ' + Uncharacterized', + 'Sikumuna' => ' + Uncharacterized', + 'bbding' => ' + Uncharacterized', + 't1utils' => ' + Uncharacterized', + 'memexsupp' => ' + Uncharacterized', + 'leawood' => ' + Uncharacterized', + 'lablst-pkg' => ' + Uncharacterized', + 'thmtools' => ' + Uncharacterized', + 'ps2mf' => ' + Uncharacterized', + 'softmaker-alteschwabacher' => ' + Uncharacterized', + 'eukdate' => ' + Uncharacterized', + 'psnfss-source' => ' + Uncharacterized', + 'trigonometry' => ' + Uncharacterized', + 'placeins' => ' + Uncharacterized', + 'xfor' => ' + Uncharacterized', + 'rmligs' => ' + Uncharacterized', + 'ltabptch' => ' + Uncharacterized', + 'thmbox' => ' + Uncharacterized', + 'javascript_TeXed' => ' + Uncharacterized', + 'feynmf' => ' + Uncharacterized', + 'Winfonts' => ' + Uncharacterized', + 'pst-barcode' => ' + Uncharacterized', + 'ecclesiastic' => ' + Uncharacterized', + 'locality' => ' + Uncharacterized', + 'lewis' => ' + Uncharacterized', + 'trsym' => ' + Uncharacterized', + 'threecol' => ' + Uncharacterized', + 'lacheck' => ' + Uncharacterized', + 'finplain' => ' + Uncharacterized', + 'amsbsy' => ' + Uncharacterized', + 'bibutils' => ' + Uncharacterized', + 'export' => ' + Uncharacterized', + 'myfilist' => 'Programming in TeX > + Package management', + 'split' => ' + Uncharacterized', + 'dktools' => ' + Uncharacterized', + 'montex' => ' + Uncharacterized', + 'binhex' => ' + Uncharacterized', + 'chem-journal' => ' + Uncharacterized', + 'ebib' => ' + Uncharacterized', + 'sbtex' => ' + Uncharacterized', + 'inlinedef' => ' + Uncharacterized', + 'glossaries' => ' + Uncharacterized', + 'beton' => ' + Uncharacterized', + 'biblatex-ieee' => ' + Uncharacterized', + 'ulem' => ' + Uncharacterized', + 'isodoc' => ' + Uncharacterized', + 'framed' => ' + Uncharacterized', + 'barkom' => ' + Uncharacterized', + 'pst-mirror' => ' + Uncharacterized', + 'mathbbol' => ' + Uncharacterized', + 'icelandic' => ' + Uncharacterized', + 'pdfcrop' => 'Tools > PDF + tools', + 'chemstyle' => ' + Uncharacterized', + 'infpic' => ' + Uncharacterized', + 'hatching' => ' + Uncharacterized', + 'pigpen' => ' + Uncharacterized', + 'clrscode' => ' + Uncharacterized', + 'morefloats' => ' + Uncharacterized', + 'kpfonts' => ' + Uncharacterized', + 'wntamil' => ' + Uncharacterized', + 'biblatex-historian' => ' + Uncharacterized', + 'diagmac' => ' + Uncharacterized', + 'random' => ' + Uncharacterized', + 'findbib' => ' + Uncharacterized', + 'sectsty' => ' + Uncharacterized', + 'ocr-latex' => ' + Uncharacterized', + 'emp' => ' + Uncharacterized', + 'pbox' => ' + Uncharacterized', + 'myletter' => ' + Uncharacterized', + 'mathstone' => ' + Uncharacterized', + 'slem' => ' + Uncharacterized', + 'softmaker-digital' => ' + Uncharacterized', + 'prv' => ' + Uncharacterized', + 'megatape' => ' + Uncharacterized', + 'dvibit' => ' + Uncharacterized', + 'calligra' => ' + Uncharacterized', + 'dice' => ' + Uncharacterized', + 'euproposal' => ' + Uncharacterized', + 'awb' => ' + Uncharacterized', + 'sagetex' => ' + Uncharacterized', + 'theoremref' => ' + Uncharacterized', + 'fldigigal' => ' + Uncharacterized', + 'cassette209' => ' + Uncharacterized', + 'byzfonts' => ' + Uncharacterized', + 'pst-lens' => ' + Uncharacterized', + 'pst-asr' => ' + Uncharacterized', + 'drs' => ' + Uncharacterized', + 'lucida' => ' + Uncharacterized', + 'pawpict' => ' + Uncharacterized', + 'fig2mfpic' => ' + Uncharacterized', + 'armtex' => ' + Uncharacterized', + 'TVS' => ' + Uncharacterized', + 'knuth-dist' => ' + Uncharacterized', + 'context-fixme' => ' + Uncharacterized', + 'db' => ' + Uncharacterized', + 'pl-mf' => ' + Uncharacterized', + 'dramatist' => ' + Uncharacterized', + 'tetex' => ' + Uncharacterized', + 'ps4mf-dos' => ' + Uncharacterized', + 'inputfile' => ' + Uncharacterized', + 'UML' => ' + Uncharacterized', + 'smartdiagram' => 'Page-focused > + Lists', + 'sectionbox' => ' + Uncharacterized', + 'AFMtoPL (Elwell)' => ' + Uncharacterized', + 'burmese' => ' + Uncharacterized', + 'cntdwn' => ' + Uncharacterized', + 'Synapsen' => ' + Uncharacterized', + 'mimetex' => ' + Uncharacterized', + 'colourchange' => ' + Uncharacterized', + 'unfinished' => ' + Uncharacterized', + 'titlesec' => ' + Uncharacterized', + 'epsfx' => ' + Uncharacterized', + 'psrip' => ' + Uncharacterized', + 'refman' => ' + Uncharacterized', + 'l2tabu' => ' + Uncharacterized', + 'bakoma-games' => ' + Uncharacterized', + 'turkishintro' => ' + Uncharacterized', + 'psnfssx' => ' + Uncharacterized', + 'ScriptTeX' => ' + Uncharacterized', + 'frame' => ' + Uncharacterized', + 'vutex' => ' + Uncharacterized', + 'octavo' => ' + Uncharacterized', + 'fancyfolien' => ' + Uncharacterized', + 'ebnf' => ' + Uncharacterized', + 'ochem' => ' + Uncharacterized', + 'apa6' => 'Document types > Articles + > Journal styles', + 'corelpak' => ' + Uncharacterized', + 'mdvi' => ' + Uncharacterized', + 'mathtools' => ' + Uncharacterized', + 'jneurosci' => ' + Uncharacterized', + 'dfgproposal' => ' + Uncharacterized', + 'impose' => ' + Uncharacterized', + 'sgmlcmpt' => ' + Uncharacterized', + 'ptsans' => ' + Uncharacterized', + 'devanagari-omega' => ' + Uncharacterized', + 'listbib' => ' + Uncharacterized', + 'variations' => ' + Uncharacterized', + 'japanese' => ' + Uncharacterized', + 'xkvview' => ' + Uncharacterized', + 'stex' => ' + Uncharacterized', + 'hvindex' => ' + Uncharacterized', + 'context-ruby' => ' + Uncharacterized', + 'lshort-polish' => ' + Uncharacterized', + 'staves' => ' + Uncharacterized', + 'swetex' => ' + Uncharacterized', + 'hangcaption' => ' + Uncharacterized', + 'chemcono' => ' + Uncharacterized', + 'lshort-bulgarian' => ' + Uncharacterized', + 'latexpand' => ' + Uncharacterized', + 'hands' => ' + Uncharacterized', + 'gapfill' => ' + Uncharacterized', + 'amsproc' => ' + Uncharacterized', + 'bibfile-reformat-pages' => ' + Uncharacterized', + 'fontinst' => ' + Uncharacterized', + 'dropping' => ' + Uncharacterized', + 'ShLaTeX' => ' + Uncharacterized', + 'newinsert' => ' + Uncharacterized', + 'hvfloat' => ' + Uncharacterized', + 'UK-TeX' => ' + Uncharacterized', + 'cc-pl' => ' + Uncharacterized', + 'dtl' => ' + Uncharacterized', + 'vf-howto' => ' + Uncharacterized', + 'semaphor' => ' + Uncharacterized', + 'bibleref-german' => ' + Uncharacterized', + 'pst-graphicx' => ' + Uncharacterized', + 'bophook' => ' + Uncharacterized', + 'corelpak-contrib' => ' + Uncharacterized', + 'latex-bnf' => ' + Uncharacterized', + 'inslrmin' => ' + Uncharacterized', + 'psnfssx-em' => ' + Uncharacterized', + 'vc' => ' + Uncharacterized', + 'gladtex' => ' + Uncharacterized', + 'scientificauthor' => ' + Uncharacterized', + 'lastpage' => ' + Uncharacterized', + 'texdraw' => ' + Uncharacterized', + 'relenc' => ' + Uncharacterized', + 'csquotes' => ' + Uncharacterized', + 'softmaker-nevada' => ' + Uncharacterized', + 'nccthm' => ' + Uncharacterized', + 'figflow' => ' + Uncharacterized', + 'softmaker-baskervillenova' => ' + Uncharacterized', + 'l3kernel' => 'Infrastructure > + Extensions', + 'tkz-kiviat' => 'Graphics > Postscript or + PDF graphics', + 'aastex' => ' + Uncharacterized', + 'cm-mf-opt-kern' => ' + Uncharacterized', + 'pst-infixplot' => ' + Uncharacterized', + 'old-faq-en' => ' + Uncharacterized', + 'csvtools' => ' + Uncharacterized', + 'vf-knuth' => ' + Uncharacterized', + 'testmath' => ' + Uncharacterized', + 'pst-dbicons' => ' + Uncharacterized', + 'guarani' => ' + Uncharacterized', + 'Finomaton' => ' + Uncharacterized', + 'grchyph' => ' + Uncharacterized', + 'brief_t' => ' + Uncharacterized', + 'constants' => ' + Uncharacterized', + 'hyperxmp' => ' + Uncharacterized', + 'norbib' => ' + Uncharacterized', + 'shavian' => ' + Uncharacterized', + 'fixmath' => ' + Uncharacterized', + 'amscd' => ' + Uncharacterized', + 'jurabib' => ' + Uncharacterized', + 'pstool' => ' + Uncharacterized', + 'ps4pdf' => 'Tools > PDF + tools', + 'autotoc' => ' + Uncharacterized', + 'pictex-autoarea' => ' + Uncharacterized', + 'bbfig' => ' + Uncharacterized', + 'sitem' => ' + Uncharacterized', + 'cryst' => ' + Uncharacterized', + 'qtree' => ' + Uncharacterized', + 'kile' => ' + Uncharacterized', + 'latex-doc' => ' + Uncharacterized', + 'cuted' => ' + Uncharacterized', + 'envelope' => ' + Uncharacterized', + 'schemeTeX' => ' + Uncharacterized', + 'ibycus-babel' => ' + Uncharacterized', + 'dvips' => ' + Uncharacterized', + 'tcvn' => ' + Uncharacterized', + 'polyglossia' => ' + Uncharacterized', + 'letter' => ' + Uncharacterized', + 'chextras' => ' + Uncharacterized', + 'ut-thesis' => ' + Uncharacterized', + 'errata' => ' + Uncharacterized', + 'pdfsync' => 'Tools > PDF + tools', + 'yfrak' => ' + Uncharacterized', + 'attrib' => ' + Uncharacterized', + 'untex' => ' + Uncharacterized', + 'oztex-fonts' => ' + Uncharacterized', + 'laansort' => ' + Uncharacterized', + 'typogrid' => ' + Uncharacterized', + 'webfiles' => ' + Uncharacterized', + 'atenddvi' => ' + Uncharacterized', + 'cursor' => ' + Uncharacterized', + 'genindex' => ' + Uncharacterized', + 'gatech-thesis' => ' + Uncharacterized', + 'sltables' => ' + Uncharacterized', + 'ps2pk' => ' + Uncharacterized', + 'listliketab' => ' + Uncharacterized', + 'textfit' => ' + Uncharacterized', + 'mathstyle' => ' + Uncharacterized', + 'ifdraft' => ' + Uncharacterized', + 'aramaic-serto' => ' + Uncharacterized', + 'Bengali Omega' => ' + Uncharacterized', + 'basix' => ' + Uncharacterized', + 'fax' => ' + Uncharacterized', + 'zero' => ' + Uncharacterized', + 'SciWordConv' => ' + Uncharacterized', + 'yswab' => ' + Uncharacterized', + 'watermark' => ' + Uncharacterized', + 'pst-circ' => ' + Uncharacterized', + 'bezos' => ' + Uncharacterized', + 'coursepaper' => ' + Uncharacterized', + 'simplecd' => ' + Uncharacterized', + 'nag' => ' + Uncharacterized', + 'floatrow' => ' + Uncharacterized', + 'beletter' => ' + Uncharacterized', + 'thesis' => ' + Uncharacterized', + 'LaTeXPiX' => ' + Uncharacterized', + 'dtk' => ' + Uncharacterized', + 'biber' => ' + Uncharacterized', + 'docmfp' => ' + Uncharacterized', + 'picins' => ' + Uncharacterized', + 'xifthen' => ' + Uncharacterized', + 'ttftogf' => ' + Uncharacterized', + 'polynom' => ' + Uncharacterized', + 'knuth-letter' => ' + Uncharacterized', + 'uothesis' => ' + Uncharacterized', + 'arrow' => ' + Uncharacterized', + 'makedtx' => ' + Uncharacterized', + 'QCM' => ' + Uncharacterized', + 'ha-prosper' => ' + Uncharacterized', + 'pictex2' => ' + Uncharacterized', + 'softmaker-egyptiennestd' => ' + Uncharacterized', + 'ghyphen' => ' + Uncharacterized', + 'vicentino' => ' + Uncharacterized', + 'tensind' => ' + Uncharacterized', + 'ftcap' => ' + Uncharacterized', + 'fontbl' => ' + Uncharacterized', + 'mathexam' => ' + Uncharacterized', + 'context-algorithmic' => ' + Uncharacterized', + 'xlop' => ' + Uncharacterized', + 'URW-Grotesq' => ' + Uncharacterized', + 'TeX-live source' => ' + Uncharacterized', + 'gmutils' => ' + Uncharacterized', + 'authoraftertitle' => ' + Uncharacterized', + 'drcaps' => ' + Uncharacterized', + 'pdfcprot' => ' + Uncharacterized', + 'ftnright' => ' + Uncharacterized', + 'dcounter' => ' + Uncharacterized', + 'versions' => 'Programming in TeX > + Package management', + 'caption2' => ' + Uncharacterized', + 'tex2bib' => ' + Uncharacterized', + 'utorontothesis' => ' + Uncharacterized', + 'thumby' => ' + Uncharacterized', + 'blacklettert1' => ' + Uncharacterized', + 'huhyph' => ' + Uncharacterized', + 'cd' => ' + Uncharacterized', + 'blackletter' => ' + Uncharacterized', + 'border' => ' + Uncharacterized', + 'occam' => ' + Uncharacterized', + 'tkz-tab' => ' + Uncharacterized', + 'wncyr' => ' + Uncharacterized', + 'frcursive' => ' + Uncharacterized', + 'pst-grad' => ' + Uncharacterized', + 'plari' => ' + Uncharacterized', + 'ae' => ' + Uncharacterized', + 'curve2e' => ' + Uncharacterized', + 'ucthesis209' => ' + Uncharacterized', + 'cachepic' => ' + Uncharacterized', + 'overcite' => ' + Uncharacterized', + 'biblatex-bwl' => 'Document parts > + Bibliography > Bibliographic styles', + 'pydocstrip' => ' + Uncharacterized', + 'csbulletin' => ' + Uncharacterized', + 'duerer' => ' + Uncharacterized', + 'linegoal' => ' + Uncharacterized', + 'gmverse' => ' + Uncharacterized', + 'newapa' => ' + Uncharacterized', + 'uebungsblatt' => ' + Uncharacterized', + 'natmove' => ' + Uncharacterized', + 'ps_conv' => ' + Uncharacterized', + 'probsoln' => ' + Uncharacterized', + 'slovak' => ' + Uncharacterized', + 'multicap' => ' + Uncharacterized', + 'realcalc' => ' + Uncharacterized', + 'interactiveworkbook' => ' + Uncharacterized', + 'ruhyphen' => ' + Uncharacterized', + 'ragged2e' => ' + Uncharacterized', + 'xl2latex' => ' + Uncharacterized', + 'pstdoc' => ' + Uncharacterized', + 'pdfcolparcolumns' => ' + Uncharacterized', + 'msc' => ' + Uncharacterized', + 'floatflt' => ' + Uncharacterized', + 'oubraces' => ' + Uncharacterized', + 'bibclean' => ' + Uncharacterized', + 'xdoc' => ' + Uncharacterized', + 'wotree' => ' + Uncharacterized', + 'kerntest' => ' + Uncharacterized', + 'lout' => ' + Uncharacterized', + 'urw-garamond' => ' + Uncharacterized', + 'unixman' => ' + Uncharacterized', + 'urwchancal' => ' + Uncharacterized', + 'syntrace' => ' + Uncharacterized', + 'dayofweek' => ' + Uncharacterized', + 'repeat' => ' + Uncharacterized', + 'piechartmp' => ' + Uncharacterized', + 'jlm' => ' + Uncharacterized', + 'tabvar' => ' + Uncharacterized', + 'metre' => ' + Uncharacterized', + 'texsis' => ' + Uncharacterized', + 'pagedraw' => ' + Uncharacterized', + 'bibweb' => ' + Uncharacterized', + 'cm-unicode' => ' + Uncharacterized', + 'turkmen' => ' + Uncharacterized', + 'GFS Porson' => ' + Uncharacterized', + 'gb4e' => ' + Uncharacterized', + 'redis' => ' + Uncharacterized', + 'oesch' => ' + Uncharacterized', + 'everypage' => ' + Uncharacterized', + 'bibsort' => ' + Uncharacterized', + 'xetex-pstricks' => ' + Uncharacterized', + 'empheq' => ' + Uncharacterized', + 'ipa' => ' + Uncharacterized', + 'oldstyle' => ' + Uncharacterized', + 'bpolynomial' => ' + Uncharacterized', + 'cdlabeler' => ' + Uncharacterized', + 'gu' => ' + Uncharacterized', + 'gcard' => ' + Uncharacterized', + 'lgreek' => ' + Uncharacterized', + 'font_selection' => ' + Uncharacterized', + 'lshort-ukr' => ' + Uncharacterized', + 'camel' => ' + Uncharacterized', + 'word2latex' => ' + Uncharacterized', + 'latex-fonts' => ' + Uncharacterized', + 'softmaker-marseille' => ' + Uncharacterized', + 'TeXhax' => ' + Uncharacterized', + 'pst-fr3d' => ' + Uncharacterized', + 'latexcad' => ' + Uncharacterized', + 'listing-pln' => ' + Uncharacterized', + 'bibfind' => ' + Uncharacterized', + 'ifnextok' => ' + Uncharacterized', + 'EndNote2bib' => ' + Uncharacterized', + 'lapdf' => 'Graphics > Postscript or + PDF graphics', + 'anleitung' => ' + Uncharacterized', + 'cm-afm' => ' + Uncharacterized', + 'psfragx' => ' + Uncharacterized', + 'russian-help' => ' + Uncharacterized', + 'trig' => ' + Uncharacterized', + 'luamplib' => ' + Uncharacterized', + 'TengwarScript' => ' + Uncharacterized', + 'pgfgantt' => ' + Uncharacterized', + 'nccmath' => ' + Uncharacterized', + 'latin' => ' + Uncharacterized', + 'pst-3d' => ' + Uncharacterized', + 'geometry-de' => ' + Uncharacterized', + 'currvita' => ' + Uncharacterized', + 'makebox' => ' + Uncharacterized', + 'ccfonts' => ' + Uncharacterized', + 'enumspec' => ' + Uncharacterized', + 'latex2e-reference' => ' + Uncharacterized', + 'TeEncontreX' => ' + Uncharacterized', + 'osa' => ' + Uncharacterized', + 'nccbbb' => ' + Uncharacterized', + 'magicnum' => ' + Uncharacterized', + 'emtrees' => ' + Uncharacterized', + 'AeB Pro' => ' + Uncharacterized', + 'gaceta' => ' + Uncharacterized', + 'wasy2' => ' + Uncharacterized', + 'longtocline' => ' + Uncharacterized', + 'default' => ' + Uncharacterized', + 'selinput' => ' + Uncharacterized', + 'mab2bib' => ' + Uncharacterized', + 'mk' => ' + Uncharacterized', + 'mongolian-babel' => ' + Uncharacterized', + 'ifvtex' => ' + Uncharacterized', + 'boondox' => ' + Uncharacterized', + 'textmerg' => ' + Uncharacterized', + 'CM Type3' => ' + Uncharacterized', + 'lifia-th' => ' + Uncharacterized', + 'remreset' => ' + Uncharacterized', + 'ams2bib' => ' + Uncharacterized', + 'eqparbox' => ' + Uncharacterized', + 'emtexgi' => ' + Uncharacterized', + 'Il sistema PSfrag' => ' + Uncharacterized', + 'termlist' => ' + Uncharacterized', + 'diagmac2' => ' + Uncharacterized', + 'tabulars-e' => ' + Uncharacterized', + 'exam' => ' + Uncharacterized', + 'refcount' => ' + Uncharacterized', + 'jasthesis' => ' + Uncharacterized', + 'tikzpagenodes' => 'Page-focused > Page + geometry', + 'badge' => ' + Uncharacterized', + 'rotate-textures' => ' + Uncharacterized', + 'amsaddr' => ' + Uncharacterized', + 'de-macro' => ' + Uncharacterized', + 'cite' => ' + Uncharacterized', + 'ltxdiff' => ' + Uncharacterized', + 'biblatex-nature' => ' + Uncharacterized', + 'crosstex' => ' + Uncharacterized', + 'nassflow' => ' + Uncharacterized', + 'context-rst' => ' + Uncharacterized', + 'chapterbib' => ' + Uncharacterized', + 'dco' => ' + Uncharacterized', + 'oletex' => ' + Uncharacterized', + 'newunicodechar' => ' + Uncharacterized', + 'was' => ' + Uncharacterized', + 'multibbl' => ' + Uncharacterized', + 'bm2ltx' => ' + Uncharacterized', + 'bakoma-fonts' => ' + Uncharacterized', + 'protecteddef' => ' + Uncharacterized', + 'laletter' => ' + Uncharacterized', + 'auto-pst-pdf' => 'Tools > PDF + tools', + 'cjw' => ' + Uncharacterized', + 'expressg' => ' + Uncharacterized', + 'phyzzx' => ' + Uncharacterized', + 'MFwL' => ' + Uncharacterized', + 'cweb-hy' => ' + Uncharacterized', + 'wnri' => ' + Uncharacterized', + 'ukrhyph' => ' + Uncharacterized', + 'chess-problem-diagrams' => ' + Uncharacterized', + 'combelow' => ' + Uncharacterized', + 'dos-dc' => ' + Uncharacterized', + 'syllogism' => ' + Uncharacterized', + 'delarray' => ' + Uncharacterized', + 'mltex-ltx' => ' + Uncharacterized', + 'barcodes-vulis' => ' + Uncharacterized', + 'deflist' => ' + Uncharacterized', + 'pict2e' => ' + Uncharacterized', + 'silence' => ' + Uncharacterized', + 'baskervaldadf' => ' + Uncharacterized', + 'stabular' => ' + Uncharacterized', + 'lpic' => ' + Uncharacterized', + 'hyperref' => ' + Uncharacterized', + 'siunits' => ' + Uncharacterized', + 'ratexdb' => ' + Uncharacterized', + 'lintex' => ' + Uncharacterized', + 'firststeps-xampl' => ' + Uncharacterized', + 'dviincl' => ' + Uncharacterized', + 'webguide' => ' + Uncharacterized', + 'evautofl' => ' + Uncharacterized', + 'pst-pdgr' => ' + Uncharacterized', + 'pkfix' => ' + Uncharacterized', + 'ocr-b' => ' + Uncharacterized', + 'GuITlogo' => ' + Uncharacterized', + 'fdsymbol' => ' + Uncharacterized', + 'evenpage' => ' + Uncharacterized', + 'siggraph' => ' + Uncharacterized', + 'miller' => ' + Uncharacterized', + 'maltese' => ' + Uncharacterized', + 'pandora-latex' => ' + Uncharacterized', + 'drawing' => ' + Uncharacterized', + 'xrefwarn' => ' + Uncharacterized', + 'Makor 2' => ' + Uncharacterized', + 'tree-dvips' => ' + Uncharacterized', + 'arydshln' => ' + Uncharacterized', + 'laps' => ' + Uncharacterized', + 'crw' => ' + Uncharacterized', + 'ifluatex' => ' + Uncharacterized', + 'MakeCirc' => ' + Uncharacterized', + 'pst-fun' => ' + Uncharacterized', + 'esint' => ' + Uncharacterized', + 'romanneg' => ' + Uncharacterized', + 'plpsfont' => ' + Uncharacterized', + 'pdfrender' => 'Tools > PDF + tools', + 'TeX Converter' => ' + Uncharacterized', + 'bizcard' => ' + Uncharacterized', + 'plainyr' => ' + Uncharacterized', + 'fancytooltips' => ' + Uncharacterized', + 'progress' => ' + Uncharacterized', + 'pst-am' => ' + Uncharacterized', + 'secdot' => ' + Uncharacterized', + 'cyrillic209' => ' + Uncharacterized', + 'lshort-turkish' => ' + Uncharacterized', + 'uwmslide' => ' + Uncharacterized', + 'asana-math' => ' + Uncharacterized', + 'label-pln' => ' + Uncharacterized', + 'digiconfigs' => ' + Uncharacterized', + 'boldtensors' => ' + Uncharacterized', + 'tex-gyre-heros' => ' + Uncharacterized', + 'mxd' => ' + Uncharacterized', + 'grfguide' => ' + Uncharacterized', + 'chroma' => ' + Uncharacterized', + 'dvi2ln3' => ' + Uncharacterized', + 'envmath' => ' + Uncharacterized', + 'bib2dvi' => ' + Uncharacterized', + 'pst-xkey' => ' + Uncharacterized', + 'gloss' => ' + Uncharacterized', + 'cweb-latex' => ' + Uncharacterized', + 'wasy' => ' + Uncharacterized', + 'softmaker-helium' => ' + Uncharacterized', + 'cfr-lm' => ' + Uncharacterized', + 'grnumalt' => ' + Uncharacterized', + 'ntabbing' => ' + Uncharacterized', + 'Oberdiek' => ' + Uncharacterized', + 'eqmark' => ' + Uncharacterized', + 'biblatex-science' => ' + Uncharacterized', + 'LCDF-typetools' => ' + Uncharacterized', + 'lshort-german' => ' + Uncharacterized', + 'ama' => ' + Uncharacterized', + 'pbsheet' => ' + Uncharacterized', + 'mmap' => ' + Uncharacterized', + 'CTAN tools' => ' + Uncharacterized', + 'Orderer' => ' + Uncharacterized', + 'glotex' => ' + Uncharacterized', + 'asymptote-by-example-zh-cn' => ' + Uncharacterized', + 'uhthesis' => ' + Uncharacterized', + 'pdftex_oztex' => ' + Uncharacterized', + 'pdfjam' => 'Tools > PDF + tools', + 'yannisgr' => ' + Uncharacterized', + 'standalone' => ' + Uncharacterized', + 'hypdvips' => ' + Uncharacterized', + 'doublecol' => ' + Uncharacterized', + 'iwona' => ' + Uncharacterized', + 'egothic' => ' + Uncharacterized', + 'xetal' => ' + Uncharacterized', + 'systeme' => ' + Uncharacterized', + 'epic' => ' + Uncharacterized', + 'dictsym' => ' + Uncharacterized', + 'smartref' => ' + Uncharacterized', + 'beamer-fuberlin' => ' + Uncharacterized', + 'texi2roff' => ' + Uncharacterized', + 'METATeX' => ' + Uncharacterized', + 'weave' => ' + Uncharacterized', + 'manjutex' => ' + Uncharacterized', + 'lsc' => ' + Uncharacterized', + 'lettre' => ' + Uncharacterized', + 'pst-electricfield' => ' + Uncharacterized', + 'underscore' => ' + Uncharacterized', + 'gen' => ' + Uncharacterized', + 'context-bnf' => ' + Uncharacterized', + 'synttree' => ' + Uncharacterized', + 'pstricks' => ' + Uncharacterized', + 'ratex' => ' + Uncharacterized', + 'pst-eps' => ' + Uncharacterized', + 'futhark' => ' + Uncharacterized', + 'xkeyval' => ' + Uncharacterized', + 'fakebold' => ' + Uncharacterized', + 'polytable' => ' + Uncharacterized', + 'custom-bib' => ' + Uncharacterized', + 'simpsons' => ' + Uncharacterized', + 'msu-thesis' => ' + Uncharacterized', + 'sinhala' => ' + Uncharacterized', + 'sober' => ' + Uncharacterized', + 'block' => ' + Uncharacterized', + 'pageframe' => ' + Uncharacterized', + 'showframe' => ' + Uncharacterized', + 'ega2mf' => ' + Uncharacterized', + 'minionpro' => ' + Uncharacterized', + 'eskd' => ' + Uncharacterized', + 'wordlike' => ' + Uncharacterized', + 'hepnames' => ' + Uncharacterized', + 'egameps' => ' + Uncharacterized', + 'bodegraph' => ' + Uncharacterized', + 'italic' => ' + Uncharacterized', + 'vdm' => ' + Uncharacterized', + 'makefonts' => ' + Uncharacterized', + 'context-inifile' => ' + Uncharacterized', + 'noTeX' => ' + Uncharacterized', + 'ghostscript' => ' + Uncharacterized', + 'bnf-plain' => ' + Uncharacterized', + 'ec' => ' + Uncharacterized', + 'annot-pro' => ' + Uncharacterized', + 'modref' => ' + Uncharacterized', + 'schedule209' => ' + Uncharacterized', + 'visualFAQ' => ' + Uncharacterized', + 'advdate' => ' + Uncharacterized', + 'ltxtable' => ' + Uncharacterized', + 'colorwav' => ' + Uncharacterized', + 'meper' => ' + Uncharacterized', + 'gl-tree' => ' + Uncharacterized', + 'r_und_s' => ' + Uncharacterized', + 'greek-makeindex' => ' + Uncharacterized', + 'ccicons' => ' + Uncharacterized', + 'rlepsf' => ' + Uncharacterized', + 'findhyph' => ' + Uncharacterized', + 'zref' => ' + Uncharacterized', + 'rcs-pln' => ' + Uncharacterized', + 'pst2pdf' => 'Tools > PDF + tools', + 'drac' => ' + Uncharacterized', + 'powerdot-fuberlin' => ' + Uncharacterized', + 'mltex' => ' + Uncharacterized', + 'jphysiol' => ' + Uncharacterized', + 'ugarite' => ' + Uncharacterized', + 'obas' => ' + Uncharacterized', + 'amspell' => ' + Uncharacterized', + 'raggedr' => ' + Uncharacterized', + 'texmalli' => ' + Uncharacterized', + 'opcit' => ' + Uncharacterized', + 'array' => ' + Uncharacterized', + 'edmargin' => ' + Uncharacterized', + 'dkhyphen' => ' + Uncharacterized', + 'gcite' => ' + Uncharacterized', + 'morehelp' => ' + Uncharacterized', + 'pst-soroban' => ' + Uncharacterized', + 'method' => ' + Uncharacterized', + 'gridset' => ' + Uncharacterized', + 'CurVe' => ' + Uncharacterized', + 'punk' => ' + Uncharacterized', + 'ulqda' => ' + Uncharacterized', + 'alphalph' => ' + Uncharacterized', + 'teubner' => ' + Uncharacterized', + 'pmboxdraw' => ' + Uncharacterized', + 'mhs' => ' + Uncharacterized', + 'linsys' => ' + Uncharacterized', + 'pittetd' => ' + Uncharacterized', + 'fontbook' => 'Documentation > + Other', + 'mkjobtexmf' => ' + Uncharacterized', + 'babel' => ' + Uncharacterized', + 'iTe' => ' + Uncharacterized', + 'tfmpk' => ' + Uncharacterized', + 'ibygrk' => ' + Uncharacterized', + 'txt2tex' => ' + Uncharacterized', + 'attachfile' => ' + Uncharacterized', + 'ted' => ' + Uncharacterized', + 'nolbreaks' => 'Programming in TeX > Box + manipulation', + 'fix2col' => ' + Uncharacterized', + 'winlatex' => ' + Uncharacterized', + 'junicode' => ' + Uncharacterized', + 'pst-osci' => ' + Uncharacterized', + 'procIAGssymp' => ' + Uncharacterized', + 'logreq' => ' + Uncharacterized', + 'pst-optic' => ' + Uncharacterized', + 'philex' => ' + Uncharacterized', + 'akletter' => ' + Uncharacterized', + 'doublespace' => ' + Uncharacterized', + 'ly1' => ' + Uncharacterized', + 'clefval' => ' + Uncharacterized', + 'mdframed' => ' + Uncharacterized', + 'dvipdfm' => ' + Uncharacterized', + 'mmpfb' => ' + Uncharacterized', + 'lgrind' => ' + Uncharacterized', + 'shadow' => ' + Uncharacterized', + 'assignment' => ' + Uncharacterized', + 'maketable' => ' + Uncharacterized', + 'slatex_scheme' => ' + Uncharacterized', + 'nfssext-cfr' => ' + Uncharacterized', + 'tex--xet' => ' + Uncharacterized', + 'pst-qtree' => ' + Uncharacterized', + 'vaucanson-g' => ' + Uncharacterized', + 'tmmath-fonts' => ' + Uncharacterized', + 'ePiX' => ' + Uncharacterized', + 'verbdef' => ' + Uncharacterized', + 'beamer-tut-pt' => ' + Uncharacterized', + 'cptex' => ' + Uncharacterized', + 'margbib' => ' + Uncharacterized', + 'eps2pdf' => 'Tools > PDF + tools', + 'gmiflink' => ' + Uncharacterized', + 'FourierNC' => ' + Uncharacterized', + 'monster' => ' + Uncharacterized', + 'feyn' => ' + Uncharacterized', + 'pst-fractal' => ' + Uncharacterized', + 'ctex-faq' => ' + Uncharacterized', + 'lshort-portuguese' => ' + Uncharacterized', + 'ledarab' => ' + Uncharacterized', + 'synproof' => ' + Uncharacterized', + 'listingsutf8' => ' + Uncharacterized', + 'atbegshi' => ' + Uncharacterized', + 'getrefs' => ' + Uncharacterized', + 'eulervm' => ' + Uncharacterized', + 'ydoc' => ' + Uncharacterized', + 'esieecv' => ' + Uncharacterized', + 'transparent' => ' + Uncharacterized', + 'texments' => ' + Uncharacterized', + 'skak' => ' + Uncharacterized', + 'namunsrt' => ' + Uncharacterized', + 'calendar-Barr' => ' + Uncharacterized', + 'doafter' => ' + Uncharacterized', + 'tabularx' => ' + Uncharacterized', + 'layouts' => ' + Uncharacterized', + 'lshort-zh-cn' => ' + Uncharacterized', + 'match_parens' => ' + Uncharacterized', + 'gsview' => ' + Uncharacterized', + 'tif2eps' => ' + Uncharacterized', + 'karnaugh' => ' + Uncharacterized', + 'thrmappendix' => ' + Uncharacterized', + 'foekfont' => ' + Uncharacterized', + 'treesvr' => ' + Uncharacterized', + 'a2ac' => ' + Uncharacterized', + 'loggates' => ' + Uncharacterized', + 'atari-cstex' => ' + Uncharacterized', + 'pdfcol' => ' + Uncharacterized', + 'parrun' => ' + Uncharacterized', + 'mla-paper' => ' + Uncharacterized', + 'antt' => ' + Uncharacterized', + 'ifsym' => ' + Uncharacterized', + 'parboxx' => ' + Uncharacterized', + 'calendarweek' => ' + Uncharacterized', + 'cmyk-hax' => ' + Uncharacterized', + 'dyntree' => ' + Uncharacterized', + 'wrtfile' => ' + Uncharacterized', + 'braket' => ' + Uncharacterized', + 'hge' => ' + Uncharacterized', + 'includex' => ' + Uncharacterized', + 'biblatex-authoryear-icomp-tt' => ' + Uncharacterized', + 'csplain' => ' + Uncharacterized', + 'lamstex-index' => ' + Uncharacterized', + 'xecolour' => ' + Uncharacterized', + 'pageno' => ' + Uncharacterized', + 'mtgreek' => ' + Uncharacterized', + 'fc' => ' + Uncharacterized', + 'dvidvi' => ' + Uncharacterized', + 'cpssp' => ' + Uncharacterized', + 'JustFontItTE' => ' + Uncharacterized', + 'allrunes' => ' + Uncharacterized', + 'lwc-examples' => ' + Uncharacterized', + 'cookybooky' => ' + Uncharacterized', + 'dvips-shell' => ' + Uncharacterized', + 'FigBib' => ' + Uncharacterized', + 'ps2eps' => ' + Uncharacterized', + 'fontwrap' => ' + Uncharacterized', + 'buscard' => ' + Uncharacterized', + 'sublabel' => ' + Uncharacterized', + 'skeycommand' => ' + Uncharacterized', + 'tex-gyre-schola' => ' + Uncharacterized', + 'pst-bezier' => ' + Uncharacterized', + 'bibleref' => ' + Uncharacterized', + 'uri' => ' + Uncharacterized', + 'psfixbb' => ' + Uncharacterized', + 'pracjourn' => ' + Uncharacterized', + 'biblatex-apa' => ' + Uncharacterized', + 'checklab' => ' + Uncharacterized', + 'bibtexmng' => ' + Uncharacterized', + 'bbm-macros' => ' + Uncharacterized', + 'tex-gyre-adventor' => ' + Uncharacterized', + 'pst-2dplot' => ' + Uncharacterized', + 'abbrevs' => ' + Uncharacterized', + 'vpe' => ' + Uncharacterized', + 'ctanify' => ' + Uncharacterized', + 'grtimes' => ' + Uncharacterized', + 'savetrees' => ' + Uncharacterized', + 'autolist' => ' + Uncharacterized', + 'EUenc' => ' + Uncharacterized', + 'sudoku' => ' + Uncharacterized', + 'vertbars' => ' + Uncharacterized', + 'nuc' => ' + Uncharacterized', + 'formlett' => ' + Uncharacterized', + 'genfam' => ' + Uncharacterized', + 'quotchap' => ' + Uncharacterized', + 'msx2msa' => ' + Uncharacterized', + 'inconsolata' => ' + Uncharacterized', + 'style-showcase' => ' + Uncharacterized', + 'fixmetodonotes' => 'Document parts > Table of + contents', + 'texchord' => ' + Uncharacterized', + 'xunicode' => ' + Uncharacterized', + 'mtex' => ' + Uncharacterized', + 'makebarcode' => ' + Uncharacterized', + 'lualibs' => ' + Uncharacterized', + 'latex4wp-it' => ' + Uncharacterized', + 'flatex' => ' + Uncharacterized', + 'qsymbols' => ' + Uncharacterized', + 'hyper' => ' + Uncharacterized', + 'warning' => ' + Uncharacterized', + 'duplicat' => ' + Uncharacterized', + 'cmap' => ' + Uncharacterized', + 'dvisun' => ' + Uncharacterized', + 'tocloft' => ' + Uncharacterized', + 'devanagari' => ' + Uncharacterized', + 'idxlayout' => ' + Uncharacterized', + 'phoncard' => ' + Uncharacterized', + 'dialogue' => ' + Uncharacterized', + 'iwhdp' => ' + Uncharacterized', + 'altfont' => ' + Uncharacterized', + 'mpgraphics' => ' + Uncharacterized', + 'icehyph' => ' + Uncharacterized', + 'context-taspresent' => ' + Uncharacterized', + 'txp' => ' + Uncharacterized', + 'subeqnarray' => ' + Uncharacterized', + 'modiagram' => 'Graphics > Inside + TeX', + 'epspdf' => 'Tools > PDF + tools', + 'refer' => ' + Uncharacterized', + 'kvoptions' => ' + Uncharacterized', + 'si' => ' + Uncharacterized', + 'bbold' => ' + Uncharacterized', + 'tgrind' => ' + Uncharacterized', + 'plates' => ' + Uncharacterized', + 'canoniclayout' => ' + Uncharacterized', + 'code128' => ' + Uncharacterized', + 'bibunits' => ' + Uncharacterized', + 'ogonek' => ' + Uncharacterized', + 'doc-k' => ' + Uncharacterized', + 'zip' => ' + Uncharacterized', + 'xtemplate' => 'Page-focused > Page + geometry', + 'relsize' => ' + Uncharacterized', + 'pst-exa' => ' + Uncharacterized', + 'rsfs' => ' + Uncharacterized', + 'epsdice' => ' + Uncharacterized', + 'georgian-stanier' => ' + Uncharacterized', + 'hfoldsty' => ' + Uncharacterized', + 'shortlst' => ' + Uncharacterized', + 'ConTeXt-gnuplot' => ' + Uncharacterized', + 'c-pascal' => ' + Uncharacterized', + 'voss-mathcol' => ' + Uncharacterized', + 'miniltx' => ' + Uncharacterized', + 't1infos' => ' + Uncharacterized', + 'sffms' => ' + Uncharacterized', + 'PNAS' => ' + Uncharacterized', + 'drv' => ' + Uncharacterized', + 'context-cmscbf' => ' + Uncharacterized', + 'diagramf' => ' + Uncharacterized', + 'totcount' => ' + Uncharacterized', + 'catechis' => ' + Uncharacterized', + 'elhyphen' => ' + Uncharacterized', + 'colordvi' => ' + Uncharacterized', + 'refer-tools' => ' + Uncharacterized', + 'texdeps' => ' + Uncharacterized', + 'insdljs' => ' + Uncharacterized', + 'cmsd' => ' + Uncharacterized', + 'psfont' => ' + Uncharacterized', + 'amsrefs' => ' + Uncharacterized', + 'grid' => ' + Uncharacterized', + 'tex2ltx' => ' + Uncharacterized', + 'flags' => ' + Uncharacterized', + 'tr2latex' => ' + Uncharacterized', + 'uowthesis' => ' + Uncharacterized', + 'AeB slicing' => ' + Uncharacterized', + 'latex-doc-ptr' => ' + Uncharacterized', + 'casyl' => ' + Uncharacterized', + 'tkz-doc' => ' + Uncharacterized', + 'figcaps' => ' + Uncharacterized', + 'aplweb' => ' + Uncharacterized', + 'labelmag' => ' + Uncharacterized', + 'ransom' => ' + Uncharacterized', + 'lscape' => ' + Uncharacterized', + 'psnfssx-8r' => ' + Uncharacterized', + 'templates-fenn' => ' + Uncharacterized', + 'dblfont' => ' + Uncharacterized', + 'nopageno' => ' + Uncharacterized', + 'utopia' => ' + Uncharacterized', + 'zwgetfdate' => ' + Uncharacterized', + 'randtext' => ' + Uncharacterized', + 'dvipdfmx' => ' + Uncharacterized', + 'endheads' => ' + Uncharacterized', + 'onrannual' => ' + Uncharacterized', + 'drafthead' => ' + Uncharacterized', + 'resizegather' => ' + Uncharacterized', + 'ams-cd' => ' + Uncharacterized', + 'sfg' => ' + Uncharacterized', + 'eqnarray209' => ' + Uncharacterized', + 'spreadtab' => ' + Uncharacterized', + 'pst-Jtree' => ' + Uncharacterized', + 'calendar' => ' + Uncharacterized', + 'xepersian' => ' + Uncharacterized', + 'pdflscape' => 'Tools > PDF + tools', + 'bibtool' => ' + Uncharacterized', + 'plain-cm' => ' + Uncharacterized', + 'bibindex' => ' + Uncharacterized', + 'printlen' => ' + Uncharacterized', + 'balanced' => ' + Uncharacterized', + 'tibetan' => ' + Uncharacterized', + 'GraphConv' => ' + Uncharacterized', + 'vpp' => ' + Uncharacterized', + 'spie' => ' + Uncharacterized', + 'lms' => ' + Uncharacterized', + 'pdf-mps-supp' => 'Tools > PDF + tools', + 'chomsky' => ' + Uncharacterized', + 'phy-bstyles' => ' + Uncharacterized', + 'aeb-mobile' => 'Page-focused > Page + geometry', + 'fribrief' => ' + Uncharacterized', + 'hyphen-spanish' => ' + Uncharacterized', + 'documentation' => 'Subject-specific typesetting + > Computer science', + 'prelim2e' => ' + Uncharacterized', + 'fn2end' => ' + Uncharacterized', + 'fontenc' => ' + Uncharacterized', + 'acmtrans' => ' + Uncharacterized', + 'newcommand' => ' + Uncharacterized', + 'm-pictex' => ' + Uncharacterized', + 'ascelike' => ' + Uncharacterized', + 'hfbright' => ' + Uncharacterized', + 'termcal' => ' + Uncharacterized', + 'WP2LaTeX' => ' + Uncharacterized', + 'magaz' => ' + Uncharacterized', + 'autoview' => ' + Uncharacterized', + 'xr' => ' + Uncharacterized', + 'ltxdoc' => ' + Uncharacterized', + 'hilowres' => ' + Uncharacterized', + 'tabularht' => ' + Uncharacterized', + 'screen' => 'Output > + Other', + 'datenumber' => ' + Uncharacterized', + 'gbrief-creator' => ' + Uncharacterized', + 'fig2sty' => ' + Uncharacterized', + 'xmlplay' => ' + Uncharacterized', + 'xeindex' => ' + Uncharacterized', + 'libertine' => ' + Uncharacterized', + 'harpoon' => ' + Uncharacterized', + 'csname-doc' => ' + Uncharacterized', + 'gene-logic' => ' + Uncharacterized', + 'tamil-omega' => ' + Uncharacterized', + 'romaniantex' => ' + Uncharacterized', + 'biblatex-philosophy' => ' + Uncharacterized', + 'pmat' => ' + Uncharacterized', + 'TeXProject' => ' + Uncharacterized', + 'midpage' => ' + Uncharacterized', + 'fouridx' => ' + Uncharacterized', + 'varisize' => ' + Uncharacterized', + 'bm2font' => ' + Uncharacterized', + 'HPtfm2pl' => ' + Uncharacterized', + 'logsys' => ' + Uncharacterized', + 'augie' => ' + Uncharacterized', + 'breakcites' => ' + Uncharacterized', + 'xypic' => ' + Uncharacterized', + 'TeXnicCenter' => ' + Uncharacterized', + 'webomints' => ' + Uncharacterized', + 'tib' => ' + Uncharacterized', + 'bibtopic' => ' + Uncharacterized', + 'spanish-mx' => ' + Uncharacterized', + 'HEPparticles' => ' + Uncharacterized', + 'varindent' => ' + Uncharacterized', + 'texinfo' => ' + Uncharacterized', + 'tex-gyre-termes' => ' + Uncharacterized', + 'tfrupee' => ' + Uncharacterized', + 'listing' => ' + Uncharacterized', + 'xhfill' => ' + Uncharacterized', + 'jas99_m' => ' + Uncharacterized', + 'manyfoot' => ' + Uncharacterized', + 'jbact' => ' + Uncharacterized', + 'knuth-base' => ' + Uncharacterized', + 'idverb' => ' + Uncharacterized', + 'fullpict' => ' + Uncharacterized', + 'srune' => ' + Uncharacterized', + 'dotlessj' => ' + Uncharacterized', + 'ijcai89' => ' + Uncharacterized', + 'iso' => ' + Uncharacterized', + 'varwidth' => ' + Uncharacterized', + 'pphlp' => ' + Uncharacterized', + 'algorithmicx' => ' + Uncharacterized', + 'highlight' => ' + Uncharacterized', + 'pdfcomment' => 'Tools > PDF + tools', + 'duotenzor' => ' + Uncharacterized', + 'greekdates' => ' + Uncharacterized', + 'pdfpages' => 'Tools > PDF + tools', + 'kdgreek' => ' + Uncharacterized', + 'dialogl' => ' + Uncharacterized', + 'gradientframe' => ' + Uncharacterized', + 'alnumsec' => ' + Uncharacterized', + 'elsarticle' => ' + Uncharacterized', + 'sans' => ' + Uncharacterized', + 'lettrine' => ' + Uncharacterized', + 'isf' => ' + Uncharacterized', + 'genealogy' => ' + Uncharacterized', + 'catchfile' => ' + Uncharacterized', + 'cropmrks' => ' + Uncharacterized', + 'sseq' => ' + Uncharacterized', + 'psfrag' => ' + Uncharacterized', + 'schwell' => ' + Uncharacterized', + 'mcite' => ' + Uncharacterized', + 'coordsys' => ' + Uncharacterized', + 'texpictex' => ' + Uncharacterized', + 'dinbrief' => ' + Uncharacterized', + 'facsimile' => ' + Uncharacterized', + 'formula' => ' + Uncharacterized', + 'tableauVariations' => ' + Uncharacterized', + 'authordate' => ' + Uncharacterized', + 'boolexpr' => ' + Uncharacterized', + 'detex' => ' + Uncharacterized', + 'appelt-chess' => ' + Uncharacterized', + 'c2cweb' => ' + Uncharacterized', + 'CVsty' => ' + Uncharacterized', + 'r2bib' => ' + Uncharacterized', + 'Make patterns.' => ' + Uncharacterized', + 'upca' => ' + Uncharacterized', + 'plain-ltx' => ' + Uncharacterized', + 'slhyph' => ' + Uncharacterized', + 'GFS Artemisia' => ' + Uncharacterized', + 'censor' => ' + Uncharacterized', + 'Eqmlite/Free' => ' + Uncharacterized', + 'iahyphen' => ' + Uncharacterized', + 'wordcount' => ' + Uncharacterized', + 'underlin' => ' + Uncharacterized', + 'slidenotes' => ' + Uncharacterized', + 'latex4wp' => ' + Uncharacterized', + 'libris' => ' + Uncharacterized', + 'DVItoLN03' => ' + Uncharacterized', + 'authorindex' => ' + Uncharacterized', + 'bbcard' => ' + Uncharacterized', + 'umoline' => ' + Uncharacterized', + 'multind' => ' + Uncharacterized', + 'flabels' => ' + Uncharacterized', + 'pdfcrypt' => 'Tools > PDF + tools', + 'OzTeX-german' => ' + Uncharacterized', + 'rccol' => ' + Uncharacterized', + 'skull' => ' + Uncharacterized', + 'biblatex-swiss-legal' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'tsemlines' => 'Output > + Other', + 'context-sgf' => ' + Uncharacterized', + 'pdfcolmk' => ' + Uncharacterized', + 'paper' => ' + Uncharacterized', + 'cuisine' => ' + Uncharacterized', + 'tex-overview' => ' + Uncharacterized', + 'glossaries-accsupp' => ' + Uncharacterized', + 'aifont' => ' + Uncharacterized', + 'acroreloadpdf' => 'Tools > PDF + tools', + 'gentabtex' => ' + Uncharacterized', + 'TpX' => ' + Uncharacterized', + 'oztex' => ' + Uncharacterized', + 'newclude' => ' + Uncharacterized', + 'verbasef' => ' + Uncharacterized', + 'notes' => ' + Uncharacterized', + 'elpres' => ' + Uncharacterized', + 'biblatex' => ' + Uncharacterized', + 'qbibman' => ' + Uncharacterized', + 'pssplit' => ' + Uncharacterized', + 'cm-lgc' => ' + Uncharacterized', + 'treedef' => ' + Uncharacterized', + 'chappg' => ' + Uncharacterized', + 'latex2rtf' => ' + Uncharacterized', + 'lshort-mongolian' => ' + Uncharacterized', + 'bigdelim' => ' + Uncharacterized', + 'biblatex-dw' => ' + Uncharacterized', + 'bibtools' => ' + Uncharacterized', + 'biolist' => ' + Uncharacterized', + 'add-wes' => ' + Uncharacterized', + 'dvibook' => ' + Uncharacterized', + 'stfloats' => ' + Uncharacterized', + 'makeglos' => ' + Uncharacterized', + 'zaccone' => ' + Uncharacterized', + 'carolmin-t1' => ' + Uncharacterized', + 'bits' => ' + Uncharacterized', + 'papermas' => ' + Uncharacterized', + 'GFS Complutum' => ' + Uncharacterized', + 'xbibtex' => ' + Uncharacterized', + 'luaotfload' => ' + Uncharacterized', + 'alphanum-bst' => ' + Uncharacterized', + 'combine' => ' + Uncharacterized', + 'datatool' => ' + Uncharacterized', + 'jqt1999' => ' + Uncharacterized', + 'labelfig' => ' + Uncharacterized', + 'word2tex' => ' + Uncharacterized', + 'pb-diagram' => ' + Uncharacterized', + 'circle' => ' + Uncharacterized', + 'dvdcoll' => ' + Uncharacterized', + 'examplep' => ' + Uncharacterized', + 'easytable' => ' + Uncharacterized', + 'shadbox' => ' + Uncharacterized', + 'changes' => ' + Uncharacterized', + 'rotating' => ' + Uncharacterized', + 'xkvltxp' => ' + Uncharacterized', + 'pbmtogf' => ' + Uncharacterized', + 'colortab' => ' + Uncharacterized', + 'bloques' => ' + Uncharacterized', + 'comfortaa' => ' + Uncharacterized', + 'footnpag' => ' + Uncharacterized', + 'l3packages' => 'Infrastructure > + Extensions', + 'pandora-type1' => ' + Uncharacterized', + 'oldlatin' => ' + Uncharacterized', + 'cellspace' => ' + Uncharacterized', + 'basque-book' => 'Non-English languages > + Other', + 'fnlineno' => ' + Uncharacterized', + 'svg-inkscape' => ' + Uncharacterized', + 'named' => ' + Uncharacterized', + 'grapher' => ' + Uncharacterized', + 'overpic' => ' + Uncharacterized', + 'fac' => ' + Uncharacterized', + 'revtex4-1' => ' + Uncharacterized', + 'gnu-freefont' => ' + Uncharacterized', + 'bibtex8bit' => ' + Uncharacterized', + 'anti' => ' + Uncharacterized', + 'convert' => ' + Uncharacterized', + 'l2a' => ' + Uncharacterized', + 'pclnfss' => ' + Uncharacterized', + 'bibbuild' => ' + Uncharacterized', + 'juramisc' => ' + Uncharacterized', + 'pkfind' => ' + Uncharacterized', + 'tpslifonts' => ' + Uncharacterized', + 'vita' => ' + Uncharacterized', + 'runic' => ' + Uncharacterized', + 'slashed' => ' + Uncharacterized', + 'timing' => ' + Uncharacterized', + 'knot' => ' + Uncharacterized', + 'arabic' => ' + Uncharacterized', + 'ln03dvi' => ' + Uncharacterized', + 'ygoth' => ' + Uncharacterized', + 'frontespizio' => ' + Uncharacterized', + 'ascii-cyrillic' => ' + Uncharacterized', + 'beamer' => ' + Uncharacterized', + 'mathtime-pln' => ' + Uncharacterized', + 'tip' => ' + Uncharacterized', + 'rfc2bib' => ' + Uncharacterized', + 'delimtxt' => ' + Uncharacterized', + 'hanging' => ' + Uncharacterized', + 'GFS' => ' + Uncharacterized', + 'layout' => ' + Uncharacterized', + 'nohyphbx' => ' + Uncharacterized', + 'amiweb2c' => ' + Uncharacterized', + 'catchfilebetweentags' => 'Tools > Document + management', + 'bib2xhtml' => ' + Uncharacterized', + 'flippdf' => 'Tools > PDF + tools', + 'graphpap' => ' + Uncharacterized', + 'superiors' => 'Page-focused > + Footnotes', + 'antomega' => ' + Uncharacterized', + 'mathematica' => ' + Uncharacterized', + 'tgothic' => ' + Uncharacterized', + 'schedule' => ' + Uncharacterized', + 'usenix' => ' + Uncharacterized', + 'rtf2tex' => ' + Uncharacterized', + 'ascii-chart' => ' + Uncharacterized', + 'asymptote' => ' + Uncharacterized', + 'chemtex' => ' + Uncharacterized', + 'wiki' => 'Page-focused > + Verbatim', + 'goblin' => ' + Uncharacterized', + 'soton' => ' + Uncharacterized', + 'bridge-pln' => ' + Uncharacterized', + 'ragged' => ' + Uncharacterized', + 'ofntinst' => ' + Uncharacterized', + 'here' => ' + Uncharacterized', + 'vita209' => ' + Uncharacterized', + 'tclldoc' => ' + Uncharacterized', + 'SIstyle' => ' + Uncharacterized', + 'pst-3dplot' => ' + Uncharacterized', + 'nofill' => ' + Uncharacterized', + 'macros2e' => 'Programming in TeX > + Other', + 'tocbibind' => ' + Uncharacterized', + 'sphyphb' => ' + Uncharacterized', + 'threeddice' => ' + Uncharacterized', + 'shade' => ' + Uncharacterized', + 'mceinleger' => ' + Uncharacterized', + 'sae' => ' + Uncharacterized', + 'plnfss' => ' + Uncharacterized', + 'mdwfonts' => ' + Uncharacterized', + 't2' => ' + Uncharacterized', + 'type1cm' => ' + Uncharacterized', + 'rectopma' => ' + Uncharacterized', + 'softmaker-velo' => ' + Uncharacterized', + 'math-into-latex-4' => ' + Uncharacterized', + 'manpage' => ' + Uncharacterized', + 'spot' => ' + Uncharacterized', + 'rotpages' => ' + Uncharacterized', + 'lkort' => ' + Uncharacterized', + 'inslrmaj' => ' + Uncharacterized', + 'apa' => ' + Uncharacterized', + 'pstoedit' => ' + Uncharacterized', + 'metauml' => ' + Uncharacterized', + 'eledmac' => 'Document types > + Books', + 'ebsthesis' => ' + Uncharacterized', + 'makerobust' => ' + Uncharacterized', + 'nemocal' => ' + Uncharacterized', + 'lhelp' => ' + Uncharacterized', + 'ttt' => ' + Uncharacterized', + 'dmfonts' => ' + Uncharacterized', + 'aliascnt' => ' + Uncharacterized', + 'latexmk' => ' + Uncharacterized', + 'mathptmx' => ' + Uncharacterized', + 'mathinst' => ' + Uncharacterized', + 'amsthm' => ' + Uncharacterized', + 'acronym209' => ' + Uncharacterized', + 'texbuch' => ' + Uncharacterized', + 'europecv' => ' + Uncharacterized', + 'fixbbl' => ' + Uncharacterized', + 'splitindex' => ' + Uncharacterized', + 'plcalendar' => ' + Uncharacterized', + 'uhc' => ' + Uncharacterized', + 'simplecv' => ' + Uncharacterized', + 'poligraf' => ' + Uncharacterized', + 'dvipdfmx-def' => ' + Uncharacterized', + 'exscale' => ' + Uncharacterized', + 'Midi2TeX/Free' => ' + Uncharacterized', + 'flacards' => ' + Uncharacterized', + 'jpeg2ps-os2' => ' + Uncharacterized', + 'psfig' => ' + Uncharacterized', + 'ovalfbox' => ' + Uncharacterized', + 'html2latex' => ' + Uncharacterized', + 'l2tabu-english' => ' + Uncharacterized', + 'esdiff' => ' + Uncharacterized', + 'tengwar' => ' + Uncharacterized', + 'cancel' => ' + Uncharacterized', + 'adfathesis' => ' + Uncharacterized', + 'covfonts' => ' + Uncharacterized', + 'tex2page' => ' + Uncharacterized', + 'mla' => ' + Uncharacterized', + 'nabatean' => ' + Uncharacterized', + 'captcont' => ' + Uncharacterized', + 'luatex' => ' + Uncharacterized', + 'gensymb' => ' + Uncharacterized', + 'syriac' => ' + Uncharacterized', + 'biblatex-jura' => ' + Uncharacterized', + 'frankenstein' => ' + Uncharacterized', + 'pitex' => ' + Uncharacterized', + 'maths-symbols' => ' + Uncharacterized', + 'editbar' => ' + Uncharacterized', + 'intro-scientific' => ' + Uncharacterized', + 'combinedgraphics' => ' + Uncharacterized', + 'moredefs' => ' + Uncharacterized', + 'pf2afm' => ' + Uncharacterized', + 'titlepic' => ' + Uncharacterized', + 'tabbing' => ' + Uncharacterized', + 'pax' => ' + Uncharacterized', + 'mathcmd' => ' + Uncharacterized', + 'gkpmac' => ' + Uncharacterized', + 'librarian' => ' + Uncharacterized', + 'sam2p' => ' + Uncharacterized', + 'textool' => ' + Uncharacterized', + 'DTX gallery' => ' + Uncharacterized', + 'xwatermark' => ' + Uncharacterized', + 'tabularborder' => ' + Uncharacterized', + 'aspell' => ' + Uncharacterized', + 'inputenc' => ' + Uncharacterized', + 'vietnet' => ' + Uncharacterized', + 'parallel' => ' + Uncharacterized', + 'REdit' => ' + Uncharacterized', + 'din1505' => ' + Uncharacterized', + 'lshort' => ' + Uncharacterized', + 'pst-tvz' => ' + Uncharacterized', + 'poorman' => ' + Uncharacterized', + 'vector' => ' + Uncharacterized', + 'mnras' => ' + Uncharacterized', + 'koma-script-examples' => ' + Uncharacterized', + 'xmltex' => ' + Uncharacterized', + 'twocolumns' => ' + Uncharacterized', + 'gtex-letter' => ' + Uncharacterized', + 'adobe-euro' => ' + Uncharacterized', + 'futhorc' => ' + Uncharacterized', + 'hackalloc' => ' + Uncharacterized', + 'indent' => ' + Uncharacterized', + 'annotate' => ' + Uncharacterized', + 'etruscan' => ' + Uncharacterized', + 'hyperlatex' => ' + Uncharacterized', + 'skeyval' => ' + Uncharacterized', + 'mbboard' => ' + Uncharacterized', + 'bundledoc' => ' + Uncharacterized', + 'changepage' => ' + Uncharacterized', + 'manual209' => ' + Uncharacterized', + 'randomwalk' => ' + Uncharacterized', + 'mathlig' => ' + Uncharacterized', + 'sfheaders' => ' + Uncharacterized', + 'TeXbook' => ' + Uncharacterized', + 'repeatindex' => ' + Uncharacterized', + 'cyrtug' => ' + Uncharacterized', + 'jfontmaps' => 'Non-English languages > + Chinese, Japanese, Korean', + 'cutwin' => ' + Uncharacterized', + 'freetype' => ' + Uncharacterized', + 'mathdesign' => ' + Uncharacterized', + 'uwthesis209' => ' + Uncharacterized', + 'pst-node' => ' + Uncharacterized', + 'secret' => ' + Uncharacterized', + 'NTS-L' => ' + Uncharacterized', + 'musixguit' => ' + Uncharacterized', + 'slideshow' => ' + Uncharacterized', + 'automata' => ' + Uncharacterized', + 'card-set' => ' + Uncharacterized', + 'extract' => ' + Uncharacterized', + 'oinuit' => ' + Uncharacterized', + 'psfonts' => ' + Uncharacterized', + 'lshort-mongol' => ' + Uncharacterized', + 'urw-antiqua' => ' + Uncharacterized', + 'thumb' => ' + Uncharacterized', + 'easymat' => ' + Uncharacterized', + 'qdtexvpl' => ' + Uncharacterized', + 'txt2latex' => ' + Uncharacterized', + 'pthyphs' => ' + Uncharacterized', + 'pst-tree' => ' + Uncharacterized', + 'pstex' => ' + Uncharacterized', + 'psfonts-tools' => ' + Uncharacterized', + 'dvipscol' => ' + Uncharacterized', + 'bbs' => ' + Uncharacterized', + 'tdsfrmath' => ' + Uncharacterized', + 'casslbl' => ' + Uncharacterized', + 'pagerange' => ' + Uncharacterized', + 'mil3' => ' + Uncharacterized', + 'otftofd' => ' + Uncharacterized', + 'jmlr' => ' + Uncharacterized', + 'magyar' => ' + Uncharacterized', + 'dvi2bitmap' => ' + Uncharacterized', + 'figbas' => ' + Uncharacterized', + 'bracketkey' => ' + Uncharacterized', + 'fotex' => ' + Uncharacterized', + 'latin3jk' => ' + Uncharacterized', + 'vntex' => ' + Uncharacterized', + 'multitoc' => ' + Uncharacterized', + 'softmaker-artistic' => ' + Uncharacterized', + 'gmp' => ' + Uncharacterized', + 'tex-kurs' => ' + Uncharacterized', + 'nccparskip' => ' + Uncharacterized', + 'svn-multi' => ' + Uncharacterized', + 'softmaker-jugendstil' => ' + Uncharacterized', + 'wrapfig' => ' + Uncharacterized', + 'mathspic' => ' + Uncharacterized', + 'seqsplit' => ' + Uncharacterized', + 'Nath' => ' + Uncharacterized', + 'mailing' => ' + Uncharacterized', + 'bidi' => ' + Uncharacterized', + 'fp' => ' + Uncharacterized', + 'apeqnum' => ' + Uncharacterized', + 'pst-gantt' => ' + Uncharacterized', + 'glossary' => ' + Uncharacterized', + 'pmgraph' => ' + Uncharacterized', + 'ant' => ' + Uncharacterized', + 'colors' => ' + Uncharacterized', + 'humanbio' => ' + Uncharacterized', + 'latexn' => ' + Uncharacterized', + 'carolmin' => ' + Uncharacterized', + 'fixfoot' => ' + Uncharacterized', + 'mdwmath' => ' + Uncharacterized', + 'vruler' => ' + Uncharacterized', + 'nccfancyhdr' => ' + Uncharacterized', + 'fontools' => ' + Uncharacterized', + 's2latex' => ' + Uncharacterized', + 'nb4latex' => ' + Uncharacterized', + 'ishyph' => ' + Uncharacterized', + 'mdwtools' => ' + Uncharacterized', + 'booktabs' => ' + Uncharacterized', + 'gentl-gr' => ' + Uncharacterized', + 'zhmetrics' => ' + Uncharacterized', + 'bpchem' => ' + Uncharacterized', + 'pdfmarginpar' => 'Tools > PDF + tools', + 'euro-ce' => ' + Uncharacterized', + 'import' => ' + Uncharacterized', + 'TeXshell' => ' + Uncharacterized', + 'jtb' => ' + Uncharacterized', + 'mboxfill' => ' + Uncharacterized', + 'vrbexin' => ' + Uncharacterized', + 'context-lilypond' => ' + Uncharacterized', + 'font-change' => ' + Uncharacterized', + 'altnline' => ' + Uncharacterized', + 'texlive' => ' + Uncharacterized', + 'tsipa' => ' + Uncharacterized', + 'textures-metrics' => ' + Uncharacterized', + 'spotcolor' => ' + Uncharacterized', + 'manual' => ' + Uncharacterized', + 'mactotex' => ' + Uncharacterized', + 'palladam' => ' + Uncharacterized', + 'niceframe' => ' + Uncharacterized', + 'draftcopy' => ' + Uncharacterized', + 'york-thesis' => ' + Uncharacterized', + 'pst-fill' => ' + Uncharacterized', + 'phoenician' => ' + Uncharacterized', + 'pst-blur' => ' + Uncharacterized', + 'shortvrb' => ' + Uncharacterized', + 'fnpara-pln' => ' + Uncharacterized', + 'kpathsea' => ' + Uncharacterized', + 'protex' => ' + Uncharacterized', + 'harvard-obsolete' => ' + Uncharacterized', + 'poster-mac' => ' + Uncharacterized', + 'utf2any' => ' + Uncharacterized', + 'lahyph' => ' + Uncharacterized', + 'germkorr' => ' + Uncharacterized', + 'harvmac' => ' + Uncharacterized', + 'sverb' => ' + Uncharacterized', + 'numprint' => ' + Uncharacterized', + 'ppr-prv' => ' + Uncharacterized', + 'boxedart4mac' => ' + Uncharacterized', + 'lated' => ' + Uncharacterized', + 'RST' => ' + Uncharacterized', + 'Beebe-DVI' => ' + Uncharacterized', + 'epstopdf' => 'Tools > PDF + tools', + 'fncychap' => ' + Uncharacterized', + 'turnstile' => ' + Uncharacterized', + 'ltx2rtf' => ' + Uncharacterized', + 'colortbl' => ' + Uncharacterized', + 'psutils' => ' + Uncharacterized', + 'txt' => ' + Uncharacterized', + 'TeXmate' => ' + Uncharacterized', + 'pst-math' => ' + Uncharacterized', + 'bard' => ' + Uncharacterized', + 'aramaic' => ' + Uncharacterized', + 'amstex' => ' + Uncharacterized', + 'PWT' => ' + Uncharacterized', + 'arlatex' => ' + Uncharacterized', + 'context-URWGaramond' => ' + Uncharacterized', + 'semtrans' => ' + Uncharacterized', + 'nestquot' => ' + Uncharacterized', + 'muthesis' => ' + Uncharacterized', + 'fancyhdrboxed' => ' + Uncharacterized', + 'neufont' => ' + Uncharacterized', + 'sfarticle' => ' + Uncharacterized', + 'hypbmsec' => ' + Uncharacterized', + 'pbm2tex' => ' + Uncharacterized', + 'musictex' => 'Subject-specific typesetting + > Music', + 'arev' => ' + Uncharacterized', + 'harmony' => ' + Uncharacterized', + 'stix' => ' + Uncharacterized', + 'savesym' => ' + Uncharacterized', + 'path' => ' + Uncharacterized', + 'csv2latex' => ' + Uncharacterized', + 'xmpincl' => ' + Uncharacterized', + 'notoccite' => ' + Uncharacterized', + 'japanese-otf' => 'Fonts > Support + files', + 'fancyhdr' => ' + Uncharacterized', + 'AFMtopl (Wolczko)' => ' + Uncharacterized', + 'components' => ' + Uncharacterized', + 'cun' => ' + Uncharacterized', + 'dottex' => ' + Uncharacterized', + 'dviasm' => ' + Uncharacterized', + 'powerdot' => ' + Uncharacterized', + 'pdf-trans' => 'Tools > PDF + tools', + 'chicagoa' => ' + Uncharacterized', + 'hrlatex' => ' + Uncharacterized', + 'spverbatim' => ' + Uncharacterized', + 'prosper' => ' + Uncharacterized', + 'ocr-a' => ' + Uncharacterized', + 'dvisvgm' => ' + Uncharacterized', + 'et' => ' + Uncharacterized', + 'tab4tex' => ' + Uncharacterized', + 'context-degrade' => ' + Uncharacterized', + 'trivfloat' => ' + Uncharacterized', + 'ifthen' => ' + Uncharacterized', + 'ed' => ' + Uncharacterized', + 'modroman' => ' + Uncharacterized', + 'MiniPlot' => ' + Uncharacterized', + 'bib2ml' => ' + Uncharacterized', + 'letter1' => ' + Uncharacterized', + 'mdwtab' => ' + Uncharacterized', + 'macbibtex' => ' + Uncharacterized', + 'sansmathaccent' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'frenchpro' => ' + Uncharacterized', + 'cmtt' => ' + Uncharacterized', + 'pst-layout' => ' + Uncharacterized', + 'hacm' => 'Fonts > Text body + fonts', + 'context-filter' => ' + Uncharacterized', + 'lb2-examples' => ' + Uncharacterized', + 'UPmethodology' => ' + Uncharacterized', + 'qm' => ' + Uncharacterized', + 'mrecog' => ' + Uncharacterized', + 'arabi' => ' + Uncharacterized', + 'cmolddig' => ' + Uncharacterized', + 'isorot' => ' + Uncharacterized', + 'fourspell' => ' + Uncharacterized', + 'ps_view' => ' + Uncharacterized', + 'oxford' => ' + Uncharacterized', + 'bbl2html' => ' + Uncharacterized', + 'snapshot' => ' + Uncharacterized', + 'count1to' => ' + Uncharacterized', + 'collcell' => ' + Uncharacterized', + 'Bibex' => ' + Uncharacterized', + 'blindtext' => ' + Uncharacterized', + 'menu' => ' + Uncharacterized', + 'interpol' => ' + Uncharacterized', + 'PicTeX' => ' + Uncharacterized', + 'minitoc' => ' + Uncharacterized', + 'croatian' => ' + Uncharacterized', + 'papercdcase' => ' + Uncharacterized', + 'nrc' => ' + Uncharacterized', + 'mftrace' => ' + Uncharacterized', + 'graphicx-psmin' => ' + Uncharacterized', + 'make_latex' => ' + Uncharacterized', + 'DCpic' => ' + Uncharacterized', + 'babyloniannum' => 'Fonts > Symbol + fonts', + 'pkbbox' => ' + Uncharacterized', + 'mactex-basic' => ' + Uncharacterized', + 'compare' => ' + Uncharacterized', + 'autopict' => ' + Uncharacterized', + 'latex2man' => ' + Uncharacterized', + 'tex4ht' => ' + Uncharacterized', + 'pst-func' => ' + Uncharacterized', + 'adrlist' => ' + Uncharacterized', + 'bookest' => ' + Uncharacterized', + 'lshort-slovak' => ' + Uncharacterized', + 'luasseq' => ' + Uncharacterized', + 'MEP article' => ' + Uncharacterized', + 'gmdoc' => ' + Uncharacterized', + 'isolatin1' => ' + Uncharacterized', + 'qfig' => ' + Uncharacterized', + 'cmpj' => ' + Uncharacterized', + 'tabsatz' => ' + Uncharacterized', + 'addindex' => ' + Uncharacterized', + 'comma' => ' + Uncharacterized', + 'doc-pictex' => ' + Uncharacterized', + 'notes2bib' => ' + Uncharacterized', + 'properties' => ' + Uncharacterized', + 'betababel' => ' + Uncharacterized', + 'fancynum' => ' + Uncharacterized', + 'aurical' => ' + Uncharacterized', + 'dvitops' => ' + Uncharacterized', + 'fepslatex' => ' + Uncharacterized', + 'yax' => ' + Uncharacterized', + 'context-fullpage' => ' + Uncharacterized', + 'HyPlain' => ' + Uncharacterized', + 'uwthesis' => ' + Uncharacterized', + 'JBibtexManager' => ' + Uncharacterized', + 'newalg' => ' + Uncharacterized', + 'fig2eng' => ' + Uncharacterized', + 'tesla' => ' + Uncharacterized', + 'multicol' => ' + Uncharacterized', + 'lfonts-ams' => ' + Uncharacterized', + 'rsc' => ' + Uncharacterized', + 'oriya' => ' + Uncharacterized', + 'texsketch' => ' + Uncharacterized', + 'pstricks-calcnotes' => ' + Uncharacterized', + 'ot-tableau' => ' + Uncharacterized', + 'ms' => ' + Uncharacterized', + 'schemeweb' => ' + Uncharacterized', + 'GuITbeamer' => ' + Uncharacterized', + 'jurarsp' => ' + Uncharacterized', + 'mylatex' => ' + Uncharacterized', + 'psboxit' => ' + Uncharacterized', + 'microtype' => ' + Uncharacterized', + 'wochtag' => ' + Uncharacterized', + 'bib-greek' => ' + Uncharacterized', + 'lshort-finnish' => ' + Uncharacterized', + 'texpict' => ' + Uncharacterized', + 'showtags' => ' + Uncharacterized', + 'persian-modern' => 'Non-English languages > + Other', + 'fixlatvian' => ' + Uncharacterized', + 'crosswrd' => ' + Uncharacterized', + 'math-e' => ' + Uncharacterized', + 'nih' => ' + Uncharacterized', + 'ltcaption' => ' + Uncharacterized', + 'mh' => ' + Uncharacterized', + 'inputtrc' => ' + Uncharacterized', + 'xq' => ' + Uncharacterized', + 'boxedeps' => ' + Uncharacterized', + 'hardwrap' => ' + Uncharacterized', + 'latex209' => ' + Uncharacterized', + 'tiff' => ' + Uncharacterized', + 'pslatex' => ' + Uncharacterized', + 'dichokey' => ' + Uncharacterized', + 'simplified-latex' => ' + Uncharacterized', + 'pst-bspline' => ' + Uncharacterized', + 'mathalfa' => ' + Uncharacterized', + 'abbr' => ' + Uncharacterized', + 'latin1jk' => ' + Uncharacterized', + 'unpacked' => ' + Uncharacterized', + 'quote' => ' + Uncharacterized', + 'cirth' => ' + Uncharacterized', + 'edmac' => ' + Uncharacterized', + 'animate' => ' + Uncharacterized', + 'jknappen' => ' + Uncharacterized', + 'tkbibtex' => ' + Uncharacterized', + 'testfont' => ' + Uncharacterized', + 'scorecard' => ' + Uncharacterized', + 'hvmath-fonts' => ' + Uncharacterized', + 'xetex-greek' => ' + Uncharacterized', + 'lshort-russian' => ' + Uncharacterized', + 'tablefootnote' => 'Page-focused > + Footnotes', + 'bashful' => ' + Uncharacterized', + 'declare' => ' + Uncharacterized', + 'pgfplots' => ' + Uncharacterized', + 'AcroMemory' => ' + Uncharacterized', + 'eso-pic' => ' + Uncharacterized', + 'inscrutable' => ' + Uncharacterized', + 'elmath' => ' + Uncharacterized', + 'jcc' => ' + Uncharacterized', + 'pst-labo' => ' + Uncharacterized', + 'amsfonts' => ' + Uncharacterized', + 'pst-stru' => ' + Uncharacterized', + 'JPicEdt' => ' + Uncharacterized', + 'emptypage' => ' + Uncharacterized', + 'multibox' => ' + Uncharacterized', + 'ltxindex' => ' + Uncharacterized', + 'wiggly' => ' + Uncharacterized', + 'mdputu' => ' + Uncharacterized', + 'flipbook' => 'Graphics > + Other', + 'toc' => ' + Uncharacterized', + 'softmaker-henderson' => ' + Uncharacterized', + 'jas99' => ' + Uncharacterized', + 't1tools' => ' + Uncharacterized', + 'plfonts' => ' + Uncharacterized', + 'outliner' => ' + Uncharacterized', + 'fontaxes' => 'Fonts > Font + tools', + 'begriff' => ' + Uncharacterized', + 'letter-plain' => ' + Uncharacterized', + 'mkbangtex' => ' + Uncharacterized', + 'itnumpar' => ' + Uncharacterized', + 'm3D' => ' + Uncharacterized', + 'calxxxx' => ' + Uncharacterized', + 'xetexfontinfo' => ' + Uncharacterized', + 'pst-ode' => 'Subject-specific typesetting + > Mathematics > Other', + 'zigaretten' => ' + Uncharacterized', + 'covington' => ' + Uncharacterized', + 'breqn' => ' + Uncharacterized', + 'engwar' => ' + Uncharacterized', + 'kvdefinekeys' => ' + Uncharacterized', + 'urwvf' => ' + Uncharacterized', + 'ttf2tex' => ' + Uncharacterized', + 'srhyphc' => ' + Uncharacterized', + 'spain' => ' + Uncharacterized', + 'concmath' => ' + Uncharacterized', + 'vmargin' => ' + Uncharacterized', + 'robustcommand' => ' + Uncharacterized', + 'marvosym' => ' + Uncharacterized', + 'LXfonts' => ' + Uncharacterized', + 'ptex-texmf' => ' + Uncharacterized', + 'winemtex' => ' + Uncharacterized', + 'subscript' => ' + Uncharacterized', + 'uni-wtal-ger' => ' + Uncharacterized', + 'cellular' => ' + Uncharacterized', + 'cmastro' => ' + Uncharacterized', + 'eurosans' => ' + Uncharacterized', + 'bigints' => ' + Uncharacterized', + 'captdef' => ' + Uncharacterized', + 'tcltexed' => ' + Uncharacterized', + 'ltxinput' => ' + Uncharacterized', + 'cfgguide' => ' + Uncharacterized', + 'placeins-plain' => ' + Uncharacterized', + 'TeX' => ' + Uncharacterized', + 'diagnose' => ' + Uncharacterized', + 'biokey' => ' + Uncharacterized', + 'CJ' => ' + Uncharacterized', + 'epsfview' => ' + Uncharacterized', + 'historische-zeitschrift' => ' + Uncharacterized', + 'astyped' => ' + Uncharacterized', + 'dvipsk' => ' + Uncharacterized', + 'faq-fr' => ' + Uncharacterized', + 'smaller' => ' + Uncharacterized', + 'pedigree-perl' => ' + Uncharacterized', + 'french-translations' => ' + Uncharacterized', + 'dashbox' => ' + Uncharacterized', + 'pst-thick' => ' + Uncharacterized', + 'vpage' => ' + Uncharacterized', + 'TeXcount' => ' + Uncharacterized', + 'longdiv' => ' + Uncharacterized', + 'overword' => ' + Uncharacterized', + 'metapost' => ' + Uncharacterized', + 'tkdvi' => ' + Uncharacterized', + 'sprite' => ' + Uncharacterized', + 'tkz-linknodes' => ' + Uncharacterized', + 'amslatex-primer' => ' + Uncharacterized', + 'coolstr' => ' + Uncharacterized', + 'stables' => ' + Uncharacterized', + 'corelfonts' => ' + Uncharacterized', + 'namespc' => ' + Uncharacterized', + 'verbments' => 'Subject-specific typesetting + > Computer science', + 'lollipop' => ' + Uncharacterized', + 'iopart-num' => ' + Uncharacterized', + 'truetypemetrics' => ' + Uncharacterized', + 'mathspec' => ' + Uncharacterized', + 'proofs' => ' + Uncharacterized', + 'bookform' => ' + Uncharacterized', + 'everyshi' => ' + Uncharacterized', + 'sparklines' => ' + Uncharacterized', + 'nccboxes' => ' + Uncharacterized', + 'zhmCJK' => 'Non-English languages > + Chinese, Japanese, Korean', + 'venn' => ' + Uncharacterized', + 'aichej' => ' + Uncharacterized', + 'cropmark-pu' => ' + Uncharacterized', + 'ifpdf' => ' + Uncharacterized', + 'luacolor' => ' + Uncharacterized', + 'cms4talks' => ' + Uncharacterized', + 'dvichk' => ' + Uncharacterized', + 'btable' => ' + Uncharacterized', + 'abstbook' => ' + Uncharacterized', + 'aomart' => ' + Uncharacterized', + 'letltxmacro' => ' + Uncharacterized', + 'jura' => ' + Uncharacterized', + 'cals' => ' + Uncharacterized', + 'sueterlin' => ' + Uncharacterized', + 'Imake-TeX' => ' + Uncharacterized', + 'hycolor' => ' + Uncharacterized', + 'lametex' => ' + Uncharacterized', + 'filemod' => ' + Uncharacterized', + 'imakeidx' => ' + Uncharacterized', + 'mathesatz-examples' => ' + Uncharacterized', + 'nonfloat' => ' + Uncharacterized', + 'ncccropbox' => ' + Uncharacterized', + 'erdc' => ' + Uncharacterized', + 'texfilt' => ' + Uncharacterized', + 'Metafont book' => ' + Uncharacterized', + 'rec-thy' => ' + Uncharacterized', + 'at' => ' + Uncharacterized', + 'exams' => ' + Uncharacterized', + 'doipubmed' => ' + Uncharacterized', + 'jj-game' => ' + Uncharacterized', + 'navigator' => ' + Uncharacterized', + 'dblfloatfix' => ' + Uncharacterized', + 'statistik' => ' + Uncharacterized', + 'daytime' => ' + Uncharacterized', + 'AkkTeX' => ' + Uncharacterized', + 'etex-pkg' => ' + Uncharacterized', + 'decorule' => 'Graphics > + Other', + 'stmaryrd' => ' + Uncharacterized', + 'mirr' => ' + Uncharacterized', + 'xwpick' => ' + Uncharacterized', + 'cm-gf' => ' + Uncharacterized', + 'epsincl' => ' + Uncharacterized', + 'realscripts' => ' + Uncharacterized', + 'infwarerr' => ' + Uncharacterized', + 'sanhyph' => ' + Uncharacterized', + 'texi2dvi-latest' => ' + Uncharacterized', + 'eqlist' => ' + Uncharacterized', + 'sfwmac' => ' + Uncharacterized', + 'proba' => ' + Uncharacterized', + 'apasoft' => ' + Uncharacterized', + 'spanglish' => ' + Uncharacterized', + 'sageep' => ' + Uncharacterized', + 'sansmath' => ' + Uncharacterized', + 'docmute' => ' + Uncharacterized', + 'boundbox' => ' + Uncharacterized', + 'rotfloat' => ' + Uncharacterized', + 'latexcheat' => ' + Uncharacterized', + 'text2bib' => ' + Uncharacterized', + 'sauterfonts' => ' + Uncharacterized', + 'ghostscript-GPL' => ' + Uncharacterized', + 'grafik' => ' + Uncharacterized', + 'brclc' => ' + Uncharacterized', + 'sepnum' => ' + Uncharacterized', + 'subsupscripts' => ' + Uncharacterized', + 'usrguide' => ' + Uncharacterized', + 'floatpag' => ' + Uncharacterized', + 'stringstrings' => ' + Uncharacterized', + 'skb' => ' + Uncharacterized', + 'fonteinf' => ' + Uncharacterized', + 'memdesign' => ' + Uncharacterized', + 'corridx-obsolete' => ' + Uncharacterized', + 'overrightarrow' => ' + Uncharacterized', + 'adjmulticol' => ' + Uncharacterized', + 'LaTeX-veryshortguide' => ' + Uncharacterized', + 'txfontsb' => ' + Uncharacterized', + 'prerex' => ' + Uncharacterized', + 'verbatim' => ' + Uncharacterized', + 'ucharclasses' => ' + Uncharacterized', + 'pst-optexp' => ' + Uncharacterized', + 'titleref' => ' + Uncharacterized', + 'ktv-texdata' => ' + Uncharacterized', + 'a5comb' => ' + Uncharacterized', + 'etextools' => ' + Uncharacterized', + 'verbtim2' => ' + Uncharacterized', + 'datetime' => ' + Uncharacterized', + 'ctable' => ' + Uncharacterized', + 'biihead' => ' + Uncharacterized', + 'inlinebib' => ' + Uncharacterized', + 'startex' => ' + Uncharacterized', + 'regcount' => ' + Uncharacterized', + 'minipage-marginpar' => ' + Uncharacterized', + 'committee-font' => ' + Uncharacterized', + 'apacite' => ' + Uncharacterized', + 'ecltree' => ' + Uncharacterized', + 'flagderiv' => ' + Uncharacterized', + 'localloc' => ' + Uncharacterized', + 'biblatex-chem' => ' + Uncharacterized', + 'background' => ' + Uncharacterized', + 'chbar' => ' + Uncharacterized', + 'utthesis' => ' + Uncharacterized', + 'lcircuit' => ' + Uncharacterized', + 'tex-gyre' => ' + Uncharacterized', + 'showdim' => ' + Uncharacterized', + 'BiBLE' => ' + Uncharacterized', + 'afterpackage' => ' + Uncharacterized', + 'fbs' => ' + Uncharacterized', + 'fihyph' => ' + Uncharacterized', + 'llncs209' => ' + Uncharacterized', + 'Ultra-TeX' => ' + Uncharacterized', + 'hungarian' => ' + Uncharacterized', + 'euler' => ' + Uncharacterized', + 'windvi' => ' + Uncharacterized', + 'setspace' => ' + Uncharacterized', + 'ant-worker-tasks' => ' + Uncharacterized', + 'cmoutlines' => ' + Uncharacterized', + 'autotab' => ' + Uncharacterized', + 'xtab' => ' + Uncharacterized', + 'rcs-multi' => ' + Uncharacterized', + 'mathastext' => ' + Uncharacterized', + 'printbib' => ' + Uncharacterized', + 'web9pt' => ' + Uncharacterized', + 'dblfnote' => ' + Uncharacterized', + 'pst-vue3d' => ' + Uncharacterized', + 'compactbib' => ' + Uncharacterized', + 'arabxetex' => ' + Uncharacterized', + 'yafoot' => ' + Uncharacterized', + 'checkend' => ' + Uncharacterized', + 'itrans-processor' => ' + Uncharacterized', + 'acroterm' => ' + Uncharacterized', + 'fontsmpl' => ' + Uncharacterized', + 'bartel-chess-fonts' => ' + Uncharacterized', + 'ltt' => ' + Uncharacterized', + 'amsltx11' => ' + Uncharacterized', + 'recipecard' => ' + Uncharacterized', + 'pgf' => ' + Uncharacterized', + 'munich' => ' + Uncharacterized', + 'verbatim-gen' => ' + Uncharacterized', + 'epstool' => ' + Uncharacterized', + 'smartmn' => ' + Uncharacterized', + 'hex' => ' + Uncharacterized', + 'annotation' => ' + Uncharacterized', + 'axodraw' => ' + Uncharacterized', + 'wasysym' => ' + Uncharacterized', + 'bosisio' => ' + Uncharacterized', + 'lshort-english' => ' + Uncharacterized', + 'indxcite' => ' + Uncharacterized', + 'vispeech' => ' + Uncharacterized', + 'shipunov' => ' + Uncharacterized', + 'emtex' => ' + Uncharacterized', + 'timeline' => ' + Uncharacterized', + 'luainputenc' => ' + Uncharacterized', + 'show2e' => ' + Uncharacterized', + 'mathtime-ltx' => ' + Uncharacterized', + 'draftmark' => ' + Uncharacterized', + 'arabtex' => ' + Uncharacterized', + 'fullblck' => ' + Uncharacterized', + 'Birkhaeuser' => ' + Uncharacterized', + 'screenplay' => ' + Uncharacterized', + 'phonetic' => ' + Uncharacterized', + 'xfig' => ' + Uncharacterized', + 'WinTeX XP' => ' + Uncharacterized', + 'physymb' => ' + Uncharacterized', + 'FiXme' => ' + Uncharacterized', + 'thumbpdf' => 'Tools > PDF + tools', + 'uaclasses' => ' + Uncharacterized', + 'umlaute' => ' + Uncharacterized', + 'softmaker-inverserif' => ' + Uncharacterized', + 'texlogos' => ' + Uncharacterized', + 'mpman-ru' => ' + Uncharacterized', + 'pmtex' => ' + Uncharacterized', + 'permute' => ' + Uncharacterized', + 'memo2' => ' + Uncharacterized', + 'chapterfolder' => ' + Uncharacterized', + 'authblk' => ' + Uncharacterized', + 'encguide' => ' + Uncharacterized', + 'bidstobibtex' => ' + Uncharacterized', + 'bytefield' => ' + Uncharacterized', + 'lm' => ' + Uncharacterized', + 'epsfig' => ' + Uncharacterized', + 'everyhook' => ' + Uncharacterized', + 'hoffset-voffset' => ' + Uncharacterized', + 'oldprsn' => ' + Uncharacterized', + 'context-notes-zh-cn' => ' + Uncharacterized', + 'soyombo' => ' + Uncharacterized', + 'centernot' => ' + Uncharacterized', + 'caesarcm' => ' + Uncharacterized', + 'wnri-latex' => ' + Uncharacterized', + 'philokalia' => ' + Uncharacterized', + 'pagesel' => ' + Uncharacterized', + 'miktex-portable' => ' + Uncharacterized', + 'chemarr' => ' + Uncharacterized', + 'turkish' => ' + Uncharacterized', + 'fnpos' => ' + Uncharacterized', + 't1enc' => ' + Uncharacterized', + 'latex-notes-zh-cn' => ' + Uncharacterized', + 'lineno' => ' + Uncharacterized', + 'clsguide' => ' + Uncharacterized', + 'base' => ' + Uncharacterized', + 'pdfscreen' => ' + Uncharacterized', + 'RRGtrees' => ' + Uncharacterized', + 'cahyph' => ' + Uncharacterized', + 'around-the-bend' => ' + Uncharacterized', + 'u8tex' => ' + Uncharacterized', + 'eqname' => ' + Uncharacterized', + 'russ' => ' + Uncharacterized', + 'metafp' => ' + Uncharacterized', + 'tkz-berge' => 'Graphics > Postscript or + PDF graphics', + 'marginal' => ' + Uncharacterized', + 'texloganalyser' => ' + Uncharacterized', + 'shortcuttool' => ' + Uncharacterized', + 'plasTeX' => ' + Uncharacterized', + 'psgreek' => ' + Uncharacterized', + 'resumemac' => ' + Uncharacterized', + 'psnfss' => ' + Uncharacterized', + 'thesis-titlepage-fhac' => ' + Uncharacterized', + 'eukleides' => ' + Uncharacterized', + 'auto1' => ' + Uncharacterized', + 'eppstein-trees' => ' + Uncharacterized', + 'textoolspro' => ' + Uncharacterized', + 'grfext' => ' + Uncharacterized', + 'ethtex' => ' + Uncharacterized', + 'lshort-slovenian' => ' + Uncharacterized', + 'newspaper' => ' + Uncharacterized', + 'GFS Bodoni' => ' + Uncharacterized', + 'mxedruli' => ' + Uncharacterized', + 'tmmath' => ' + Uncharacterized', + 'tengtex' => ' + Uncharacterized', + 'fragments' => ' + Uncharacterized', + 'lcd' => ' + Uncharacterized', + 'arsclassica' => ' + Uncharacterized', + 'degrade' => ' + Uncharacterized', + 'weekday' => ' + Uncharacterized', + 'python' => 'Tools > + Other', + 'easyvector' => ' + Uncharacterized', + 'poltawski' => ' + Uncharacterized', + 'selectp' => ' + Uncharacterized', + 'transfig' => ' + Uncharacterized', + 'alterqcm' => ' + Uncharacterized', + 'tex-ps' => ' + Uncharacterized', + 'protext' => ' + Uncharacterized', + 'macqassign' => ' + Uncharacterized', + 'mflogo' => ' + Uncharacterized', + 'ean13isbn' => ' + Uncharacterized', + 'vrsion' => ' + Uncharacterized', + 'ltoh' => ' + Uncharacterized', + 'wallpaper' => ' + Uncharacterized', + 'venturisADF' => ' + Uncharacterized', + 'TeX T1' => ' + Uncharacterized', + 'mleftright' => ' + Uncharacterized', + 'script-font' => ' + Uncharacterized', + 'PBMtoPK' => ' + Uncharacterized', + 'fundus-calligra' => ' + Uncharacterized', + 'revtex4-0' => ' + Uncharacterized', + 'readprov' => ' + Uncharacterized', + 'titles' => ' + Uncharacterized', + 'escapeTeXt' => ' + Uncharacterized', + 'jkthesis' => ' + Uncharacterized', + 'automatica' => ' + Uncharacterized', + 'fnbreak' => ' + Uncharacterized', + 'lexikon' => ' + Uncharacterized', + 'lecturer' => ' + Uncharacterized', + 'picmac' => ' + Uncharacterized', + 'morse' => ' + Uncharacterized', + 'fntguide' => ' + Uncharacterized', + 'ifmslide' => ' + Uncharacterized', + 'pst-diffraction' => ' + Uncharacterized', + 'capt-of' => ' + Uncharacterized', + 'pagefoots' => ' + Uncharacterized', + 'sobolev' => ' + Uncharacterized', + 'ivd2dvi' => ' + Uncharacterized', + 'splines' => ' + Uncharacterized', + 'SouthArabian' => ' + Uncharacterized', + 'scale' => ' + Uncharacterized', + 'mem' => ' + Uncharacterized', + 'mflogo209' => ' + Uncharacterized', + 'concprog' => ' + Uncharacterized', + 'chbibref' => ' + Uncharacterized', + 'edfnotes' => ' + Uncharacterized', + 'nccsect' => ' + Uncharacterized', + 'visualtex' => ' + Uncharacterized', + 'sttools' => ' + Uncharacterized', + 'palatino-nfss' => ' + Uncharacterized', + 'pst-ob3d' => ' + Uncharacterized', + 'tape' => ' + Uncharacterized', + 'cm-super' => ' + Uncharacterized', + 'arXivBib' => ' + Uncharacterized', + 'tex-implementors' => ' + Uncharacterized', + 'lualatex-math' => ' + Uncharacterized', + 'lithuanian' => ' + Uncharacterized', + 'defstring' => ' + Uncharacterized', + 'onlyamsmath' => ' + Uncharacterized', + 'frenchponct' => ' + Uncharacterized', + 'arosgn' => ' + Uncharacterized', + 'frankenstein-unsupported' => ' + Uncharacterized', + 'yinit' => ' + Uncharacterized', + 'leaflet' => ' + Uncharacterized', + 'a4' => ' + Uncharacterized', + 'cooltooltips' => ' + Uncharacterized', + 'installfont' => ' + Uncharacterized', + 'translation-pst-jtree-de' => ' + Uncharacterized', + 'chessmin' => ' + Uncharacterized', + 'cmarrows' => ' + Uncharacterized', + 'savefnmark' => ' + Uncharacterized', + 'jadetex' => ' + Uncharacterized', + 'sdrt' => ' + Uncharacterized', + 'labtex' => ' + Uncharacterized', + 'courier scaled' => ' + Uncharacterized', + 'pstotext' => ' + Uncharacterized', + 'cwebbin' => ' + Uncharacterized', + 'he-le-na' => ' + Uncharacterized', + 'sauter' => ' + Uncharacterized', + 'gost' => ' + Uncharacterized', + 'knittingpattern' => ' + Uncharacterized', + 'tablists' => ' + Uncharacterized', + 'required' => ' + Uncharacterized', + 'williams' => ' + Uncharacterized', + 'suffix' => ' + Uncharacterized', + 'flow' => ' + Uncharacterized', + 'mathabx' => ' + Uncharacterized', + 'cjkpunct' => ' + Uncharacterized', + 'tcolorbox' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'softmaker-vagrounded' => ' + Uncharacterized', + 'cypriote' => ' + Uncharacterized', + 'tdclock' => ' + Uncharacterized', + 'IEEEannot' => ' + Uncharacterized', + 'progkeys' => ' + Uncharacterized', + 'softmaker-heliumtwo' => ' + Uncharacterized', + 'maple' => ' + Uncharacterized', + 'achemso' => ' + Uncharacterized', + 'context-chromato' => ' + Uncharacterized', + 'electrumadf' => ' + Uncharacterized', + 'mctex' => ' + Uncharacterized', + 'urlbst' => ' + Uncharacterized', + 'titlepages' => ' + Uncharacterized', + 'pos-at' => ' + Uncharacterized', + 'pdfx' => ' + Uncharacterized', + 'mandel' => ' + Uncharacterized', + 'spiderweb' => ' + Uncharacterized', + 'sqrcaps' => ' + Uncharacterized', + 'tensor' => ' + Uncharacterized', + 'lualatex-doc' => ' + Uncharacterized', + 'toolbox' => ' + Uncharacterized', + 'TameTheBeast' => ' + Uncharacterized', + 'literate' => ' + Uncharacterized', + 'color' => ' + Uncharacterized', + 'desclist' => ' + Uncharacterized', + 'cmtiup' => ' + Uncharacterized', + 'LatexPaper' => ' + Uncharacterized', + 'shuffle' => ' + Uncharacterized', + 'pacioli' => ' + Uncharacterized', + 'numname' => ' + Uncharacterized', + 'ginpenc' => ' + Uncharacterized', + 'kix' => ' + Uncharacterized', + 'literaturnaya' => ' + Uncharacterized', + 'pst-rubans' => 'Graphics > Postscript or + PDF graphics', + 'stampinclude' => ' + Uncharacterized', + 'swrule' => ' + Uncharacterized', + 'eurofont' => ' + Uncharacterized', + 'simplewick' => ' + Uncharacterized', + 'chet' => ' + Uncharacterized', + 'dvi2xx' => ' + Uncharacterized', + 'cm-tfm' => ' + Uncharacterized', + 'tex2mail' => ' + Uncharacterized', + 'paratype' => ' + Uncharacterized', + 'trimspaces' => ' + Uncharacterized', + 'pst-solides3d' => ' + Uncharacterized', + 'bookmark' => ' + Uncharacterized', + 'techexplorer' => ' + Uncharacterized', + 'showkeys' => ' + Uncharacterized', + 'tocvsec2' => ' + Uncharacterized', + 'pdftexcmds' => 'Tools > PDF + tools', + 'polski' => ' + Uncharacterized', + 'pdf14' => 'Tools > PDF + tools', + 'hershey' => ' + Uncharacterized', + 'diagrams' => ' + Uncharacterized', + 'nccfoots' => ' + Uncharacterized', + 'mf2pt3' => ' + Uncharacterized', + 'enpassant' => ' + Uncharacterized', + 'icons' => ' + Uncharacterized', + 'IEEEtran' => ' + Uncharacterized', + 'tabu' => ' + Uncharacterized', + 'hypcap' => ' + Uncharacterized', + 'stellenbosch' => ' + Uncharacterized', + 'softmaker-stonehand' => ' + Uncharacterized', + 'accents' => ' + Uncharacterized', + 'harvard' => ' + Uncharacterized', + 'collect' => ' + Uncharacterized', + 'logpap' => ' + Uncharacterized', + 'hep-gen' => ' + Uncharacterized', + 'shorttoc' => ' + Uncharacterized', + 'abstyles-babel' => ' + Uncharacterized', + 'linguex' => ' + Uncharacterized', + 'tex-label' => ' + Uncharacterized', + 'exerquiz' => ' + Uncharacterized', + 'verbatimcopy' => ' + Uncharacterized', + 'ebezier' => ' + Uncharacterized', + 'bibextract' => ' + Uncharacterized', + 'SQLTeX' => ' + Uncharacterized', + 'etoolbox' => ' + Uncharacterized', + 'wadalab' => ' + Uncharacterized', + 'hologo' => ' + Uncharacterized', + 'pst-support' => ' + Uncharacterized', + 'bghyphen' => ' + Uncharacterized', + 'i-ching' => ' + Uncharacterized', + 'totpages' => ' + Uncharacterized', + 'cmcyralt-ltx' => ' + Uncharacterized', + 'accsupp' => ' + Uncharacterized', + 'ctib4tex' => ' + Uncharacterized', + 'svgcolor' => ' + Uncharacterized', + 'robustindex' => ' + Uncharacterized', + 'rawprint' => ' + Uncharacterized', + 'musixtex-fonts' => 'Document types > Other + > Music', + 'tkz-graph' => 'Output > PDF, + PostScript', + 'noprot' => ' + Uncharacterized', + 'fjodor' => ' + Uncharacterized', + 'pictexwd' => ' + Uncharacterized', + 'os2tex' => ' + Uncharacterized', + 'apl' => ' + Uncharacterized', + 'lualatex-platform' => ' + Uncharacterized', + 'BibTeX Database Generator' => ' + Uncharacterized', + 'texindex' => ' + Uncharacterized', + 'Layaureo' => ' + Uncharacterized', + 'scalebar' => ' + Uncharacterized', + 'nohyph' => ' + Uncharacterized', + 'indic-type1' => ' + Uncharacterized', + 'flexisym' => ' + Uncharacterized', + 'easy' => ' + Uncharacterized', + 'chngpage' => ' + Uncharacterized', + 'berenisadf' => ' + Uncharacterized', + 'footnote' => ' + Uncharacterized', + 'latexmake' => ' + Uncharacterized', + 'atveryend' => ' + Uncharacterized', + 'xlatex' => ' + Uncharacterized', + 'multibib' => ' + Uncharacterized', + 'bez123' => ' + Uncharacterized', + 'IMTEKda' => ' + Uncharacterized', + 'rustic' => ' + Uncharacterized', + 'lamemo' => ' + Uncharacterized', + 'currfile' => ' + Uncharacterized', + 'eltex' => ' + Uncharacterized', + 'nkarta' => ' + Uncharacterized', + 'timetable' => ' + Uncharacterized', + 'syngen' => ' + Uncharacterized', + 'pagegrid' => ' + Uncharacterized', + 'texpack' => ' + Uncharacterized', + 'dotlessi' => ' + Uncharacterized', + 'metalogo' => ' + Uncharacterized', + 'pspicture' => ' + Uncharacterized', + 'lshort-french' => ' + Uncharacterized', + 'htmlhelp' => ' + Uncharacterized', + 'mpattern' => ' + Uncharacterized', + 'consdiag' => ' + Uncharacterized', + 'europs' => ' + Uncharacterized', + 'fc-arith' => ' + Uncharacterized', + 'util-half' => ' + Uncharacterized', + 'mtp2lite' => ' + Uncharacterized', + 'koi8' => ' + Uncharacterized', + 'newfile' => ' + Uncharacterized', + 'luaindex' => ' + Uncharacterized', + 'ijqc' => ' + Uncharacterized', + 'unouter' => ' + Uncharacterized', + 'bfsymb' => ' + Uncharacterized', + 'toptesi' => ' + Uncharacterized', + 'subfigure' => ' + Uncharacterized', + 'mf-ps' => ' + Uncharacterized', + 'latexdraw' => ' + Uncharacterized', + 'SmileTeX' => ' + Uncharacterized', + 'unicode-math' => ' + Uncharacterized', + 'newsletr' => ' + Uncharacterized', + 'context-simplefonts' => ' + Uncharacterized', + 'b1encoding' => ' + Uncharacterized', + 'Swimgraf' => ' + Uncharacterized', + 'equationauthor' => ' + Uncharacterized', + 'gincltex' => ' + Uncharacterized', + 'romannum' => ' + Uncharacterized', + 'newvbtm' => ' + Uncharacterized', + 'abstr-collect' => ' + Uncharacterized', + 'texed' => ' + Uncharacterized', + 'cwebx' => ' + Uncharacterized', + 'booklet' => ' + Uncharacterized', + 'attachfile2' => ' + Uncharacterized', + 'context-URWGothic' => ' + Uncharacterized', + 'gentle' => ' + Uncharacterized', + 'pst-magneticfield' => ' + Uncharacterized', + 'pst-geo' => ' + Uncharacterized', + 'voss-mathmode' => ' + Uncharacterized', + 'dotseqn' => ' + Uncharacterized', + 'blkarray' => ' + Uncharacterized', + 'hcbundle' => ' + Uncharacterized', + 'mkpkfontdir' => ' + Uncharacterized', + 'ecc' => ' + Uncharacterized', + 'pl' => ' + Uncharacterized', + 'ofs' => ' + Uncharacterized', + 'elvish' => ' + Uncharacterized', + 'jpgfdraw' => ' + Uncharacterized', + 'xcomment' => ' + Uncharacterized', + 'translation-footmisc-de' => ' + Uncharacterized', + 'cm-mf' => ' + Uncharacterized', + 'latex-essential' => ' + Uncharacterized', + 'songbook' => ' + Uncharacterized', + 'catoptions' => ' + Uncharacterized', + 'blanks' => ' + Uncharacterized', + 'undump' => ' + Uncharacterized', + 'textarea' => ' + Uncharacterized', + 'pst-plot' => ' + Uncharacterized', + 'ecta' => ' + Uncharacterized', + 'hitec' => ' + Uncharacterized', + 'titlefoot' => ' + Uncharacterized', + 'tpcmfont' => ' + Uncharacterized', + 'alleqno' => ' + Uncharacterized', + 'todonotes' => ' + Uncharacterized', + 'LaTeX-Referenz' => ' + Uncharacterized', + 'scriptfonts' => ' + Uncharacterized', + 'prelim' => ' + Uncharacterized', + 'faq-es' => ' + Uncharacterized', + 'dviwin' => ' + Uncharacterized', + 'colorsep' => ' + Uncharacterized', + 'encxvlna' => ' + Uncharacterized', + 'cropmark' => ' + Uncharacterized', + 'fmp' => ' + Uncharacterized', + 'directtex' => ' + Uncharacterized', + 'movie15' => ' + Uncharacterized', + 'leftidx' => ' + Uncharacterized', + 'neuron' => ' + Uncharacterized', + 'lhcyr' => ' + Uncharacterized', + 'pcarl' => ' + Uncharacterized', + 'lato' => ' + Uncharacterized', + 'dvimerge' => ' + Uncharacterized', + 'undolabl' => ' + Uncharacterized', + 'ttf2mf' => ' + Uncharacterized', + 'dpfloat' => ' + Uncharacterized', + 'ifacmtg' => ' + Uncharacterized', + 'topsection' => ' + Uncharacterized', + 'dozenal' => ' + Uncharacterized', + 'dvii' => ' + Uncharacterized', + 'mwcls' => ' + Uncharacterized', + 'mil' => ' + Uncharacterized', + 'tbe' => ' + Uncharacterized', + 'tracking' => ' + Uncharacterized', + 'window' => ' + Uncharacterized', + 'featpost' => ' + Uncharacterized', + 'GFS Solomos' => ' + Uncharacterized', + 'modguide' => ' + Uncharacterized', + 'blowup' => ' + Uncharacterized', + 'svninfo' => ' + Uncharacterized', + 'mathptm' => ' + Uncharacterized', + 'klinz' => ' + Uncharacterized', + 'setstrut' => ' + Uncharacterized', + 'pst-bar' => ' + Uncharacterized', + 'cyrmemo' => ' + Uncharacterized', + 'tinyc2l' => ' + Uncharacterized', + 'bib-fr' => ' + Uncharacterized', + 'firefox_ctan_plugins' => ' + Uncharacterized', + 'RGB' => ' + Uncharacterized', + 'script' => ' + Uncharacterized', + 'pst-cox' => ' + Uncharacterized', + 'Epigrafica' => ' + Uncharacterized', + 'keycommand' => ' + Uncharacterized', + 'scmac' => ' + Uncharacterized', + 'dviljk' => ' + Uncharacterized', + 'example' => ' + Uncharacterized', + 'Metafont' => ' + Uncharacterized', + 'bondgraph' => ' + Uncharacterized', + 'endfloat' => ' + Uncharacterized', + 'BibTeX-help' => ' + Uncharacterized', + 'mapcodes' => ' + Uncharacterized', + 'getfiledate' => ' + Uncharacterized', + 'present' => ' + Uncharacterized', + 'lshort-dutch' => ' + Uncharacterized', + 'vfware' => ' + Uncharacterized', + 'qstest' => ' + Uncharacterized', + 'mrcheckbib' => ' + Uncharacterized', + 'these' => ' + Uncharacterized', + 'steinmetz' => ' + Uncharacterized', + 'acrotex-web' => ' + Uncharacterized', + 'labbook' => ' + Uncharacterized', + 'winshell' => ' + Uncharacterized', + 'sentences' => ' + Uncharacterized', + 'scyrillic' => ' + Uncharacterized', + 'context-top-ten' => ' + Uncharacterized', + 'classico' => ' + Uncharacterized', + 'verdana' => ' + Uncharacterized', + 'cbe' => ' + Uncharacterized', + 'booktabs-fr' => ' + Uncharacterized', + 'Array Maker' => ' + Uncharacterized', + 'uhrzeit' => ' + Uncharacterized', + 'sanskrit' => ' + Uncharacterized', + 'Extensive Arrows.' => ' + Uncharacterized', + 'accents-cs' => ' + Uncharacterized', + 'ltxcmds' => ' + Uncharacterized', + 'pst-poly' => ' + Uncharacterized', + 'Pecha' => ' + Uncharacterized', + 'latex-base' => ' + Uncharacterized', + 'rotate' => ' + Uncharacterized', + 'rmpage' => ' + Uncharacterized', + 'greek-inputenc' => ' + Uncharacterized', + 'newthm' => ' + Uncharacterized', + 'fileinfo' => 'Programming in TeX > + Package management', + 'warpcol' => ' + Uncharacterized', + 'patch' => ' + Uncharacterized', + 'cantarell' => ' + Uncharacterized', + 'lexitex' => ' + Uncharacterized', + 'wp-conv' => ' + Uncharacterized', + 'economic' => ' + Uncharacterized', + 'miktex_update' => ' + Uncharacterized', + 'time' => ' + Uncharacterized', + 'frenchle' => ' + Uncharacterized', + 'gurmukhi-singh' => ' + Uncharacterized', + 'lazylist' => ' + Uncharacterized', + 'uk-tex-faq' => ' + Uncharacterized', + 'opteng' => ' + Uncharacterized', + 'aebXMP' => ' + Uncharacterized', + 'bibview' => ' + Uncharacterized', + 'fonts-sipa-arundina' => 'Non-English languages > + Other', + 'stringenc' => ' + Uncharacterized', + 'e-TeX' => ' + Uncharacterized', + 'isi2bib-vim' => ' + Uncharacterized', + 'TeXline' => ' + Uncharacterized', + 'vfcomb' => ' + Uncharacterized', + 'varsects' => ' + Uncharacterized', + 'version' => ' + Uncharacterized', + 'springer' => ' + Uncharacterized', + 'tabularcalc' => ' + Uncharacterized', + 'tucv' => ' + Uncharacterized', + 'fillform' => ' + Uncharacterized', + 'tabularkv' => ' + Uncharacterized', + 'tugboat' => ' + Uncharacterized', + 'orderrefs' => ' + Uncharacterized', + 'yfonts-t1' => ' + Uncharacterized', + 'pst-gr3d' => ' + Uncharacterized', + 'suftesi' => ' + Uncharacterized', + 'fge' => ' + Uncharacterized', + 'xii' => ' + Uncharacterized', + 'etaremune' => ' + Uncharacterized', + 'varindex' => ' + Uncharacterized', + 'ucdavisthesis' => ' + Uncharacterized', + 'tex-font-errors-cheatsheet' => ' + Uncharacterized', + 'typedref' => ' + Uncharacterized', + 'tex-references' => ' + Uncharacterized', + 'enumitem-zref' => ' + Uncharacterized', + 'fig4latex' => ' + Uncharacterized', + 'moreverb' => ' + Uncharacterized', + 'geometry' => ' + Uncharacterized', + 'KIXfont' => ' + Uncharacterized', + 'truchet' => ' + Uncharacterized', + 'softmaker-canossa' => ' + Uncharacterized', + 'faltblat' => ' + Uncharacterized', + 'nicefrac' => ' + Uncharacterized', + 'mff-util' => ' + Uncharacterized', + 'asaetr' => ' + Uncharacterized', + 'isotope' => ' + Uncharacterized', + 'sehyph' => ' + Uncharacterized', + 'dot2texi' => ' + Uncharacterized', + 'asymptote-faq-zh-cn' => ' + Uncharacterized', + 'typespec' => ' + Uncharacterized', + 'progressbar' => ' + Uncharacterized', + 'capbas' => ' + Uncharacterized', + 'subdocs' => ' + Uncharacterized', + 'smalltalk' => ' + Uncharacterized', + 'bibplain' => ' + Uncharacterized', + 'uscthesis' => ' + Uncharacterized', + 'fnote' => ' + Uncharacterized', + 'oldstandard' => ' + Uncharacterized', + 'midnight' => ' + Uncharacterized', + 'nth' => ' + Uncharacterized', + 'synctex-parser' => ' + Uncharacterized', + 'ctex' => ' + Uncharacterized', + 'jpsj' => ' + Uncharacterized', + 'cprotect' => ' + Uncharacterized', + 'cell' => ' + Uncharacterized', + 'boxit' => ' + Uncharacterized', + 'ppower4' => ' + Uncharacterized', + 'adjustbox' => ' + Uncharacterized', + 'rcsinfo' => ' + Uncharacterized', + 'sugconf' => ' + Uncharacterized', + 'topfloat' => ' + Uncharacterized', + 'Excel-to-LaTeX' => ' + Uncharacterized', + 'bridge' => ' + Uncharacterized', + 'upgreek' => ' + Uncharacterized', + 'chgbar' => ' + Uncharacterized', + 'smallcap' => ' + Uncharacterized', + 'pst-pad' => ' + Uncharacterized', + '12many' => ' + Uncharacterized', + 'cjk-fonts' => ' + Uncharacterized', + 'borceux' => ' + Uncharacterized', + 'fonetika' => ' + Uncharacterized', + 'ledmac' => ' + Uncharacterized', + 'randbild' => ' + Uncharacterized', + 'ctie' => ' + Uncharacterized', + 'clock' => ' + Uncharacterized', + 'pageslts' => ' + Uncharacterized', + 'bibmods' => ' + Uncharacterized', + 'xbibfile' => ' + Uncharacterized', + 'syntonly' => ' + Uncharacterized', + 'dehyph-exptl' => ' + Uncharacterized', + 'HLaTeX fonts' => ' + Uncharacterized', + 'beginlatex' => ' + Uncharacterized', + 'esk' => ' + Uncharacterized', + 'lookbibtex' => ' + Uncharacterized', + 'lipsum' => ' + Uncharacterized', + 'natbib' => ' + Uncharacterized', + 'amsppt1' => ' + Uncharacterized', + 'mathpple' => ' + Uncharacterized', + 'chemscheme' => ' + Uncharacterized', + 'bullcntr' => ' + Uncharacterized', + 'xfrac' => ' + Uncharacterized', + 'texi2html' => ' + Uncharacterized', + 'nccfloats' => ' + Uncharacterized', + 'multicolpar' => ' + Uncharacterized', + 'engtlc' => ' + Uncharacterized', + 'gnuplot' => ' + Uncharacterized', + 'pst-slpe' => ' + Uncharacterized', + 'mnhyphn' => ' + Uncharacterized', + 'mff' => ' + Uncharacterized', + 'list' => ' + Uncharacterized', + 'ps4mf' => ' + Uncharacterized', + 'xetex-itrans' => ' + Uncharacterized', + 'rvwrite' => ' + Uncharacterized', + 'extsizes' => ' + Uncharacterized', + 'prodint' => ' + Uncharacterized', + 'pgf-umlsd' => ' + Uncharacterized', + 'gauss' => ' + Uncharacterized', + 'tamefloats' => ' + Uncharacterized', + 'hypernat' => ' + Uncharacterized', + 'tpic2pdftex' => ' + Uncharacterized', + 'functan' => ' + Uncharacterized', + 'rawfonts' => ' + Uncharacterized', + 'ordinalpt' => ' + Uncharacterized', + 'ltx3pub' => ' + Uncharacterized', + 'fancypar' => ' + Uncharacterized', + 'fundus-outline' => ' + Uncharacterized', + 'stage' => ' + Uncharacterized', + 'tikz-inet' => ' + Uncharacterized', + 'esperant' => ' + Uncharacterized', + 'Vancouver' => ' + Uncharacterized', + 'section' => ' + Uncharacterized', + 'cmcyr-patch' => ' + Uncharacterized', + 'tabto for LaTeX.' => ' + Uncharacterized', + 'perpage' => ' + Uncharacterized', + 'ethiop' => ' + Uncharacterized', + 'chessfss' => ' + Uncharacterized', + 'swiftex' => ' + Uncharacterized', + 'isomath' => ' + Uncharacterized', + 'concmath-fonts' => ' + Uncharacterized', + 'revnum' => ' + Uncharacterized', + 'settosize' => ' + Uncharacterized', + 'Petri-nets' => ' + Uncharacterized', + 'verbatim-tub' => ' + Uncharacterized', + 'boisik' => ' + Uncharacterized', + 'grkfinst' => ' + Uncharacterized', + 'hep' => ' + Uncharacterized', + 'milstd' => ' + Uncharacterized', + 'business-research' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'texlipse' => ' + Uncharacterized', + 'indentfirst' => ' + Uncharacterized', + 'KTeXShell' => ' + Uncharacterized', + 'MetaPost examples' => ' + Uncharacterized', + 'psnfssx-luc' => ' + Uncharacterized', + 'cprog' => ' + Uncharacterized', + 'roundbox' => ' + Uncharacterized', + 'headerfooter' => ' + Uncharacterized', + 'tabularew' => ' + Uncharacterized', + 'memoir' => ' + Uncharacterized', + 'side' => ' + Uncharacterized', + 'varsfromjobname' => ' + Uncharacterized', + 'iching' => ' + Uncharacterized', + 'ucthesis' => ' + Uncharacterized', + 'ean' => ' + Uncharacterized', + 'fenixpar' => ' + Uncharacterized', + 'fileerr' => ' + Uncharacterized', + 'javaDVI' => ' + Uncharacterized', + 'widetable' => ' + Uncharacterized', + 'texware' => ' + Uncharacterized', + 'lshort-thai' => ' + Uncharacterized', + 'catalan' => ' + Uncharacterized', + 'greektex' => ' + Uncharacterized', + 'isodate' => ' + Uncharacterized', + 'CSTeX' => ' + Uncharacterized', + 'bgteubner' => ' + Uncharacterized', + 'esstix' => ' + Uncharacterized', + 'bdfchess' => ' + Uncharacterized', + 'holtxdoc' => ' + Uncharacterized', + 'changelayout' => ' + Uncharacterized', + 'jablantile' => ' + Uncharacterized', + 'serbian-lig' => ' + Uncharacterized', + 'eolgrab' => ' + Uncharacterized', + 'euroitc' => ' + Uncharacterized', + 'GFS Didot' => ' + Uncharacterized', + 'ukdate' => ' + Uncharacterized', + 'doublestroke' => ' + Uncharacterized', + 'tmview' => ' + Uncharacterized', + 'mhchem' => ' + Uncharacterized', + 'he-she' => ' + Uncharacterized', + 'tktexcad' => ' + Uncharacterized', + 'graphics' => ' + Uncharacterized', + 'balance' => ' + Uncharacterized', + 'viiptart' => ' + Uncharacterized', + 'cweb' => ' + Uncharacterized', + 'faktor' => ' + Uncharacterized', + 'disser' => ' + Uncharacterized', + 'euxunicode' => ' + Uncharacterized', + 'alg' => ' + Uncharacterized', + 'gchords' => ' + Uncharacterized', + 'verbinp' => ' + Uncharacterized', + 'plainmisc' => ' + Uncharacterized', + 'bibleref-french' => ' + Uncharacterized', + 'songs' => ' + Uncharacterized', + 'ednotes' => ' + Uncharacterized', + 'czhyph2e' => ' + Uncharacterized', + 'gsftopk' => ' + Uncharacterized', + 'colortex' => ' + Uncharacterized', + 'deleq' => ' + Uncharacterized', + 'bardiag' => ' + Uncharacterized', + 'nccrules' => ' + Uncharacterized', + 'stubs' => ' + Uncharacterized', + 'mfware' => ' + Uncharacterized', + 'elteikthesis' => ' + Uncharacterized', + 'labels' => ' + Uncharacterized', + 'xcmr' => ' + Uncharacterized', + 'poster' => ' + Uncharacterized', + 'dvi-economic' => ' + Uncharacterized', + 'webmacss' => ' + Uncharacterized', + 'jtbnew' => ' + Uncharacterized', + 'flashcards' => ' + Uncharacterized', + 'letterspacing' => ' + Uncharacterized', + 'pdftricks' => ' + Uncharacterized', + 'gillcm' => ' + Uncharacterized', + 'fmtcount' => ' + Uncharacterized', + 'cbcoptic' => ' + Uncharacterized', + 'fchart' => ' + Uncharacterized', + 'cyrguide' => ' + Uncharacterized', + 'tds' => ' + Uncharacterized', + 'computational-complexity' => ' + Uncharacterized', + 'grfpaste' => ' + Uncharacterized', + 'free-math-font-survey-vn' => ' + Uncharacterized', + 'l2tabu-italian' => ' + Uncharacterized', + 'xstring' => ' + Uncharacterized', + 'ttf2pt1' => ' + Uncharacterized', + 'metatype1' => ' + Uncharacterized', + 'mathscinet' => ' + Uncharacterized', + 'delig' => ' + Uncharacterized', + 'arbeit' => ' + Uncharacterized', + 'everysel' => ' + Uncharacterized', + 'dmhgener' => ' + Uncharacterized', + 'greenpoint' => ' + Uncharacterized', + 'invertedparagraphs' => ' + Uncharacterized', + 'wsuipa' => ' + Uncharacterized', + 'GraphBase' => ' + Uncharacterized', + 'picinpar' => ' + Uncharacterized', + 'ans' => ' + Uncharacterized', + 'achicago-bst' => ' + Uncharacterized', + 'petiteannonce' => ' + Uncharacterized', + 'ISO-TeX' => ' + Uncharacterized', + 'linearb' => ' + Uncharacterized', + 'fourier' => ' + Uncharacterized', + 'URW-base35' => ' + Uncharacterized', + 'ibmres-tex' => ' + Uncharacterized', + 'pst-uml' => ' + Uncharacterized', + 'csfonts-t1' => ' + Uncharacterized', + 'minutes' => ' + Uncharacterized', + 'phaistos' => ' + Uncharacterized', + 'somedefs' => ' + Uncharacterized', + 'malayalam-omega' => ' + Uncharacterized', + 'LuxiMono' => ' + Uncharacterized', + 'engord' => ' + Uncharacterized', + 'semantic' => ' + Uncharacterized', + 'mhequ' => ' + Uncharacterized', + 'theorem' => ' + Uncharacterized', + 'artex' => ' + Uncharacterized', + 'yagusylo' => ' + Uncharacterized', + 'djgpp' => ' + Uncharacterized', + 'ulsy' => ' + Uncharacterized', + 'nddiss' => ' + Uncharacterized', + 'copyrightbox' => 'Graphics > + Other', + 'context-typescripts' => ' + Uncharacterized', + 'zefonts' => ' + Uncharacterized', + 'gmverb' => ' + Uncharacterized', + 'GraphTeX' => ' + Uncharacterized', + 'truncate' => ' + Uncharacterized', + 'moonphase' => ' + Uncharacterized', + 'LaTeX-tds' => ' + Uncharacterized', + 'metapost-matlab' => ' + Uncharacterized', + 'regexpatch' => 'Programming in TeX > + Package management', + 'isonums' => ' + Uncharacterized', + 'onepagem' => ' + Uncharacterized', + 'bibleref-parse' => ' + Uncharacterized', + 'latex-info' => ' + Uncharacterized', + 'espo' => ' + Uncharacterized', + 'l2tabu-spanish' => ' + Uncharacterized', + 'ellipsis' => ' + Uncharacterized', + 'VTeX/Free' => ' + Uncharacterized', + 'protocol' => ' + Uncharacterized', + 'fastpictex' => ' + Uncharacterized', + 'sides' => ' + Uncharacterized', + 'limap' => ' + Uncharacterized', + 'zahl2string' => ' + Uncharacterized', + 'w32tex' => ' + Uncharacterized', + 'Robot Man' => ' + Uncharacterized', + 'psfragger' => ' + Uncharacterized', + 'multirow' => ' + Uncharacterized', + 'underlin-generic' => ' + Uncharacterized', + 'finstrut' => ' + Uncharacterized', + 'w-a-schmidt' => ' + Uncharacterized', + 'psizzl' => ' + Uncharacterized', + 'context-account' => ' + Uncharacterized', + 'gpdata' => ' + Uncharacterized', + 'streetex' => ' + Uncharacterized', + 'LEd' => ' + Uncharacterized', + 'ncccomma' => ' + Uncharacterized', + 'gplot' => ' + Uncharacterized', + 'compsci' => ' + Uncharacterized', + 'cyrillic' => ' + Uncharacterized', + 'annotation-pkg' => ' + Uncharacterized', + 'texlive-repo' => ' + Uncharacterized', + 'abc' => ' + Uncharacterized', + 'ANUfinalexam' => ' + Uncharacterized', + 'fontsampler' => ' + Uncharacterized', + 'coollist' => ' + Uncharacterized', + 'emerald' => ' + Uncharacterized', + 'ssqquote' => ' + Uncharacterized', + 'csvsimple' => ' + Uncharacterized', + 'fancyvrb' => ' + Uncharacterized', + 'sc21-wg1' => ' + Uncharacterized', + 'volumes' => ' + Uncharacterized', + 'starfont' => ' + Uncharacterized', + 'SkakNew' => ' + Uncharacterized', + 'sudokubundle' => ' + Uncharacterized', + 'huncial' => ' + Uncharacterized', + 'texas' => ' + Uncharacterized', + 'quotes' => ' + Uncharacterized', + 'supertabular' => ' + Uncharacterized', + 'blockdraw_mp' => ' + Uncharacterized', + 'softmaker-tampa' => ' + Uncharacterized', + 'oca' => ' + Uncharacterized', + 'ionumbers' => ' + Uncharacterized', + 'foilhtml' => ' + Uncharacterized', + 'sines' => ' + Uncharacterized', + 'rfil' => ' + Uncharacterized', + 'softfonts' => ' + Uncharacterized', + 'acmproc' => ' + Uncharacterized', + 'Thai LaTeX' => ' + Uncharacterized', + 'btOOL' => ' + Uncharacterized', + 'hopatch' => ' + Uncharacterized', + 'TeXmuse' => ' + Uncharacterized', + 'purifyeps' => ' + Uncharacterized', + 'dropcaps' => ' + Uncharacterized', + 'viking' => ' + Uncharacterized', + 'tolkienfonts' => ' + Uncharacterized', + 'txfonts' => ' + Uncharacterized', + 'go-make' => ' + Uncharacterized', + 'miktex' => ' + Uncharacterized', + 'url' => ' + Uncharacterized', + 'bakoma' => ' + Uncharacterized', + 'ruled-tables' => ' + Uncharacterized', + 'sshdbk10' => ' + Uncharacterized', + 'dPS' => ' + Uncharacterized', + 'ital' => ' + Uncharacterized', + 'Knuth-errata' => ' + Uncharacterized', + 'magic' => ' + Uncharacterized', + 'umich-thesis' => ' + Uncharacterized', + 'microtype-de' => ' + Uncharacterized', + 'glonti' => ' + Uncharacterized', + 'pst-light3d' => ' + Uncharacterized', + 'ncccropmark' => ' + Uncharacterized', + 'cmll' => ' + Uncharacterized', + 'vmsps' => ' + Uncharacterized', + 'statex2' => ' + Uncharacterized', + 'rail' => ' + Uncharacterized', + 'collectbox' => 'Programming in TeX > Box + manipulation', + 'pseudocode' => ' + Uncharacterized', + 'boxhandler' => ' + Uncharacterized', + 'threed' => ' + Uncharacterized', + 'biblook' => ' + Uncharacterized', + 'settosize-ltx' => ' + Uncharacterized', + 'estcpmm' => ' + Uncharacterized', + 'lfb' => ' + Uncharacterized', + 'xesearch' => ' + Uncharacterized', + 'hieroglyph' => ' + Uncharacterized', + 'drop' => ' + Uncharacterized', + 'latexMP' => ' + Uncharacterized', + 'theapa' => ' + Uncharacterized', + 'lettermac' => ' + Uncharacterized', + 'sgame' => ' + Uncharacterized', + 'tth' => ' + Uncharacterized', + 'izhitsa' => ' + Uncharacterized', + 'tex-gyre-bonum' => ' + Uncharacterized', + 'xr-hyper' => ' + Uncharacterized', + 'rmthm' => ' + Uncharacterized', + 'fpTeX' => ' + Uncharacterized', + 'aebenvelope' => ' + Uncharacterized', + 'snote' => ' + Uncharacterized', + 'mailmerge' => ' + Uncharacterized', + 'poemscol' => ' + Uncharacterized', + 'soulutf8' => ' + Uncharacterized', + 'bookhands' => ' + Uncharacterized', + 'histogr' => ' + Uncharacterized', + 'LatexRender' => ' + Uncharacterized', + 'othello' => ' + Uncharacterized', + 'decimal' => ' + Uncharacterized', + 'codedoc' => ' + Uncharacterized', + 'times' => ' + Uncharacterized', + 'slantsc' => ' + Uncharacterized', + 'piano' => ' + Uncharacterized', + 'xnewcommand' => ' + Uncharacterized', + 'amslatexdoc-vietnamese' => ' + Uncharacterized', + 'varioref' => ' + Uncharacterized', + 'papertex' => ' + Uncharacterized', + 'textpos' => ' + Uncharacterized', + 'soul' => ' + Uncharacterized', + 'afthesis' => ' + Uncharacterized', + 'g-brief' => ' + Uncharacterized', + 'dashundergaps' => ' + Uncharacterized', + 'eco' => ' + Uncharacterized', + 'GFS NeoHellenic' => ' + Uncharacterized', + 'okuda' => ' + Uncharacterized', + 'fancychapters' => ' + Uncharacterized', + 'keystroke' => ' + Uncharacterized', + 'circuitikz' => ' + Uncharacterized', + 'encTeX' => ' + Uncharacterized', + 'marnote' => ' + Uncharacterized', + 'csquotes-de' => ' + Uncharacterized', + 'inputenx' => ' + Uncharacterized', + 'answers' => ' + Uncharacterized', + 'forloop' => ' + Uncharacterized', + 'expdlist' => ' + Uncharacterized', + 'dvitype' => ' + Uncharacterized', + 'latexcount' => ' + Uncharacterized', + 'mathgifg' => ' + Uncharacterized', + 'backref' => ' + Uncharacterized', + 'tableaux' => ' + Uncharacterized', + 'bitfield' => ' + Uncharacterized', + 'hepthesis' => ' + Uncharacterized', + 'showlabels' => ' + Uncharacterized', + 'abstract' => ' + Uncharacterized', + 'pzccal' => ' + Uncharacterized', + 'xetex-def' => ' + Uncharacterized', + 'softmaker-quadrat' => ' + Uncharacterized', + 'makecell' => ' + Uncharacterized', + 'shalom' => ' + Uncharacterized', + 'osmanian' => ' + Uncharacterized', + 'keyval' => ' + Uncharacterized', + 'texshop' => ' + Uncharacterized', + 'amscls' => ' + Uncharacterized', + 'xetex-devanagari' => ' + Uncharacterized', + 'cjk' => ' + Uncharacterized', + 'unitsdef' => ' + Uncharacterized', + 'fancytabs' => ' + Uncharacterized', + 'sort-by-letters' => ' + Uncharacterized', + 'firstline' => ' + Uncharacterized', + 'merge' => ' + Uncharacterized', + 'unicode' => ' + Uncharacterized', + 'cep' => ' + Uncharacterized', + 'ftn' => ' + Uncharacterized', + 'tabulary' => ' + Uncharacterized', + 'WordML2LaTeX' => ' + Uncharacterized', + 'crudetype' => ' + Uncharacterized', + 'picture' => ' + Uncharacterized', + 'vwcol' => ' + Uncharacterized', + 'calorie' => ' + Uncharacterized', + 'softmaker-veracruz' => ' + Uncharacterized', + 'scientificpaper' => ' + Uncharacterized', + 'mathsci2bibtex' => ' + Uncharacterized', + 'accfonts' => ' + Uncharacterized', + 'play' => ' + Uncharacterized', + 'tabbingbox' => ' + Uncharacterized', + 'enumitem' => ' + Uncharacterized', + 'booktabs-de' => ' + Uncharacterized', + 'mempatch' => ' + Uncharacterized', + 'sty2dtx' => ' + Uncharacterized', + 'texlist' => ' + Uncharacterized', + 'loval' => ' + Uncharacterized' + }, + 'primary' => { + 'xytree' => 'Subject-specific typesetting + > Linguistics', + 'gitinfo' => 'Tools > Document + management', + 'eqell' => ' + Uncharacterized', + 'biblatex-juradiss' => 'Document parts > + Bibliography > Bibliographic styles', + 'ltnews' => 'Documentation > + Other', + 'ifxetex' => 'Programming in TeX > + Other', + 'techreport' => 'Document types > Theses > + Thesis styles', + 'twoside' => 'Output > + Other', + 'scalefnt' => 'Fonts > Support + files', + 'dejavu' => 'Fonts > Text body + fonts', + 'dante-book-reviews' => 'Documentation > + Other', + 'biblos' => 'Tools > Bibliography + managers', + 'listings-ext' => 'Subject-specific typesetting + > Computer science', + 'marginfix' => 'Page-focused > Material in + margins', + 'guitar' => 'Document types > Other > + Music', + 'gray' => 'Graphics > MetaFont or + Metapost', + 'endnote' => 'Page-focused > + Footnotes', + 'softmaker-broadway' => 'Fonts > Support + files', + 'active-conf' => 'Document types > Proceedings + > Proceedings styles', + 'sarabian' => 'Fonts > Text body + fonts', + 'mdwlist' => 'Programming in TeX > + Programming structures', + 'xtrcode' => 'Programming in TeX > + Other', + 'tablor' => 'Subject-specific typesetting + > Mathematics > Other', + 'sc21' => 'Document parts > + Other', + 'beamersubframe' => 'Document types > + Presentations', + 'verbatimbox' => 'Programming in TeX > Box + manipulation', + 'pgf-soroban' => 'Graphics > Inside + TeX', + 'pauldoc' => 'Documentation > + Other', + 'exercise' => 'Document types > Exams, + exercise sets, and answers', + 'logical-markup-utils' => 'Programming in TeX > + Other', + 'curves' => 'Graphics > Inside + TeX', + 'expl3' => 'Programming in TeX > + Programming structures', + 'extdash' => 'Programming in TeX > + Other', + 'pgf-blur' => 'Graphics > Inside + TeX', + 'dates' => 'Programming in TeX > Date + and time', + 'substr' => 'Programming in TeX > + Programming structures', + 'pdftex-def' => 'Output > PDF, + PostScript', + 'losymbol' => 'Document parts > + Other', + 'chickenize' => 'Programming in TeX > + Other', + 'aguplus' => 'Subject-specific typesetting + > Other natural sciences', + 'dvipng' => 'Output > + Other', + 'llist' => 'Page-focused > + Verbatim', + 'dinat' => 'Document parts > + Bibliography > Bibliographic styles', + 'amsppt' => 'Document types > Articles + > Others', + 'address' => 'Document types > + Letters', + 'kuvio' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + 'moderntimeline' => 'Graphics > Inside + TeX', + 'ghostscript-afpl' => ' + Uncharacterized', + 'png2pdf' => 'Graphics > + Tools', + 'crop' => 'Page-focused > Page + geometry', + 'chemarrow' => 'Subject-specific typesetting + > Other natural sciences', + 'sanskrit-t1' => 'Fonts > Text body + fonts', + 'vrb' => 'Page-focused > + Verbatim', + 'maad' => 'Documentation > + Tutorial', + '2in1' => 'Output > + Other', + 'amsmath-it' => 'Documentation > + Other', + 'undertilde-gen' => ' + Uncharacterized', + 'mylatexformat' => 'Programming in TeX > Package + management', + 'pmx' => 'Document types > Other > + Music', + 'testeq' => 'Graphics > MetaFont or + Metapost', + 'Punk-LaTeX' => 'Fonts > Support + files', + 'tikz-timing' => 'Graphics > Inside + TeX', + 'latex-course' => 'Documentation > + Tutorial', + 'catdvi' => 'Output > + Other', + 'ruler' => 'Documentation > + Other', + 'cool' => 'Subject-specific typesetting + > Mathematics > Other', + 'sauerj' => ' + Uncharacterized', + 'ltxmisc' => ' + Uncharacterized', + 'psbao' => 'Graphics > Inside + TeX', + 'adrconv' => 'Document types > Other > + Envelopes', + 'initials' => 'Fonts > Symbol + fonts', + 'confproc' => 'Document types > Proceedings + > Proceedings styles', + 'proof' => 'Tools > Document + management', + 'tex2word' => 'Tools > Convert + formats', + 'ltxgrid' => 'Page-focused > Multiple + columns', + 'time-gen' => ' + Uncharacterized', + 'knuth-local' => ' + Uncharacterized', + 'induni-om' => 'Fonts > Text body + fonts', + 'tables' => ' + Uncharacterized', + 'ryethesis' => 'Document types > Theses > + Thesis styles', + 'pst-sigsys' => 'Graphics > Inside + TeX', + 'hrefhide' => 'Output > PDF, + PostScript', + 'enumerate' => 'Page-focused > + Lists', + 'mlist' => 'Programming in TeX > + Programming structures', + 'sfmath' => 'Fonts > Font + tools', + 'histyle' => 'Document types > Other > + Misc', + 'fntproof' => 'Fonts > Font + tools', + 'mpcolornames' => 'Graphics > MetaFont or + Metapost', + 'bohr' => 'Subject-specific typesetting + > Physics', + 'coptic' => 'Fonts > Text body + fonts', + 'gahyph' => 'Infrastructure > + Hyphenation', + 'threeparttable' => 'Page-focused > + Tables', + 'acs' => 'Document types > Articles + > Journal styles', + 'abstyles-orig' => 'Document parts > + Bibliography > Bibliographic styles', + 'bsf' => ' + Uncharacterized', + 'seuthesis' => 'Document types > Theses > + Thesis styles', + 'funnelweb' => 'Literate + programming', + 'fixpdfmag' => 'Page-focused > Page + geometry', + 'softmaker-moab' => 'Fonts > Support + files', + 'idxtex' => 'Document parts > + Index', + 'ec-plain' => 'Fonts > Support + files', + 'eurotex' => ' + Uncharacterized', + 'LaTeX-brochure' => 'Documentation > + Other', + 'vowel' => 'Graphics > Inside + TeX', + 'serbian-date-lat' => 'Non-English languages > + Other', + 'mnras-plain' => 'Document types > Articles + > Journal styles', + 'nar' => 'Document parts > + Bibliography > Bibliographic styles', + 'needspace' => 'Page-focused > + Other', + 'gnuplottex' => 'Graphics > Inside + TeX', + 'cassette' => 'Document types > Other > + CD and DVD covers', + 'MicroIMP' => 'Tools > Editors and + shells', + 'fbithesis' => 'Document types > Theses > + Thesis styles', + 'oands' => 'Fonts > Symbol + fonts', + 'mf2tex' => 'Graphics > MetaFont or + Metapost', + 'easybmat' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'pdfcolfoot' => 'Output > PDF, + PostScript', + 'luabibentry' => 'Document parts > + Bibliography > Bibliographic styles', + 'realboxes' => 'Programming in TeX > Box + manipulation', + 'plipsum' => 'Programming in TeX > + Other', + 'romanbar' => ' + Uncharacterized', + 'comicsans' => 'Fonts > Text body + fonts', + 'chicago' => 'Document parts > + Bibliography > Bibliographic styles', + 'iso10303' => 'Document types > Reference + manuals', + 'noitcrul' => 'Subject-specific typesetting + > Mathematics > Other', + 'hyphen-accent' => ' + Uncharacterized', + 'malayalam-latex' => 'Fonts > Text body + fonts', + 'chemfig' => 'Subject-specific typesetting + > Other natural sciences', + 'kvsetkeys' => 'Programming in TeX > + Programming structures', + 'templates-sommer' => 'Documentation > + Other', + 'ibm' => 'Fonts > Support + files', + 'algorithm2e' => 'Subject-specific typesetting + > Computer science', + 'pstricks-examples-en' => 'Documentation > + Other', + 'ifmtarg' => 'Programming in TeX > + Other', + 'verbatim-pln' => 'Page-focused > + Verbatim', + 'longtable' => 'Page-focused > + Tables', + 'pagecont' => 'Page-focused > Page + numbers', + 'fifinddo-info' => 'Documentation > + Tutorial', + 'rtf2latex2e' => 'Tools > Convert + formats', + 'ptserif' => 'Fonts > Text body + fonts', + 'konwerter' => 'Subject-specific typesetting + > Other natural sciences', + 'hypgotoe' => 'Output > PDF, + PostScript', + 'mt11p' => 'Fonts > Support + files', + 'cleveref' => 'Programming in TeX > Cross + references', + 'epspdfconversion' => 'Tools > Convert + formats', + 'corridx-latex' => 'Subject-specific typesetting + > Other natural sciences', + 'mslapa' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'metainfo' => 'Page-focused > + Other', + 'typehtml' => 'Output > + HTML', + 'dvgtk' => 'Output > + DVI', + 'makeidx' => 'Document parts > + Index', + 'archaic' => 'Fonts > Text body + fonts', + 'foiltex' => 'Document types > + Presentations', + 'subcaption' => 'Page-focused > + Captions', + 'mpdinbrief' => 'Document types > + Other', + 'LamsTeX' => 'Infrastructure > + Extensions', + 'mfnfss' => 'Fonts > Support + files', + 'paralist' => 'Page-focused > + Lists', + 'biblatex-fiwi' => 'Document parts > + Bibliography > Bibliographic styles', + 'luatex-pkg' => 'Programming in TeX > + Other', + 'yt4pdf' => 'Graphics > + Other', + 'textgreek' => 'Fonts > Symbol + fonts', + 'image-gallery' => 'Graphics > + Tools', + 'systcontrolletters' => 'Document types > Books > + Publisher styles', + 'imsproc' => 'Document types > Proceedings + > Proceedings styles', + 'odsfile' => 'Page-focused > + Tables', + 'la' => 'Fonts > Text body + fonts', + 'exteps' => 'Graphics > MetaFont or + Metapost', + 'multenum' => 'Document types > Exams, + exercise sets, and answers', + 'XeTeXref' => 'Documentation > + Other', + 'todo' => 'Page-focused > + Lists', + 'lshort-italian' => 'Documentation > + Tutorial', + 'twcal' => 'Fonts > Symbol + fonts', + 'regstats' => 'Programming in TeX > + Other', + 'renditions' => 'Programming in TeX > + Other', + 'calrsfs' => 'Fonts > Symbol + fonts', + 'rotchiffre' => 'Programming in TeX > + Other', + 'compact-symbols' => 'Documentation > Help + files', + 'svn-prov' => 'Tools > Document + management', + 'amsopn' => 'Subject-specific typesetting + > Mathematics > Other', + 'numalg' => ' + Uncharacterized', + 'pst-solarsystem' => 'Graphics > Inside + TeX', + 'kmrhyph' => 'Infrastructure > + Hyphenation', + 'tap' => 'Page-focused > + Tables', + 'ziffer' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'insbox' => 'Page-focused > + Paragraphs', + 'doc' => ' + Documentation', + 'chemstruct' => 'Subject-specific typesetting + > Other natural sciences', + 'pst-coil' => 'Graphics > Inside + TeX', + 'eddi4tex' => ' + Uncharacterized', + 'grafcet' => 'Subject-specific typesetting + > Other natural sciences', + 'chemexec' => 'Document types > Exams, + exercise sets, and answers', + 'mbenotes' => ' + Uncharacterized', + 'kalender-209' => 'Document types > Other > + Calendars', + 'cmfrak' => 'Fonts > Support + files', + 'refcheck' => 'Tools > Document + management', + 'dectab' => 'Page-focused > + Tables', + 'urw' => 'Fonts > Support + files', + 'ntgclass' => 'Document types > + Articles', + 'coolthms' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'amstext' => 'Subject-specific typesetting + > Mathematics > Equations', + 'othelloboard' => 'Document types > Other > + Other games', + 'chemcompounds' => 'Subject-specific typesetting + > Other natural sciences', + 'stdclsdv' => 'Programming in TeX > + Programming structures', + 'sapthesis' => 'Document types > Theses > + Thesis styles', + 'docstrip' => 'Documentation > + Other', + 'idealfonts' => 'Output > PDF, + PostScript', + 'bold-extra' => 'Fonts > Text body + fonts', + 'makeindex' => 'Document parts > + Index', + 'dogma' => 'Fonts > Support + files', + 'mwrite' => 'Programming in TeX > + Programming structures', + 'lsabon' => 'Fonts > Support + files', + 'geophysics' => 'Document types > Articles + > Journal styles', + 'l3dt' => 'Programming in TeX > + Programming structures', + 'hvdashln' => 'Page-focused > + Tables', + 'listings' => 'Subject-specific typesetting + > Computer science', + 'selectpage' => 'Output > + Other', + 'har2nat' => 'Page-focused > + Citations', + 'mentis' => 'Document types > Books > + Publisher styles', + 'envbig' => 'Document types > + Letters', + 'C.D.P. Bundle' => 'Document types > + Letters', + 'upquote' => 'Page-focused > + Verbatim', + 'labelmac3' => 'Document types > Other > + Envelopes', + 'uiucthesis' => 'Document types > Theses > + Thesis styles', + 'karta' => 'Fonts > Symbol + fonts', + 'mactex' => 'Infrastructure > Current + systems', + 'lmacs' => 'Programming in TeX > Package + management', + 'shapepar' => 'Page-focused > + Paragraphs', + 'nonumonpart' => 'Page-focused > Page + numbers', + 'intcalc' => 'Programming in TeX > + Other', + 'unisugar' => 'Programming in TeX > + Other', + 'classlist' => 'Programming in TeX > Package + management', + 'bchart' => 'Graphics > Inside + TeX', + 'timetab' => 'Document types > Other > + Misc', + 'logic' => 'Fonts > Symbol + fonts', + 'cspsfonts' => 'Fonts > Support + files', + 'fontchart' => 'Fonts > Support + files', + 'dirtytalk' => ' + Uncharacterized', + 'dvgt' => 'Output > + DVI', + 'MPEdit' => 'Graphics > MetaFont or + Metapost', + 'web' => 'Literate + programming', + 'references' => 'Tools > Bibliography + managers', + 'minted' => 'Page-focused > + Verbatim', + 'hpsdiss' => 'Document types > Theses > + Thesis styles', + 'texdirflatten' => 'Tools > Document + management', + 'tugboat-plain' => 'Document types > Articles + > Journal styles', + 'exsheets' => 'Document types > Exams, + exercise sets, and answers', + 'outline' => 'Page-focused > + Lists', + 'glhyph' => 'Infrastructure > + Hyphenation', + 'chklref' => 'Programming in TeX > Cross + references', + 'texdoc' => ' + Documentation', + 'setouterhbox' => 'Programming in TeX > Box + manipulation', + 'cropmarks-pt' => 'Page-focused > Page + geometry', + 'ntsfaq' => 'Documentation > + Other', + 'hypht1' => 'Infrastructure > + Hyphenation', + 'malayalam-obsolete' => ' + Uncharacterized', + 'DayRoman' => 'Fonts > Text body + fonts', + 'cm-mf-extra' => 'Fonts > Text body + fonts', + 'aeguill' => 'Fonts > Text body + fonts', + 'treetex-ltx209' => 'Graphics > + Tools', + 'pfnote' => 'Page-focused > + Footnotes', + 'impatient' => 'Documentation > + Other', + 'mkpic' => 'Graphics > MetaFont or + Metapost', + 'texshell32' => 'Tools > Editors and + shells', + 'cv' => 'Document types > Curriculum + Vita', + 'ytableau' => 'Subject-specific typesetting + > Mathematics > Other', + 'subfigmat' => 'Page-focused > + Floats', + 'drawstack' => 'Subject-specific typesetting + > Computer science', + 'czhyph' => 'Infrastructure > + Hyphenation', + 'pdftex' => 'Output > PDF, + PostScript', + 'tlc2-examples' => 'Documentation > + Other', + 'xpinyin' => 'Non-English languages > + Chinese, Japanese, Korean', + 'newlfm' => 'Document types > + Letters', + 'l2x' => 'Output > + Other', + 'arabicfront' => 'Page-focused > Page + numbers', + 'eehyph' => 'Infrastructure > + Hyphenation', + 'xtexcad' => 'Graphics > + Tools', + 'nlatexdb' => 'Programming in TeX > + Programming structures', + 'biblist' => 'Tools > Bibliographic + manipulation', + 'dateiliste' => 'Page-focused > + Tables', + 'latex-hlp' => 'Documentation > Help + files', + 'translation-tabbing-fr' => 'Documentation > + Other', + 'backgrnd' => 'Page-focused > + Background', + 'xymtex' => 'Subject-specific typesetting + > Other natural sciences', + 'musixtex-t1fonts' => 'Fonts > Symbol + fonts', + 'dvipaste' => 'Tools > DVI + manipulation', + 'AddTeX2Eps' => 'Graphics > + Tools', + 'tex2tok' => 'Programming in TeX > + Other', + 'barcodes' => 'Graphics > + Other', + 'xparse' => 'Programming in TeX > + Programming structures', + 'concrete' => 'Fonts > Text body + fonts', + 'psmerge' => 'Graphics > + Tools', + 'piff' => ' + Uncharacterized', + 'chapref' => 'Document parts > + Bibliography', + 'levy-font' => 'Fonts > Text body + fonts', + 'hyphsubst' => 'Infrastructure > + Hyphenation', + 'a0poster' => 'Document types > + Other', + 'bigtabular' => 'Page-focused > + Tables', + 'diagxy' => 'Graphics > Inside + TeX', + 'texsort' => 'Programming in TeX > + Programming structures', + 'texdef' => 'Programming in TeX > + Other', + 'envlab' => 'Document types > + Letters', + 'yi4latex' => 'Tools > Editors and + shells', + 'gothic' => 'Fonts > Text body + fonts', + 'GuIT-corso' => 'Documentation > + Tutorial', + 'uptex' => 'Non-English languages > + Chinese, Japanese, Korean', + 'dvipsconfig' => 'Output > PDF, + PostScript', + 'textopo' => 'Subject-specific typesetting + > Other natural sciences', + 'syntax-mdw' => 'Subject-specific typesetting + > Computer science', + 'inversepath' => 'Programming in TeX > + Other', + 'uspatent' => 'Document types > Other > + Misc', + 'thumbs' => 'Page-focused > Material in + margins', + 'pst-knot' => 'Graphics > Inside + TeX', + 'plantslabels' => 'Graphics > Inside + TeX', + 'nbaseprt' => 'Subject-specific typesetting + > Computer science', + 'dates209' => 'Programming in TeX > Date + and time', + 'siam' => 'Document types > Books > + Publisher styles', + 'luatexja' => 'Non-English languages > + Chinese, Japanese, Korean', + 'acro' => ' + Uncharacterized', + 'prepr' => 'Document types > Articles + > Others', + 'excalibur' => 'Tools > + Spell-checkers', + 'jspell' => ' + Uncharacterized', + 'chronology' => 'Graphics > Inside + TeX', + 'poetica' => 'Fonts > Support + files', + 'fancyheadings' => ' + Uncharacterized', + 'scientificviewer' => 'Tools > + Other', + 'eplain' => 'Infrastructure > + Extensions', + 'go' => 'Document types > Other > + Other games', + 'register' => 'Subject-specific typesetting + > Computer science', + 'makeindexk' => 'Document parts > + Index', + 'amsmath' => 'Subject-specific typesetting + > Mathematics', + 'latexdiff' => 'Tools > Document + management', + 'cascover' => 'Document types > Other > + CD and DVD covers', + 'hyphenex' => 'Infrastructure > + Hyphenation', + 'perltex' => 'Programming in TeX > + Programming structures', + 'ptptex' => 'Document types > Articles + > Journal styles', + 'anyfontsize' => 'Fonts > Support + files', + 'testflow' => 'Tools > Document + management', + 'mhsetup' => 'Programming in TeX > Package + management', + 'alltt2' => 'Subject-specific typesetting + > Computer science', + 'auctex' => 'Tools > Editors and + shells', + 'NEdit-LaTeX-Extensions' => 'Tools > Editors and + shells', + 'cmtest' => 'Fonts > Font + tools', + 'easylist' => 'Page-focused > + Lists', + 'caption' => 'Page-focused > + Captions', + 'iagproc' => 'Document types > Proceedings + > Proceedings styles', + 'makecmds' => 'Programming in TeX > + Programming structures', + 'liturg' => 'Document types > Other > + Other games', + 'first-latex-doc' => 'Documentation > + Tutorial', + 'fundus' => 'Fonts > Support + files', + 'symbolindex' => 'Document parts > + Other', + 'recycle' => 'Fonts > Symbol + fonts', + 'calxxxx-yyyy' => 'Document types > Other > + Calendars', + 'ieeepes' => 'Document types > Proceedings + > Proceedings styles', + 'isi2bibtex' => 'Tools > Bibliographic + manipulation', + 'fortran' => 'Subject-specific typesetting + > Computer science', + 'M-Tx' => 'Document types > Other > + Music', + 'thai-usl' => 'Fonts > Text body + fonts', + 'moderncv' => 'Document types > Curriculum + Vita', + 'source2e' => 'Literate + programming', + 'accenti' => 'Fonts > Text body + fonts', + 'hanoi' => 'Programming in TeX > + Other', + 'ntg-maps' => 'Documentation > + Other', + 'circuit-macros' => 'Subject-specific typesetting + > Physics', + 'courseoutline' => 'Document types > Other > + Syllabus', + 'texpower' => 'Document types > + Presentations', + 'yhmath' => 'Fonts > Symbol + fonts', + 'pandora' => 'Fonts > Text body + fonts', + 'graphfig' => 'Page-focused > + Floats', + 'lshort-spanish' => 'Documentation > + Tutorial', + 'engpron' => 'Subject-specific typesetting + > Linguistics', + 'csx' => 'Tools > Convert + formats', + 'iftex' => 'Programming in + TeX', + 'hyphenation-greek' => 'Infrastructure > + Hyphenation', + 'bardi' => 'Non-English languages > + Other', + 'pst-calendar' => 'Document types > Other > + Calendars', + 'humanist' => 'Fonts > Text body + fonts', + 'youngtab' => 'Subject-specific typesetting + > Mathematics > Other', + 'foreign' => 'Non-English languages > + Other', + 'esindex' => 'Document parts > + Index', + 'splitbib' => 'Tools > Bibliographic + manipulation', + 'beamer2thesis' => 'Document types > + Presentations', + 'chess' => 'Document types > Other > + Chess', + 'alphanumb' => 'Document parts > + Bibliography > Bibliographic styles', + 'latex' => 'Programming in + TeX', + 'hrhyph' => 'Infrastructure > + Hyphenation', + 'plain' => 'Infrastructure > Current + systems', + 'esint-type1' => 'Fonts > Symbol + fonts', + 'interfaces' => 'Programming in TeX > + Other', + 'dancers' => 'Fonts > Symbol + fonts', + 'latex2e-help-texinfo' => 'Documentation > Help + files', + 'TeXbyTopic' => ' + Documentation', + 'unamthesis' => 'Document types > Theses > + Thesis styles', + 'shadowtext' => 'Fonts > + Other', + 'exp-testopt' => 'Programming in TeX > + Programming structures', + 'pmcstex' => 'Tools > Editors and + shells', + 'fancyhdr-it' => 'Page-focused > Headers and + footers', + 'vvcode' => ' + Uncharacterized', + 'softmaker-oldblackletter' => 'Fonts > Support + files', + 'endnotes' => 'Page-focused > + Footnotes', + 'aleph' => 'Infrastructure > + Extensions', + 'tkhyph' => 'Infrastructure > + Hyphenation', + 'ar' => 'Fonts > Symbol + fonts', + 'draft' => 'Page-focused > + Citations', + 'bigtable' => 'Page-focused > + Tables', + 'pst-platon' => 'Graphics > Inside + TeX', + 'subfloat' => 'Page-focused > + Floats', + 'landscape' => ' + Uncharacterized', + 'FigSize' => 'Graphics > + Other', + 'dk-bib' => 'Document parts > + Bibliography > Bibliographic styles', + 'maybeload' => 'Programming in TeX > + Other', + 'lgraph' => 'Graphics > + Tools', + 'tex-math' => ' + Uncharacterized', + 'greek6cbc' => 'Fonts > Text body + fonts', + 'bigsign' => 'Document types > Other > + Posters', + 'auncial-new' => 'Fonts > Text body + fonts', + 'iflang' => 'Programming in TeX > + Other', + 'footbib' => 'Document parts > + Bibliography > Others', + 'typografie' => 'Documentation > + Tutorial', + 'acmconf' => 'Subject-specific typesetting + > Computer science', + 'TrueTypeToType42' => 'Fonts > Font + tools', + 'ledpar' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'charter' => 'Fonts > Text body + fonts', + 'venndiagram' => 'Graphics > Inside + TeX', + 'nccpic' => 'Graphics > + Other', + 'l2picfaq' => 'Documentation > + Other', + 'va' => 'Fonts > Symbol + fonts', + 'jeopardy' => 'Document types > Other > + Other games', + 'LaTable' => 'Tools > Editors and + shells', + 'bmeps' => 'Graphics > + Tools', + 'fontload' => 'Output > PDF, + PostScript', + 'colonequals' => 'Subject-specific typesetting + > Computer science', + 'postcards' => 'Document types > + Letters', + 'garrigues' => 'Graphics > MetaFont or + Metapost', + 'pagenote' => 'Page-focused > + Footnotes', + 'mfpic4ode' => 'Subject-specific typesetting + > Mathematics > Other', + 'prettyref' => 'Page-focused > + Other', + 'lps' => 'Document types > Articles + > Journal styles', + 'patgen' => ' + Uncharacterized', + 'qobitree' => 'Graphics > Inside + TeX', + 'excludeonly' => 'Programming in TeX > + Other', + 'cmdstring' => 'Programming in TeX > + Other', + 'koma-script' => 'Document + types', + 'kelly-greek-font' => 'Fonts > Symbol + fonts', + 'texapi' => 'Programming in TeX > + Other', + 'JavaBib' => 'Tools > Bibliography + managers', + 'gettitlestring' => 'Document parts > Chapters + and Sections', + 'geschichtsfrkl' => 'Document parts > + Bibliography > Bibliographic styles', + 'ijmart' => 'Document types > Articles + > Journal styles', + 'fltpoint' => 'Programming in TeX > + Other', + 'arcs' => 'Subject-specific typesetting + > Mathematics', + 'fancybox' => 'Page-focused > Boxes and + minipages', + 'galois' => 'Subject-specific typesetting + > Mathematics > Other', + 'card' => 'Document types > Other > + Business cards', + 'twoopt' => 'Programming in TeX > + Other', + 'texlive-dummy-opensuse' => ' + Distributions', + 'figplace' => 'Page-focused > + Floats', + 'jabref' => 'Tools > Bibliography + managers', + 'softmaker-flagstaff' => 'Fonts > Support + files', + 'igo' => 'Document types > Other > + Other games', + 'backrefx' => ' + Uncharacterized', + 'mattens' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'extradefs' => 'Programming in TeX > + Other', + 'schemabloc' => 'Graphics > Inside + TeX', + 'verse' => 'Page-focused > + Poetry', + 'AutoLaTeX' => 'Tools > Document + management', + 'portland' => 'Page-focused > Page + geometry', + 'ljmetrics' => 'Fonts > Support + files', + 'bsl' => ' + Uncharacterized', + 'GasTeX' => 'Subject-specific typesetting + > Computer science', + 'eqexam' => 'Document types > Exams, + exercise sets, and answers', + 'dutchcal' => 'Fonts > Support + files', + 'cm' => 'Fonts', + 'texliveonfly' => 'Tools > Document + management', + 'is-bst' => 'Document parts > + Bibliography > Bibliographic styles', + 'piechart' => 'Graphics > + Tools', + 'feynman' => 'Graphics > Inside + TeX', + 'svg' => 'Graphics > + Other', + 'hyacc-cm' => 'Infrastructure > + Hyphenation', + 'shapepatch' => 'Page-focused > + Paragraphs', + 'threeparttablex' => 'Page-focused > + Tables', + 'punknova' => 'Fonts > Text body + fonts', + 'uncial' => 'Fonts > Symbol + fonts', + 'lshort-portuguese-br' => 'Documentation > + Tutorial', + 'mlbib' => 'Document parts > + Bibliography > Bibliographic styles', + 'lshort-korean' => 'Documentation > + Tutorial', + 'struktex' => 'Subject-specific typesetting + > Computer science', + 'epstopdf-pkg' => 'Tools > Convert + formats', + 'dnaseq' => 'Subject-specific typesetting + > Other natural sciences', + 'cmoefont' => 'Fonts > Text body + fonts', + 'LaTeX for Autoconf' => 'Tools > Document + management', + 'ttf-howto' => 'Documentation > + Other', + 'tools' => ' + Uncharacterized', + 'javadoc' => 'Subject-specific typesetting + > Computer science', + 'syntax2' => 'Subject-specific typesetting + > Computer science', + 'bmpsize' => 'Graphics', + 'mftinc' => 'Graphics > MetaFont or + Metapost', + 'flushend' => 'Page-focused > Multiple + columns', + 'rerunfilecheck' => 'Tools > Document + management', + 'pst-abspos' => 'Page-focused > + Other', + 'wasy2-ps' => 'Fonts > Symbol + fonts', + 'undertilde' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'tex_it' => 'Tools > Document + management', + 'ltxnew' => 'Programming in TeX > + Programming structures', + 'cypriot' => 'Fonts > Text body + fonts', + 'LaTeXDB' => 'Tools > + Other', + 'jamtimes' => 'Document types > Articles + > Journal styles', + 'patgen2-tutorial' => 'Documentation > + Tutorial', + 'nbaskerv' => 'Fonts > Support + files', + 'tie' => 'Infrastructure > + Extensions', + 'bitstrea' => 'Fonts > Support + files', + 'makerobust209' => 'Programming in TeX > + Other', + 'umtypewriter' => 'Fonts > Text body + fonts', + 'vplutils' => 'Fonts > Font + tools', + 'ConTeXt-cmttbf' => 'Fonts > Text body + fonts', + 'tsconfig' => 'Tools > Editors and + shells', + 'directory' => 'Tools > Bibliographic + manipulation', + 'runtex' => 'Tools > Document + management', + 'einfuehrung' => 'Documentation > + Other', + 'frankenbundle' => 'Tools > Document + management', + 'inhyph' => 'Infrastructure > + Hyphenation', + 'leading' => 'Page-focused > Page + geometry', + 'AcroSort' => ' + Uncharacterized', + 'xpdf' => 'Tools > Editors and + shells', + 'tex-ewd' => 'Subject-specific typesetting + > Computer science', + 'xetex' => 'Infrastructure > + Extensions', + 'esvect' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'boites' => 'Page-focused > Boxes and + minipages', + 'knit' => 'Infrastructure > Current + systems', + 'ECV' => 'Document types > Curriculum + Vita', + 'fonttable' => 'Fonts > Support + files', + 'mathpazo' => 'Fonts > Symbol + fonts', + 'xpatch' => 'Programming in TeX > + Programming structures', + 'softmaker-bonita' => 'Fonts > Support + files', + 'protosem' => 'Fonts > Symbol + fonts', + 'shading' => 'Page-focused > Boxes and + minipages', + 'boxedminipage' => 'Page-focused > Boxes and + minipages', + 'latex-tabellen' => 'Documentation > + Other', + 'pi' => 'Programming in TeX > + Other', + 'tex-gyre-math-pagella' => 'Fonts > Symbol + fonts', + 'cmbright' => 'Fonts', + 'cookingsymbols' => 'Fonts > Symbol + fonts', + 'mkbib' => 'Tools > Bibliographic + manipulation', + 'concrete-macros' => 'Fonts > Font + tools', + 'glosstex' => 'Document parts > + Glossary', + 'kerkis' => 'Fonts > Text body + fonts', + 'redefine' => 'Programming in TeX > + Programming structures', + 'patchcmd' => 'Programming in TeX > + Programming structures', + 'macfont' => 'Fonts > Font + tools', + 'china2e' => 'Document types > Other > + Calendars', + 'babel-doc' => 'Documentation > + Other', + 'fig2mf' => 'Graphics > + Tools', + 'mma2ltx' => 'Graphics > + Tools', + 'psgo' => 'Document types > Other > + Other games', + 'ccaption' => 'Page-focused > + Captions', + 'svn' => 'Tools > Document + management', + 'mf2pt1' => 'Fonts > Text body + fonts', + 'afterpage' => 'Page-focused > + Other', + 'anttvf' => 'Fonts > Support + files', + 'ada' => 'Literate + programming', + 'a2ping' => 'Tools > Convert + formats', + 'figsinltx' => ' + Uncharacterized', + 'tufte-latex' => 'Document types > Articles + > Others', + 'biblio-perl' => 'Tools > Bibliographic + manipulation', + 'ltablex' => 'Page-focused > + Tables', + 'sorhyph' => ' + Uncharacterized', + 'aaai' => 'Document types > Proceedings + > Proceedings styles', + 'TFMPKtest' => 'Fonts > Font + tools', + 'rtklage' => 'Document types > Other > + Misc', + 'environ' => 'Programming in TeX > + Other', + 'showexpl' => 'Subject-specific typesetting + > Computer science', + 'stack' => 'Programming in TeX > + Programming structures', + 'lxmail' => 'Document types > + Letters', + 'listofsymbols' => 'Document parts > + Other', + 'epspdf-extra' => 'Tools > Convert + formats', + 'preview' => 'Programming in TeX > + Other', + 'arrayjob' => 'Programming in TeX > + Programming structures', + 'cmdtrack' => 'Programming in TeX > + Other', + 'xtem' => 'Tools > Editors and + shells', + 'softmaker-congress' => 'Fonts > Support + files', + 'thirteen' => ' + Uncharacterized', + 'bibtex-examples' => 'Documentation > + Other', + 'auxhook' => 'Programming in TeX > + Other', + 'euro' => 'Programming in TeX > + Other', + 'figfrag' => 'Graphics > + Tools', + 'pybliographer' => 'Tools > Bibliographic + manipulation', + 'crossword' => 'Document types > Other > + Other games', + 'thsmc' => 'Fonts > Support + files', + 'bibexport' => 'Tools > Bibliography + managers', + 'apprends-latex' => 'Documentation > + Tutorial', + 'textcomp' => 'Fonts > Support + files', + 'morehype' => 'Output > + HTML', + 'footmisc' => 'Page-focused > + Footnotes', + 'epigraph' => ' + Uncharacterized', + 'auncial' => 'Fonts > Text body + fonts', + 'fweb' => 'Literate + programming', + 'exam209' => 'Document types > Exams, + exercise sets, and answers', + 'vxu' => 'Document types > Theses > + Thesis styles', + 'bahyph' => 'Infrastructure > + Hyphenation', + 'appendixnumberbeamer' => 'Document types > + Presentations', + 'smalltableof' => 'Document parts > + Other', + 'xits' => 'Fonts > Text body + fonts', + 'pdfescape' => 'Output > PDF, + PostScript', + 'tangle' => 'Literate + programming', + 'sidecap' => 'Page-focused > + Captions', + 'noweb' => 'Literate + programming', + 'VSliTeX' => 'Fonts > Symbol + fonts', + 'grffile' => 'Graphics > + Tools', + 'biblatex-caspervector' => 'Document parts > + Bibliography > Bibliographic styles', + 'chngcntr' => 'Programming in TeX > + Other', + 'nameref' => 'Programming in TeX > Cross + references', + 'citeref' => 'Page-focused > + Citations', + 'famt' => 'Document types > Articles + > Journal styles', + 'geomsty' => 'Document types > + Other', + 'ukhyph' => 'Infrastructure > + Hyphenation', + 'gv-savepos' => 'Tools > Editors and + shells', + 'storebox' => 'Programming in TeX > Box + manipulation', + 'nicetext' => 'Literate + programming', + 'ltxdockit' => ' + Uncharacterized', + 'threecolumn' => 'Page-focused > Multiple + columns', + 'statrep' => 'Document types > + Articles', + 'ijc' => 'Document types > Articles + > Journal styles', + 'addlines' => 'Page-focused > Page + geometry', + 'outlines' => 'Page-focused > + Lists', + 'pxfonts' => 'Fonts > Text body + fonts', + 'collref' => 'Page-focused > + Citations', + 'jflap2tikz' => 'Subject-specific typesetting + > Computer science', + 'mparhack' => 'Page-focused > Material in + margins', + 'calctab' => 'Programming in TeX > + Other', + 'dvips-os2' => ' + Uncharacterized', + 'mif2xfig' => 'Tools > Convert + formats', + 'japanese-otf-uptex' => 'Fonts > Support + files', + 'Courier' => 'Fonts > Text body + fonts', + 'fontspec' => 'Fonts > Support + files', + 'catalogue' => 'Documentation > + Other', + 'context-construction-plan' => 'Graphics > Inside + TeX', + 'filehdr' => 'Tools > Editors and + shells', + 'acrotex' => ' + Uncharacterized', + 'apa6e' => 'Document types > Articles + > Journal styles', + 'gmdoc-enhance' => 'Documentation > + Other', + 'latexwizard' => 'Tools > Editors and + shells', + 't-angles' => 'Graphics > Inside + TeX', + 'deproc' => 'Document types > Articles + > Others', + 'GraphicxSP' => 'Graphics > + Tools', + 'xltxtra' => 'Programming in TeX > + Other', + 'bibview-x' => 'Tools > Bibliography + managers', + 'romandeadf' => 'Fonts > Text body + fonts', + 'mnttex' => 'Non-English languages > + Other', + 'flowfram' => 'Page-focused > Boxes and + minipages', + 'hobsub' => 'Programming in TeX > Package + management', + 'hobete' => 'Document types > + Presentations', + 'hieroglf' => 'Fonts > Symbol + fonts', + 'alphabib' => 'Tools > Bibliographic + manipulation', + 'Mid2TeX/Free' => 'Document types > Other > + Music', + 'bibdb' => 'Tools > Bibliography + managers', + 'ocherokee' => 'Fonts > Text body + fonts', + 'Shaded theorems' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'matlabweb' => 'Literate + programming', + 'bibtex' => 'Document parts > + Bibliography', + 'dviout' => 'Output > + DVI', + 'CClicenses' => 'Fonts > Support + files', + 'piff-ams' => ' + Uncharacterized', + 'word2x' => 'Tools > Convert + formats', + 'bclogo' => 'Page-focused > Boxes and + minipages', + 'stackrel' => 'Subject-specific typesetting + > Mathematics > Other', + 'evweek' => 'Document types > Other > + Calendars', + 'apalike2' => 'Document parts > + Bibliography > Bibliographic styles', + 'eepic' => 'Graphics > Inside + TeX', + 'ttf2pfb' => ' + Uncharacterized', + 'xpdfopen' => 'Tools > PDF + tools', + 'fahyph' => 'Infrastructure > + Hyphenation', + 'Sikumuna' => 'Tools > Editors and + shells', + 'softmaker-alteschwabacher' => 'Fonts > Support + files', + 'eukdate' => 'Programming in TeX > Date + and time', + 'xfor' => 'Programming in TeX > + Programming structures', + 'ltabptch' => 'Page-focused > + Tables', + 'javascript_TeXed' => 'Tools > Editors and + shells', + 'pst-barcode' => 'Graphics > Inside + TeX', + 'lewis' => 'Subject-specific typesetting + > Other natural sciences', + 'trsym' => 'Fonts > Symbol + fonts', + 'lacheck' => 'Tools > Document + management', + 'amsbsy' => 'Fonts > Symbol + fonts', + 'export' => 'Programming in TeX > + Other', + 'myfilist' => 'Output > + Other', + 'split' => 'Page-focused > Multiple + columns', + 'dktools' => 'Graphics > + Tools', + 'binhex' => 'Subject-specific typesetting + > Computer science', + 'ebib' => 'Tools > Bibliography + managers', + 'chem-journal' => 'Subject-specific typesetting + > Other natural sciences', + 'glossaries' => 'Document parts > + Glossary', + 'beton' => 'Fonts > Support + files', + 'ulem' => 'Page-focused > + Other', + 'framed' => 'Page-focused > Boxes and + minipages', + 'mathbbol' => 'Fonts > Symbol + fonts', + 'chemstyle' => 'Subject-specific typesetting + > Other natural sciences', + 'biblatex-historian' => 'Document parts > + Bibliography > Bibliographic styles', + 'ocr-latex' => 'Fonts > Support + files', + 'pbox' => 'Page-focused > Boxes and + minipages', + 'mathstone' => 'Fonts > Support + files', + 'prv' => 'Tools > Document + management', + 'megatape' => 'Document types > Other > + CD and DVD covers', + 'dvibit' => ' + Uncharacterized', + 'calligra' => 'Fonts > Text body + fonts', + 'dice' => 'Fonts > Symbol + fonts', + 'euproposal' => 'Document types > + Other', + 'awb' => 'Literate + programming', + 'sagetex' => 'Subject-specific typesetting + > Mathematics', + 'theoremref' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'cassette209' => 'Document types > Other > + CD and DVD covers', + 'byzfonts' => 'Subject-specific typesetting + > Music', + 'pst-asr' => 'Subject-specific typesetting + > Linguistics', + 'fig2mfpic' => 'Graphics > + Tools', + 'knuth-dist' => 'Infrastructure > Current + systems', + 'fonts-tlwg' => 'Fonts > Text body + fonts', + 'ps4mf-dos' => ' + Uncharacterized', + 'inputfile' => 'Programming in TeX > + Other', + 'smartdiagram' => 'Graphics > Inside + TeX', + 'sectionbox' => 'Document parts > Chapters + and Sections', + 'mimetex' => 'Output > + Other', + 'titlesec' => 'Document parts > Chapters + and Sections', + 'longnamefilelist' => 'Programming in TeX > Package + management', + 'l2tabu' => 'Documentation > + Tutorial', + 'bakoma-games' => 'Document types > Other > + Chess', + 'turkishintro' => 'Documentation > + Tutorial', + 'psnfssx' => 'Fonts > Support + files', + 'ScriptTeX' => 'Document types > Other > + Scripts', + 'fancyfolien' => 'Documentation > + Other', + 'ebnf' => 'Subject-specific typesetting + > Computer science', + 'corelpak' => 'Fonts > Support + files', + 'fundus-startrek' => ' + Uncharacterized', + 'jneurosci' => 'Document parts > + Bibliography > Bibliographic styles', + 'dfgproposal' => 'Document types > Other > + Misc', + 'impose' => 'Output > PDF, + PostScript', + 'dhua' => 'Non-English languages > + German', + 'sgmlcmpt' => 'Programming in TeX > + Other', + 'ptsans' => 'Fonts > Text body + fonts', + 'listbib' => 'Tools > Bibliography + managers', + 'hvindex' => 'Document parts > + Index', + 'context-ruby' => 'Non-English languages > + Other', + 'staves' => 'Fonts > Symbol + fonts', + 'hangcaption' => 'Page-focused > + Captions', + 'gapfill' => 'Graphics > + Tools', + 'amsproc' => 'Document types > Proceedings + > Proceedings styles', + 'bibfile-reformat-pages' => 'Tools > Bibliographic + manipulation', + 'dropping' => ' + Uncharacterized', + 'hvfloat' => 'Page-focused > + Floats', + 'vf-howto' => 'Documentation > + Tutorial', + 'semaphor' => 'Fonts > Symbol + fonts', + 'bophook' => 'Page-focused > + Background', + 'gladtex' => 'Output > + HTML', + 'lastpage' => 'Page-focused > Page + numbers', + 'csquotes' => 'Page-focused > + Other', + 'softmaker-baskervillenova' => 'Fonts > Support + files', + 'tkz-kiviat' => 'Graphics > Inside + TeX', + 'vf-knuth' => 'Documentation > + Other', + 'Finomaton' => 'Graphics > + Tools', + 'brief_t' => 'Tools > Editors and + shells', + 'frege' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'hyperxmp' => 'Output > PDF, + PostScript', + 'norbib' => 'Document parts > + Bibliography > Bibliographic styles', + 'fixmath' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'jurabib' => 'Tools > Bibliography + managers', + 'autotoc' => 'Document parts > Table of + contents', + 'pictex-autoarea' => 'Graphics > Inside + TeX', + 'fnpct' => 'Page-focused > + Footnotes', + 'sitem' => 'Page-focused > + Lists', + 'qtree' => 'Graphics > Inside + TeX', + 'envelope' => 'Document types > + Letters', + 'ibycus-babel' => 'Fonts > Text body + fonts', + 'pdfsync' => 'Output > PDF, + PostScript', + 'yfrak' => 'Fonts > Text body + fonts', + 'untex' => 'Tools > Convert + formats', + 'atenddvi' => 'Programming in TeX > + Other', + 'mathstyle' => 'Subject-specific typesetting + > Mathematics', + 'zero' => 'Programming in TeX > + Other', + 'watermark' => 'Page-focused > + Other', + 'tikzpfeile' => 'Graphics > Inside + TeX', + 'simplecd' => 'Document types > Other > + CD and DVD covers', + 'floatrow' => 'Page-focused > + Floats', + 'thesis' => 'Document types > + Theses', + 'LaTeXPiX' => 'Tools > Editors and + shells', + 'dtk' => 'Document types > Articles + > Journal styles', + 'biber' => 'Tools > Bibliographic + manipulation', + 'translation-dcolumn-fr' => 'Documentation > + Other', + 'xifthen' => 'Programming in TeX > + Programming structures', + 'polynom' => 'Subject-specific typesetting + > Mathematics > Other', + 'knuth-letter' => 'Document types > + Letters', + 'arrow' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + 'makedtx' => 'Literate + programming', + 'QCM' => 'Document types > Exams, + exercise sets, and answers', + 'win32-emacs-auctex' => 'Tools > Editors and + shells', + 'softmaker-egyptiennestd' => 'Fonts > Support + files', + 'ghyphen' => 'Infrastructure > + Hyphenation', + 'tensind' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'ftcap' => 'Page-focused > + Captions', + 'fontbl' => 'Fonts > Font + tools', + 'context-algorithmic' => 'Subject-specific typesetting + > Computer science', + 'xlop' => 'Programming in TeX > + Other', + 'URW-Grotesq' => 'Fonts > Text body + fonts', + 'reotex' => 'Graphics > Inside + TeX', + 'dcounter' => 'Programming in TeX > + Other', + 'versions' => 'Tools > Document + management', + 'tex2bib' => 'Tools > Bibliographic + manipulation', + 'thumby' => 'Document parts > Chapters + and Sections', + 'blacklettert1' => 'Fonts > Text body + fonts', + 'bhcexam' => 'Document types > Exams, + exercise sets, and answers', + 'huhyph' => 'Infrastructure > + Hyphenation', + 'blackletter' => 'Fonts > Text body + fonts', + 'pst-grad' => 'Graphics > Inside + TeX', + 'ae' => 'Fonts > Text body + fonts', + 'curve2e' => 'Graphics > Inside + TeX', + 'overcite' => 'Page-focused > + Citations', + 'pydocstrip' => 'Tools > Bibliographic + manipulation', + 'gmverse' => 'Page-focused > + Poetry', + 'serbian-def-cyr' => 'Non-English languages > + Other', + 'uebungsblatt' => 'Document types > Exams, + exercise sets, and answers', + 'ps_conv' => 'Tools > Convert + formats', + 'pdfcolparcolumns' => 'Page-focused > Multiple + columns', + 'floatflt' => 'Graphics > + Other', + 'xdoc' => 'Literate + programming', + 'syntrace' => 'Subject-specific typesetting + > Linguistics', + 'repeat' => 'Programming in TeX > + Programming structures', + 'metre' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'texsis' => 'Subject-specific typesetting + > Physics', + 'pagedraw' => 'Tools > Editors and + shells', + 'bibweb' => 'Tools > Bibliographic + manipulation', + 'GFS Porson' => 'Fonts > Text body + fonts', + 'everypage' => 'Programming in TeX > + Other', + 'bibsort' => 'Tools > Bibliographic + manipulation', + 'xetex-pstricks' => 'Graphics > Inside + TeX', + 'empheq' => 'Subject-specific typesetting + > Mathematics > Equations', + 'ipa' => 'Fonts > Support + files', + 'biblatex-trad' => 'Document parts > + Bibliography > Bibliographic styles', + 'oldstyle' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'bpolynomial' => 'Graphics > MetaFont or + Metapost', + 'cdlabeler' => 'Document types > Other > + CD and DVD covers', + 'lgreek' => 'Fonts > Support + files', + 'font_selection' => 'Fonts > Support + files', + 'softmaker-marseille' => 'Fonts > Support + files', + 'TeXhax' => 'Documentation > + Other', + 'pst-fr3d' => 'Graphics > Inside + TeX', + 'bibfind' => 'Tools > Bibliography + managers', + 'ifnextok' => 'Programming in TeX > + Other', + 'EndNote2bib' => 'Tools > Bibliographic + manipulation', + 'lapdf' => 'Graphics > Inside + TeX', + 'anleitung' => 'Documentation > + Tutorial', + 'luamplib' => 'Infrastructure > + Extensions', + 'TengwarScript' => ' + Uncharacterized', + 'makebox' => 'Programming in TeX > Box + manipulation', + 'ccfonts' => 'Fonts > Support + files', + 'impnattypo' => 'Non-English languages > + French', + 'latex2e-reference' => 'Documentation > Help + files', + 'osa' => 'Document types > Articles + > Journal styles', + 'magicnum' => 'Programming in TeX > + Other', + 'wasy2' => 'Fonts > Symbol + fonts', + 'default' => 'Programming in TeX > + Other', + 'CM Type3' => 'Fonts > Text body + fonts', + 'lifia-th' => 'Document types > Theses > + Thesis styles', + 'remreset' => 'Programming in TeX > + Other', + 'eqparbox' => 'Page-focused > Boxes and + minipages', + 'emtexgi' => ' + Uncharacterized', + 'Il sistema PSfrag' => 'Documentation > + Other', + 'termlist' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'diagmac2' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + 'tabulars-e' => 'Documentation > + Other', + 'exam' => 'Document types > Exams, + exercise sets, and answers', + 'refcount' => 'Page-focused > + Citations', + 'jasthesis' => 'Document types > Theses > + Thesis styles', + 'tikzpagenodes' => 'Graphics > Inside + TeX', + 'badge' => 'Document types > Other > + Misc', + 'rotate-textures' => ' + Uncharacterized', + 'de-macro' => 'Tools > Convert + formats', + 'ltxdiff' => 'Tools > Document + management', + 'crosstex' => 'Document parts > + Bibliography', + 'nassflow' => 'Subject-specific typesetting + > Computer science', + 'context-rst' => 'Programming in TeX > + Other', + 'chapterbib' => 'Document parts > + Bibliography > Others', + 'newunicodechar' => ' + Uncharacterized', + 'multibbl' => 'Document parts > + Bibliography', + 'protecteddef' => 'Programming in TeX > + Other', + 'auto-pst-pdf' => 'Output > PDF, + PostScript', + 'phyzzx' => 'Infrastructure > Current + systems', + 'chess-problem-diagrams' => 'Document types > Other > + Chess', + 'dos-dc' => ' + Uncharacterized', + 'syllogism' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'delarray' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'baskervaldadf' => 'Fonts > Text body + fonts', + 'stabular' => 'Page-focused > + Tables', + 'ratexdb' => 'Tools > Editors and + shells', + 'lintex' => 'Tools > Document + management', + 'ocr-b' => 'Fonts > Text body + fonts', + 'GuITlogo' => 'Graphics > + Other', + 'siggraph' => 'Document types > Proceedings + > Proceedings styles', + 'e-french' => 'Non-English languages > + French', + 'miller' => 'Subject-specific typesetting + > Other natural sciences', + 'drawing' => 'Graphics > MetaFont or + Metapost', + 'tree-dvips' => 'Subject-specific typesetting + > Linguistics', + 'arydshln' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'crw' => 'Document types > Other > + Other games', + 'pst-fun' => 'Graphics > Inside + TeX', + 'TeX Converter' => 'Output > + HTML', + 'pst-am' => 'Graphics > Postscript or PDF + graphics', + 'secdot' => 'Document parts > Chapters + and Sections', + 'cyrillic209' => ' + Uncharacterized', + 'uwmslide' => 'Document types > + Presentations', + 'asana-math' => 'Fonts', + 'label-pln' => 'Document types > Other > + Envelopes', + 'digiconfigs' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'xcookybooky' => 'Document types > Other > + Recipes', + 'boldtensors' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'tex-gyre-heros' => 'Fonts > Text body + fonts', + 'grfguide' => 'Documentation > + Other', + 'chroma' => 'Page-focused > + Color', + 'envmath' => 'Subject-specific typesetting + > Mathematics > Equations', + 'bib2dvi' => 'Tools > Bibliographic + manipulation', + 'wasy' => 'Fonts > Symbol + fonts', + 'cfr-lm' => 'Fonts > Support + files', + 'grnumalt' => 'Page-focused > + Lists', + 'Oberdiek' => ' + Uncharacterized', + 'eqmark' => 'Subject-specific typesetting + > Mathematics > Equations', + 'LCDF-typetools' => 'Fonts > Font + tools', + 'lshort-german' => 'Documentation > + Tutorial', + 'pbsheet' => 'Document types > Exams, + exercise sets, and answers', + 'mmap' => 'Output > PDF, + PostScript', + 'CTAN tools' => ' + Infrastructure', + 'Orderer' => 'Tools > Bibliographic + manipulation', + 'glotex' => 'Document parts > + Glossary', + 'asymptote-by-example-zh-cn' => 'Documentation > + Tutorial', + 'pdfjam' => 'Output > PDF, + PostScript', + 'standalone' => 'Graphics > + Tools', + 'iwona' => 'Fonts > Text body + fonts', + 'egothic' => 'Fonts > Text body + fonts', + 'storecmd' => 'Programming in TeX > + Programming structures', + 'xetal' => 'Tools > + Other', + 'epic' => 'Graphics > Inside + TeX', + 'dictsym' => 'Fonts > Symbol + fonts', + 'beamer-fuberlin' => 'Document types > + Presentations', + 'METATeX' => 'Graphics > MetaFont or + Metapost', + 'lettre' => 'Document types > + Letters', + 'gen' => 'Fonts > Symbol + fonts', + 'futhark' => 'Fonts > Text body + fonts', + 'fakebold' => 'Fonts > + Other', + 'custom-bib' => 'Document parts > + Bibliography > Bibliographic styles', + 'simpsons' => 'Fonts > Symbol + fonts', + 'pagecolor' => 'Page-focused > + Color', + 'msu-thesis' => 'Document types > Theses > + Thesis styles', + 'sober' => 'Document types > Articles + > Others', + 'pageframe' => ' + Uncharacterized', + 'minionpro' => 'Fonts > Support + files', + 'wordlike' => 'Document types > + Other', + 'vdm' => 'Subject-specific typesetting + > Computer science', + 'noTeX' => 'Document parts > + Bibliography', + 'ghostscript' => 'Output > PDF, + PostScript', + 'bnf-plain' => 'Subject-specific typesetting + > Computer science', + 'annot-pro' => 'Document parts > + Other', + 'advdate' => 'Programming in TeX > Date + and time', + 'colorwav' => 'Page-focused > + Color', + 'meper' => 'Graphics > MetaFont or + Metapost', + 'rlepsf' => 'Graphics > + Tools', + 'langcode' => 'Non-English languages > + Other', + 'findhyph' => 'Infrastructure > + Hyphenation', + 'rcs-pln' => 'Tools > Document + management', + 'mltex' => 'Infrastructure > + Hyphenation', + 'jphysiol' => 'Document parts > + Bibliography > Bibliographic styles', + 'amspell' => 'Tools > + Spell-checkers', + 'raggedr' => ' + Uncharacterized', + 'opcit' => 'Page-focused > + Citations', + 'edmargin' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'dkhyphen' => 'Infrastructure > + Hyphenation', + 'gcite' => 'Page-focused > + Citations', + 'pst-soroban' => 'Graphics > Inside + TeX', + 'method' => 'Subject-specific typesetting + > Computer science', + 'gridset' => 'Page-focused > Multiple + columns', + 'punk' => 'Fonts > Text body + fonts', + 'mhs' => 'Programming in TeX > + Other', + 'linsys' => 'Subject-specific typesetting + > Mathematics > Equations', + 'mkjobtexmf' => 'Tools > Document + management', + 'iTe' => 'Tools > Editors and + shells', + 'tfmpk' => 'Fonts > Font + tools', + 'txt2tex' => 'Tools > Convert + formats', + 'attachfile' => 'Output > PDF, + PostScript', + 'ted' => 'Programming in TeX > + Other', + 'fix2col' => 'Page-focused > Headers and + footers', + 'akletter' => 'Document types > + Letters', + 'dynblocks' => 'Document types > + Presentations', + 'slatex_scheme' => 'Subject-specific typesetting + > Computer science', + 'nfssext-cfr' => 'Fonts > Support + files', + 'pst-qtree' => 'Graphics > Inside + TeX', + 'vaucanson-g' => 'Subject-specific typesetting + > Computer science', + 'ePiX' => 'Graphics > + Tools', + 'beamer-tut-pt' => 'Documentation > + Tutorial', + 'FourierNC' => 'Fonts > Support + files', + 'countriesofeurope' => 'Fonts > Symbol + fonts', + 'monster' => ' + Uncharacterized', + 'latexfileinfo-pkgs' => 'Documentation > + Other', + 'listingsutf8' => 'Subject-specific typesetting + > Computer science', + 'getrefs' => 'Document parts > + Bibliography > Bibliographic styles', + 'eulervm' => 'Fonts > Symbol + fonts', + 'ydoc' => 'Documentation > + Other', + 'esieecv' => 'Document types > Curriculum + Vita', + 'skak' => 'Document types > Other > + Chess', + 'namunsrt' => 'Document parts > + Bibliography > Others', + 'tabularx' => 'Page-focused > + Tables', + 'przechlewski-book' => 'Documentation > + Other', + 'layouts' => 'Page-focused > Page + geometry', + 'tif2eps' => 'Graphics > + Tools', + 'foekfont' => 'Fonts > Text body + fonts', + 'treesvr' => 'Graphics > Inside + TeX', + 'mla-paper' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'parboxx' => 'Page-focused > Boxes and + minipages', + 'nowidow' => 'Page-focused > + Other', + 'cmyk-hax' => 'Page-focused > + Color', + 'wrtfile' => 'Programming in TeX > Package + management', + 'hge' => 'Fonts > Text body + fonts', + 'lamstex-index' => 'Document parts > + Index', + 'mtgreek' => 'Fonts > Support + files', + 'fc' => 'Fonts > Text body + fonts', + 'cpssp' => 'Subject-specific typesetting + > Other natural sciences', + 'JustFontItTE' => 'Fonts > Font + tools', + 'allrunes' => 'Fonts > + Other', + 'lwc-examples' => 'Documentation > + Other', + 'fontwrap' => 'Fonts > Support + files', + 'sublabel' => 'Page-focused > + Other', + 'skeycommand' => 'Programming in TeX > + Programming structures', + 'pst-bezier' => 'Graphics > Inside + TeX', + 'bibleref' => 'Document parts > + Bibliography > Bibliographic styles', + 'uri' => ' + Uncharacterized', + 'psfixbb' => 'Graphics > + Tools', + 'biblatex-apa' => 'Document parts > + Bibliography > Bibliographic styles', + 'bibtexmng' => 'Tools > Bibliography + managers', + 'bbm-macros' => 'Fonts > Support + files', + 'tex-gyre-adventor' => 'Fonts > Text body + fonts', + 'grtimes' => 'Fonts > Text body + fonts', + 'EUenc' => 'Programming in TeX > + Other', + 'sudoku' => 'Document types > Other > + Other games', + 'vertbars' => 'Page-focused > Material in + margins', + 'catcodes' => 'Programming in TeX > + Other', + 'formlett' => 'Document types > + Letters', + 'libertine-legacy' => 'Fonts > Support + files', + 'genfam' => 'Fonts > Support + files', + 'msx2msa' => 'Fonts > Symbol + fonts', + 'style-showcase' => ' + Uncharacterized', + 'fixmetodonotes' => 'Page-focused > Material in + margins', + 'texchord' => 'Document types > Other > + Music', + 'makebarcode' => 'Graphics > Inside + TeX', + 'lualibs' => 'Tools > + Other', + 'latex4wp-it' => 'Documentation > + Tutorial', + 'flatex' => 'Tools > Document + management', + 'duplicat' => 'Page-focused > Page + numbers', + 'ksfh-nat' => 'Document parts > + Bibliography > Bibliographic styles', + 'phoncard' => 'Page-focused > + Tables', + 'iwhdp' => 'Document types > Articles + > Others', + 'scrjrnl' => 'Document types > Books > + Others', + 'icehyph' => 'Infrastructure > + Hyphenation', + 'context-taspresent' => 'Document types > + Presentations', + 'txp' => 'Graphics > MetaFont or + Metapost', + 'modiagram' => 'Subject-specific typesetting + > Other natural sciences', + 'refer' => 'Tools > Bibliographic + manipulation', + 'plates' => 'Document parts > + Other', + 'code128' => 'Graphics > Inside + TeX', + 'bibunits' => 'Document parts > + Bibliography > Others', + 'doc-k' => 'Documentation > + Other', + 'xtemplate' => 'Programming in TeX > + Other', + 'relsize' => 'Page-focused > + Other', + 'georgian-stanier' => 'Fonts > Text body + fonts', + 'gates' => 'Literate + programming', + 'hfoldsty' => 'Fonts > Support + files', + 'shortlst' => 'Page-focused > + Lists', + 'PNAS' => 'Document parts > + Bibliography > Bibliographic styles', + 'totcount' => 'Programming in TeX > + Other', + 'colordvi' => 'Page-focused > + Color', + 'francais-bst' => 'Document parts > + Bibliography > Bibliographic styles', + 'texdeps' => 'Tools > Document + management', + 'insdljs' => 'Output > PDF, + PostScript', + 'cmsd' => 'Fonts > Support + files', + 'tex2ltx' => 'Tools > Convert + formats', + 'flags' => ' + Uncharacterized', + 'tr2latex' => 'Tools > Convert + formats', + 'lmake' => 'Programming in TeX > + Other', + 'AeB slicing' => 'Graphics > + Tools', + 'tkz-doc' => 'Documentation > + Other', + 'aplweb' => 'Subject-specific typesetting + > Computer science', + 'psnfssx-8r' => ' + Uncharacterized', + 'templates-fenn' => 'Documentation > + Other', + 'dblfont' => ' + Uncharacterized', + 'crbox' => 'Page-focused > Boxes and + minipages', + 'utopia' => 'Fonts > Text body + fonts', + 'randtext' => 'Programming in TeX > + Other', + 'endheads' => 'Page-focused > Headers and + footers', + 'drafthead' => 'Page-focused > Headers and + footers', + 'ams-cd' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + 'sfg' => 'Subject-specific typesetting + > Other natural sciences', + 'spreadtab' => 'Page-focused > + Tables', + 'pst-Jtree' => 'Subject-specific typesetting + > Linguistics', + 'calendar' => 'Document types > Other > + Calendars', + 'bibtool' => 'Tools > Bibliographic + manipulation', + 'plain-cm' => 'Fonts > Support + files', + 'printlen' => 'Programming in TeX > + Other', + 'tui' => 'Document types > Theses > + Thesis styles', + 'balanced' => 'Page-focused > Multiple + columns', + 'footnotebackref' => 'Page-focused > + Footnotes', + 'chomsky' => 'Subject-specific typesetting + > Linguistics', + 'phy-bstyles' => 'Document parts > + Bibliography > Bibliographic styles', + 'aeb-mobile' => 'Output > PDF, + PostScript', + 'fribrief' => 'Document types > + Letters', + 'hyphen-spanish' => 'Infrastructure > + Hyphenation', + 'documentation' => 'Page-focused > + Verbatim', + 'vak' => 'Document parts > + Bibliography > Bibliographic styles', + 'm-pictex' => 'Graphics > Inside + TeX', + 'termcal' => 'Document types > Other > + Calendars', + 'WP2LaTeX' => 'Tools > Convert + formats', + 'magaz' => 'Document types > Other > + Newspapers and newsletters', + 'autoview' => 'Output > PDF, + PostScript', + 'ltxdoc' => 'Programming in TeX > + Other', + 'hilowres' => 'Graphics > + Other', + 'tabularht' => 'Page-focused > + Tables', + 'screen' => 'Page-focused > Page + geometry', + 'datenumber' => 'Programming in TeX > Date + and time', + 'gbrief-creator' => 'Tools > Editors and + shells', + 'jvlisting' => 'Page-focused > + Verbatim', + 'xmlplay' => 'Document types > Other > + Scripts', + 'libertine' => 'Fonts > Support + files', + 'harpoon' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'biblatex-philosophy' => 'Document parts > + Bibliography > Bibliographic styles', + 'pmat' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'augie' => 'Fonts > Text body + fonts', + 'xypic' => 'Graphics > Inside + TeX', + 'TeXnicCenter' => 'Tools > Editors and + shells', + 'fibnum' => 'Programming in TeX > + Other', + 'webomints' => 'Fonts > Support + files', + 'bibtopic' => 'Document parts > + Bibliography > Others', + 'texinfo' => 'Infrastructure > Current + systems', + 'tex-gyre-termes' => 'Fonts > Text body + fonts', + 'tfrupee' => 'Fonts > Symbol + fonts', + 'listing' => 'Subject-specific typesetting + > Computer science', + 'jas99_m' => 'Document parts > + Bibliography > Bibliographic styles', + 'jbact' => 'Document parts > + Bibliography > Bibliographic styles', + 'knuth-base' => 'Infrastructure > Current + systems', + 'idverb' => 'Subject-specific typesetting + > Computer science', + 'fullpict' => 'Graphics > + Other', + 'varwidth' => 'Page-focused > Boxes and + minipages', + 'algorithmicx' => 'Subject-specific typesetting + > Computer science', + 'duotenzor' => 'Subject-specific typesetting + > Physics', + 'greekdates' => 'Programming in TeX > Date + and time', + 'pdfpages' => 'Output > PDF, + PostScript', + 'kdgreek' => 'Fonts > Text body + fonts', + 'dialogl' => 'Programming in TeX > + Other', + 'gradientframe' => 'Page-focused > Boxes and + minipages', + 'alnumsec' => 'Document parts > Chapters + and Sections', + 'typeoutfileinfo' => 'Tools > Document + management', + 'elsarticle' => 'Document types > Articles + > Journal styles', + 'lettrine' => 'Page-focused > + Paragraphs', + 'isf' => ' + Uncharacterized', + 'genealogy' => 'Fonts > Symbol + fonts', + 'catchfile' => 'Programming in TeX > + Other', + 'rviewport' => 'Graphics > + Other', + 'sseq' => 'Graphics > Inside + TeX', + 'schwell' => 'Fonts > Text body + fonts', + 'coordsys' => 'Graphics > Inside + TeX', + 'facsimile' => 'Document types > + Other', + 'authordate' => 'Document parts > + Bibliography > Bibliographic styles', + 'boolexpr' => 'Programming in TeX > + Programming structures', + 'c2cweb' => 'Literate + programming', + 'CVsty' => 'Document types > Curriculum + Vita', + 'Make patterns.' => 'Infrastructure > + Hyphenation', + 'slhyph' => 'Infrastructure > + Hyphenation', + 'iahyphen' => 'Infrastructure > + Hyphenation', + 'slidenotes' => 'Document types > Overhead + slides', + 'latex4wp' => 'Documentation > + Tutorial', + 'libris' => 'Fonts > Text body + fonts', + 'authorindex' => 'Document parts > + Bibliography > Others', + 'bbcard' => 'Document types > Other > + Misc', + 'umoline' => ' + Uncharacterized', + 'multind' => 'Document parts > + Index', + 'biblatex-swiss-legal' => 'Document parts > + Bibliography > Bibliographic styles', + 'tsemlines' => 'Graphics > Inside + TeX', + 'context-sgf' => 'Document types > Other > + Other games', + 'paper' => 'Document types > Articles + > Others', + 'gentabtex' => 'Page-focused > + Tables', + 'TpX' => 'Graphics > + Tools', + 'oztex' => ' + Uncharacterized', + 'bakoma-mac' => 'Infrastructure > Current + systems', + 'notes' => 'Page-focused > Boxes and + minipages', + 'pssplit' => 'Tools > + Other', + 'lshort-mongolian' => 'Documentation > + Tutorial', + 'bigdelim' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'biblatex-dw' => 'Document parts > + Bibliography > Bibliographic styles', + 'bibtools' => 'Tools > Bibliographic + manipulation', + 'biolist' => 'Subject-specific typesetting + > Other natural sciences', + 'dvibook' => 'Tools > DVI + manipulation', + 'calcage' => 'Programming in TeX > Date + and time', + 'zaccone' => 'Page-focused > + Captions', + 'carolmin-t1' => 'Fonts > Symbol + fonts', + 'GFS Complutum' => 'Fonts > Text body + fonts', + 'luaotfload' => 'Fonts > Support + files', + 'alphanum-bst' => 'Document parts > + Bibliography > Bibliographic styles', + 'datatool' => 'Graphics > + Tools', + 'labelfig' => 'Graphics > + Tools', + 'pb-diagram' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + 'circle' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'dvdcoll' => 'Document types > Other > + Misc', + 'examplep' => 'Documentation > + Other', + 'easytable' => 'Page-focused > + Tables', + 'pbmtogf' => 'Graphics > + Tools', + 'ifthenx' => 'Programming in TeX > + Programming structures', + 'kantlipsum' => 'Page-focused > + Other', + 'colortab' => 'Page-focused > + Color', + 'bloques' => 'Subject-specific typesetting + > Other natural sciences', + 'l3packages' => 'Programming in TeX > + Other', + 'oldlatin' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'basque-book' => 'Document types > Books > + Others', + 'fnlineno' => 'Page-focused > + Footnotes', + 'grapher' => 'Subject-specific typesetting + > Computer science', + 'revtex4-1' => 'Subject-specific typesetting + > Physics', + 'gnu-freefont' => 'Fonts > Text body + fonts', + 'bibtex8bit' => 'Document parts > + Bibliography', + 'anti' => 'Subject-specific typesetting + > Physics', + 'pclnfss' => 'Fonts > Support + files', + 'slashed' => 'Subject-specific typesetting + > Physics', + 'arabic' => 'Programming in TeX > + Other', + 'ygoth' => 'Fonts > Text body + fonts', + 'frontespizio' => 'Document types > Theses > + Others', + 'mathtime-pln' => 'Fonts > Support + files', + 'tip' => 'Documentation > + Other', + 'hanging' => 'Page-focused > + Paragraphs', + 'GFS' => ' + Uncharacterized', + 'layout' => 'Page-focused > Page + geometry', + 'graphpap' => 'Graphics > Inside + TeX', + 'calligra-type1' => 'Fonts > Text body + fonts', + 'tgothic' => 'Fonts > Symbol + fonts', + 'schedule' => 'Document types > Other > + Calendars', + 'usenix' => 'Document types > Proceedings + > Proceedings styles', + 'ascii-chart' => 'Documentation > + Other', + 'soton' => 'Document types > + Presentations', + 'tclldoc' => 'Literate + programming', + 'SIstyle' => 'Subject-specific typesetting + > Physics', + 'macros2e' => 'Documentation > + Other', + 'threeddice' => 'Graphics > MetaFont or + Metapost', + 'mceinleger' => 'Document types > Other > + CD and DVD covers', + 'sae' => 'Document types > Articles + > Journal styles', + 'plnfss' => 'Fonts > Support + files', + 'mdwfonts' => 'Fonts > Support + files', + 'chemnum' => 'Subject-specific typesetting + > Other natural sciences', + 't2' => 'Fonts > Font + tools', + 'softmaker-velo' => 'Fonts > Support + files', + 'manpage' => 'Document types > Reference + manuals', + 'pst-tools' => 'Graphics > Postscript or PDF + graphics', + 'inslrmaj' => 'Fonts > Symbol + fonts', + 'codicefiscaleitaliano' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'apa' => 'Document types > Articles + > Journal styles', + 'pstoedit' => 'Graphics > + Tools', + 'metauml' => 'Subject-specific typesetting + > Computer science', + 'makerobust' => 'Programming in TeX > + Other', + 'dmfonts' => 'Fonts > Text body + fonts', + 'aliascnt' => 'Programming in TeX > + Other', + 'mathinst' => 'Fonts > Font + tools', + 'acronym209' => 'Other', + 'texbuch' => 'Documentation > + Other', + 'fixbbl' => 'Tools > Bibliographic + manipulation', + 'plcalendar' => 'Document types > Other > + Calendars', + 'exscale' => 'Fonts > Support + files', + 'jpeg2ps-os2' => 'Graphics > + Tools', + 'psfig' => ' + Uncharacterized', + 'html2latex' => 'Tools > Convert + formats', + 'cancel' => 'Subject-specific typesetting + > Mathematics > Equations', + 'adfathesis' => 'Document types > Theses > + Thesis styles', + 'covfonts' => 'Fonts > Text body + fonts', + 'tex2page' => 'Output > + HTML', + 'mla' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'luatex' => 'Infrastructure > + Extensions', + 'makedoc' => 'Documentation > + Other', + 'syriac' => 'Fonts > Text body + fonts', + 'frankenstein' => ' + Uncharacterized', + 'pitex' => ' + Uncharacterized', + 'maths-symbols' => 'Documentation > + Other', + 'intro-scientific' => 'Documentation > + Tutorial', + 'combinedgraphics' => 'Graphics > + Other', + 'enparen' => 'Page-focused > + Other', + 'titlepic' => 'Document parts > + Other', + 'tabbing' => 'Page-focused > + Other', + 'pax' => 'Graphics > Postscript or PDF + graphics', + 'gkpmac' => 'Programming in TeX > + Other', + 'aspell' => 'Tools > + Spell-checkers', + 'REdit' => ' + Uncharacterized', + 'lshort' => 'Documentation > + Tutorial', + 'pst-tvz' => 'Graphics > Inside + TeX', + 'poorman' => 'Fonts > Text body + fonts', + 'vector' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'xmltex' => 'Programming in TeX > + Other', + 'twocolumns' => 'Page-focused > Multiple + columns', + 'gtex-letter' => 'Document types > + Letters', + 'futhorc' => 'Fonts > Text body + fonts', + 'skeyval' => 'Programming in TeX > + Programming structures', + 'mathlig' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'repeatindex' => 'Document parts > + Index', + 'jfontmaps' => 'Fonts > Support + files', + 'freetype' => 'Fonts > Font + tools', + 'hf-tikz' => 'Subject-specific typesetting + > Mathematics > Equations', + 'mathdesign' => 'Fonts > Symbol + fonts', + 'uwthesis209' => 'Document types > Theses > + Thesis styles', + 'pst-node' => 'Graphics > Inside + TeX', + 'mversion' => 'Tools > Document + management', + 'bibentry' => 'Document parts > + Bibliography > Others', + 'psfonts' => 'Fonts > Text body + fonts', + 'thumb' => 'Page-focused > Headers and + footers', + 'qdtexvpl' => 'Fonts > Font + tools', + 'pthyphs' => 'Infrastructure > + Hyphenation', + 'pstex' => 'Graphics > + Tools', + 'psfonts-tools' => 'Fonts > Font + tools', + 'dvipscol' => 'Page-focused > + Color', + 'bbs' => 'Document types > Articles + > Journal styles', + 'tdsfrmath' => 'Programming in TeX > + Other', + 'pagerange' => 'Page-focused > Page + numbers', + 'mil3' => 'Documentation > + Other', + 'jmlr' => 'Document types > Articles + > Journal styles', + 'magyar' => 'Infrastructure > + Hyphenation', + 'figbas' => 'Fonts > + Other', + 'bracketkey' => 'Subject-specific typesetting + > Other natural sciences', + 'fotex' => 'Tools > Convert + formats', + 'softmaker-artistic' => 'Fonts > Support + files', + 'tikz-cd' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + 'wrapfig' => 'Page-focused > + Paragraphs', + 'mathspic' => 'Graphics > Inside + TeX', + 'Nath' => 'Subject-specific typesetting + > Mathematics > Other', + 'apeqnum' => 'Subject-specific typesetting + > Mathematics > Equations', + 'pmgraph' => 'Graphics > Inside + TeX', + 'ant' => 'Infrastructure > + Extensions', + 'colors' => 'Page-focused > + Color', + 'latexn' => 'Tools > Document + management', + 'translation-ecv-de' => 'Document types > Curriculum + Vita', + 'carolmin' => 'Fonts > Symbol + fonts', + 'fontools' => 'Fonts > Font + tools', + 'ishyph' => 'Infrastructure > + Hyphenation', + 'mdwtools' => 'Programming in TeX > + Other', + 'booktabs' => 'Page-focused > + Tables', + 'gentl-gr' => 'Documentation > + Tutorial', + 'bpchem' => 'Subject-specific typesetting + > Other natural sciences', + 'pdfmarginpar' => 'Output > PDF, + PostScript', + 'euro-ce' => 'Fonts > Symbol + fonts', + 'import' => 'Tools > Document + management', + 'jtb' => 'Document parts > + Bibliography > Bibliographic styles', + 'font-change' => 'Fonts > Support + files', + 'texlive' => ' + Distributions', + 'spotcolor' => 'Document parts > + Index', + 'manual' => 'Fonts > Symbol + fonts', + 'niceframe' => 'Page-focused > Boxes and + minipages', + 'york-thesis' => 'Document types > Theses > + Thesis styles', + 'phoenician' => 'Fonts > Text body + fonts', + 'shortvrb' => 'Page-focused > + Verbatim', + 'kpathsea' => 'Programming in TeX > + Other', + 'protex' => 'Literate + programming', + 'utf2any' => 'Tools > Convert + formats', + 'sverb' => 'Page-focused > + Verbatim', + 'ppr-prv' => 'Document types > + Presentations', + 'boxedart4mac' => 'Graphics > + Other', + 'lated' => 'Graphics > + Tools', + 'RST' => 'Subject-specific typesetting + > Linguistics', + 'Beebe-DVI' => 'Output > + DVI', + 'epstopdf' => 'Tools > Convert + formats', + 'turnstile' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'ltx2rtf' => 'Tools > Convert + formats', + 'pst-math' => 'Graphics > Inside + TeX', + 'physics' => 'Subject-specific typesetting + > Physics', + 'arlatex' => 'Tools > Document + management', + 'muthesis' => 'Document types > Theses > + Thesis styles', + 'musictex' => 'Document types > Other > + Music', + 'harmony' => 'Document types > Other > + Music', + 'stix' => 'Fonts > Text body + fonts', + 'chronosys' => 'Graphics > Inside + TeX', + 'csv2latex' => 'Tools > Convert + formats', + 'mattex' => 'Tools > + Other', + 'fancyhdr' => 'Page-focused > Headers and + footers', + 'components' => 'Documentation > + Tutorial', + 'dottex' => 'Graphics > Inside + TeX', + 'pdf-trans' => 'Output > PDF, + PostScript', + 'chicagoa' => 'Document parts > + Bibliography > Bibliographic styles', + 'ocr-a' => 'Fonts > Text body + fonts', + 'dvisvgm' => 'Output > + Other', + 'zwpagelayout' => 'Page-focused > + Other', + 'et' => ' + Uncharacterized', + 'tex-gyre-math-termes' => 'Fonts > Symbol + fonts', + 'modroman' => 'Programming in TeX > + Other', + 'letter1' => 'Document types > + Letters', + 'mdwtab' => 'Page-focused > + Tables', + 'macbibtex' => 'Tools > Bibliography + managers', + 'sansmathaccent' => 'Document types > + Presentations', + 'cmtt' => 'Page-focused > + Verbatim', + 'pst-layout' => 'Graphics > Inside + TeX', + 'hacm' => 'Non-English languages > + Other', + 'lb2-examples' => 'Documentation > + Other', + 'UPmethodology' => 'Subject-specific typesetting + > Computer science', + 'cmolddig' => 'Fonts > Support + files', + 'oxford' => 'Document parts > + Bibliography > Bibliographic styles', + 'bbl2html' => 'Tools > Bibliographic + manipulation', + 'collcell' => 'Programming in TeX > + Other', + 'Bibex' => 'Tools > Bibliography + managers', + 'menu' => 'Page-focused > + Other', + 'minitoc' => 'Document parts > Table of + contents', + 'croatian' => 'Fonts > Text body + fonts', + 'papercdcase' => 'Document types > Other > + CD and DVD covers', + 'nrc' => 'Document types > Articles + > Journal styles', + 'mftrace' => 'Fonts > Font + tools', + 'graphicx-psmin' => 'Graphics > Postscript or PDF + graphics', + 'bitelist' => 'Programming in TeX > + Programming structures', + 'reverxii' => 'Programming in TeX > + Other', + 'DCpic' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + 'paracol' => 'Page-focused > Multiple + columns', + 'pst-func' => 'Graphics > Inside + TeX', + 'adrlist' => 'Document types > Other > + Envelopes', + 'sasnrdisplay' => 'Page-focused > + Verbatim', + 'lshort-slovak' => 'Documentation > + Tutorial', + 'luasseq' => 'Subject-specific typesetting + > Physics', + 'MEP article' => 'Document types > Articles + > Journal styles', + 'gmdoc' => 'Programming in TeX > Package + management', + 'cmpj' => 'Document types > Articles + > Journal styles', + 'tabsatz' => 'Documentation > + Tutorial', + 'addindex' => 'Document parts > + Index', + 'notes2bib' => 'Document parts > + Bibliography > Others', + 'fancynum' => 'Programming in TeX > + Other', + 'HyPlain' => 'Infrastructure > + Hyphenation', + 'JBibtexManager' => 'Tools > Bibliography + managers', + 'fig2eng' => 'Graphics > + Tools', + 'texsketch' => ' + Uncharacterized', + 'pstricks-calcnotes' => 'Documentation > + Tutorial', + 'thepdfnumber' => 'Subject-specific typesetting + > Mathematics', + 'ot-tableau' => 'Page-focused > + Tables', + 'schemeweb' => 'Literate + programming', + 'GuITbeamer' => 'Document types > + Presentations', + 'jurarsp' => 'Page-focused > + Citations', + 'mylatex' => 'Tools > Document + management', + 'wochtag' => 'Programming in TeX > Date + and time', + 'mwe' => 'Documentation > + Other', + 'lshort-finnish' => 'Documentation > + Tutorial', + 'bib-greek' => 'Document parts > + Bibliography > Bibliographic styles', + 'showtags' => 'Document parts > + Bibliography > Bibliographic styles', + 'persian-modern' => 'Fonts > Text body + fonts', + 'crosswrd' => 'Document types > Other > + Other games', + 'nih' => 'Document types > Other > + Misc', + 'boxedeps' => 'Graphics > + Other', + 'tiff' => 'Graphics > + Other', + 'pslatex' => ' + Uncharacterized', + 'oscola' => 'Document parts > + Bibliography > Bibliographic styles', + 'abbr' => 'Programming in TeX > + Other', + 'unpacked' => ' + Uncharacterized', + 'testfont' => 'Fonts > Font + tools', + 'scorecard' => 'Document types > Other > + Other games', + 'hvmath-fonts' => 'Fonts > Symbol + fonts', + 'lshort-russian' => 'Documentation > + Tutorial', + 'tablefootnote' => 'Page-focused > + Tables', + 'pgfplots' => 'Page-focused > + Tables', + 'eso-pic' => 'Page-focused > + Background', + 'inscrutable' => 'Programming in TeX > + Other', + 'elmath' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'pst-labo' => 'Subject-specific typesetting + > Other natural sciences', + 'amsfonts' => 'Fonts', + 'JPicEdt' => 'Graphics > + Tools', + 'mdputu' => 'Fonts > Symbol + fonts', + 'flipbook' => 'Page-focused > Headers and + footers', + 'softmaker-henderson' => 'Fonts > Support + files', + 'jas99' => ' + Uncharacterized', + 't1tools' => 'Fonts > Font + tools', + 'plfonts' => 'Fonts > Text body + fonts', + 'begriff' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'm3D' => 'Graphics > MetaFont or + Metapost', + 'calxxxx' => 'Document types > Other > + Calendars', + 'zigaretten' => 'Document types > Other > + Misc', + 'breqn' => 'Subject-specific typesetting + > Mathematics > Equations', + 'urwvf' => 'Fonts > Support + files', + 'ttf2tex' => ' + Uncharacterized', + 'srhyphc' => 'Infrastructure > + Hyphenation', + 'concmath' => 'Fonts > Support + files', + 'uni-wtal-ger' => 'Document parts > + Bibliography > Bibliographic styles', + 'cellular' => 'Page-focused > + Tables', + 'cmastro' => 'Fonts > Symbol + fonts', + 'eurosans' => 'Fonts > Support + files', + 'bigints' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'interpreter' => 'Tools > Convert + formats', + 'cfgguide' => ' + Documentation', + 'placeins-plain' => 'Page-focused > + Floats', + 'CJ' => 'Document parts > + Bibliography > Bibliographic styles', + 'epsfview' => 'Graphics > MetaFont or + Metapost', + 'astyped' => 'Page-focused > + Verbatim', + 'dvipsk' => 'Output > PDF, + PostScript', + 'pedigree-perl' => 'Graphics > + Tools', + 'french-translations' => 'Documentation > + Other', + 'dashbox' => 'Page-focused > Boxes and + minipages', + 'pst-thick' => 'Graphics > Inside + TeX', + 'vpage' => ' + Uncharacterized', + 'longdiv' => 'Subject-specific typesetting + > Mathematics > Other', + 'metapost' => 'Graphics > MetaFont or + Metapost', + 'sprite' => 'Graphics > + Other', + 'tkz-linknodes' => 'Subject-specific typesetting + > Mathematics > Equations', + 'amslatex-primer' => 'Documentation > + Tutorial', + 'biblatex-phys' => 'Document parts > + Bibliography > Bibliographic styles', + 'coolstr' => 'Programming in TeX > + Programming structures', + 'namespc' => 'Programming in TeX > + Programming structures', + 'verbments' => 'Page-focused > + Verbatim', + 'happy4th' => 'Other', + 'proofs' => 'Subject-specific typesetting + > Mathematics > Other', + 'zhmCJK' => 'Fonts > Support + files', + 'cropmark-pu' => 'Page-focused > Page + geometry', + 'ifpdf' => 'Programming in TeX > + Other', + 'abstbook' => 'Document types > Proceedings + > Proceedings styles', + 'letltxmacro' => 'Programming in TeX > + Other', + 'jura' => 'Document types > Other > + Misc', + 'sueterlin' => 'Fonts > Symbol + fonts', + 'filemod' => ' + Uncharacterized', + 'mathesatz-examples' => 'Documentation > + Other', + 'erdc' => 'Document types > + Other', + 'texfilt' => 'Tools > + Other', + 'Metafont book' => 'Documentation > + Other', + 'rec-thy' => 'Subject-specific typesetting + > Mathematics', + 'at' => 'Programming in TeX > + Other', + 'navigator' => 'Output > PDF, + PostScript', + 'dblfloatfix' => 'Page-focused > + Floats', + 'statistik' => 'Programming in TeX > + Other', + 'AkkTeX' => 'Subject-specific typesetting + > Mathematics', + 'embrac' => ' + Uncharacterized', + 'etex-pkg' => 'Programming in TeX > + Other', + 'decorule' => 'Fonts > Symbol + fonts', + 'stmaryrd' => 'Fonts > Symbol + fonts', + 'mirr' => 'Output > PDF, + PostScript', + 'cm-gf' => 'Graphics > MetaFont or + Metapost', + 'realscripts' => 'Fonts > + Other', + 'sfwmac' => 'Documentation > + Other', + 'sageep' => 'Document types > Proceedings + > Proceedings styles', + 'sauterfonts' => 'Fonts > Support + files', + 'ghostscript-GPL' => 'Output > PDF, + PostScript', + 'floatpag' => 'Page-focused > + Floats', + 'stringstrings' => 'Programming in TeX > + Programming structures', + 'adjmulticol' => 'Page-focused > Multiple + columns', + 'LaTeX-veryshortguide' => 'Documentation > + Other', + 'prerex' => 'Graphics > + Tools', + 'pst-optexp' => 'Subject-specific typesetting + > Physics', + 'titleref' => 'Document parts > Chapters + and Sections', + 'a5comb' => 'Page-focused > Page + geometry', + 'etextools' => 'Programming in TeX > + Other', + 'verbtim2' => 'Page-focused > + Verbatim', + 'ctable' => 'Page-focused > + Tables', + 'startex' => 'Programming in TeX > + Other', + 'flagderiv' => 'Subject-specific typesetting + > Mathematics > Other', + 'luaxml' => 'Programming in TeX > + Other', + 'chbar' => 'Page-focused > Material in + margins', + 'lcircuit' => 'Subject-specific typesetting + > Physics', + 'showdim' => 'Programming in TeX > + Programming structures', + 'llncs209' => ' + Uncharacterized', + 'afterpackage' => 'Programming in TeX > Package + management', + 'fbs' => 'Document parts > + Bibliography > Bibliographic styles', + 'fihyph' => 'Infrastructure > + Hyphenation', + 'hungarian' => 'Infrastructure > + Hyphenation', + 'windvi' => 'Tools > Editors and + shells', + 'ant-worker-tasks' => 'Tools > Document + management', + 'cmoutlines' => 'Fonts > Support + files', + 'autotab' => 'Page-focused > + Tables', + 'morewrites' => 'Programming in TeX > + Other', + 'printbib' => 'Tools > Bibliography + managers', + 'dblfnote' => 'Page-focused > + Footnotes', + 'pst-vue3d' => 'Graphics > Inside + TeX', + 'compactbib' => 'Document parts > + Bibliography', + 'yafoot' => 'Page-focused > + Footnotes', + 'checkend' => 'Programming in TeX > + Other', + 'acroterm' => 'Other', + 'showhyphens' => ' + Uncharacterized', + 'fontsmpl' => 'Fonts > Font + tools', + 'bartel-chess-fonts' => 'Fonts > Symbol + fonts', + 'ltt' => 'Documentation > + Other', + 'recipecard' => 'Document types > Other > + Recipes', + 'smartmn' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'axodraw' => 'Subject-specific typesetting + > Physics', + 'bosisio' => ' + Uncharacterized', + 'lshort-english' => 'Documentation > + Tutorial', + 'indxcite' => 'Document parts > + Index', + 'show2e' => 'Programming in TeX > + Programming structures', + 'mathtime-ltx' => 'Fonts > Support + files', + 'fullblck' => 'Document types > + Letters', + 'Birkhaeuser' => 'Document types > Books > + Publisher styles', + 'screenplay' => 'Document types > Other > + Scripts', + 'physymb' => 'Subject-specific typesetting + > Physics', + 'uaclasses' => 'Document types > Theses > + Thesis styles', + 'umlaute' => ' + Uncharacterized', + 'pmtex' => ' + Uncharacterized', + 'memo2' => 'Document types > Other > + Memos', + 'chapterfolder' => 'Tools > Document + management', + 'encguide' => 'Documentation > + Other', + 'bytefield' => 'Subject-specific typesetting + > Computer science', + 'hoffset-voffset' => 'Tools > + Other', + 'context-notes-zh-cn' => 'Documentation > + Tutorial', + 'soyombo' => 'Fonts > Text body + fonts', + 'centernot' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'caesarcm' => 'Infrastructure > + Hyphenation', + 'wnri-latex' => 'Fonts > Support + files', + 'pagesel' => 'Output', + 'miktex-portable' => ' + Distributions', + 'chemarr' => 'Subject-specific typesetting + > Other natural sciences', + 't1enc' => ' + Uncharacterized', + 'fitr' => 'Output > PDF, + PostScript', + 'u8tex' => 'Tools > Editors and + shells', + 'eqname' => 'Subject-specific typesetting + > Mathematics > Equations', + 'russ' => 'Non-English languages > + Russian', + 'marginal' => 'Page-focused > Material in + margins', + 'thesis-titlepage-fhac' => 'Document types > Theses > + Thesis styles', + 'textoolspro' => 'Documentation > + Other', + 'grfext' => 'Graphics > + Tools', + 'lshort-slovenian' => 'Documentation > + Tutorial', + 'GFS Bodoni' => 'Fonts > Text body + fonts', + 'mxedruli' => 'Fonts > Text body + fonts', + 'tmmath' => 'Fonts > Support + files', + 'arsclassica' => 'Document types > Theses > + Thesis styles', + 'weekday' => 'Programming in TeX > Date + and time', + 'easyvector' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'hobby' => 'Graphics > Inside + TeX', + 'parnotes' => 'Page-focused > + Other', + 'selectp' => 'Output > + Other', + 'transfig' => 'Tools > Convert + formats', + 'protext' => ' + Distributions', + 'ean13isbn' => 'Graphics > + Other', + 'vrsion' => 'Output > + DVI', + 'mleftright' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'PBMtoPK' => 'Graphics > + Tools', + 'revtex4-0' => ' + Uncharacterized', + 'readprov' => ' + Uncharacterized', + 'escapeTeXt' => 'Tools > Convert + formats', + 'fnbreak' => 'Page-focused > + Footnotes', + 'lecturer' => 'Document types > + Presentations', + 'fntguide' => 'Documentation > + Other', + 'pst-diffraction' => 'Subject-specific typesetting + > Physics', + 'pagefoots' => 'Page-focused > + Footnotes', + 'sobolev' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'concprog' => 'Document types > Other > + Misc', + 'chbibref' => 'Document parts > + Bibliography > Bibliographic styles', + 'edfnotes' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'visualtex' => 'Tools > Editors and + shells', + 'pst-ob3d' => 'Graphics > Inside + TeX', + 'tape' => 'Document types > Other > + CD and DVD covers', + 'resphilosophica' => 'Document types > Articles + > Journal styles', + 'tex-implementors' => 'Documentation > + Other', + 'lualatex-math' => 'Subject-specific typesetting + > Mathematics > Other', + 'onlyamsmath' => 'Programming in TeX > Package + management', + 'a4' => 'Page-focused > Page + geometry', + 'savefnmark' => 'Page-focused > + Footnotes', + 'jadetex' => 'Output > + Other', + 'sdrt' => 'Graphics > Inside + TeX', + 'labtex' => 'Graphics > MetaFont or + Metapost', + 'libertineotf' => 'Fonts > Support + files', + 'sauter' => 'Fonts > Font + tools', + 'gost' => 'Document parts > + Bibliography > Bibliographic styles', + 'tablists' => 'Page-focused > + Lists', + 'required' => ' + Uncharacterized', + 'suffix' => 'Programming in TeX > + Other', + 'progkeys' => 'Subject-specific typesetting + > Computer science', + 'softmaker-heliumtwo' => 'Fonts > Support + files', + 'maple' => 'Document types > Other > + Newspapers and newsletters', + 'electrumadf' => 'Fonts > Text body + fonts', + 'mctex' => 'Tools > Convert + formats', + 'urlbst' => 'Document parts > + Bibliography > Others', + 'pdfx' => 'Output > PDF, + PostScript', + 'spiderweb' => ' + Uncharacterized', + 'sqrcaps' => 'Fonts > Symbol + fonts', + 'TameTheBeast' => 'Documentation > + Tutorial', + 'desclist' => 'Page-focused > + Lists', + 'pacioli' => 'Fonts > Text body + fonts', + 'literaturnaya' => 'Fonts > Text body + fonts', + 'pst-rubans' => 'Graphics > Inside + TeX', + 'gtrcrd' => 'Document types > Other > + Music', + 'stampinclude' => 'Tools > Document + management', + 'simplewick' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'tex2mail' => 'Tools > Convert + formats', + 'paratype' => 'Fonts > Text body + fonts', + 'pst-solides3d' => 'Graphics > Inside + TeX', + 'bookmark' => 'Output > PDF, + PostScript', + 'techexplorer' => 'Tools > + Other', + 'showkeys' => 'Page-focused > + Citations', + 'tocvsec2' => 'Document parts > Chapters + and Sections', + 'pdftexcmds' => 'Output > PDF, + PostScript', + 'pdf14' => 'Output > PDF, + PostScript', + 'nccfoots' => 'Page-focused > + Footnotes', + 'enpassant' => 'Fonts > Support + files', + 'tabu' => 'Page-focused > + Tables', + 'accents' => 'Fonts > Symbol + fonts', + 'harvard' => 'Page-focused > + Citations', + 'logpap' => 'Graphics > Inside + TeX', + 'collect' => 'Programming in TeX > + Other', + 'hep-gen' => 'Subject-specific typesetting + > Physics', + 'shorttoc' => 'Document parts > Table of + contents', + 'abstyles-babel' => 'Document parts > + Bibliography > Bibliographic styles', + 'SQLTeX' => 'Tools > + Other', + 'designcon' => 'Document types > Books > + Publisher styles', + 'bghyphen' => 'Infrastructure > + Hyphenation', + 'totpages' => 'Page-focused > Page + numbers', + 'cmcyralt-ltx' => 'Fonts > Support + files', + 'accsupp' => 'Output > PDF, + PostScript', + 'musixtex-fonts' => 'Fonts > Symbol + fonts', + 'apl' => 'Subject-specific typesetting + > Computer science', + 'lualatex-platform' => 'Programming in TeX > + Other', + 'BibTeX Database Generator' => 'Tools > Bibliography + managers', + 'Layaureo' => 'Page-focused > Page + geometry', + 'nohyph' => 'Infrastructure > + Hyphenation', + 'indic-type1' => 'Fonts > Text body + fonts', + 'easy' => ' + Uncharacterized', + 'footnote' => 'Page-focused > + Footnotes', + 'latexmake' => 'Tools > Document + management', + 'atveryend' => 'Programming in TeX > + Other', + 'bez123' => 'Graphics > Inside + TeX', + 'rustic' => 'Fonts > Text body + fonts', + 'eltex' => 'Graphics > Inside + TeX', + 'issuulinks' => 'Tools > PDF + tools', + 'syngen' => 'Graphics > Inside + TeX', + 'pagegrid' => 'Page-focused > Page + geometry', + 'texpack' => 'Literate + programming', + 'dotlessi' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'metalogo' => 'Programming in TeX > + Other', + 'mpattern' => 'Graphics > MetaFont or + Metapost', + 'consdiag' => 'Subject-specific typesetting + > Computer science', + 'fc-arith' => 'Document types > Exams, + exercise sets, and answers', + 'newtx' => 'Fonts > Support + files', + 'mtp2lite' => 'Fonts > Symbol + fonts', + 'newfile' => 'Programming in TeX > + Other', + 'SmileTeX' => 'Tools > Editors and + shells', + 'unicode-math' => 'Subject-specific typesetting + > Mathematics', + 'context-simplefonts' => 'Fonts > Support + files', + 'b1encoding' => 'Fonts > Support + files', + 'romannum' => 'Programming in TeX > + Other', + 'newvbtm' => 'Page-focused > + Verbatim', + 'texed' => ' + Uncharacterized', + 'booklet' => 'Document types > Other > + Misc', + 'attachfile2' => 'Output > PDF, + PostScript', + 'context-URWGothic' => 'Fonts > Support + files', + 'gentle' => 'Documentation > + Tutorial', + 'pst-magneticfield' => 'Graphics > Inside + TeX', + 'voss-mathmode' => 'Documentation > + Other', + 'dotseqn' => 'Subject-specific typesetting + > Mathematics > Equations', + 'hcbundle' => 'Document + types', + 'mkpkfontdir' => 'Fonts > Support + files', + 'ecc' => 'Fonts > Text body + fonts', + 'jpgfdraw' => 'Graphics > + Other', + 'cm-mf' => 'Fonts', + 'undump' => 'Infrastructure > + Extensions', + 'textarea' => 'Page-focused > Page + geometry', + 'ecta' => 'Document parts > + Bibliography > Bibliographic styles', + 'titlefoot' => 'Page-focused > + Footnotes', + 'tpcmfont' => 'Fonts > Support + files', + 'todonotes' => 'Page-focused > + Other', + 'scriptfonts' => 'Documentation > + Other', + 'prelim' => 'Page-focused > + Other', + 'adobecaslon' => 'Fonts > Support + files', + 'faq-es' => 'Documentation > + Other', + 'colorsep' => 'Page-focused > + Color', + 'cropmark' => 'Page-focused > Page + geometry', + 'directtex' => 'Infrastructure > Current + systems', + 'leftidx' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'neuron' => 'Document parts > + Bibliography > Bibliographic styles', + 'musuos' => 'Document types > Articles + > Others', + 'lato' => 'Fonts > Support + files', + 'ttf2mf' => 'Fonts > Font + tools', + 'dvii' => 'Tools > DVI + manipulation', + 'mwcls' => 'Document types > + Other', + 'tbe' => 'Documentation > + Other', + 'fixltxhyph' => ' + Uncharacterized', + 'aspectratio' => 'Subject-specific typesetting + > Other natural sciences', + 'featpost' => 'Graphics > MetaFont or + Metapost', + 'GFS Solomos' => 'Fonts > Text body + fonts', + 'pst-bar' => 'Graphics > + Tools', + 'fundus-sueterlin' => 'Fonts > Text body + fonts', + 'tinyc2l' => 'Page-focused > + Verbatim', + 'bib-fr' => 'Document parts > + Bibliography > Bibliographic styles', + 'RGB' => 'Page-focused > + Color', + 'script' => 'Document types > Articles + > Others', + 'dviljk' => 'Output > + DVI', + 'example' => 'Documentation > + Other', + 'Metafont' => 'Graphics > MetaFont or + Metapost', + 'bondgraph' => 'Subject-specific typesetting + > Other natural sciences', + 'lshort-dutch' => 'Documentation > + Tutorial', + 'zhnumber' => 'Non-English languages > + Chinese, Japanese, Korean', + 'mrcheckbib' => 'Tools > Bibliography + managers', + 'steinmetz' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'acrotex-web' => 'Page-focused > Page + geometry', + 'winshell' => 'Tools > Editors and + shells', + 'verdana' => 'Fonts > Text body + fonts', + 'booktabs-fr' => 'Page-focused > + Tables', + 'tqft' => 'Graphics > Inside + TeX', + 'uhrzeit' => 'Programming in TeX > Date + and time', + 'Extensive Arrows.' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'ltxcmds' => 'Programming in TeX > + Programming structures', + 'latex-base' => 'Programming in + TeX', + 'rotate' => 'Page-focused > Boxes and + minipages', + 'newthm' => ' + Uncharacterized', + 'patch' => 'Programming in TeX > Package + management', + 'cantarell' => 'Fonts > Text body + fonts', + 'lexitex' => 'Page-focused > + Citations', + 'economic' => 'Document parts > + Bibliography > Bibliographic styles', + 'time' => 'Programming in TeX > Date + and time', + 'bibview' => 'Tools > Bibliographic + manipulation', + 'fonts-sipa-arundina' => 'Fonts > Text body + fonts', + 'isi2bib-vim' => 'Tools > Bibliographic + manipulation', + 'springer' => 'Document types > Articles + > Journal styles', + 'tucv' => 'Document types > Curriculum + Vita', + 'tugboat' => 'Document types > Articles + > Journal styles', + 'orderrefs' => 'Tools > Bibliographic + manipulation', + 'yfonts-t1' => 'Fonts > Text body + fonts', + 'etaremune' => 'Page-focused > + Lists', + 'varindex' => 'Document parts > + Index', + 'easyfig' => 'Graphics > + Other', + 'enumitem-zref' => 'Page-focused > + Lists', + 'geometry' => 'Page-focused > Page + geometry', + 'KIXfont' => 'Fonts > Symbol + fonts', + 'truchet' => 'Graphics > MetaFont or + Metapost', + 'softmaker-canossa' => 'Fonts > Support + files', + 'faltblat' => 'Document types > Other > + Misc', + 'mff-util' => 'Fonts > Font + tools', + 'asaetr' => 'Document types > Articles + > Journal styles', + 'isotope' => 'Subject-specific typesetting + > Other natural sciences', + 'dot2texi' => 'Graphics > Inside + TeX', + 'progressbar' => 'Graphics > Inside + TeX', + 'capbas' => 'Fonts > Text body + fonts', + 'subdocs' => 'Tools > Document + management', + 'smalltalk' => 'Subject-specific typesetting + > Computer science', + 'bibplain' => 'Document parts > + Bibliography > Others', + 'uscthesis' => 'Document types > Theses > + Thesis styles', + 'fnote' => 'Page-focused > + Footnotes', + 'oldstandard' => 'Fonts > Text body + fonts', + 'midnight' => 'Programming in TeX > + Other', + 'nth' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'synctex-parser' => 'Tools > Editors and + shells', + 'cell' => 'Document types > Articles + > Journal styles', + 'adjustbox' => 'Programming in TeX > Box + manipulation', + 'bridge' => 'Document types > Other > + Other games', + 'smallcap' => 'Fonts > Support + files', + 'pst-pad' => 'Subject-specific typesetting + > Physics', + 'cjk-fonts' => 'Fonts > Text body + fonts', + 'fonetika' => 'Fonts > Support + files', + 'ctie' => 'Literate + programming', + 'pageslts' => 'Page-focused > Page + numbers', + 'HLaTeX fonts' => 'Fonts > Text body + fonts', + 'esk' => 'Graphics > + Other', + 'lookbibtex' => 'Tools > Bibliographic + manipulation', + 'lipsum' => 'Page-focused > + Other', + 'natbib' => 'Document parts > + Bibliography > Bibliographic styles', + 'amsppt1' => 'Document types > Articles + > Others', + 'texi2html' => 'Output > + HTML', + 'nccfloats' => 'Page-focused > + Floats', + 'gnuplot' => 'Graphics > + Tools', + 'pst-slpe' => 'Graphics > Inside + TeX', + 'mnhyphn' => 'Infrastructure > + Hyphenation', + 'ps4mf' => 'Fonts > Font + tools', + 'rvwrite' => 'Programming in TeX > + Other', + 'pgf-umlsd' => 'Graphics > Inside + TeX', + 'gauss' => 'Subject-specific typesetting + > Mathematics > Equations', + 'tamefloats' => 'Programming in TeX > + Other', + 'tpic2pdftex' => 'Graphics > + Tools', + 'esperant' => 'Non-English languages > + Other', + 'perpage' => 'Programming in TeX > + Other', + 'chessfss' => 'Document types > Other > + Chess', + 'isomath' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'Petri-nets' => 'Graphics > Inside + TeX', + 'grkfinst' => 'Fonts > Font + tools', + 'hep' => 'Subject-specific typesetting + > Physics', + 'musixtex' => 'Document types > Other > + Music', + 'milstd' => 'Document types > + Other', + 'texlipse' => 'Tools > Editors and + shells', + 'indentfirst' => 'Document parts > Chapters + and Sections', + 'MetaPost examples' => 'Documentation > + Other', + 'psnfssx-luc' => 'Fonts > Support + files', + 'roundbox' => 'Page-focused > Boxes and + minipages', + 'tabularew' => 'Page-focused > + Tables', + 'memoir' => 'Document + types', + 'varsfromjobname' => 'Programming in TeX > + Other', + 'latex-pro-pragmatiky' => 'Documentation > + Tutorial', + 'widetable' => 'Page-focused > + Tables', + 'catalan' => 'Infrastructure > + Hyphenation', + 'greektex' => 'Fonts > Text body + fonts', + 'bgteubner' => 'Document types > Articles + > Journal styles', + 'esstix' => 'Fonts > Symbol + fonts', + 'holtxdoc' => ' + Uncharacterized', + 'changelayout' => 'Page-focused > Page + geometry', + 'jablantile' => 'Fonts > Symbol + fonts', + 'serbian-lig' => 'Non-English languages > + Other', + 'graphics' => 'Graphics', + 'viiptart' => 'Document types > Articles + > Others', + 'cweb' => 'Literate + programming', + 'faktor' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'plainmisc' => 'Programming in TeX > + Other', + 'czhyph2e' => 'Infrastructure > + Hyphenation', + 'colortex' => 'Page-focused > + Color', + 'deleq' => 'Subject-specific typesetting + > Mathematics > Equations', + 'nccrules' => 'Page-focused > + Other', + 'stubs' => 'Page-focused > + Other', + 'webmacss' => 'Literate + programming', + 'flashcards' => 'Document types > Exams, + exercise sets, and answers', + 'pdftricks' => 'Graphics > Postscript or PDF + graphics', + 'tds' => ' + Documentation', + 'grfpaste' => 'Graphics > + Other', + 'l2tabu-italian' => 'Documentation > + Tutorial', + 'xstring' => 'Programming in TeX > + Other', + 'ttf2pt1' => 'Fonts > Font + tools', + 'metatype1' => 'Fonts > Font + tools', + 'dmhgener' => 'Page-focused > + Floats', + 'greenpoint' => 'Fonts > Symbol + fonts', + 'ans' => 'Document types > Exams, + exercise sets, and answers', + 'achicago-bst' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'ISO-TeX' => 'Tools > Editors and + shells', + 'linearb' => 'Fonts > Text body + fonts', + 'ibmres-tex' => 'Document types > Curriculum + Vita', + 'csfonts-t1' => 'Fonts > Text body + fonts', + 'minutes' => 'Document types > Other > + Minutes', + 'somedefs' => 'Programming in TeX > Package + management', + 'djgpp' => ' + Uncharacterized', + 'ulsy' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'nddiss' => 'Document types > Theses > + Thesis styles', + 'context-typescripts' => 'Fonts > Support + files', + 'translation-chemsym-de' => 'Documentation > + Other', + 'zefonts' => 'Fonts > Text body + fonts', + 'GraphTeX' => 'Graphics > + Tools', + 'truncate' => 'Page-focused > Boxes and + minipages', + 'LaTeX-tds' => 'Infrastructure > + Extensions', + 'metapost-matlab' => 'Graphics > MetaFont or + Metapost', + 'regexpatch' => 'Programming in TeX > + Programming structures', + 'isonums' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'onepagem' => 'Page-focused > Page + numbers', + 'bibleref-parse' => 'Other', + 'latex-info' => ' + Documentation', + 'espo' => 'Non-English languages > + Other', + 'l2tabu-spanish' => 'Documentation > + Tutorial', + 'fastpictex' => 'Graphics > Inside + TeX', + 'limap' => 'Graphics > + Other', + 'zahl2string' => 'Programming in TeX > + Other', + 'w32tex' => ' + Distributions', + 'Robot Man' => ' + Uncharacterized', + 'multirow' => 'Page-focused > + Tables', + 'w-a-schmidt' => 'Fonts > Support + files', + 'psizzl' => 'Subject-specific typesetting + > Physics', + 'gpdata' => 'Graphics > MetaFont or + Metapost', + 'LEd' => 'Tools > Editors and + shells', + 'fullwidth' => 'Page-focused > Page + geometry', + 'ncccomma' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'translation-arsclassica-de' => 'Documentation > + Other', + 'annotation-pkg' => 'Page-focused > + Other', + 'texlive-repo' => ' + Uncharacterized', + 'ANUfinalexam' => 'Document types > Exams, + exercise sets, and answers', + 'coollist' => 'Programming in TeX > + Programming structures', + 'emerald' => 'Fonts > Support + files', + 'fancyvrb' => 'Page-focused > + Verbatim', + 'starfont' => 'Fonts > Symbol + fonts', + 'SkakNew' => 'Document types > Other > + Chess', + 'huncial' => 'Fonts > Text body + fonts', + 'texas' => ' + Uncharacterized', + 'softmaker-tampa' => 'Fonts > Support + files', + 'oca' => 'Fonts > Symbol + fonts', + 'ionumbers' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'sines' => 'Programming in TeX > + Other', + 'rfil' => 'Fonts > Font + tools', + 'softfonts' => ' + Uncharacterized', + 'hopatch' => 'Programming in TeX > Package + management', + 'TeXmuse' => 'Document types > Other > + Music', + 'purifyeps' => 'Graphics > Postscript or PDF + graphics', + 'dropcaps' => 'Page-focused > + Paragraphs', + 'viking' => 'Fonts > Symbol + fonts', + 'tolkienfonts' => 'Fonts > Text body + fonts', + 'go-make' => 'Tools > Document + management', + 'ifoddpage' => 'Page-focused > Page + numbers', + 'messagebubbles' => 'Page-focused > + Other', + 'ruled-tables' => 'Page-focused > + Tables', + 'dPS' => 'Document types > Other > + Other games', + 'magic' => 'Fonts > Symbol + fonts', + 'umich-thesis' => 'Document types > Theses > + Thesis styles', + 'glonti' => 'Fonts > Support + files', + 'ncccropmark' => 'Page-focused > + Other', + 'vmsps' => 'Fonts > Support + files', + 'rail' => 'Subject-specific typesetting + > Computer science', + 'pseudocode' => 'Subject-specific typesetting + > Computer science', + 'biblook' => 'Tools > Bibliography + managers', + 'settosize-ltx' => 'Programming in TeX > Box + manipulation', + 'latexMP' => 'Graphics > MetaFont or + Metapost', + 'theapa' => ' + Uncharacterized', + 'sgame' => 'Page-focused > + Tables', + 'xr-hyper' => 'Page-focused > + Citations', + 'aebenvelope' => 'Output > PDF, + PostScript', + 'snote' => 'Document types > Other > + Music', + 'mailmerge' => 'Document types > + Letters', + 'poemscol' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'soulutf8' => 'Infrastructure > + Hyphenation', + 'bookhands' => 'Fonts > Symbol + fonts', + 'decimal' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'piano' => 'Document types > Other > + Music', + 'varioref' => 'Page-focused > + Citations', + 'papertex' => 'Document types > Other > + Newspapers and newsletters', + 'textpos' => 'Page-focused > Boxes and + minipages', + 'g-brief' => 'Document types > + Letters', + 'diagbox' => 'Page-focused > + Tables', + 'GFS NeoHellenic' => 'Fonts > Text body + fonts', + 'encTeX' => 'Infrastructure > + Extensions', + 'csquotes-de' => 'Documentation > + Other', + 'inputenx' => 'Programming in TeX > + Other', + 'forloop' => 'Programming in TeX > + Programming structures', + 'expdlist' => 'Page-focused > + Lists', + 'latexcount' => 'Tools > Word + counting', + 'mathgifg' => 'Fonts > Support + files', + 'backref' => 'Document parts > + Bibliography > Others', + 'tableaux' => 'Subject-specific typesetting + > Mathematics > Other', + 'abstract' => 'Document parts > + Abstract', + 'xetex-def' => 'Graphics > + Other', + 'softmaker-quadrat' => 'Fonts > Support + files', + 'texshop' => 'Tools > Editors and + shells', + 'xetex-devanagari' => 'Non-English languages > + Indian languages', + 'sort-by-letters' => 'Document parts > + Bibliography > Bibliographic styles', + 'firstline' => 'Page-focused > + Paragraphs', + 'ocgx' => 'Output > PDF, + PostScript', + 'merge' => 'Document types > + Letters', + 'cep' => 'Graphics > + Tools', + 'WordML2LaTeX' => 'Tools > Convert + formats', + 'crudetype' => 'Output > + Other', + 'vwcol' => 'Page-focused > Multiple + columns', + 'calorie' => 'Document types > Other > + Recipes', + 'scientificpaper' => 'Document types > Articles + > Others', + 'mathsci2bibtex' => 'Tools > Bibliographic + manipulation', + 'play' => 'Document types > Other > + Scripts', + 'tabbingbox' => 'Page-focused > Boxes and + minipages', + 'booktabs-de' => 'Page-focused > + Tables', + 'mempatch' => ' + Uncharacterized', + 'sty2dtx' => 'Literate + programming', + 'tipa-de' => 'Fonts > Symbol + fonts', + 'ytex' => 'Programming in TeX > + Other', + 'dviconcat' => 'Tools > DVI + manipulation', + 'trans' => 'Output > PDF, + PostScript', + 'softmaker-iceberg' => 'Fonts > Support + files', + 'epslatex' => 'Documentation > + Tutorial', + 'ntg' => 'Documentation > + Other', + 'alatex' => 'Infrastructure > + Extensions', + 'latex-make' => 'Tools > Document + management', + 'tkz-euclide' => 'Graphics > Inside + TeX', + 'rmannot' => 'Output > PDF, + PostScript', + 'txgreeks' => 'Fonts > Text body + fonts', + 'aiaa' => 'Subject-specific typesetting + > Other natural sciences', + 'mtbe' => 'Programming in TeX > + Other', + 'obsolete' => ' + Uncharacterized', + 'titletoc' => 'Document parts > Table of + contents', + 'bbm' => 'Fonts > Symbol + fonts', + 'lucold' => 'Fonts > Support + files', + 'ot2cyr' => 'Fonts > Support + files', + 'hpgl2ps' => 'Output > + Other', + 'chktex' => 'Programming in TeX > + Programming structures', + 'pst-spectra' => 'Subject-specific typesetting + > Physics', + 'toc-zar' => 'Document parts > + Other', + 'greek4cbc' => 'Fonts > Text body + fonts', + 'mfpic' => 'Graphics > MetaFont or + Metapost', + 'tabverb' => ' + Uncharacterized', + 'coverpage' => 'Document parts > + Other', + 'sciposter' => 'Document types > Other > + Posters', + 'hvmath' => 'Fonts > Support + files', + 'optparams' => 'Programming in TeX > + Programming structures', + 'ppchtex' => 'Subject-specific typesetting + > Other natural sciences', + 'qms' => 'Output > + DVI', + 'friulan' => 'Non-English languages > + Other', + 'IEEEconf' => 'Document types > Proceedings + > Proceedings styles', + 'dashrule' => 'Page-focused > + Other', + 'lua2dox' => 'Tools > + Other', + 'xecjk' => ' + Uncharacterized', + 'universa' => 'Fonts > Text body + fonts', + 'midfloat' => 'Page-focused > Multiple + columns', + 'bsheaders' => 'Document parts > Chapters + and Sections', + 'Hepunits' => 'Subject-specific typesetting + > Physics', + 'res' => 'Document types > Curriculum + Vita', + 'texperf' => 'Tools > Convert + formats', + 'anysize' => ' + Uncharacterized', + 'mychemistry' => 'Subject-specific typesetting + > Other natural sciences', + 'subdepth' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'bera' => 'Fonts > Text body + fonts', + 'preprint' => ' + Uncharacterized', + 'manfnt' => 'Fonts > Support + files', + 'pointruler' => 'Graphics > + Other', + 'rangen' => 'Programming in TeX > + Other', + 'pst-eucl' => 'Graphics > Inside + TeX', + 'bitset' => 'Programming in TeX > + Programming structures', + 'tex-gyre-math' => 'Fonts > Symbol + fonts', + 'hypdestopt' => 'Output > PDF, + PostScript', + 'tweb' => 'Literate + programming', + 'otfinst' => 'Fonts > Font + tools', + 'psnfssx-adobe' => 'Fonts > Support + files', + 'check' => 'Tools > Document + management', + 'context' => ' + Infrastructure', + 'fixltx2e' => 'Programming in TeX > + Other', + 'aeb-tilebg' => 'Graphics > + Tools', + 'nomencl' => 'Document parts > + Other', + 'tex-gyre-chorus' => 'Fonts > Text body + fonts', + 'acromake' => 'Programming in TeX > + Other', + 'imprintmtshadow' => 'Fonts > Support + files', + 'comment-pln' => 'Page-focused > + Other', + 'ithyph' => 'Infrastructure > + Hyphenation', + 'lshort-japanese' => 'Documentation > + Tutorial', + 'kurier' => 'Fonts > Text body + fonts', + 'nature' => 'Document types > Articles + > Journal styles', + 'pgfmolbio' => 'Graphics > Inside + TeX', + 'xindy' => 'Document parts > + Index', + 'lgc-examples' => 'Documentation > + Other', + 'TeXmacs' => 'Tools > Editors and + shells', + 'a4wide' => 'Page-focused > Page + geometry', + 'chessboard' => 'Document types > Other > + Chess', + 'qed' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'pxcjkcat' => 'Non-English languages > + Chinese, Japanese, Korean', + 'jmb' => 'Document parts > + Bibliography > Bibliographic styles', + 'presentations' => 'Documentation > + Other', + 'lshort-persian' => 'Documentation > + Tutorial', + 'bigstrut' => 'Page-focused > + Tables', + 'pdfslide' => 'Document types > + Presentations', + 'removefr' => 'Programming in TeX > + Other', + 'xypic-tut-pt' => 'Documentation > + Tutorial', + 'altverse' => 'Page-focused > + Poetry', + 'ejpecp' => 'Document types > Articles + > Journal styles', + 'srcltx' => 'Programming in TeX > + Other', + 'jhep' => 'Document types > Articles + > Journal styles', + 'dotarrow' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'xskak' => 'Document types > Other > + Chess', + 'bg' => 'Document types > Other > + Other games', + 'eiad' => 'Fonts > Text body + fonts', + 'lextex' => 'Document types > + Other', + 'umthesis' => 'Document types > Theses > + Thesis styles', + 'pdcmac' => 'Infrastructure > Current + systems', + 'ctanupload' => 'Other', + 'plainpkg' => 'Programming in TeX > + Programming structures', + 'bellmac' => 'Document types > + Letters', + 'pfm2afm' => 'Fonts > Font + tools', + 'LaTexMng' => 'Tools > Editors and + shells', + 'fundus-la' => 'Fonts > Support + files', + 'latexinfo' => ' + Uncharacterized', + 'eqnarray' => 'Subject-specific typesetting + > Mathematics > Equations', + 'frenchquote' => 'Fonts > + Other', + 'circ' => 'Subject-specific typesetting + > Other natural sciences', + 'newverbs' => 'Page-focused > + Verbatim', + 'slides' => 'Document types > Overhead + slides', + 'acm' => 'Subject-specific typesetting + > Computer science', + 'babelbib' => 'Document parts > + Bibliography', + 'DB_process' => 'Programming in TeX > + Other', + 'wordweb' => 'Literate + programming', + 'ist21' => 'Document types > Reference + manuals', + 'texdoctk' => 'Documentation > + Other', + 'pybib' => 'Tools > Bibliographic + manipulation', + 'embedfile' => 'Output > PDF, + PostScript', + 'ftnxtra' => 'Page-focused > + Footnotes', + 'tex-gpc' => 'Infrastructure > + Extensions', + 'ecards' => 'Document types > Exams, + exercise sets, and answers', + 'draftwatermark' => 'Page-focused > + Background', + 'mcaption' => 'Page-focused > + Captions', + 'pitthesis' => 'Document types > Theses > + Thesis styles', + 'context-vim' => 'Page-focused > + Verbatim', + 'lua-alt-getopt' => 'Tools > + Other', + 'softmaker-newcastle' => 'Fonts > Support + files', + 'askinclude' => 'Tools > Document + management', + 'keyreader' => 'Programming in TeX > + Programming structures', + 'maybemath' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'vhistory' => 'Programming in TeX > Package + management', + 'memo209' => 'Document types > Other > + Memos', + 'turnthepage' => 'Page-focused > Headers and + footers', + 'twoup-gen' => 'Output > + Other', + 'hexgame' => 'Document types > Other > + Other games', + 'aro-bend' => 'Documentation > + Other', + 'fnpara' => 'Page-focused > + Footnotes', + 'cmslup' => 'Fonts > Support + files', + 'mathrsfs' => 'Fonts > Symbol + fonts', + 'cheq' => 'Document types > Other > + Chess', + 'etexcmds' => 'Programming in TeX > + Programming structures', + 'psbox' => ' + Uncharacterized', + 'msym' => 'Fonts > Symbol + fonts', + 'bar' => 'Graphics > Inside + TeX', + 'decsci' => 'Document parts > + Bibliography > Bibliographic styles', + 'pgothic' => 'Fonts > Symbol + fonts', + 'tabls' => 'Page-focused > + Tables', + 'trfsigns' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'ethiop-t1' => 'Fonts > Text body + fonts', + 'pst-pdf' => 'Graphics > + Tools', + 'bigintcalc' => 'Programming in TeX > + Other', + 'tipa' => 'Subject-specific typesetting + > Linguistics', + 'rangecite' => 'Page-focused > + Citations', + 'bashkirian' => 'Fonts > Text body + fonts', + 'nostarch' => 'Document types > Books > + Publisher styles', + 'rjlparshap' => 'Page-focused > + Paragraphs', + 'mfirstuc' => 'Document parts > + Glossary', + 'tt2001' => 'Fonts > Text body + fonts', + 'upref' => 'Page-focused > + Citations', + 'mmtools' => ' + Uncharacterized', + 'vertex' => 'Document types > Articles + > Others', + 'antp' => 'Fonts > Text body + fonts', + 'ltx2x' => 'Tools > Convert + formats', + 'gnhyph' => 'Infrastructure > + Hyphenation', + 'texilikechaps' => 'Document parts > Chapters + and Sections', + 'uniquecounter' => 'Programming in TeX > + Other', + 'ogham' => 'Fonts > Symbol + fonts', + 'titling' => 'Document parts > + Other', + 'paragraphs' => 'Page-focused > + Paragraphs', + 'easybib' => 'Document parts > + Bibliography > Bibliographic styles', + 'settobox' => 'Programming in TeX > Box + manipulation', + 'index' => 'Document parts > + Index', + 'abc2mtex' => 'Subject-specific typesetting + > Music', + 'mhack' => 'Page-focused > Material in + margins', + 'biblatex-mla' => 'Document parts > + Bibliography > Bibliographic styles', + 'knst' => 'Document types > + Other', + 'translation-array-fr' => 'Documentation > + Other', + 'etoolbox-de' => 'Programming in TeX > + Other', + 'unswthesis' => 'Document types > Theses > + Thesis styles', + 'lcg' => 'Programming in TeX > + Programming structures', + 'pkuthss' => 'Document types > Theses > + Thesis styles', + 'thaifonts-arundina' => 'Fonts > Text body + fonts', + 'brushscr' => 'Fonts > Text body + fonts', + 'parselines' => 'Programming in TeX > + Other', + 'invoice' => 'Document types > Other > + Misc', + 'cmcyr' => 'Fonts > Text body + fonts', + 'epmtfe' => 'Tools > Editors and + shells', + 'latin2jk' => ' + Uncharacterized', + 'twoupltx' => 'Output > + Other', + 'fpl' => 'Fonts > Text body + fonts', + 'adforn' => 'Fonts > Symbol + fonts', + 'germbib' => ' + Uncharacterized', + 'graphicx' => 'Graphics', + 'MPStoEPS' => 'Graphics > MetaFont or + Metapost', + 'plhyph' => 'Infrastructure > + Hyphenation', + 'sketch' => 'Graphics > Inside + TeX', + 'vmspell' => 'Tools > + Spell-checkers', + 'biocon' => 'Subject-specific typesetting + > Other natural sciences', + 'pstricks-add' => 'Graphics > Inside + TeX', + 'ulthese' => 'Document types > Theses > + Thesis styles', + 'preview-latex' => ' + Uncharacterized', + 'psu-thesis' => 'Document types > Theses > + Thesis styles', + 'shadebox' => 'Page-focused > Boxes and + minipages', + 'amsart' => 'Document types > Articles + > Journal styles', + 'philosophersimprint' => 'Document types > Articles + > Journal styles', + 'rune' => 'Fonts > Text body + fonts', + 'tapir' => 'Fonts > Text body + fonts', + 'seminar' => 'Document types > + Presentations', + 'changebar' => 'Page-focused > Material in + margins', + 'filecontents' => 'Programming in TeX > + Other', + 'gentium' => 'Fonts > Text body + fonts', + 'adfsymbols' => 'Fonts > Symbol + fonts', + 'lyx' => 'Tools > Editors and + shells', + 'astro' => 'Fonts > Symbol + fonts', + 'perception' => 'Document parts > + Bibliography > Bibliographic styles', + 'context-letter' => 'Document types > + Letters', + 'metago' => 'Document types > Other > + Other games', + 'popupmenu' => 'Output > PDF, + PostScript', + 'emulateapj' => 'Document types > Articles + > Journal styles', + 'futurans' => 'Fonts > Support + files', + 'gmeometric' => 'Page-focused > Page + geometry', + 'pst-pulley' => 'Graphics > Inside + TeX', + 'schwalbe-chess' => 'Document types > Other > + Chess', + 'linearA' => 'Fonts > Text body + fonts', + 'biblatex-luh-ipw' => 'Document parts > + Bibliography > Bibliographic styles', + 'holtpolt' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'makeplot' => 'Graphics > Postscript or PDF + graphics', + 'alpha' => 'Tools > Editors and + shells', + 'easyLaTeX' => 'Tools > Convert + formats', + 'fix-cm' => 'Fonts > Support + files', + 'mactextras' => 'Infrastructure > Current + systems', + 'easy-todo' => 'Page-focused > Material in + margins', + 'softmakerfreefont' => 'Fonts > Support + files', + 'luatexbase' => 'Programming in TeX > + Other', + 'texdiff' => 'Tools > Document + management', + 'treetex-plain' => 'Graphics > Inside + TeX', + 'hhtensor' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'zed' => ' + Uncharacterized', + 'pdfcolparallel' => 'Graphics > Postscript or PDF + graphics', + 'aurora' => 'Output > PDF, + PostScript', + 'nextpage' => 'Page-focused > + Other', + 'dvi2tty' => 'Output > + DVI', + 'greekctr' => 'Page-focused > + Lists', + 'biblatex-musuos' => 'Document parts > + Bibliography > Bibliographic styles', + 'closefrm' => 'Graphics > MetaFont or + Metapost', + 'memo-pln' => 'Document types > Other > + Memos', + 'translation-moreverb-de' => 'Page-focused > + Verbatim', + 'pcfonts' => 'Fonts > Text body + fonts', + 'hellas' => 'Document parts > + Bibliography > Bibliographic styles', + 'type1ec' => 'Fonts > Support + files', + 'book-examples' => 'Documentation > + Other', + 'germdoc' => 'Documentation > + Other', + 'oval' => 'Page-focused > Boxes and + minipages', + 'koma-script-sfs' => 'Document types > + Letters', + 'fontinstallationguide' => 'Documentation > + Tutorial', + 'mol2chemfig' => 'Subject-specific typesetting + > Other natural sciences', + 'koma-moderncvclassic' => 'Document types > Curriculum + Vita', + 'lpw' => 'Literate + programming', + 'passivetex' => 'Programming in TeX > + Other', + 'young' => 'Subject-specific typesetting + > Mathematics > Other', + 'aaai-named' => 'Document parts > + Bibliography > Bibliographic styles', + 'nlctdoc' => ' + Uncharacterized', + 'colordoc' => 'Literate + programming', + 'cdcover' => 'Document types > Other > + CD and DVD covers', + 'dow' => 'Programming in TeX > Date + and time', + 'braille' => 'Fonts > Symbol + fonts', + 'niceframe-type1' => 'Fonts > Symbol + fonts', + 'analogclock' => 'Output > PDF, + PostScript', + 'tkz-fct' => 'Graphics > Inside + TeX', + 'gleitobjekte' => 'Documentation > + Tutorial', + 'hwkatakana' => ' + Uncharacterized', + 'nccstretch' => 'Programming in TeX > Box + manipulation', + 'marginnote' => 'Page-focused > Material in + margins', + 'xcite' => 'Page-focused > + Citations', + 'mm' => 'Fonts > Font + tools', + 'nomentbl' => 'Document parts > + Other', + 'eijkhout' => ' + Uncharacterized', + 'minibox' => 'Page-focused > Boxes and + minipages', + 'old-fontch' => ' + Uncharacterized', + 'pkfix-helper' => 'Fonts > Font + tools', + 'dinbrief-gui' => 'Tools > Editors and + shells', + 'program' => 'Page-focused > + Verbatim', + 'hypdoc' => 'Documentation > + Other', + 'swebib' => 'Document parts > + Bibliography > Bibliographic styles', + 'tango-weevil' => 'Literate + programming', + 'vocaltract' => 'Graphics > Inside + TeX', + 'automagic' => 'Document parts > Chapters + and Sections', + 'alphanum' => 'Document parts > Chapters + and Sections', + 'code' => 'Page-focused > + Verbatim', + 'eledpar' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'imac' => 'Document types > Proceedings + > Proceedings styles', + 'ugaritic' => 'Fonts > Symbol + fonts', + 'elbioimp' => 'Document types > Articles + > Journal styles', + 'bibtex-test' => 'Documentation > + Other', + 'acronym' => 'Other', + 'meta-mode' => 'Tools > Editors and + shells', + 'ntheorem-vn' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'cmextra-latex' => 'Fonts > Support + files', + 'Exam design' => 'Document types > Exams, + exercise sets, and answers', + 'lambda-lists' => 'Programming in TeX > + Programming structures', + 'samples' => 'Programming in TeX > + Other', + 'harnon-cv' => 'Document types > Curriculum + Vita', + 'ttn' => 'Documentation > + Other', + 'recipe' => 'Document types > Other > + Recipes', + 'AFMtoPL (Clark)' => 'Fonts > Font + tools', + 'TeX-mag' => 'Documentation > + Other', + 'mitpress' => 'Document types > Articles + > Journal styles', + 'physe' => 'Document types > Articles + > Others', + 'bibcheck' => 'Tools > Bibliographic + manipulation', + 'mathkit' => 'Fonts > Font + tools', + 'chembst' => 'Subject-specific typesetting + > Other natural sciences', + 'greektex-fd' => 'Fonts > Support + files', + 'tex-gyre-pagella' => 'Fonts > Text body + fonts', + 'dvitty' => 'Output > + Other', + 'calc' => 'Programming in TeX > + Other', + 'vncmr' => 'Fonts > Text body + fonts', + 'LaTeX-WIDE' => 'Tools > Editors and + shells', + 'jeep' => ' + Uncharacterized', + 'fi2t1' => 'Fonts > Font + tools', + 'fltpage' => 'Page-focused > + Captions', + 'tugboat-toc' => 'Documentation > + Other', + 'stdpage' => 'Page-focused > + Other', + 'shsulet' => 'Document types > + Letters', + 'mathabx-type1' => 'Fonts > Symbol + fonts', + 'pinlabel' => 'Graphics > + Other', + 'titlepage-uni-dortmund' => 'Document types > Theses > + Others', + 'mmafm' => ' + Uncharacterized', + 'ut-backref' => 'Page-focused > + Citations', + 'luatextra' => 'Infrastructure > + Extensions', + 'cascadilla' => 'Document types > Proceedings + > Proceedings styles', + 'latex4jed' => 'Tools > Editors and + shells', + 'extpfeil' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'levy-latex' => 'Fonts > Support + files', + 'verbtext' => 'Page-focused > + Verbatim', + 'development' => 'Document parts > + Bibliography > Bibliographic styles', + 'outerhbox' => 'Programming in TeX > Box + manipulation', + 'XeT-TeX' => 'Infrastructure > + Extensions', + 'gv' => 'Tools > Editors and + shells', + 'drftcite' => 'Page-focused > + Citations', + 'easyeqn' => 'Subject-specific typesetting + > Mathematics > Equations', + 'pgfkeyx' => 'Programming in TeX > + Programming structures', + 'BSR2dvi' => 'Tools > DVI + manipulation', + 'GFS Baskerville' => 'Fonts > Text body + fonts', + 'pstricks-examples' => 'Documentation > + Other', + 'typearea' => 'Page-focused > Page + geometry', + 'context-lettrine' => 'Page-focused > + Paragraphs', + 'fwlw' => 'Programming in TeX > + Other', + 'computer-typesetting-using-latex' => 'Documentation > + Other', + 'cmpica' => 'Fonts > Text body + fonts', + 'asyfig' => 'Graphics > + Other', + 'fontch' => 'Fonts > Support + files', + 'fontname' => 'Fonts > Support + files', + 'libgreek' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'hyph-utf8' => 'Infrastructure > + Hyphenation', + 'bm' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'softmaker-sunset' => 'Fonts > Support + files', + 'logfilter' => 'Programming in TeX > + Other', + 'rplain' => ' + Uncharacterized', + 'context-mathsets' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'XteXShell' => 'Tools > Editors and + shells', + 'bibleref-mouth' => 'Other', + 'cnoweb' => 'Subject-specific typesetting + > Computer science', + 'bbold-type1' => 'Fonts > Symbol + fonts', + 'eforms' => 'Programming in TeX > + Other', + 'newproof' => 'Subject-specific typesetting + > Mathematics > Other', + 'topcapt' => 'Page-focused > + Captions', + 'pstrees' => 'Subject-specific typesetting + > Linguistics', + 'zed-csp' => 'Subject-specific typesetting + > Computer science', + 'smflatex' => 'Document types > Articles + > Journal styles', + 'belleek' => 'Fonts > Symbol + fonts', + 'beamerposter' => 'Document types > Other > + Posters', + 'texcad32' => 'Graphics > + Tools', + 'csfonts' => 'Fonts > Text body + fonts', + 'dvistd' => 'Documentation > + Other', + 'lettergothic' => 'Fonts > Text body + fonts', + 'thuthesis' => 'Document types > Theses > + Thesis styles', + 'footnoterange' => 'Page-focused > + Footnotes', + 'cases' => 'Subject-specific typesetting + > Mathematics > Equations', + 'texspell' => 'Tools > + Spell-checkers', + 'boldline' => 'Page-focused > + Tables', + 'l2tabu-french' => 'Documentation > + Tutorial', + 'javatex' => 'Infrastructure > Current + systems', + 'graphics-pln' => 'Graphics', + 'xoptarg' => 'Programming in TeX > + Other', + 'dcolumn' => 'Page-focused > + Tables', + 'xargs' => 'Programming in TeX > + Programming structures', + 'softmaker-delanocaps' => 'Fonts > Support + files', + 'actuarialangle' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'seceqn' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'dot2tex' => 'Graphics > + Tools', + 'setdeck' => 'Document types > Other > + Other games', + 'cea' => 'Document types > Articles + > Journal styles', + 'forindex' => 'Document parts > + Index', + 'softmaker-grenoble' => 'Fonts > Support + files', + 'ocgtools' => 'Output > PDF, + PostScript', + 'luacode' => 'Programming in TeX > + Programming structures', + 'marginote' => 'Page-focused > Material in + margins', + 'pst-text' => 'Graphics > Inside + TeX', + 'slashbox' => 'Page-focused > + Tables', + 'filehook' => ' + Uncharacterized', + 'amsmidx' => 'Document parts > + Index', + 'gradback' => 'Page-focused > + Background', + 'wright' => 'Programming in TeX > + Programming structures', + 'bibtopicprefix' => 'Document parts > + Bibliography > Others', + 'refreshpdf' => 'Output > PDF, + PostScript', + 'ticket' => 'Document types > Other > + Business cards', + 'lcyw' => 'Fonts > Text body + fonts', + 'multiobjective' => 'Subject-specific typesetting + > Mathematics > Other', + 'semioneside' => 'Page-focused > + Other', + 'classes' => 'Document + types', + 'classif2' => 'Subject-specific typesetting + > Other natural sciences', + 'genmpage' => 'Page-focused > Boxes and + minipages', + 'latex2html' => 'Output > + HTML', + 'humannat' => 'Document parts > + Bibliography > Bibliographic styles', + 'comment' => 'Page-focused > + Other', + 'dratex' => 'Graphics > Inside + TeX', + 'web2c' => 'Literate + programming', + 'pgfkeys' => 'Programming in TeX > + Programming structures', + 'xcoffins' => 'Programming in TeX > Box + manipulation', + 'xspace' => 'Programming in TeX > + Other', + 'appendix' => 'Document parts > + Appendix', + 'modes' => 'Graphics > MetaFont or + Metapost', + 'numline' => ' + Uncharacterized', + 'guia-bibtex' => 'Documentation > + Tutorial', + 'boxit-ltx' => 'Page-focused > Boxes and + minipages', + 'rotunda' => 'Fonts > Symbol + fonts', + 'tabto-generic' => 'Page-focused > + Paragraphs', + 'eslides' => 'Document types > Overhead + slides', + 'omega' => 'Infrastructure > + Extensions', + 'bickham' => 'Fonts > Support + files', + 'knitting' => 'Subject-specific typesetting + > Other', + 'EAN' => ' + Uncharacterized', + 'xarticle' => ' + Uncharacterized', + 'ltxfileinfo' => 'Programming in TeX > + Other', + 'tikz-qtree' => 'Graphics > Inside + TeX', + 'contour' => 'Page-focused > + Color', + 'dirtree' => 'Graphics > Inside + TeX', + 'droid' => 'Fonts > Text body + fonts', + 'GELLMU' => 'Output > + HTML', + 'ldiff' => 'Tools > Document + management', + 'persian-bib' => 'Document parts > + Bibliography > Bibliographic styles', + 'tcobrowser' => 'Documentation > Help + files', + 'lh' => 'Fonts > Text body + fonts', + 'amsbook' => 'Document types > Books > + Publisher styles', + 'c2latex' => 'Literate + programming', + 'icomma' => 'Subject-specific typesetting + > Mathematics > Other', + 'cchess' => 'Document types > Other > + Other games', + 'bigfoot' => 'Page-focused > + Footnotes', + 'tagging' => 'Tools > Document + management', + 't1-fraktur' => 'Fonts > Text body + fonts', + 'texlog_extract' => 'Tools > Document + management', + 'rsfso' => 'Fonts > Symbol + fonts', + 'forarray' => 'Programming in TeX > + Programming structures', + 'talk' => 'Document types > + Presentations', + 'cmcyralt-fonts' => 'Fonts > Support + files', + 'cm-pk' => 'Graphics > MetaFont or + Metapost', + 'mnsymbol' => 'Fonts > Symbol + fonts', + 'corrects' => 'Document types > Other > + Misc', + 'citesidx' => 'Page-focused > + Citations', + 'lgc2-examples' => 'Documentation > + Other', + 'umrand' => 'Page-focused > Boxes and + minipages', + 'numericplots' => 'Graphics > Inside + TeX', + 'anonchap' => 'Document parts > Chapters + and Sections', + 'chicago-annote' => 'Document parts > + Bibliography > Bibliographic styles', + 'acroflex' => 'Graphics > Postscript or PDF + graphics', + 'ifetex' => 'Programming in TeX > + Programming structures', + 'Portable MikTeX' => 'Documentation > + Other', + 'polynomial' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'cursolatex' => 'Documentation > + Tutorial', + 'classicthesis' => 'Document types > Theses > + Thesis styles', + 'dprogress' => 'Programming in TeX > + Other', + 'trajan' => 'Fonts > Text body + fonts', + 'eiad-ltx' => 'Fonts > Support + files', + 'switcheml' => ' + Uncharacterized', + 'frhyph' => 'Infrastructure > + Hyphenation', + 'NTS' => 'Infrastructure > + Extensions', + 'tikz-3dplot' => 'Graphics > Inside + TeX', + 'lshort-vietnamese' => 'Documentation > + Tutorial', + 'astron' => 'Document types > Articles + > Journal styles', + 'pst-vowel' => 'Subject-specific typesetting + > Linguistics', + 'texi2www' => 'Output > + HTML', + 'dingbat' => 'Fonts > Symbol + fonts', + 'MemoirChapterStyles' => 'Documentation > + Other', + 'latex-bib-ex' => 'Documentation > + Other', + 'docarc' => 'Tools > Bibliography + managers', + 'bit2spr' => 'Tools > Convert + formats', + 'yplan' => 'Document types > Other > + Calendars', + 'eurosym' => 'Fonts > Text body + fonts', + 'parskip' => 'Page-focused > + Paragraphs', + 'texdepend' => 'Tools > Document + management', + 'cite-bundle' => 'Page-focused > + Citations', + 'dlfltxb' => 'Document types > Books > + Others', + 'trademarks' => ' + Uncharacterized', + 'thinsp' => 'Programming in TeX > Box + manipulation', + 'free-math-font-survey' => 'Documentation > + Other', + 'beamerthemeJLTree' => 'Document types > + Presentations', + 'monofill' => 'Page-focused > + Tables', + 'serial' => 'Document types > + Letters', + 'subfig' => 'Page-focused > + Floats', + 'texshade' => 'Subject-specific typesetting + > Other natural sciences', + 'catalanbib' => 'Document parts > + Bibliography > Bibliographic styles', + 'epigram' => 'Document parts > Chapters + and Sections', + 'make-env' => 'Document types > Other > + Envelopes', + 'texref' => 'Tools > Document + management', + 'wmaainf' => 'Document parts > + Bibliography > Bibliographic styles', + 'NL hyphenation' => 'Infrastructure > + Hyphenation', + 'amslatex' => 'Subject-specific typesetting + > Mathematics', + 'texi-like cover' => 'Document parts > + Other', + 'fourproject' => 'Tools > + Other', + 'processkv' => 'Programming in TeX > + Other', + 'chletter' => 'Document types > + Letters', + 'apabst' => 'Document parts > + Bibliography > Bibliographic styles', + 'nameauth' => ' + Uncharacterized', + 'parcolumns' => 'Page-focused > Multiple + columns', + 'yfonts' => 'Fonts > Support + files', + 'withesis' => 'Document types > Theses > + Thesis styles', + 'cooking' => 'Document types > Other > + Recipes', + 'bussproofs' => 'Subject-specific typesetting + > Mathematics > Other', + '3DLDF' => 'Graphics > MetaFont or + Metapost', + 'PDFrack' => 'Output > PDF, + PostScript', + 'halftone' => 'Fonts > + Other', + 'paresse' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'suthesis' => 'Document types > Theses > + Thesis styles', + 'faq-de' => 'Documentation > + Other', + 'NCC-LaTeX' => 'Document types > + Books', + 'ntheorem' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'comp-fonts-FAQ' => 'Documentation > + Other', + 'wmf2eps' => 'Graphics > + Tools', + 'mathcomp' => 'Fonts > Symbol + fonts', + 'subfiles' => 'Tools > Document + management', + 'fragmaster' => 'Graphics > Postscript or PDF + graphics', + 'catdoc' => 'Tools > Convert + formats', + 'context-typearea' => 'Page-focused > Page + geometry', + 'labelcas' => 'Programming in TeX > Cross + references', + 'qfonts' => ' + Uncharacterized', + 'arrayjobx' => 'Programming in TeX > + Programming structures', + 'Carlisle' => ' + Uncharacterized', + 'cmactex' => 'Infrastructure > Current + systems', + 'latexcheat-ptbr' => 'Documentation > Help + files', + 'LKproof' => 'Subject-specific typesetting + > Mathematics > Other', + 'blue' => 'Page-focused > Page + geometry', + 'eemeir' => 'Page-focused > + Other', + 'tex2rtf' => 'Tools > Convert + formats', + 'Exceltex' => 'Tools > Convert + formats', + 'beamerthemenirma' => 'Document types > + Presentations', + 'fig2vect' => 'Graphics > + Tools', + 'tkz-base' => 'Graphics > Inside + TeX', + 'susy' => 'Subject-specific typesetting + > Physics', + 'ifplatform' => 'Programming in TeX > + Other', + 'tex-gyre-cursor' => 'Fonts > Symbol + fonts', + 'toil' => ' + Uncharacterized', + 'icsv' => 'Document types > Proceedings + > Proceedings styles', + 'ncctools' => ' + Uncharacterized', + 'tgrind209' => ' + Uncharacterized', + 'metaobj' => 'Graphics > MetaFont or + Metapost', + 'serbianpart' => 'Document parts > Chapters + and Sections', + 'productbox' => 'Graphics > Inside + TeX', + 'cyklop' => 'Fonts > Text body + fonts', + 'blackboard' => 'Documentation > + Other', + 'pagereference' => 'Page-focused > Page + numbers', + 'lingtrees' => 'Subject-specific typesetting + > Linguistics', + 'cbgreek-complete' => 'Fonts > Text body + fonts', + 'tokenizer' => 'Programming in TeX > + Other', + 'ametsoc' => 'Document types > Articles + > Journal styles', + 'translation-filecontents-de' => 'Programming in TeX > + Other', + 'baum' => 'Graphics > Inside + TeX', + 'float' => 'Page-focused > + Floats', + 'WinEdt' => 'Tools > Editors and + shells', + 'asc2tex' => ' + Uncharacterized', + 'flashmovie' => 'Graphics > Postscript or PDF + graphics', + 'How to Package Your LaTeX Package' => 'Documentation > + Tutorial', + 'kalender' => 'Document types > Other > + Calendars', + 'ushyph' => 'Infrastructure > + Hyphenation', + 'objectz' => 'Subject-specific typesetting + > Computer science', + 'mathdots' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'tkz-orm' => 'Subject-specific typesetting + > Computer science', + 'commath' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'rule-d' => 'Programming in TeX > + Other', + 'adobemapping' => 'Output > PDF, + PostScript', + 'statex' => 'Subject-specific typesetting + > Mathematics > Other', + 'serbian-apostrophe' => 'Non-English languages > + Other', + 'translation-biblatex-de' => 'Documentation > + Other', + 'optional' => 'Programming in TeX > + Programming structures', + 'The Comprehensive LaTeX Symbol List.' => 'Documentation > Help + files', + 'blkcntrl' => 'Programming in TeX > + Programming structures', + 'pdfbook' => 'Tools > PDF + tools', + 'makeprog' => 'Literate + programming', + 'rnototex' => 'Tools > Convert + formats', + 'biblio' => 'Documentation > + Other', + 'algorithms' => 'Subject-specific typesetting + > Computer science', + 'pgfopts' => 'Programming in TeX > + Programming structures', + 'slemph' => 'Page-focused > + Other', + 'thai-rmit' => 'Fonts > Text body + fonts', + 'egplot' => 'Graphics > Inside + TeX', + 'sphack' => 'Programming in TeX > + Other', + 'vfinst' => 'Fonts > Font + tools', + 'latexcheat-esmx' => 'Documentation > Help + files', + 'aeb-mlink' => 'Output > PDF, + PostScript', + 'drama' => 'Document types > Other > + Scripts', + 'malvern' => 'Fonts > Text body + fonts', + 'formular' => 'Page-focused > + Other', + 'xcolor' => 'Page-focused > + Color', + 'ulsy-ps' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'xdvi' => 'Output > + DVI', + 'MetaPlot' => 'Graphics > MetaFont or + Metapost', + 'js-misc' => 'Programming in TeX > + Other', + 'MathType' => 'Tools > Editors and + shells', + 'graphicp' => 'Graphics > + Tools', + 'sidenotes' => 'Page-focused > Material in + margins', + 'textpath' => 'Graphics > MetaFont or + Metapost', + 'ocr-b-outline' => 'Fonts > Symbol + fonts', + 'xpunctuate' => 'Programming in TeX > + Other', + 'nicefilelist' => 'Programming in TeX > Package + management', + 'urw-arial' => 'Fonts > Text body + fonts', + 'duerer-LaTeX' => 'Fonts > Support + files', + 'mathtime-metrics' => 'Fonts > Support + files', + 'frletter' => 'Document types > + Letters', + 'hyphenat' => 'Infrastructure > + Hyphenation', + 'metafont-beginners' => 'Documentation > + Tutorial', + 'hhline' => 'Page-focused > + Tables', + 'mflogo-font' => 'Fonts > Symbol + fonts', + 'chemsym' => 'Subject-specific typesetting + > Other natural sciences', + 'Technica' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'wsuipa2tipa' => 'Fonts > Font + tools', + 'fundus-twcal' => 'Fonts > Support + files', + 'bibarts' => 'Document parts > + Bibliography > Bibliographic styles', + 'musixtex-egler' => ' + Uncharacterized', + 'uafthesis' => 'Document types > Theses > + Thesis styles', + 'PicTeXsum' => 'Documentation > + Other', + 'achicago' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'chemmacros' => 'Subject-specific typesetting + > Other natural sciences', + 'Econometrica' => 'Document parts > + Bibliography > Bibliographic styles', + 'ispell' => 'Tools > + Spell-checkers', + 'floatnohead' => 'Page-focused > Headers and + footers', + 'asymptote-manual-zh-cn' => 'Documentation > + Tutorial', + 'MathSpad' => 'Tools > Editors and + shells', + 'flashcard' => 'Document types > Exams, + exercise sets, and answers', + 'xyling' => 'Subject-specific typesetting + > Linguistics', + 'taylor' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + 'bibcard' => 'Tools > Bibliography + managers', + 'binomexp' => 'Programming in TeX > + Other', + 'cassette-shipunov' => 'Document types > Other > + CD and DVD covers', + 'mactex-additions' => 'Infrastructure > Current + systems', + 'moresize' => 'Fonts > Support + files', + 'complexity' => 'Subject-specific typesetting + > Computer science', + 'refstyle' => ' + Uncharacterized', + 'mciteplus' => 'Page-focused > + Citations', + 'colorinfo' => 'Page-focused > + Color', + 'delim' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'bibhtml' => 'Tools > Bibliography + managers', + 'multido' => 'Programming in TeX > + Programming structures', + 'pst-eucl-translation-bg' => 'Documentation > + Other', + 'rake4latex' => 'Tools > Document + management', + 'sf298' => 'Document types > + Other', + 'alltt' => 'Subject-specific typesetting + > Computer science', + 'fullpage' => 'Page-focused > Page + geometry', + 'format' => 'Programming in TeX > + Other', + 'dvicopy' => 'Tools > DVI + manipulation', + 'acroweb' => 'Document types > Exams, + exercise sets, and answers', + 'rcs' => 'Tools > Document + management', + 'photo' => 'Page-focused > + Floats', + 'biblatex-chicago' => 'Document parts > + Bibliography > Bibliographic styles', + 'trace' => 'Programming in TeX > + Other', + 'bicaption' => 'Page-focused > + Captions', + 'jpeg2ps' => 'Graphics > + Tools', + 'knuth-lib' => 'Graphics > MetaFont or + Metapost', + 'pxgreeks' => 'Fonts > Support + files', + 'tipos' => 'Documentation > + Other', + 'tocenter' => 'Page-focused > + Other', + 'flatten' => 'Tools > Document + management', + 'truecols' => 'Page-focused > + Color', + 'mathtex' => 'Subject-specific typesetting + > Mathematics', + 'shhyphl' => 'Infrastructure > + Hyphenation', + 'ftetx' => 'Tools > Editors and + shells', + 'dox' => 'Documentation > + Other', + 'ltxutil' => 'Programming in TeX > + Other', + 'pdf-forms-tutorial' => 'Documentation > + Tutorial', + 'floatfig' => ' + Uncharacterized', + 'Manuscript' => 'Document types > + Theses', + 'suanpan' => 'Graphics > MetaFont or + Metapost', + 'nnfootnote' => 'Page-focused > + Footnotes', + 'subeqn' => 'Subject-specific typesetting + > Mathematics > Equations', + 'bbding' => 'Fonts > Symbol + fonts', + 'leawood' => 'Fonts > Support + files', + 'memexsupp' => 'Programming in TeX > + Other', + 't1utils' => 'Fonts > Font + tools', + 'thmtools' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'ps2mf' => 'Fonts > Font + tools', + 'mycv' => 'Document types > Curriculum + Vita', + 'psnfss-source' => 'Fonts > Support + files', + 'placeins' => 'Page-focused > + Floats', + 'trigonometry' => 'Programming in TeX > + Programming structures', + 'l3experimental' => 'Programming in TeX > + Other', + 'thmbox' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'feynmf' => 'Graphics > MetaFont or + Metapost', + 'ecclesiastic' => 'Document parts > + Bibliography > Bibliographic styles', + 'Winfonts' => 'Fonts > Support + files', + 'locality' => 'Programming in TeX > + Programming structures', + 'threecol' => 'Page-focused > Multiple + columns', + 'bibutils' => 'Tools > Bibliographic + manipulation', + 'finplain' => 'Document parts > + Bibliography > Bibliographic styles', + 'inlinedef' => 'Programming in TeX > + Other', + 'sbtex' => ' + Uncharacterized', + 'biblatex-ieee' => 'Document parts > + Bibliography > Bibliographic styles', + 'isodoc' => 'Document types > + Letters', + 'barkom' => 'Graphics > Inside + TeX', + 'pst-mirror' => 'Graphics > Inside + TeX', + 'icelandic' => 'Fonts > Text body + fonts', + 'pdfcrop' => 'Graphics > + Tools', + 'infpic' => 'Page-focused > + Paragraphs', + 'hatching' => 'Graphics > MetaFont or + Metapost', + 'clrscode' => 'Subject-specific typesetting + > Computer science', + 'pigpen' => 'Fonts > Symbol + fonts', + 'kpfonts' => 'Fonts', + 'morefloats' => 'Page-focused > + Floats', + 'diagmac' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + 'random' => 'Programming in TeX > + Programming structures', + 'findbib' => 'Tools > Bibliographic + manipulation', + 'sectsty' => 'Document parts > Chapters + and Sections', + 'emp' => 'Graphics > Inside + TeX', + 'myletter' => ' + Uncharacterized', + 'slem' => ' + Uncharacterized', + 'softmaker-digital' => 'Fonts > Support + files', + 'hletter' => 'Document types > + Letters', + 'fldigigal' => 'Graphics > Postscript or PDF + graphics', + 'pst-lens' => 'Subject-specific typesetting + > Physics', + 'drs' => 'Subject-specific typesetting + > Linguistics', + 'lucida' => 'Fonts > Support + files', + 'pawpict' => 'Graphics > + Other', + 'db' => 'Programming in TeX > + Programming structures', + 'context-fixme' => 'Page-focused > Material in + margins', + 'TVS' => 'Tools > Document + management', + 'pl-mf' => 'Fonts > Text body + fonts', + 'eledform' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'dramatist' => 'Document types > Other > + Scripts', + 'tetex' => ' + Uncharacterized', + 'counttexruns' => 'Programming in TeX > + Other', + 'UML' => 'Subject-specific typesetting + > Computer science', + 'AFMtoPL (Elwell)' => 'Fonts > Font + tools', + 'cntdwn' => 'Document types > + Presentations', + 'Synapsen' => 'Tools > Bibliography + managers', + 'colourchange' => 'Document types > + Presentations', + 'epsfx' => 'Graphics > Postscript or PDF + graphics', + 'psrip' => 'Graphics > + Tools', + 'refman' => 'Document types > Reference + manuals', + 'lua-visual-debug' => 'Programming in TeX > + Programming structures', + 'frame' => 'Page-focused > Boxes and + minipages', + 'octavo' => 'Document types > + Books', + 'vutex' => 'Output > + Other', + 'ochem' => 'Subject-specific typesetting + > Other natural sciences', + 'apa6' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'mdvi' => 'Output > + DVI', + 'mathtools' => 'Subject-specific typesetting + > Mathematics', + 'variations' => 'Page-focused > + Tables', + 'xkvview' => 'Programming in TeX > + Programming structures', + 'stex' => 'Programming in TeX > + Other', + 'lshort-polish' => 'Documentation > + Tutorial', + 'chemcono' => 'Subject-specific typesetting + > Other natural sciences', + 'latexpand' => 'Tools > Document + management', + 'lshort-bulgarian' => 'Documentation > + Tutorial', + 'hands' => 'Fonts > + Other', + 'fontinst' => 'Fonts > Support + files', + 'ShLaTeX' => 'Tools > Document + management', + 'newinsert' => 'Programming in TeX > + Other', + 'UK-TeX' => 'Documentation > + Other', + 'cc-pl' => 'Fonts > Text body + fonts', + 'dtl' => 'Tools > DVI + manipulation', + 'bibleref-german' => 'Subject-specific typesetting + > Other', + 'pst-graphicx' => 'Graphics > Inside + TeX', + 'corelpak-contrib' => 'Fonts > Font + tools', + 'latex-bnf' => 'Subject-specific typesetting + > Computer science', + 'inslrmin' => 'Fonts > Symbol + fonts', + 'psnfssx-em' => 'Fonts > Support + files', + 'vc' => 'Tools > Document + management', + 'scientificauthor' => 'Tools > Editors and + shells', + 'texdraw' => 'Graphics > Postscript or PDF + graphics', + 'relenc' => 'Fonts > Font + tools', + 'softmaker-nevada' => 'Fonts > Support + files', + 'nccthm' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'figflow' => 'Page-focused > + Other', + 'l3kernel' => 'Programming in TeX > + Other', + 'aastex' => 'Document types > Articles + > Journal styles', + 'cm-mf-opt-kern' => 'Fonts > Support + files', + 'pst-infixplot' => 'Graphics > Inside + TeX', + 'old-faq-en' => ' + Uncharacterized', + 'pst-dbicons' => 'Subject-specific typesetting + > Computer science', + 'testmath' => 'Documentation > + Other', + 'constants' => 'Subject-specific typesetting + > Mathematics > Other', + 'grchyph' => 'Infrastructure > + Hyphenation', + 'amscd' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + 'shavian' => 'Fonts > Text body + fonts', + 'ps4pdf' => 'Output > PDF, + PostScript', + 'pstool' => 'Graphics > + Tools', + 'bbfig' => 'Graphics > + Tools', + 'cryst' => 'Fonts > Symbol + fonts', + 'fundus-pvscript' => 'Fonts > Text body + fonts', + 'kile' => 'Tools > Editors and + shells', + 'cuted' => 'Page-focused > Multiple + columns', + 'latex-doc' => 'Documentation > + Other', + 'schemeTeX' => 'Literate + programming', + 'dvips' => 'Output > PDF, + PostScript', + 'chextras' => 'Document types > + Letters', + 'letter' => 'Document types > + Letters', + 'tcvn' => 'Non-English languages > + Other', + 'ut-thesis' => 'Document types > Theses > + Thesis styles', + 'errata' => 'Page-focused > + Other', + 'attrib' => 'Page-focused > + Other', + 'laansort' => 'Programming in TeX > + Programming structures', + 'oztex-fonts' => ' + Uncharacterized', + 'typogrid' => 'Page-focused > Page + geometry', + 'webfiles' => 'Literate + programming', + 'cursor' => 'Subject-specific typesetting + > Mathematics > Equations', + 'pifont' => 'Fonts > Symbol + fonts', + 'gatech-thesis' => 'Document types > Theses > + Thesis styles', + 'genindex' => 'Document parts > + Index', + 'listliketab' => 'Page-focused > + Lists', + 'ps2pk' => 'Fonts > Font + tools', + 'sltables' => 'Page-focused > + Tables', + 'ifdraft' => 'Programming in TeX > + Other', + 'textfit' => 'Programming in TeX > Box + manipulation', + 'basix' => 'Programming in TeX > + Other', + 'Bengali Omega' => 'Fonts > Text body + fonts', + 'fax' => 'Document types > + Other', + 'mdsymbol' => 'Fonts > Symbol + fonts', + 'SciWordConv' => 'Infrastructure > + Extensions', + 'yswab' => 'Fonts > Text body + fonts', + 'pst-circ' => 'Subject-specific typesetting + > Physics', + 'coursepaper' => 'Document types > Other > + Misc', + 'bezos' => ' + Uncharacterized', + 'nag' => 'Documentation > Help + files', + 'beletter' => 'Document types > + Letters', + 'bguq' => 'Fonts > Symbol + fonts', + 'docmfp' => 'Documentation > + Other', + 'picins' => 'Page-focused > + Paragraphs', + 'ttftogf' => ' + Uncharacterized', + 'uothesis' => 'Document types > Theses > + Thesis styles', + 'ha-prosper' => 'Document types > + Presentations', + 'autonum' => 'Subject-specific typesetting + > Mathematics > Equations', + 'pictex2' => 'Graphics > Inside + TeX', + 'sr-hyphen-spec' => 'Non-English languages > + Other', + 'vicentino' => 'Fonts > Symbol + fonts', + 'mathexam' => 'Document types > Exams, + exercise sets, and answers', + 'authoraftertitle' => 'Programming in TeX > + Other', + 'gmutils' => 'Programming in TeX > + Other', + 'TeX-live source' => ' + Uncharacterized', + 'pdfcprot' => 'Output > PDF, + PostScript', + 'ftnright' => 'Page-focused > + Footnotes', + 'caption2' => 'Page-focused > + Captions', + 'utorontothesis' => 'Document types > Theses > + Thesis styles', + 'cd' => 'Document types > Other > + CD and DVD covers', + 'border' => 'Page-focused > + Other', + 'occam' => 'Programming in TeX > + Other', + 'tkz-tab' => 'Graphics > Inside + TeX', + 'frcursive' => 'Fonts > Text body + fonts', + 'wncyr' => 'Fonts > Text body + fonts', + 'plari' => 'Document types > Other > + Scripts', + 'cachepic' => 'Output > PDF, + PostScript', + 'ucthesis209' => ' + Uncharacterized', + 'biblatex-bwl' => ' + Uncharacterized', + 'duerer' => 'Fonts > Text body + fonts', + 'csbulletin' => 'Document types > Articles + > Journal styles', + 'linegoal' => 'Programming in TeX > Box + manipulation', + 'newapa' => 'Document parts > + Bibliography > Bibliographic styles', + 'checkcites' => 'Programming in TeX > Cross + references', + 'natmove' => 'Page-focused > + Citations', + 'probsoln' => 'Document types > Exams, + exercise sets, and answers', + 'multicap' => 'Page-focused > + Captions', + 'typeface' => 'Fonts > + Other', + 'interactiveworkbook' => 'Output > PDF, + PostScript', + 'realcalc' => 'Programming in TeX > + Other', + 'ruhyphen' => 'Infrastructure > + Hyphenation', + 'xl2latex' => 'Tools > Convert + formats', + 'msc' => 'Subject-specific typesetting + > Computer science', + 'pstdoc' => 'Documentation > Help + files', + 'translation-europecv-de' => 'Document types > Curriculum + Vita', + 'bibclean' => 'Tools > Bibliographic + manipulation', + 'oubraces' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'kerntest' => 'Fonts > Font + tools', + 'wotree' => 'Subject-specific typesetting + > Computer science', + 'lout' => ' + Uncharacterized', + 'droit-fr' => 'Document types > Theses > + Thesis styles', + 'unixman' => 'Document types > Other > + Misc', + 'urw-garamond' => 'Fonts > Text body + fonts', + 'dayofweek' => 'Programming in TeX > Date + and time', + 'urwchancal' => 'Fonts > Symbol + fonts', + 'jlm' => 'Tools > Editors and + shells', + 'piechartmp' => 'Graphics > MetaFont or + Metapost', + 'tabvar' => 'Subject-specific typesetting + > Mathematics > Other', + 'cm-unicode' => 'Fonts > Text body + fonts', + 'fnumprint' => 'Programming in TeX > + Other', + 'gb4e' => 'Subject-specific typesetting + > Linguistics', + 'redis' => 'Fonts > Text body + fonts', + 'oesch' => 'Fonts > Text body + fonts', + 'gu' => 'Subject-specific typesetting + > Other natural sciences', + 'gcard' => 'Document types > Other > + Misc', + 'camel' => 'Tools > Bibliography + managers', + 'lshort-ukr' => 'Documentation > + Tutorial', + 'latex-fonts' => 'Fonts', + 'latexcad' => 'Tools > Editors and + shells', + 'listing-pln' => 'Page-focused > + Verbatim', + 'substitutefont' => 'Fonts > Support + files', + 'cm-afm' => 'Fonts > Symbol + fonts', + 'psfragx' => 'Graphics > + Tools', + 'russian-help' => 'Documentation > Help + files', + 'trig' => 'Programming in TeX > + Programming structures', + 'nccmath' => 'Subject-specific typesetting + > Mathematics > Other', + 'pgfgantt' => 'Subject-specific typesetting + > Social sciences', + 'pst-3d' => 'Graphics > Inside + TeX', + 'currvita' => 'Document types > Curriculum + Vita', + 'geometry-de' => 'Documentation > + Other', + 'enumspec' => 'Page-focused > + Lists', + 'TeEncontreX' => 'Documentation > Help + files', + 'nccbbb' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'AeB Pro' => 'Output > PDF, + PostScript', + 'emtrees' => ' + Uncharacterized', + 'gaceta' => 'Document types > Articles + > Journal styles', + 'jlabels' => 'Document types > Other > + Labels', + 'longtocline' => 'Document parts > Table of + contents', + 'mab2bib' => 'Tools > Bibliographic + manipulation', + 'mk' => 'Tools > Document + management', + 'boondox' => 'Fonts > Symbol + fonts', + 'ifvtex' => 'Programming in TeX > + Other', + 'textmerg' => 'Document types > + Letters', + 'ams2bib' => 'Tools > Bibliographic + manipulation', + 'calculator' => 'Other', + 'amsaddr' => 'Document types > Articles + > Journal styles', + 'cite' => 'Page-focused > + Citations', + 'coseoul' => 'Document parts > Chapters + and Sections', + 'biblatex-nature' => 'Document parts > + Bibliography > Bibliographic styles', + 'dco' => ' + Uncharacterized', + 'oletex' => 'Tools > + Other', + 'bakoma-fonts' => 'Fonts > Text body + fonts', + 'bm2ltx' => 'Graphics > + Tools', + 'was' => ' + Uncharacterized', + 'laletter' => 'Document types > + Letters', + 'cjw' => 'Programming in TeX > + Other', + 'xymatrix' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + 'expressg' => 'Graphics > Inside + TeX', + 'cweb-hy' => 'Literate + programming', + 'MFwL' => 'Documentation > + Tutorial', + 'ukrhyph' => 'Infrastructure > + Hyphenation', + 'wnri' => 'Fonts > Text body + fonts', + 'mltex-ltx' => 'Infrastructure > + Hyphenation', + 'barcodes-vulis' => 'Graphics > MetaFont or + Metapost', + 'deflist' => 'Page-focused > + Lists', + 'pict2e' => 'Graphics > Inside + TeX', + 'silence' => 'Programming in TeX > + Other', + 'hyperref' => 'Programming in TeX > Cross + references', + 'latex-sciences-humaines' => 'Documentation > + Other', + 'lpic' => 'Graphics > + Tools', + 'dviincl' => 'Graphics > MetaFont or + Metapost', + 'context-gantt' => 'Graphics > Inside + TeX', + 'firststeps-xampl' => 'Documentation > + Other', + 'evautofl' => 'Page-focused > + Other', + 'webguide' => 'Documentation > + Other', + 'pkfix' => 'Fonts > Font + tools', + 'pst-pdgr' => 'Subject-specific typesetting + > Other natural sciences', + 'evenpage' => 'Document parts > + Other', + 'fdsymbol' => 'Fonts > Symbol + fonts', + 'serbian-book' => 'Document types > Articles + > Others', + 'pandora-latex' => 'Fonts > Support + files', + 'xrefwarn' => 'Page-focused > + Citations', + 'laps' => 'Programming in TeX > Box + manipulation', + 'ifluatex' => 'Programming in TeX > + Other', + 'MakeCirc' => 'Subject-specific typesetting + > Physics', + 'esint' => 'Fonts > Symbol + fonts', + 'romanneg' => 'Page-focused > Page + numbers', + 'pdfrender' => 'Output > PDF, + PostScript', + 'plpsfont' => 'Fonts > Text body + fonts', + 'bizcard' => 'Document types > Other > + Business cards', + 'fancytooltips' => 'Output > PDF, + PostScript', + 'plainyr' => 'Document parts > + Bibliography > Bibliographic styles', + 'progress' => 'Tools > Document + management', + 'lshort-turkish' => 'Documentation > + Tutorial', + 'dvi2ln3' => 'Output > + DVI', + 'pst-xkey' => 'Programming in TeX > + Programming structures', + 'gloss' => 'Document parts > + Glossary', + 'cweb-latex' => 'Literate + programming', + 'softmaker-helium' => 'Fonts > Support + files', + 'ntabbing' => 'Page-focused > + Other', + 'biblatex-science' => 'Document parts > + Bibliography > Bibliographic styles', + 'ama' => 'Document types > Articles + > Journal styles', + 'uhthesis' => 'Document types > Theses > + Thesis styles', + 'pdftex_oztex' => ' + Uncharacterized', + 'yannisgr' => 'Fonts > Text body + fonts', + 'doublecol' => 'Page-focused > Multiple + columns', + 'hypdvips' => 'Output > PDF, + PostScript', + 'systeme' => 'Subject-specific typesetting + > Mathematics > Equations', + 'smartref' => 'Page-focused > + Citations', + 'texi2roff' => 'Tools > Convert + formats', + 'weave' => 'Literate + programming', + 'lsc' => 'Subject-specific typesetting + > Computer science', + 'manjutex' => ' + Uncharacterized', + 'pst-electricfield' => 'Graphics > Inside + TeX', + 'context-bnf' => 'Subject-specific typesetting + > Computer science', + 'synttree' => 'Subject-specific typesetting + > Linguistics', + 'pstricks' => 'Graphics > Inside + TeX', + 'ratex' => 'Subject-specific typesetting + > Other', + 'pst-eps' => 'Graphics > + Tools', + 'xkeyval' => 'Programming in TeX > + Programming structures', + 'basque-date' => 'Non-English languages > + Other', + 'pmxChords' => 'Document types > Other > + Music', + 'polytable' => 'Page-focused > + Tables', + 'block' => 'Document types > + Letters', + 'showframe' => 'Page-focused > Page + geometry', + 'ega2mf' => 'Fonts > Text body + fonts', + 'egameps' => 'Document types > Other > + Other games', + 'hepnames' => 'Subject-specific typesetting + > Physics', + 'bodegraph' => 'Subject-specific typesetting + > Other natural sciences', + 'italic' => ' + Uncharacterized', + 'makefonts' => 'Fonts > Font + tools', + 'context-inifile' => 'Programming in TeX > + Other', + 'ec' => 'Fonts', + 'schedule209' => 'Document types > Other > + Calendars', + 'visualFAQ' => ' + Documentation', + 'ltxtable' => 'Page-focused > + Tables', + 'gl-tree' => 'Graphics > Inside + TeX', + 'r_und_s' => 'Subject-specific typesetting + > Other natural sciences', + 'greek-makeindex' => 'Document parts > + Index', + 'ccicons' => 'Fonts > Symbol + fonts', + 'zref' => 'Programming in TeX > + Other', + 'drac' => 'Programming in TeX > + Other', + 'pst2pdf' => 'Graphics > Postscript or PDF + graphics', + 'powerdot-fuberlin' => 'Document types > + Presentations', + 'l3keys2e' => 'Programming in TeX > + Programming structures', + 'obas' => 'Tools > Bibliography + managers', + 'ugarite' => 'Fonts > Symbol + fonts', + 'texmalli' => 'Documentation > + Tutorial', + 'array' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'morehelp' => 'Documentation > Help + files', + 'CurVe' => 'Document types > Curriculum + Vita', + 'alphalph' => 'Programming in TeX > + Other', + 'ulqda' => 'Subject-specific typesetting + > Social sciences', + 'pmboxdraw' => 'Page-focused > Boxes and + minipages', + 'fontbook' => 'Fonts > Font + tools', + 'pittetd' => 'Document types > Theses > + Thesis styles', + 'hausarbeit-jura' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'ibygrk' => 'Fonts > Text body + fonts', + 'nolbreaks' => 'Page-focused > + Other', + 'junicode' => 'Fonts > Text body + fonts', + 'winlatex' => 'Tools > Editors and + shells', + 'pst-osci' => 'Subject-specific typesetting + > Physics', + 'procIAGssymp' => 'Document types > Proceedings + > Proceedings styles', + 'logreq' => 'Tools > Document + management', + 'philex' => 'Page-focused > + Citations', + 'pst-optic' => 'Subject-specific typesetting + > Physics', + 'pmdpl' => 'Documentation > + Other', + 'doublespace' => ' + Uncharacterized', + 'clefval' => 'Programming in TeX > + Programming structures', + 'dvipdfm' => 'Output > PDF, + PostScript', + 'mdframed' => 'Page-focused > Boxes and + minipages', + 'mmpfb' => ' + Uncharacterized', + 'ucs' => ' + Uncharacterized', + 'lgrind' => 'Tools > + Other', + 'assignment' => 'Document types > Exams, + exercise sets, and answers', + 'shadow' => 'Page-focused > Boxes and + minipages', + 'maketable' => 'Page-focused > + Tables', + 'tex--xet' => ' + Uncharacterized', + 'tmmath-fonts' => 'Fonts > Symbol + fonts', + 'cptex' => 'Programming in TeX > + Other', + 'verbdef' => 'Page-focused > + Verbatim', + 'margbib' => 'Document parts > + Bibliography > Others', + 'eps2pdf' => 'Tools > Convert + formats', + 'feyn' => 'Graphics > MetaFont or + Metapost', + 'getoptk' => 'Programming in TeX > + Programming structures', + 'pst-fractal' => 'Graphics > Inside + TeX', + 'ctex-faq' => 'Documentation > + Other', + 'ledarab' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'lshort-portuguese' => 'Documentation > + Tutorial', + 'synproof' => 'Subject-specific typesetting + > Mathematics > Other', + 'atbegshi' => 'Programming in TeX > + Other', + 'texments' => 'Subject-specific typesetting + > Computer science', + 'transparent' => 'Page-focused > + Color', + 'doafter' => 'Programming in TeX > + Other', + 'calendar-Barr' => 'Document types > Other > + Calendars', + 'lshort-zh-cn' => 'Documentation > + Tutorial', + 'gsview' => 'Tools > Editors and + shells', + 'match_parens' => 'Tools > Document + management', + 'karnaugh' => 'Subject-specific typesetting + > Computer science', + 'incgraph' => 'Graphics > + Other', + 'thrmappendix' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'a2ac' => 'Fonts > Font + tools', + 'atari-cstex' => ' + Distributions', + 'loggates' => 'Fonts > Symbol + fonts', + 'pdfcol' => 'Output > PDF, + PostScript', + 'antt' => 'Fonts > Text body + fonts', + 'parrun' => 'Page-focused > Multiple + columns', + 'ifsym' => 'Fonts > Symbol + fonts', + 'calendarweek' => 'Document types > Other > + Calendars', + 'dyntree' => 'Graphics > Inside + TeX', + 'includex' => 'Tools > Document + management', + 'braket' => 'Subject-specific typesetting + > Physics', + 'tikz-dependency' => 'Graphics > Inside + TeX', + 'biblatex-authoryear-icomp-tt' => 'Document parts > + Bibliography > Bibliographic styles', + 'pageno' => 'Page-focused > Page + numbers', + 'xecolour' => 'Page-focused > + Color', + 'dvidvi' => 'Tools > DVI + manipulation', + 'dvips-shell' => 'Documentation > + Other', + 'cookybooky' => 'Document types > Other > + Recipes', + 'FigBib' => 'Graphics > + Tools', + 'ps2eps' => 'Graphics > + Tools', + 'buscard' => 'Document types > Other > + Business cards', + 'tex-gyre-schola' => 'Fonts > Text body + fonts', + 'pracjourn' => 'Document types > Articles + > Journal styles', + 'checklab' => 'Programming in TeX > + Other', + 'abbrevs' => 'Programming in TeX > + Other', + 'pst-2dplot' => 'Graphics > Inside + TeX', + 'vpe' => 'Tools > Editors and + shells', + 'ctanify' => 'Tools > Document + management', + 'autolist' => 'Page-focused > + Lists', + 'savetrees' => 'Page-focused > Page + geometry', + 'nuc' => 'Subject-specific typesetting + > Physics', + 'inconsolata' => 'Fonts > Text body + fonts', + 'quotchap' => 'Document parts > Chapters + and Sections', + 'mtex' => 'Document types > Other > + Music', + 'qsymbols' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'hyper' => ' + Uncharacterized', + 'warning' => 'Programming in TeX > Package + management', + 'dvisun' => ' + Uncharacterized', + 'cmap' => 'Output > PDF, + PostScript', + 'lshort-czech' => 'Documentation > + Tutorial', + 'idxlayout' => 'Document parts > + Index', + 'tocloft' => 'Document parts > + Other', + 'dialogue' => 'Page-focused > + Other', + 'beameraudience' => 'Document types > + Presentations', + 'chkfloat' => 'Page-focused > + Floats', + 'altfont' => 'Fonts > Text body + fonts', + 'mpgraphics' => 'Graphics > MetaFont or + Metapost', + 'epspdf' => 'Tools > Convert + formats', + 'subeqnarray' => 'Subject-specific typesetting + > Mathematics > Equations', + 'bibleref-lds' => 'Document parts > + Bibliography > Bibliographic styles', + 'kvoptions' => 'Programming in TeX > + Programming structures', + 'bbold' => 'Fonts > Symbol + fonts', + 'si' => 'Subject-specific typesetting + > Physics', + 'canoniclayout' => 'Page-focused > Page + geometry', + 'tgrind' => 'Subject-specific typesetting + > Computer science', + 'zip' => 'Document types > Other > + Envelopes', + 'pst-exa' => 'Subject-specific typesetting + > Computer science', + 'epsdice' => 'Graphics > Postscript or PDF + graphics', + 'rsfs' => 'Fonts > Symbol + fonts', + 'c-pascal' => 'Page-focused > + Verbatim', + 'ConTeXt-gnuplot' => 'Graphics > + Tools', + 'voss-mathcol' => 'Documentation > + Tutorial', + 'miniltx' => 'Programming in TeX > + Other', + 'sffms' => 'Document types > Articles + > Others', + 't1infos' => 'Fonts > Font + tools', + 'drv' => 'Graphics > MetaFont or + Metapost', + 'diagramf' => 'Graphics > MetaFont or + Metapost', + 'context-cmscbf' => 'Fonts > Text body + fonts', + 'elhyphen' => 'Infrastructure > + Hyphenation', + 'catechis' => 'Document types > Other > + Other games', + 'refer-tools' => 'Tools > Bibliographic + manipulation', + 'grid' => 'Page-focused > Multiple + columns', + 'amsrefs' => 'Document parts > + Bibliography', + 'uowthesis' => 'Document types > Theses > + Thesis styles', + 'latex-doc-ptr' => 'Documentation > + Tutorial', + 'xecolor' => 'Page-focused > + Color', + 'lstaddons' => 'Page-focused > + Verbatim', + 'figcaps' => 'Page-focused > + Captions', + 'ransom' => ' + Uncharacterized', + 'lscape' => 'Page-focused > + Other', + 'nopageno' => 'Page-focused > Page + numbers', + 'zwgetfdate' => 'Programming in TeX > Date + and time', + 'dvipdfmx' => 'Output > PDF, + PostScript', + 'onrannual' => 'Document types > Other > + Misc', + 'resizegather' => 'Subject-specific typesetting + > Mathematics > Equations', + 'eqnarray209' => 'Subject-specific typesetting + > Mathematics > Equations', + 'pdflscape' => 'Output > PDF, + PostScript', + 'bibindex' => 'Tools > Bibliographic + manipulation', + 'GraphConv' => 'Graphics > + Tools', + 'tibetan' => ' + Uncharacterized', + 'vpp' => 'Tools > Editors and + shells', + 'spie' => 'Document types > Articles + > Journal styles', + 'lms' => ' + Uncharacterized', + 'pdf-mps-supp' => 'Output > PDF, + PostScript', + 'cellwise' => 'Page-focused > + Tables', + 'juraabbrev' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'fontenc' => 'Fonts > Support + files', + 'fn2end' => 'Page-focused > + Footnotes', + 'prelim2e' => 'Page-focused > Headers and + footers', + 'acmtrans' => 'Subject-specific typesetting + > Computer science', + 'hfbright' => 'Fonts > Text body + fonts', + 'ascelike' => 'Document parts > + Bibliography > Bibliographic styles', + 'newcommand' => 'Programming in TeX > + Programming structures', + 'xr' => 'Programming in TeX > Cross + references', + 'fig2sty' => 'Tools > + Other', + 'xeindex' => 'Document parts > + Index', + 'showcharinbox' => 'Programming in TeX > Box + manipulation', + 'gene-logic' => 'Subject-specific typesetting + > Mathematics > Other', + 'csname-doc' => 'Documentation > + Other', + 'romaniantex' => 'Non-English languages > + Other', + 'TeXProject' => 'Document types > Other > + Misc', + 'fouridx' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'midpage' => 'Page-focused > + Other', + 'romansh' => 'Non-English languages > + Other', + 'HPtfm2pl' => 'Fonts > Font + tools', + 'bm2font' => 'Graphics > + Tools', + 'varisize' => 'Fonts > + Other', + 'logsys' => 'Graphics > Inside + TeX', + 'breakcites' => 'Page-focused > + Citations', + 'epsf' => 'Graphics > Postscript or PDF + graphics', + 'tib' => 'Tools > Bibliographic + manipulation', + 'HEPparticles' => 'Subject-specific typesetting + > Physics', + 'varindent' => 'Page-focused > + Paragraphs', + 'xhfill' => 'Programming in TeX > Box + manipulation', + 'manyfoot' => 'Page-focused > + Footnotes', + 'srune' => 'Fonts > Text body + fonts', + 'ijcai89' => 'Document types > Proceedings + > Proceedings styles', + 'dotlessj' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'iso' => 'Document types > Reference + manuals', + 'dowith' => 'Programming in TeX > + Programming structures', + 'pphlp' => 'Documentation > Help + files', + 'highlight' => 'Page-focused > + Verbatim', + 'pdfcomment' => 'Output > PDF, + PostScript', + 'niceverb' => 'Programming in TeX > + Other', + 'usebib' => 'Document parts > + Bibliography > Others', + 'sans' => 'Fonts > + Other', + 'cropmrks' => 'Page-focused > Page + geometry', + 'psfrag' => 'Graphics > + Tools', + 'mcite' => 'Page-focused > + Citations', + 'dinbrief' => 'Document types > + Letters', + 'texpictex' => 'Graphics > Inside + TeX', + 'formula' => 'Subject-specific typesetting + > Physics', + 'tableauVariations' => 'Subject-specific typesetting + > Mathematics > Other', + 'detex' => 'Tools > Convert + formats', + 'appelt-chess' => 'Document types > Other > + Chess', + 'enotez' => 'Page-focused > + Footnotes', + 'r2bib' => 'Tools > Bibliographic + manipulation', + 'plain-ltx' => 'Programming in TeX > + Other', + 'upca' => 'Graphics > Inside + TeX', + 'GFS Artemisia' => 'Fonts > Text body + fonts', + 'censor' => 'Tools > Document + management', + 'Eqmlite/Free' => 'Infrastructure > Current + systems', + 'underlin' => 'Page-focused > Headers and + footers', + 'wordcount' => 'Tools > Word + counting', + 'DVItoLN03' => 'Output > + DVI', + 'flabels' => 'Document types > Other > + Labels', + 'OzTeX-german' => ' + Uncharacterized', + 'pdfcrypt' => 'Output > PDF, + PostScript', + 'rccol' => 'Page-focused > + Tables', + 'cuisine' => 'Document types > Other > + Recipes', + 'pdfcolmk' => 'Output > PDF, + PostScript', + 'tex-overview' => 'Documentation > + Tutorial', + 'glossaries-accsupp' => 'Document parts > + Glossary', + 'aifont' => 'Fonts > Font + tools', + 'acroreloadpdf' => 'Output > PDF, + PostScript', + 'eitl' => 'Tools > + Other', + 'verbasef' => 'Page-focused > + Verbatim', + 'elpres' => 'Document types > + Presentations', + 'biblatex' => 'Document parts > + Bibliography', + 'cm-lgc' => 'Fonts > Text body + fonts', + 'qbibman' => 'Tools > Bibliographic + manipulation', + 'chappg' => 'Document parts > Chapters + and Sections', + 'treedef' => 'Page-focused > + Tables', + 'latex2rtf' => 'Output > + Other', + 'adhocfilelist' => 'Tools > Document + management', + 'add-wes' => 'Document types > Books > + Publisher styles', + 'makeglos' => 'Document parts > + Glossary', + 'stfloats' => 'Page-focused > + Floats', + 'bits' => 'Document parts > Chapters + and Sections', + 'papermas' => 'Programming in TeX > + Other', + 'xbibtex' => 'Tools > Bibliography + managers', + 'jqt1999' => 'Document parts > + Bibliography > Bibliographic styles', + 'combine' => 'Document types > + Proceedings', + 'word2tex' => 'Tools > Editors and + shells', + 'changes' => 'Tools > Document + management', + 'shadbox' => 'Page-focused > Boxes and + minipages', + 'rotating' => 'Page-focused > Boxes and + minipages', + 'xpeek' => 'Programming in TeX > + Programming structures', + 'xkvltxp' => 'Programming in TeX > + Other', + 'footnpag' => 'Page-focused > + Footnotes', + 'comfortaa' => 'Fonts > Support + files', + 'cellspace' => 'Page-focused > + Tables', + 'pandora-type1' => 'Fonts > Text body + fonts', + 'svg-inkscape' => 'Documentation > + Tutorial', + 'named' => 'Document parts > + Bibliography > Bibliographic styles', + 'overpic' => 'Graphics > + Other', + 'fac' => 'Subject-specific typesetting + > Computer science', + 'convert' => 'Tools > Convert + formats', + 'l2a' => 'Output > + Other', + 'bibbuild' => 'Tools > Bibliographic + manipulation', + 'pkfind' => 'Fonts > Font + tools', + 'tpslifonts' => 'Document types > + Presentations', + 'runic' => 'Fonts > Text body + fonts', + 'vita' => 'Document types > Curriculum + Vita', + 'knot' => 'Subject-specific typesetting + > Other', + 'timing' => 'Graphics > MetaFont or + Metapost', + 'ln03dvi' => 'Output > + DVI', + 'beamer' => 'Document types > + Presentations', + 'delimtxt' => 'Tools > Convert + formats', + 'rfc2bib' => 'Tools > Bibliographic + manipulation', + 'nohyphbx' => 'Infrastructure > + Hyphenation', + 'amiweb2c' => ' + Infrastructure', + 'catchfilebetweentags' => 'Page-focused > + Other', + 'flippdf' => 'Output > PDF, + PostScript', + 'bib2xhtml' => 'Tools > Bibliographic + manipulation', + 'superiors' => 'Fonts > Text body + fonts', + 'antomega' => 'Infrastructure > + Extensions', + 'mathematica' => 'Fonts > Support + files', + 'multienv' => 'Programming in TeX > + Programming structures', + 'rtf2tex' => 'Tools > Convert + formats', + 'ngerman' => 'Non-English languages > + German', + 'chemtex' => ' + Uncharacterized', + 'asymptote' => 'Graphics > + Other', + 'serbianc' => 'Non-English languages > + Other', + 'goblin' => 'Fonts > Text body + fonts', + 'wiki' => 'Fonts > Text body + fonts', + 'bridge-pln' => 'Document types > Other > + Other games', + 'here' => 'Page-focused > + Floats', + 'ofntinst' => 'Fonts > Font + tools', + 'pst-3dplot' => 'Graphics > Inside + TeX', + 'vita209' => 'Document types > Curriculum + Vita', + 'sphyphb' => 'Infrastructure > + Hyphenation', + 'tocbibind' => 'Document parts > Table of + contents', + 'moreenum' => 'Page-focused > + Lists', + 'shade' => 'Page-focused > Boxes and + minipages', + 'rectopma' => 'Document parts > + Other', + 'type1cm' => ' + Uncharacterized', + 'math-into-latex-4' => 'Documentation > + Other', + 'emarks' => 'Programming in TeX > + Other', + 'spot' => 'Document types > + Presentations', + 'rotpages' => 'Page-focused > Page + geometry', + 'lkort' => 'Documentation > + Tutorial', + 'tabfigures' => 'Fonts > Text body + fonts', + 'eledmac' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'ebsthesis' => 'Document types > Theses > + Thesis styles', + 'nemocal' => 'Document types > Other > + Calendars', + 'latexmk' => 'Tools > Document + management', + 'mathptmx' => 'Fonts', + 'amsthm' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'europecv' => 'Document types > Curriculum + Vita', + 'filedate' => 'Programming in TeX > Date + and time', + 'splitindex' => 'Document parts > + Index', + 'dvipdfmx-def' => 'Output > PDF, + PostScript', + 'poligraf' => 'Output > + Other', + 'simplecv' => 'Document types > Curriculum + Vita', + 'Midi2TeX/Free' => 'Tools > Convert + formats', + 'flacards' => 'Document types > Exams, + exercise sets, and answers', + 'ovalfbox' => 'Page-focused > Boxes and + minipages', + 'l2tabu-english' => 'Documentation > + Tutorial', + 'biblatex-publist' => 'Document parts > + Bibliography > Bibliographic styles', + 'esdiff' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'tengwar' => ' + Uncharacterized', + 'captcont' => 'Page-focused > + Captions', + 'nabatean' => 'Fonts > Symbol + fonts', + 'gensymb' => 'Fonts > Symbol + fonts', + 'biblatex-jura' => 'Document parts > + Bibliography > Bibliographic styles', + 'moredefs' => 'Programming in TeX > + Programming structures', + 'pf2afm' => 'Fonts > Font + tools', + 'mathcmd' => 'Subject-specific typesetting + > Mathematics > Other', + 'librarian' => 'Document parts > + Bibliography > Others', + 'sam2p' => 'Graphics > + Tools', + 'textool' => 'Output > + DVI', + 'DTX gallery' => 'Documentation > + Tutorial', + 'xwatermark' => 'Page-focused > + Background', + 'tabularborder' => 'Page-focused > + Tables', + 'inputenc' => 'Programming in TeX > + Other', + 'presentations-en' => 'Documentation > + Other', + 'parallel' => 'Page-focused > Multiple + columns', + 'din1505' => 'Document parts > + Bibliography > Bibliographic styles', + 'koma-script-examples' => 'Documentation > + Other', + 'mnras' => 'Document types > Articles + > Journal styles', + 'adobe-euro' => 'Fonts > Text body + fonts', + 'pxtxalfa' => 'Fonts > Symbol + fonts', + 'hackalloc' => 'Programming in TeX > + Programming structures', + 'indent' => 'Page-focused > + Other', + 'annotate' => 'Document parts > + Bibliography > Bibliographic styles', + 'etruscan' => 'Fonts > Text body + fonts', + 'hyperlatex' => 'Output > + HTML', + 'mbboard' => 'Fonts > Symbol + fonts', + 'bundledoc' => 'Tools > Document + management', + 'changepage' => 'Page-focused > Page + geometry', + 'manual209' => 'Document types > Reference + manuals', + 'menukeys' => 'Page-focused > + Verbatim', + 'randomwalk' => 'Graphics > Inside + TeX', + 'sfheaders' => 'Document parts > Chapters + and Sections', + 'cyrtug' => ' + Uncharacterized', + 'TeXbook' => ' + Documentation', + 'cutwin' => 'Page-focused > + Paragraphs', + 'meetingmins' => 'Document types > Other > + Minutes', + 'NTS-L' => 'Documentation > + Other', + 'secret' => 'Page-focused > + Paragraphs', + 'musixguit' => 'Document types > Other > + Music', + 'automata' => 'Graphics > MetaFont or + Metapost', + 'slideshow' => 'Document types > + Presentations', + 'card-set' => 'Document types > Other > + Misc', + 'extract' => 'Programming in TeX > + Other', + 'lshort-mongol' => 'Documentation > + Tutorial', + 'easymat' => 'Subject-specific typesetting + > Mathematics > Matrices, vectors', + 'urw-antiqua' => 'Fonts > Text body + fonts', + 'txt2latex' => 'Tools > Convert + formats', + 'pst-tree' => 'Graphics > Inside + TeX', + 'casslbl' => 'Document types > Other > + CD and DVD covers', + 'translation-booktabs-fr' => 'Documentation > + Other', + 'otftofd' => 'Fonts > Font + tools', + 'dvi2bitmap' => 'Output > + Other', + 'braids' => 'Graphics > Inside + TeX', + 'multitoc' => 'Document parts > Table of + contents', + 'helvet' => 'Fonts > Text body + fonts', + 'gmp' => 'Graphics > MetaFont or + Metapost', + 'nccparskip' => 'Page-focused > + Paragraphs', + 'tex-kurs' => ' + Uncharacterized', + 'jmakepdfx' => 'Tools > Convert + formats', + 'softmaker-jugendstil' => 'Fonts > Support + files', + 'svn-multi' => 'Tools > Document + management', + 'seqsplit' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'fp' => 'Programming in TeX > + Other', + 'bidi' => 'Non-English + languages', + 'mailing' => 'Document types > + Letters', + 'minion2newtx' => 'Fonts > Support + files', + 'glossary' => 'Document parts > + Glossary', + 'pst-gantt' => 'Graphics > Inside + TeX', + 'humanbio' => 'Document parts > + Bibliography > Bibliographic styles', + 'fixfoot' => 'Page-focused > + Footnotes', + 'mdwmath' => 'Subject-specific typesetting + > Mathematics > Other', + 'nccfancyhdr' => 'Page-focused > Headers and + footers', + 'vruler' => 'Page-focused > + Other', + 'fundus-va' => 'Fonts > Text body + fonts', + 'nb4latex' => 'Tools > Convert + formats', + 's2latex' => 'Tools > Convert + formats', + 'zhmetrics' => 'Fonts > Support + files', + 'TeXshell' => 'Tools > Editors and + shells', + 'mboxfill' => 'Page-focused > Boxes and + minipages', + 'vrbexin' => 'Page-focused > + Verbatim', + 'context-lilypond' => 'Subject-specific typesetting + > Music', + 'altnline' => 'Page-focused > + Other', + 'textures-metrics' => ' + Uncharacterized', + 'tsipa' => ' + Uncharacterized', + 'mactotex' => 'Graphics > Postscript or PDF + graphics', + 'draftcopy' => 'Page-focused > + Background', + 'palladam' => 'Fonts > Text body + fonts', + 'pst-fill' => 'Graphics > Inside + TeX', + 'pst-blur' => 'Graphics > Inside + TeX', + 'fnpara-pln' => 'Page-focused > + Footnotes', + 'harvard-obsolete' => ' + Uncharacterized', + 'poster-mac' => 'Document types > Other > + Posters', + 'lahyph' => 'Infrastructure > + Hyphenation', + 'harvmac' => 'Programming in TeX > + Other', + 'numprint' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'fncychap' => 'Document parts > Chapters + and Sections', + 'colortbl' => 'Page-focused > + Tables', + 'psutils' => 'Graphics > + Tools', + 'TeXmate' => 'Document types > Other > + Chess', + 'txt' => ' + Uncharacterized', + 'amstex' => 'Subject-specific typesetting + > Mathematics', + 'bard' => 'Fonts > Text body + fonts', + 'PWT' => 'Documentation > + Other', + 'context-URWGaramond' => 'Fonts > Support + files', + 'fancyhdrboxed' => 'Page-focused > Headers and + footers', + 'neufont' => 'Documentation > + Tutorial', + 'sfarticle' => 'Document types > Articles + > Others', + 'arev' => 'Fonts > Text body + fonts', + 'pbm2tex' => 'Graphics > + Tools', + 'path' => 'Page-focused > + Verbatim', + 'savesym' => 'Programming in TeX > + Other', + 'xmpincl' => 'Output > PDF, + PostScript', + 'notoccite' => 'Page-focused > + Citations', + 'japanese-otf' => 'Non-English languages > + Chinese, Japanese, Korean', + 'AFMtopl (Wolczko)' => 'Fonts > Font + tools', + 'cun' => 'Fonts > Symbol + fonts', + 'dviasm' => 'Tools > DVI + manipulation', + 'powerdot' => 'Document types > + Presentations', + 'prosper' => 'Document types > + Presentations', + 'spverbatim' => 'Page-focused > + Verbatim', + 'tab4tex' => 'Page-focused > + Tables', + 'context-degrade' => 'Graphics > + Tools', + 'ifthen' => 'Programming in TeX > + Programming structures', + 'trivfloat' => 'Page-focused > + Floats', + 'lm-math' => 'Fonts > Symbol + fonts', + 'ed' => 'Page-focused > + Other', + 'bib2ml' => 'Tools > Bibliographic + manipulation', + 'MiniPlot' => 'Graphics > + Other', + 'context-filter' => 'Programming in TeX > + Other', + 'isorot' => 'Page-focused > Page + geometry', + 'mrecog' => ' + Uncharacterized', + 'qm' => 'Subject-specific typesetting + > Physics', + 'fourspell' => 'Tools > + Spell-checkers', + 'snapshot' => 'Tools > Document + management', + 'count1to' => 'Programming in TeX > + Other', + 'tram' => 'Page-focused > Boxes and + minipages', + 'blindtext' => 'Programming in TeX > + Other', + 'interpol' => 'Graphics > MetaFont or + Metapost', + 'PicTeX' => 'Graphics > Inside + TeX', + 'make_latex' => 'Tools > Document + management', + 'babyloniannum' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'compare' => 'Programming in TeX > + Programming structures', + 'mactex-basic' => 'Infrastructure > Current + systems', + 'pkbbox' => 'Fonts > Font + tools', + 'autopict' => 'Graphics > Inside + TeX', + 'latex2man' => 'Output > + Other', + 'tex4ht' => 'Output > + HTML', + 'bookest' => 'Document types > + Books', + 'latexfileversion' => 'Tools > + Other', + 'isolatin1' => ' + Uncharacterized', + 'qfig' => ' + Uncharacterized', + 'doc-pictex' => 'Documentation > + Other', + 'comma' => 'Subject-specific typesetting + > Mathematics > Other', + 'properties' => 'Programming in TeX > + Other', + 'fepslatex' => 'Documentation > + Tutorial', + 'dvitops' => ' + Uncharacterized', + 'aurical' => 'Fonts > Text body + fonts', + 'yax' => 'Programming in TeX > + Programming structures', + 'context-fullpage' => 'Page-focused > Page + geometry', + 'uwthesis' => 'Document types > Theses > + Thesis styles', + 'newalg' => 'Page-focused > + Verbatim', + 'multicol' => 'Page-focused > Multiple + columns', + 'tesla' => 'Subject-specific typesetting + > Computer science', + 'lfonts-ams' => ' + Uncharacterized', + 'rsc' => 'Document parts > + Bibliography > Bibliographic styles', + 'ms' => ' + Uncharacterized', + 'biolinum-type1' => 'Fonts > Support + files', + 'psboxit' => 'Graphics > Postscript or PDF + graphics', + 'gamebook' => 'Document types > Other > + Other games', + 'texpict' => 'Graphics > + Tools', + 'fixlatvian' => 'Non-English languages > + Other', + 'math-e' => 'Documentation > + Other', + 'ltcaption' => 'Page-focused > + Tables', + 'inputtrc' => 'Programming in TeX > Package + management', + 'mh' => 'Subject-specific typesetting + > Mathematics', + 'xq' => 'Document types > Other > + Other games', + 'latex209' => ' + Uncharacterized', + 'hardwrap' => 'Programming in TeX > + Other', + 'dichokey' => 'Subject-specific typesetting + > Other natural sciences', + 'pst-bspline' => 'Graphics > Inside + TeX', + 'simplified-latex' => 'Documentation > + Tutorial', + 'mathalfa' => 'Fonts > Support + files', + 'edmac' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'cirth' => 'Fonts > + Other', + 'quote' => 'Programming in TeX > + Other', + 'jknappen' => ' + Uncharacterized', + 'animate' => 'Graphics > Postscript or PDF + graphics', + 'tkbibtex' => 'Tools > Bibliography + managers', + 'ipaex' => 'Fonts > Text body + fonts', + 'xetex-greek' => 'Infrastructure > + Hyphenation', + 'declare' => 'Programming in TeX > + Other', + 'bashful' => 'Programming in TeX > + Other', + 'AcroMemory' => 'Document types > Other > + Other games', + 'jcc' => 'Document parts > + Bibliography > Bibliographic styles', + 'pst-stru' => 'Subject-specific typesetting + > Other natural sciences', + 'emptypage' => 'Page-focused > Page + numbers', + 'ltxindex' => 'Document parts > + Index', + 'multibox' => 'Page-focused > Boxes and + minipages', + 'newfloat' => 'Page-focused > + Floats', + 'toc' => 'Document parts > Table of + contents', + 'outliner' => 'Document parts > Chapters + and Sections', + 'fontaxes' => 'Fonts > Support + files', + 'quoting' => 'Page-focused > + Other', + 'letter-plain' => 'Document types > + Letters', + 'pst-ode' => 'Graphics > Inside + TeX', + 'xetexfontinfo' => 'Documentation > + Other', + 'covington' => 'Subject-specific typesetting + > Linguistics', + 'kvdefinekeys' => 'Programming in TeX > + Programming structures', + 'loops' => 'Programming in TeX > + Programming structures', + 'ltxkeys' => 'Programming in TeX > + Programming structures', + 'spain' => 'Document parts > + Bibliography > Bibliographic styles', + 'vmargin' => 'Page-focused > Page + geometry', + 'marvosym' => 'Fonts > Symbol + fonts', + 'robustcommand' => 'Programming in TeX > + Programming structures', + 'LXfonts' => 'Fonts > Text body + fonts', + 'winemtex' => ' + Uncharacterized', + 'captdef' => 'Page-focused > + Captions', + 'ltxinput' => 'Tools > Document + management', + 'tcltexed' => 'Tools > Editors and + shells', + 'TeX' => ' + Uncharacterized', + 'diagnose' => 'Programming in + TeX', + 'biokey' => 'Subject-specific typesetting + > Other natural sciences', + 'historische-zeitschrift' => 'Document parts > + Bibliography > Bibliographic styles', + 'faq-fr' => 'Documentation > + Other', + 'smaller' => ' + Uncharacterized', + 'TeXcount' => 'Tools > Word + counting', + 'overword' => 'Programming in TeX > + Other', + 'tkdvi' => 'Tools > Editors and + shells', + 'corelfonts' => 'Fonts > Font + tools', + 'stables' => 'Page-focused > + Tables', + 'lollipop' => ' + Uncharacterized', + 'iopart-num' => 'Document parts > + Bibliography > Bibliographic styles', + 'truetypemetrics' => 'Fonts > Support + files', + 'mathspec' => 'Fonts > Symbol + fonts', + 'bookform' => 'Document types > + Other', + 'everyshi' => 'Programming in TeX > + Other', + 'sparklines' => 'Graphics > Inside + TeX', + 'nccboxes' => 'Page-focused > Boxes and + minipages', + 'venn' => 'Graphics > MetaFont or + Metapost', + 'aichej' => 'Document parts > + Bibliography > Bibliographic styles', + 'ghab' => 'Page-focused > Boxes and + minipages', + 'luacolor' => 'Page-focused > + Color', + 'cms4talks' => 'Tools > Document + management', + 'dvichk' => 'Tools > DVI + manipulation', + 'btable' => 'Page-focused > + Tables', + 'aomart' => 'Document types > Articles + > Journal styles', + 'translation-natbib-fr' => 'Documentation > + Other', + 'cals' => 'Page-focused > + Tables', + 'Imake-TeX' => 'Tools > Document + management', + 'lametex' => 'Output > PDF, + PostScript', + 'imakeidx' => 'Document parts > + Index', + 'ncccropbox' => 'Page-focused > Boxes and + minipages', + 'nonfloat' => 'Page-focused > + Floats', + 'l3regex' => 'Programming in TeX > + Programming structures', + 'uktug-bask' => 'Documentation > + Other', + 'exams' => 'Document types > Exams, + exercise sets, and answers', + 'doipubmed' => 'Document parts > + Bibliography > Others', + 'jj-game' => 'Document types > Other > + Other games', + 'daytime' => 'Programming in TeX > Date + and time', + 'xwpick' => 'Graphics > + Tools', + 'epsincl' => 'Graphics > MetaFont or + Metapost', + 'infwarerr' => 'Programming in TeX > + Other', + 'sanhyph' => 'Infrastructure > + Hyphenation', + 'texi2dvi-latest' => 'Tools > Document + management', + 'eqlist' => 'Page-focused > + Lists', + 'proba' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'spanglish' => 'Non-English languages > + Spanish', + 'boundbox' => 'Page-focused > Page + geometry', + 'docmute' => 'Graphics > Inside + TeX', + 'sansmath' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'rotfloat' => 'Page-focused > + Floats', + 'latexcheat' => 'Documentation > Help + files', + 'grafik' => 'Documentation > + Tutorial', + 'text2bib' => 'Tools > Bibliographic + manipulation', + 'brclc' => 'Programming in TeX > + Other', + 'sepnum' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'subsupscripts' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'usrguide' => 'Documentation > + Other', + 'fonteinf' => 'Documentation > + Tutorial', + 'skb' => 'Programming in TeX > + Other', + 'corridx-obsolete' => ' + Uncharacterized', + 'memdesign' => 'Documentation > + Other', + 'overrightarrow' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'txfontsb' => 'Fonts > Symbol + fonts', + 'ucharclasses' => 'Fonts > Font + tools', + 'verbatim' => 'Page-focused > + Verbatim', + 'ktv-texdata' => 'Document types > Exams, + exercise sets, and answers', + 'dosepsbin' => 'Graphics > + Tools', + 'biihead' => 'Page-focused > Headers and + footers', + 'datetime' => 'Programming in TeX > Date + and time', + 'inlinebib' => 'Page-focused > + Citations', + 'minipage-marginpar' => 'Page-focused > Material in + margins', + 'regcount' => 'Programming in TeX > + Other', + 'committee-font' => 'Fonts > Text body + fonts', + 'xgalley' => 'Programming in TeX > Box + manipulation', + 'ecltree' => 'Graphics > Inside + TeX', + 'apacite' => 'Document parts > + Bibliography > Bibliographic styles', + 'localloc' => 'Programming in TeX > + Other', + 'background' => 'Page-focused > + Background', + 'biblatex-chem' => 'Document parts > + Bibliography > Bibliographic styles', + 'utthesis' => 'Document types > Theses > + Thesis styles', + 'BiBLE' => 'Tools > Bibliography + managers', + 'tex-gyre' => ' + Uncharacterized', + 'Ultra-TeX' => 'Tools > Editors and + shells', + 'euler' => 'Fonts > Support + files', + 'setspace' => 'Page-focused > + Paragraphs', + 'xtab' => 'Page-focused > + Tables', + 'mathastext' => 'Fonts > Support + files', + 'rcs-multi' => 'Tools > Document + management', + 'web9pt' => 'Literate + programming', + 'proposal' => 'Document types > Other > + Misc', + 'soulpos' => ' + Uncharacterized', + 'amsltx11' => ' + Uncharacterized', + 'munich' => 'Document parts > + Bibliography > Bibliographic styles', + 'pgf' => 'Graphics > Inside + TeX', + 'verbatim-gen' => 'Page-focused > + Verbatim', + 'epstool' => 'Tools > Convert + formats', + 'hex' => 'Programming in TeX > + Other', + 'annotation' => 'Document parts > + Bibliography > Bibliographic styles', + 'vispeech' => 'Fonts > Symbol + fonts', + 'emtex' => ' + Uncharacterized', + 'shipunov' => ' + Uncharacterized', + 'timeline' => 'Graphics > Inside + TeX', + 'draftmark' => 'Page-focused > + Background', + 'phonetic' => 'Fonts > Symbol + fonts', + 'FiXme' => 'Page-focused > Material in + margins', + 'WinTeX XP' => 'Tools > Editors and + shells', + 'xfig' => 'Graphics > + Tools', + 'thumbpdf' => 'Graphics > + Tools', + 'softmaker-inverserif' => 'Fonts > Support + files', + 'texlogos' => 'Page-focused > + Other', + 'mpman-ru' => 'Documentation > + Other', + 'permute' => 'Subject-specific typesetting + > Mathematics > Other', + 'authblk' => 'Document parts > + Other', + 'bidstobibtex' => 'Tools > Bibliographic + manipulation', + 'lm' => 'Fonts', + 'everyhook' => 'Programming in TeX > + Other', + 'epsfig' => 'Graphics > Postscript or PDF + graphics', + 'oldprsn' => 'Fonts > Text body + fonts', + 'philokalia' => 'Fonts > Support + files', + 'fnpos' => 'Page-focused > + Footnotes', + 'latex-notes-zh-cn' => 'Documentation > + Tutorial', + 'lineno' => 'Page-focused > + Other', + 'clsguide' => ' + Documentation', + 'base' => 'Infrastructure > Current + systems', + 'pdfscreen' => 'Output > PDF, + PostScript', + 'around-the-bend' => 'Documentation > + Other', + 'cahyph' => 'Infrastructure > + Hyphenation', + 'RRGtrees' => 'Graphics > Inside + TeX', + 'metafp' => 'Documentation > + Tutorial', + 'tkz-berge' => 'Graphics > Inside + TeX', + 'endiagram' => 'Subject-specific typesetting + > Physics', + 'shortcuttool' => 'Tools > Editors and + shells', + 'texloganalyser' => 'Tools > + Other', + 'translation-enumitem-de' => 'Documentation > + Other', + 'plasTeX' => 'Output > + Other', + 'psgreek' => 'Fonts > Support + files', + 'resumemac' => 'Document types > Curriculum + Vita', + 'psnfss' => 'Fonts > Support + files', + 'eukleides' => 'Tools > Editors and + shells', + 'eppstein-trees' => 'Graphics > Inside + TeX', + 'auto1' => 'Fonts > Support + files', + 'newspaper' => 'Document types > Other > + Newspapers and newsletters', + 'fragments' => 'Programming in TeX > + Other', + 'tengtex' => ' + Uncharacterized', + 'lcd' => 'Fonts > Symbol + fonts', + 'degrade' => 'Graphics > + Other', + 'python' => 'Programming in TeX > + Other', + 'poltawski' => 'Fonts > Text body + fonts', + 'alterqcm' => 'Document types > Exams, + exercise sets, and answers', + 'tex-ps' => 'Output > PDF, + PostScript', + 'macqassign' => 'Document types > + Other', + 'ltoh' => 'Tools > + Other', + 'TeX T1' => ' + Uncharacterized', + 'venturisADF' => 'Fonts > Text body + fonts', + 'wallpaper' => 'Page-focused > + Other', + 'script-font' => 'Fonts > Symbol + fonts', + 'fundus-calligra' => 'Fonts > Support + files', + 'titles' => 'Document parts > + Bibliography > Others', + 'jkthesis' => 'Document types > Theses > + Thesis styles', + 'lexikon' => 'Document types > + Other', + 'automatica' => 'Document parts > + Bibliography > Bibliographic styles', + 'picmac' => 'Graphics > Inside + TeX', + 'libertine-type1' => 'Fonts > Support + files', + 'ifmslide' => 'Document types > + Presentations', + 'morse' => 'Fonts > Symbol + fonts', + 'capt-of' => 'Page-focused > + Captions', + 'ivd2dvi' => 'Output > + DVI', + 'SouthArabian' => 'Fonts > Text body + fonts', + 'splines' => 'Graphics > MetaFont or + Metapost', + 'mflogo209' => ' + Uncharacterized', + 'nccsect' => 'Document parts > Chapters + and Sections', + 'palatino-nfss' => ' + Uncharacterized', + 'sttools' => ' + Uncharacterized', + 'check-parens' => 'Tools > Editors and + shells', + 'arXivBib' => 'Tools > Bibliographic + manipulation', + 'cm-super' => 'Fonts', + 'opensans' => 'Fonts > Text body + fonts', + 'defstring' => 'Programming in TeX > + Other', + 'frenchponct' => ' + Uncharacterized', + 'frankenstein-unsupported' => ' + Uncharacterized', + 'yinit' => 'Fonts > Symbol + fonts', + 'leaflet' => 'Document types > Other > + Misc', + 'installfont' => 'Fonts > Font + tools', + 'chessmin' => 'Document types > Other > + Chess', + 'translation-pst-jtree-de' => 'Documentation > + Other', + 'cmarrows' => 'Graphics > MetaFont or + Metapost', + 'courier scaled' => 'Fonts > Text body + fonts', + 'pstotext' => 'Graphics > + Tools', + 'cwebbin' => 'Literate + programming', + 'he-le-na' => 'Non-English languages > + Other', + 'knittingpattern' => 'Document types > Other > + Misc', + 'williams' => ' + Uncharacterized', + 'flow' => 'Graphics > Inside + TeX', + 'lua-check-hyphen' => 'Infrastructure > + Hyphenation', + 'mathabx' => 'Fonts > Symbol + fonts', + 'cypriote' => 'Fonts > Text body + fonts', + 'softmaker-vagrounded' => 'Fonts > Support + files', + 'tcolorbox' => 'Page-focused > Boxes and + minipages', + 'IEEEannot' => 'Document parts > + Bibliography > Bibliographic styles', + 'tdclock' => 'Output > PDF, + PostScript', + 'achemso' => 'Subject-specific typesetting + > Other natural sciences', + 'context-chromato' => 'Subject-specific typesetting + > Other natural sciences', + 'mandel' => 'Graphics > Inside + TeX', + 'pos-at' => 'Page-focused > + Other', + 'titlepages' => 'Documentation > + Other', + 'ltxtools' => 'Programming in TeX > + Other', + 'lualatex-doc' => 'Documentation > + Tutorial', + 'tensor' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'toolbox' => 'Document parts > + Index', + 'literate' => 'Literate + programming', + 'color' => 'Page-focused > + Color', + 'LatexPaper' => 'Tools > Document + management', + 'cmtiup' => 'Fonts > Support + files', + 'shuffle' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'kix' => 'Document types > Other > + Envelopes', + 'numname' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'eurofont' => 'Fonts > Text body + fonts', + 'swrule' => 'Page-focused > + Other', + 'chet' => 'Document types > Articles + > Others', + 'cm-tfm' => 'Fonts > Support + files', + 'dvi2xx' => 'Output > + DVI', + 'trimspaces' => 'Programming in TeX > + Other', + 'hershey' => 'Fonts > Support + files', + 'abraces' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'diagrams' => ' + Uncharacterized', + 'icons' => 'Graphics > + Other', + 'IEEEtran' => 'Document types > Articles + > Journal styles', + 'hypcap' => 'Page-focused > + Captions', + 'stellenbosch' => 'Document types > Theses > + Thesis styles', + 'softmaker-stonehand' => 'Fonts > Support + files', + 'linguex' => 'Subject-specific typesetting + > Linguistics', + 'lastbib' => 'Page-focused > + Citations', + 'exerquiz' => 'Document types > Exams, + exercise sets, and answers', + 'tex-label' => 'Page-focused > Headers and + footers', + 'ebezier' => 'Graphics > Inside + TeX', + 'verbatimcopy' => 'Programming in TeX > + Other', + 'bibextract' => 'Tools > Bibliography + managers', + 'etoolbox' => 'Programming in TeX > + Other', + 'hologo' => ' + Uncharacterized', + 'wadalab' => 'Fonts > Text body + fonts', + 'pst-support' => 'Tools > Editors and + shells', + 'i-ching' => 'Document types > Other > + Other games', + 'svgcolor' => 'Page-focused > + Color', + 'robustindex' => 'Document parts > + Index', + 'noprot' => 'Programming in TeX > + Other', + 'tkz-graph' => 'Graphics > Inside + TeX', + 'fjodor' => 'Page-focused > Page + geometry', + 'os2tex' => ' + Distributions', + 'pictexwd' => 'Graphics > Inside + TeX', + 'texindex' => 'Document parts > + Index', + 'scalebar' => 'Graphics > Inside + TeX', + 'flexisym' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'berenisadf' => 'Fonts > Text body + fonts', + 'chngpage' => ' + Uncharacterized', + 'xlatex' => 'Tools > Editors and + shells', + 'multibib' => 'Document parts > + Bibliography', + 'IMTEKda' => 'Document types > Theses > + Thesis styles', + 'lamemo' => 'Document types > Other > + Memos', + 'currfile' => 'Programming in TeX > + Other', + 'nkarta' => 'Fonts > Symbol + fonts', + 'timetable' => 'Subject-specific typesetting + > Other', + 'lshort-french' => 'Documentation > + Tutorial', + 'pspicture' => ' + Uncharacterized', + 'htmlhelp' => 'Documentation > Help + files', + 'europs' => 'Fonts > Support + files', + 'util-half' => 'Fonts > Symbol + fonts', + 'ijqc' => 'Document parts > + Bibliography > Bibliographic styles', + 'luaindex' => 'Document parts > + Index', + 'unouter' => 'Programming in TeX > + Other', + 'media9' => 'Output > PDF, + PostScript', + 'bfsymb' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'toptesi' => 'Document types > Theses > + Others', + 'subfigure' => 'Page-focused > + Floats', + 'latexdraw' => 'Tools > Editors and + shells', + 'mf-ps' => 'Fonts > Font + tools', + 'lithuanian-babel' => 'Non-English languages > + Other', + 'newsletr' => 'Document types > Other > + Newspapers and newsletters', + 'equationauthor' => 'Tools > Editors and + shells', + 'Swimgraf' => 'Graphics > Inside + TeX', + 'gincltex' => 'Page-focused > + Verbatim', + 'abstr-collect' => ' + Uncharacterized', + 'cwebx' => 'Literate + programming', + 'pst-geo' => 'Graphics > Inside + TeX', + 'keyval2e' => 'Programming in TeX > + Programming structures', + 'blkarray' => 'Page-focused > + Tables', + 'elvish' => 'Fonts > Symbol + fonts', + 'ofs' => 'Fonts > Font + tools', + 'pl' => 'Literate + programming', + 'xcomment' => 'Page-focused > + Other', + 'translation-footmisc-de' => 'Documentation > + Other', + 'latex-essential' => 'Documentation > + Tutorial', + 'catoptions' => 'Programming in TeX > + Other', + 'songbook' => 'Document types > Other > + Music', + 'blanks' => 'Documentation > + Other', + 'hitec' => 'Document types > Other > + Misc', + 'pst-plot' => 'Graphics > + Other', + 'alleqno' => 'Subject-specific typesetting + > Mathematics > Equations', + 'LaTeX-Referenz' => 'Documentation > + Other', + 'dviwin' => 'Output > + DVI', + 'fmp' => 'Graphics > MetaFont or + Metapost', + 'movie15' => 'Graphics', + 'pcarl' => 'Fonts > Support + files', + 'dvimerge' => 'Output > + DVI', + 'undolabl' => 'Programming in TeX > Cross + references', + 'ifacmtg' => 'Document types > Proceedings + > Proceedings styles', + 'dpfloat' => 'Page-focused > + Floats', + 'topsection' => 'Document parts > Chapters + and Sections', + 'mil' => 'Documentation > + Other', + 'tracking' => 'Programming in TeX > Box + manipulation', + 'window' => 'Page-focused > + Paragraphs', + 'blowup' => 'Other', + 'modguide' => 'Documentation > + Other', + 'klinz' => 'Fonts > Symbol + fonts', + 'mathptm' => ' + Uncharacterized', + 'svninfo' => 'Tools > Document + management', + 'setstrut' => 'Programming in TeX > Box + manipulation', + 'cyrmemo' => 'Documentation > + Other', + 'firefox_ctan_plugins' => 'Tools > Editors and + shells', + 'mewltx' => 'Tools > Editors and + shells', + 'keycommand' => 'Programming in TeX > + Programming structures', + 'Epigrafica' => 'Fonts > Text body + fonts', + 'pst-cox' => 'Graphics > Inside + TeX', + 'scmac' => 'Document types > Other > + Scripts', + 'endfloat' => 'Page-focused > + Floats', + 'BibTeX-help' => 'Documentation > Help + files', + 'mapcodes' => ' + Uncharacterized', + 'getfiledate' => 'Programming in TeX > + Other', + 'present' => 'Document types > + Presentations', + 'fundus-cyr' => 'Non-English languages > + Other', + 'vfware' => 'Fonts > Support + files', + 'qstest' => 'Tools > Document + management', + 'these' => 'Document parts > + Bibliography > Bibliographic styles', + 'labbook' => 'Document types > Other > + Misc', + 'sentences' => 'Page-focused > + Lists', + 'scyrillic' => 'Fonts > Text body + fonts', + 'tikzposter' => 'Document types > Other > + Posters', + 'context-top-ten' => 'Documentation > + Tutorial', + 'classico' => 'Fonts > Text body + fonts', + 'cbe' => 'Document types > Articles + > Journal styles', + 'Array Maker' => 'Page-focused > + Tables', + 'pst-poly' => 'Graphics > Inside + TeX', + 'rmpage' => 'Page-focused > Page + geometry', + 'fileinfo' => 'Tools > + Other', + 'warpcol' => 'Page-focused > + Tables', + 'wp-conv' => 'Documentation > + Other', + 'fifinddo' => 'Programming in TeX > + Other', + 'miktex_update' => ' + Distributions', + 'lazylist' => 'Programming in TeX > + Programming structures', + 'aebXMP' => 'Output > PDF, + PostScript', + 'opteng' => 'Document types > Articles + > Journal styles', + 'uk-tex-faq' => ' + Documentation', + 'e-TeX' => 'Infrastructure > Current + systems', + 'TeXline' => 'Documentation > + Other', + 'varsects' => 'Document parts > Chapters + and Sections', + 'vfcomb' => ' + Uncharacterized', + 'version' => 'Programming in TeX > Package + management', + 'tabularcalc' => 'Subject-specific typesetting + > Mathematics > Other', + 'fillform' => 'Document types > Other > + Misc', + 'tabularkv' => 'Page-focused > + Tables', + 'pst-gr3d' => 'Graphics > Inside + TeX', + 'fge' => 'Fonts > Symbol + fonts', + 'suftesi' => 'Document types > Theses > + Thesis styles', + 'xii' => ' + Uncharacterized', + 'ucdavisthesis' => 'Document types > Theses > + Thesis styles', + 'tex-font-errors-cheatsheet' => 'Documentation > Help + files', + 'typedref' => 'Page-focused > + Citations', + 'tex-references' => 'Documentation > Help + files', + 'fig4latex' => 'Graphics > + Tools', + 'moreverb' => 'Page-focused > + Verbatim', + 'russian' => 'Non-English languages > + Russian', + 'nicefrac' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'asymptote-faq-zh-cn' => 'Documentation > + Other', + 'sehyph' => 'Infrastructure > + Hyphenation', + 'typespec' => 'Documentation > + Other', + 'substances' => 'Subject-specific typesetting + > Other natural sciences', + 'jpsj' => 'Document types > Articles + > Journal styles', + 'cprotect' => 'Programming in TeX > + Other', + 'ppower4' => 'Document types > + Presentations', + 'rcsinfo' => 'Tools > Document + management', + 'sugconf' => 'Document types > Proceedings + > Proceedings styles', + 'Excel-to-LaTeX' => 'Page-focused > + Tables', + 'topfloat' => 'Page-focused > + Floats', + 'upgreek' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'chgbar' => 'Page-focused > + Other', + 'borceux' => 'Subject-specific typesetting + > Mathematics > Commutative diagrams', + '12many' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'clock' => 'Graphics > Inside + TeX', + 'randbild' => 'Page-focused > Material in + margins', + 'bibmods' => 'Document parts > + Bibliography', + 'dehyph-exptl' => 'Infrastructure > + Hyphenation', + 'syntonly' => 'Tools > Document + management', + 'xbibfile' => 'Tools > Bibliography + managers', + 'beginlatex' => 'Documentation > + Tutorial', + 'bullcntr' => 'Page-focused > + Lists', + 'chemscheme' => 'Subject-specific typesetting + > Other natural sciences', + 'mathpple' => ' + Uncharacterized', + 'xfrac' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'engtlc' => 'Subject-specific typesetting + > Other natural sciences', + 'multicolpar' => 'Page-focused > Multiple + columns', + 'list' => 'Page-focused > + Verbatim', + 'mff' => 'Fonts > Font + tools', + 'articleingud' => 'Document types > Articles + > Journal styles', + 'extsizes' => 'Fonts > Support + files', + 'prodint' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'hypernat' => 'Document parts > + Bibliography > Bibliographic styles', + 'functan' => 'Subject-specific typesetting + > Mathematics', + 'rawfonts' => 'Fonts > Support + files', + 'ordinalpt' => 'Programming in TeX > + Other', + 'fundus-outline' => 'Fonts > Support + files', + 'fancypar' => 'Page-focused > + Paragraphs', + 'ltx3pub' => 'Documentation > + Other', + 'stage' => 'Document types > Other > + Scripts', + 'tikz-inet' => 'Graphics > Inside + TeX', + 'section' => 'Document parts > Chapters + and Sections', + 'Vancouver' => 'Document parts > + Bibliography > Bibliographic styles', + 'cmcyr-patch' => 'Fonts > Text body + fonts', + 'tabto for LaTeX.' => 'Page-focused > + Paragraphs', + 'swiftex' => 'Tools > Editors and + shells', + 'concmath-fonts' => 'Fonts > Text body + fonts', + 'revnum' => 'Page-focused > + Lists', + 'settosize' => 'Programming in TeX > Box + manipulation', + 'verbatim-tub' => 'Page-focused > + Verbatim', + 'boisik' => 'Fonts > Text body + fonts', + 'business-research' => 'Document types > Articles + > Journal styles', + 'KTeXShell' => 'Tools > Editors and + shells', + 'cprog' => 'Page-focused > + Verbatim', + 'headerfooter' => ' + Uncharacterized', + 'facture' => 'Document types > Other > + Misc', + 'side' => 'Page-focused > + Floats', + 'iching' => 'Document types > Other > + Other games', + 'javaDVI' => 'Output > + DVI', + 'fileerr' => 'Programming in TeX > + Other', + 'fenixpar' => 'Programming in TeX > + Other', + 'ean' => 'Fonts > Support + files', + 'ucthesis' => 'Document types > Theses > + Thesis styles', + 'lshort-thai' => 'Documentation > + Tutorial', + 'texware' => 'Fonts > Font + tools', + 'isodate' => 'Programming in TeX > Date + and time', + 'logbox' => 'Programming in TeX > + Programming structures', + 'bdfchess' => 'Document types > Other > + Chess', + 'eolgrab' => 'Programming in TeX > + Other', + 'GFS Didot' => 'Fonts > Text body + fonts', + 'euroitc' => 'Fonts > Support + files', + 'rtsched' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'doublestroke' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'ukdate' => 'Programming in TeX > Date + and time', + 'he-she' => 'Programming in TeX > + Other', + 'mhchem' => 'Subject-specific typesetting + > Other natural sciences', + 'tmview' => 'Output > + DVI', + 'tktexcad' => 'Graphics > + Tools', + 'balance' => 'Page-focused > Multiple + columns', + 'euxunicode' => 'Fonts > + Other', + 'disser' => 'Document types > Theses > + Thesis styles', + 'alg' => 'Subject-specific typesetting + > Computer science', + 'gchords' => 'Document types > Other > + Music', + 'verbinp' => ' + Uncharacterized', + 'bibleref-french' => 'Subject-specific typesetting + > Other', + 'ednotes' => 'Subject-specific typesetting + > Other subjects in the humanitites', + 'songs' => 'Document types > Other > + Music', + 'gsftopk' => ' + Uncharacterized', + 'bardiag' => 'Graphics > Inside + TeX', + 'mfware' => 'Graphics > MetaFont or + Metapost', + 'labels' => 'Document types > Other > + Envelopes', + 'elteikthesis' => 'Document types > Theses > + Thesis styles', + 'poster' => 'Graphics > + Tools', + 'xcmr' => 'Fonts > Symbol + fonts', + 'dvi-economic' => ' + Uncharacterized', + 'jtbnew' => 'Document parts > + Bibliography > Bibliographic styles', + 'gillcm' => 'Fonts > Text body + fonts', + 'fmtcount' => 'Programming in TeX > + Other', + 'fchart' => 'Graphics > Inside + TeX', + 'cyrguide' => 'Documentation > + Other', + 'computational-complexity' => 'Document types > Articles + > Journal styles', + 'free-math-font-survey-vn' => 'Documentation > + Other', + 'everysel' => 'Fonts > + Other', + 'arbeit' => 'Document types > Exams, + exercise sets, and answers', + 'mathscinet' => 'Tools > Bibliographic + manipulation', + 'invertedparagraphs' => 'Page-focused > + Paragraphs', + 'wsuipa' => 'Fonts > Symbol + fonts', + 'GraphBase' => 'Literate + programming', + 'picinpar' => 'Page-focused > + Paragraphs', + 'petiteannonce' => 'Document types > Other > + Misc', + 'fourier' => 'Fonts', + 'URW-base35' => 'Fonts > Text body + fonts', + 'pst-uml' => 'Subject-specific typesetting + > Computer science', + 'kdgdocs' => 'Document types > Theses > + Thesis styles', + 'phaistos' => 'Fonts > Symbol + fonts', + 'sepfootnotes' => 'Page-focused > + Footnotes', + 'LuxiMono' => 'Fonts > Symbol + fonts', + 'engord' => 'Programming in TeX > + Other', + 'mhequ' => 'Subject-specific typesetting + > Mathematics > Equations', + 'semantic' => 'Subject-specific typesetting + > Computer science', + 'theorem' => ' + Uncharacterized', + 'artex' => 'Tools > Document + management', + 'yagusylo' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'copyrightbox' => 'Page-focused > + Captions', + 'gmverb' => 'Page-focused > + Verbatim', + 'makeglossariesgui' => 'Tools > Editors and + shells', + 'moonphase' => 'Fonts > Symbol + fonts', + 'protocol' => 'Document types > Other > + Minutes', + 'VTeX/Free' => ' + Distributions', + 'sides' => 'Document types > Other > + Scripts', + 'psfragger' => 'Graphics > + Tools', + 'finstrut' => 'Page-focused > + Footnotes', + 'context-account' => 'Programming in TeX > + Other', + 'streetex' => 'Subject-specific typesetting + > Other natural sciences', + 'gplot' => ' + Uncharacterized', + 'compsci' => 'Documentation > + Other', + 'cyrillic' => 'Fonts > Support + files', + 'xindy-persian' => 'Document parts > + Index', + 'abc' => 'Subject-specific typesetting + > Music', + 'fontsampler' => 'Documentation > + Other', + 'amiri' => 'Fonts > Text body + fonts', + 'csvsimple' => 'Programming in TeX > + Other', + 'sc21-wg1' => 'Document types > Other > + Misc', + 'volumes' => 'Document parts > + Other', + 'sudokubundle' => 'Document types > Other > + Other games', + 'blockdraw_mp' => 'Graphics > MetaFont or + Metapost', + 'supertabular' => 'Page-focused > + Tables', + 'foilhtml' => 'Document types > Overhead + slides', + 'acmproc' => 'Document types > Proceedings + > Proceedings styles', + 'btOOL' => 'Tools > Bibliographic + manipulation', + 'txfonts' => 'Fonts > Symbol + fonts', + 'miktex' => ' + Distributions', + 'bakoma' => 'Infrastructure > Current + systems', + 'url' => 'Page-focused > + Verbatim', + 'sshdbk10' => 'Document parts > Chapters + and Sections', + 'Knuth-errata' => 'Documentation > + Other', + 'ital' => ' + Uncharacterized', + 'microtype-de' => ' + Uncharacterized', + 'cmll' => 'Fonts > Symbol + fonts', + 'poetrytex' => 'Page-focused > + Poetry', + 'pst-light3d' => 'Graphics > Inside + TeX', + 'collectbox' => 'Programming in TeX > + Other', + 'statex2' => 'Subject-specific typesetting + > Mathematics > Other', + 'boxhandler' => 'Page-focused > + Captions', + 'threed' => 'Graphics > MetaFont or + Metapost', + 'estcpmm' => 'Document types > + Other', + 'lfb' => 'Fonts > Text body + fonts', + 'fcltxdoc' => ' + Uncharacterized', + 'xesearch' => 'Programming in TeX > + Programming structures', + 'hieroglyph' => 'Fonts > Symbol + fonts', + 'drop' => ' + Uncharacterized', + 'lettermac' => 'Document types > + Letters', + 'izhitsa' => 'Fonts > Text body + fonts', + 'tth' => 'Output > + HTML', + 'tex-gyre-bonum' => 'Fonts > Text body + fonts', + 'fpTeX' => 'Infrastructure > Current + systems', + 'rmthm' => 'Subject-specific typesetting + > Mathematics > Theorems', + 'histogr' => 'Graphics > Inside + TeX', + 'LatexRender' => 'Tools > + Other', + 'othello' => 'Document types > Other > + Other games', + 'codedoc' => 'Page-focused > + Verbatim', + 'times' => ' + Uncharacterized', + 'slantsc' => 'Fonts > Support + files', + 'xnewcommand' => 'Programming in TeX > + Other', + 'amslatexdoc-vietnamese' => 'Documentation > + Other', + 'soul' => 'Infrastructure > + Hyphenation', + 'afthesis' => 'Document types > Theses > + Thesis styles', + 'eco' => 'Fonts > Symbol + fonts', + 'dashundergaps' => 'Page-focused > + Other', + 'keystroke' => 'Graphics > + Other', + 'fancychapters' => 'Document parts > Chapters + and Sections', + 'okuda' => ' + Uncharacterized', + 'circuitikz' => 'Subject-specific typesetting + > Physics', + 'marnote' => 'Page-focused > Material in + margins', + 'answers' => 'Document types > Exams, + exercise sets, and answers', + 'dvitype' => 'Documentation > + Other', + 'hepthesis' => 'Subject-specific typesetting + > Physics', + 'bitfield' => ' + Uncharacterized', + 'showlabels' => 'Page-focused > + Citations', + 'chscite' => 'Document parts > + Bibliography > Bibliographic styles', + 'pzccal' => 'Subject-specific typesetting + > Mathematics > Mathematical symbols', + 'makecell' => 'Page-focused > + Tables', + 'titleps' => 'Page-focused > Headers and + footers', + 'keyval' => 'Programming in TeX > + Programming structures', + 'csvtolatex' => ' + Uncharacterized', + 'osmanian' => 'Fonts > Text body + fonts', + 'amscls' => 'Subject-specific typesetting + > Mathematics', + 'fancytabs' => 'Page-focused > Material in + margins', + 'ftn' => 'Page-focused > + Footnotes', + 'tabulary' => 'Page-focused > + Tables', + 'picture' => 'Programming in TeX > + Other', + 'lgrx' => 'Non-English languages > + Greek', + 'softmaker-veracruz' => 'Fonts > Support + files', + 'accfonts' => 'Fonts > Font + tools', + 'biblatex-nejm' => 'Document parts > + Bibliography > Bibliographic styles', + 'enumitem' => 'Page-focused > + Lists', + 'loval' => 'Page-focused > Boxes and + minipages', + 'texlist' => 'Subject-specific typesetting + > Computer science' + } + }, + 'by-taxonomy' => { + 'keyword' => { + 'book style' => [ + 'context', + 'nostarch', + 'mentis', + 'smflatex', + 'amsbook', + 'jsclasses', + 'koma-script', + 'dlfltxb', + 'NCC-LaTeX', + 'tufte-latex', + 'octavo', + 'sober', + 'scrjrnl', + 'plates', + 'xmlplay', + 'add-wes', + 'basque-book', + 'eledmac', + 'bookest', + 'Birkhaeuser', + 'script', + 'amscls' + ], + 'article style' => [ + 'aiaa', + 'active-conf', + 'amsppt', + 'context', + 'acs', + 'ejpecp', + 'jhep', + 'mnras-plain', + 'acm', + 'mslapa', + 'mpdinbrief', + 'vertex', + 'systcontrolletters', + 'imsproc', + 'ntgclass', + 'amsart', + 'philosophersimprint', + 'tugboat-plain', + 'texemplar', + 'elbioimp', + 'mitpress', + 'physe', + 'siam', + 'prepr', + 'ptptex', + 'smflatex', + 'classes', + 'acmconf', + 'jsclasses', + 'lps', + 'koma-script', + 'ijmart', + 'jamtimes', + 'NCC-LaTeX', + 'tufte-latex', + 'exam209', + 'famt', + 'ijc', + 'apa6e', + 'Sikumuna', + 'aastex', + 'dtk', + 'osa', + 'gaceta', + 'amsaddr', + 'serbian-book', + 'sober', + 'procIAGssymp', + 'mla-paper', + 'pracjourn', + 'sffms', + 'acmtrans', + 'elsarticle', + 'paper', + 'fac', + 'revtex4-1', + 'sae', + 'mnras', + 'jmlr', + 'sfarticle', + 'nrc', + 'MEP article', + 'cmpj', + 'aomart', + 'AkkTeX', + 'sageep', + 'resphilosophica', + 'chet', + 'IEEEtran', + 'designcon', + 'musuos', + 'script', + 'cbe', + 'opteng', + 'springer', + 'tugboat', + 'cell', + 'articleingud', + 'business-research', + 'viiptart', + 'computational-complexity', + 'amscls', + 'scientificpaper' + ], + 'appendix' => [ + 'appendix', + 'appendixnumberbeamer', + 'thrmappendix' + ], + 'foils, overhead slides' => [ + 'foiltex', + 'eslides', + 'VSliTeX', + 'truecols', + 'uwmslide', + 'foilhtml' + ], + 'font selection' => [ + 'scalefnt', + 'txgreeks', + 'lucold', + 'ot2cyr', + 'hvmath', + 'manfnt', + 'Punk-LaTeX', + 'otfinst', + 'psnfssx-adobe', + 'imprintmtshadow', + 'sfmath', + 'ec-plain', + 'fundus-la', + 'ibm', + 'cmslup', + 'mathrsfs', + 'mt11p', + 'tipa', + 'mfnfss', + 'thaifonts-arundina', + 'cmfrak', + 'amstext', + 'bold-extra', + 'dogma', + 'lsabon', + 'gentium', + 'futurans', + 'cspsfonts', + 'fontchart', + 'fix-cm', + 'type1ec', + 'bgreek', + 'cmextra-latex', + 'greektex-fd', + 'levy-latex', + 'poetica', + 'anyfontsize', + 'fontch', + 'fontname', + 'fundus', + 'yhmath', + 'lettergothic', + 'bickham', + 'lh', + 'rsfso', + 'eiad-ltx', + 'ljmetrics', + 'dutchcal', + 'yfonts', + 'nbaskerv', + 'fonttable', + 'concrete-macros', + 'epiolmec', + 'vfinst', + 'thsmc', + 'textcomp', + 'urw-arial', + 'duerer-LaTeX', + 'mathtime-metrics', + 'fundus-twcal', + 'japanese-otf-uptex', + 'fontspec', + 'moresize', + 'dvicopy', + 'pxgreeks', + 'leawood', + 'psnfss-source', + 'Winfonts', + 'mathbbol', + 'kpfonts', + 'ocr-latex', + 'mathstone', + 'lucida', + 'psnfssx', + 'fundus-startrek', + 'ptsans', + 'staves', + 'fontinst', + 'psnfssx-em', + 'relenc', + 'URW-Grotesq', + 'frcursive', + 'typeface', + 'urw-garamond', + 'ipa', + 'oldstyle', + 'lgreek', + 'font_selection', + 'substitutefont', + 'pandora-latex', + 'mxd', + 'cfr-lm', + 'minionpro', + 'eskd', + 'ibygrk', + 'nfssext-cfr', + 'FourierNC', + 'mtgreek', + 'JustFontItTE', + 'fontwrap', + 'bbm-macros', + 'libertine-legacy', + 'genfam', + 'altfont', + 'relsize', + 'psfont', + 'plain-cm', + 'fontenc', + 'libertine', + 'varisize', + 'webomints', + 'sans', + 'libris', + 'luaotfload', + 'pclnfss', + 'tpslifonts', + 'mathtime-pln', + 'mathematica', + 'wiki', + 'plnfss', + 'mdwfonts', + 'mathptmx', + 'uhc', + 'exscale', + 'jfontmaps', + 'freetype', + 'psfonts', + 'urw-antiqua', + 'qdtexvpl', + 'psfonts-tools', + 'helvet', + 'minion2newtx', + 'zhmetrics', + 'font-change', + 'context-URWGaramond', + 'japanese-otf', + 'cmtt', + 'hacm', + 'biolinum-type1', + 'mathalfa', + 'testfont', + 'mdputu', + 'fontaxes', + 'urwvf', + 'concmath', + 'eurosans', + 'truetypemetrics', + 'sansmath', + 'sauterfonts', + 'ucharclasses', + 'euler', + 'mathastext', + 'fontsmpl', + 'wasysym', + 'mathtime-ltx', + 'wnri-latex', + 'philokalia', + 'psgreek', + 'tmmath', + 'fundus-calligra', + 'libertine-type1', + 'opensans', + 'yinit', + 'libertineotf', + 'sauter', + 'mathabx', + 'cmtiup', + 'enpassant', + 'europs', + 'newtx', + 'context-simplefonts', + 'context-URWGothic', + 'ofs', + 'tpcmfont', + 'adobecaslon', + 'pcarl', + 'lato', + 'vfware', + 'verdana', + 'smallcap', + 'fonetika', + 'extsizes', + 'rawfonts', + 'fundus-outline', + 'chessfss', + 'psnfssx-luc', + 'ean', + 'euroitc', + 'everysel', + 'context-typescripts', + 'w-a-schmidt', + 'emerald', + 'ssqquote', + 'txfonts', + 'glonti', + 'izhitsa', + 'slantsc', + 'mathgifg' + ], + 'scientific units' => [ + 'Hepunits', + 'siunitx', + 'units', + 'siunits', + 'si', + 'formula', + 'SIstyle', + 'lhelp', + 'unitsdef' + ], + 'spacing, horizontal or vertical' => [ + 'bigstrut', + 'nccstretch', + 'tabto-generic', + 'thinsp', + 'monofill', + 'LigaTeX', + 'nicetext', + 'rmligs', + 'cm-mf-opt-kern', + 'pictex-autoarea', + 'bbfig', + 'eqparbox', + 'tabularht', + 'xhfill', + 'nofill', + 'nccparskip', + 'microtype', + 'ncccropbox', + 'metalogo', + 'tracking', + 'tabto for LaTeX.', + 'letterspacing', + 'truncate', + 'ellipsis' + ], + 'tables' => [ + 'tablor', + 'threeparttable', + 'bigstrut', + 'longtable', + 'tabls', + 'odsfile', + 'tap', + 'dectab', + 'hvdashln', + 'timetab', + 'young', + 'dateiliste', + 'bigtabular', + 'topcapt', + 'boldline', + 'dcolumn', + 'youngtab', + 'slashbox', + 'bigtable', + 'LaTable', + 'threeparttablex', + 'monofill', + 'ltablex', + 'smalltableof', + 'hhline', + 'ltabptch', + 'variations', + 'sltables', + 'listliketab', + 'ftcap', + 'tkz-tab', + 'xl2latex', + 'tabvar', + 'stabular', + 'polytable', + 'ltxtable', + 'maketable', + 'tabularx', + 'karnaugh', + 'figcaps', + 'spreadtab', + 'cellwise', + 'tabularht', + 'tableauVariations', + 'gentabtex', + 'treedef', + 'easytable', + 'cellspace', + 'tabularborder', + 'booktabs', + 'numprint', + 'colortbl', + 'csv2latex', + 'tab4tex', + 'mdwtab', + 'collcell', + 'tabsatz', + 'ot-tableau', + 'ltcaption', + 'tablefootnote', + 'pgfplots', + 'cellular', + 'stables', + 'btable', + 'cals', + 'ctable', + 'autotab', + 'xtab', + 'savefnmark', + 'tabu', + 'timetable', + 'blkarray', + 'booktabs-fr', + 'warpcol', + 'tabularcalc', + 'tabularkv', + 'Excel-to-LaTeX', + 'tabularew', + 'widetable', + 'multirow', + 'supertabular', + 'ruled-tables', + 'boxhandler', + 'sgame', + 'diagbox', + 'tableaux', + 'makecell', + 'tabulary', + 'booktabs-de' + ], + 'caption' => [ + 'mcaption', + 'longtable', + 'subcaption', + 'fltpage', + 'caption', + 'topcapt', + 'koma-script', + 'ccaption', + 'sidecap', + 'bicaption', + 'hangcaption', + 'hvfloat', + 'ftcap', + 'caption2', + 'multicap', + 'figcaps', + 'zaccone', + 'captcont', + 'ltcaption', + 'captdef', + 'capt-of', + 'hypcap', + 'copyrightbox', + 'boxhandler' + ], + 'graphics created inside TeX (pictures, PSTricks, PGF, etc.)' => [ + 'xytree', + 'trans', + 'tkz-euclide', + 'pst-spectra', + 'pgf-soroban', + 'curves', + 'pgf-blur', + 'moderntimeline', + 'pointruler', + 'pst-eucl', + 'tikz-timing', + 'ruler', + 'psbao', + 'pgfmolbio', + 'pst-sigsys', + 'bohr', + 'vowel', + 'gnuplottex', + 'circ', + 'chemfig', + 'bar', + 'pst-pdf', + 'pst-solarsystem', + 'pst-coil', + 'grafcet', + 'graphicx', + 'sketch', + 'pstricks-add', + 'pst-pulley', + 'bchart', + 'makeplot', + 'treetex-plain', + 'drawstack', + 'tkz-fct', + 'xtexcad', + 'vocaltract', + 'xymtex', + 'diagxy', + 'pst-knot', + 'plantslabels', + 'chronology', + 'pstricks-examples', + 'register', + 'pstrees', + 'texcad32', + 'graphfig', + 'graphics-pln', + 'setdeck', + 'pst-text', + 'shadowtext', + 'pst-platon', + 'dratex', + 'tikz-qtree', + 'venndiagram', + 'dirtree', + 'qobitree', + 'numericplots', + 'galois', + 'tikz-3dplot', + 'pst-vowel', + 'schemabloc', + 'GasTeX', + 'piechart', + 'feynman', + 'syntax2', + 'pst-abspos', + 'tkz-base', + 'productbox', + 'lingtrees', + 'baum', + 'tkz-orm', + 'graphicp', + 'statrep', + 'jflap2tikz', + 'PicTeXsum', + 'xyling', + 'context-construction-plan', + 't-angles', + 'GraphicxSP', + 'bclogo', + 'eepic', + 'pst-barcode', + 'lewis', + 'barkom', + 'pst-mirror', + 'diagmac', + 'emp', + 'pst-lens', + 'pst-asr', + 'UML', + 'smartdiagram', + 'bakoma-games', + 'gapfill', + 'pst-graphicx', + 'texdraw', + 'tkz-kiviat', + 'pst-infixplot', + 'pst-dbicons', + 'pictex-autoarea', + 'qtree', + 'tikzpfeile', + 'pst-circ', + 'LaTeXPiX', + 'pictex2', + 'reotex', + 'tkz-tab', + 'pst-grad', + 'curve2e', + 'msc', + 'wotree', + 'xetex-pstricks', + 'pst-fr3d', + 'latexcad', + 'lapdf', + 'pst-3d', + 'diagmac2', + 'tikzpagenodes', + 'auto-pst-pdf', + 'expressg', + 'pict2e', + 'lpic', + 'context-gantt', + 'pst-pdgr', + 'pst-fun', + 'pst-am', + 'pst-xkey', + 'standalone', + 'epic', + 'lsc', + 'pst-electricfield', + 'synttree', + 'pstricks', + 'pst-eps', + 'egameps', + 'bodegraph', + 'vdm', + 'gl-tree', + 'pst2pdf', + 'pst-soroban', + 'pmboxdraw', + 'pst-osci', + 'pst-optic', + 'pst-qtree', + 'vaucanson-g', + 'pst-fractal', + 'synproof', + 'treesvr', + 'dyntree', + 'tikz-dependency', + 'cpssp', + 'pst-bezier', + 'pst-2dplot', + 'makebarcode', + 'modiagram', + 'plates', + 'ConTeXt-gnuplot', + 'sfg', + 'pst-Jtree', + 'chomsky', + 'm-pictex', + 'logsys', + 'xypic', + 'duotenzor', + 'sseq', + 'coordsys', + 'texpictex', + 'upca', + 'tsemlines', + 'TpX', + 'datatool', + 'labelfig', + 'bloques', + 'graphpap', + 'pst-3dplot', + 'pst-tvz', + 'randomwalk', + 'pst-node', + 'pst-tree', + 'braids', + 'tikz-cd', + 'mathspic', + 'pst-gantt', + 'pmgraph', + 'pst-fill', + 'pst-blur', + 'lated', + 'RST', + 'pst-math', + 'chronosys', + 'dottex', + 'pst-layout', + 'PicTeX', + 'autopict', + 'pst-func', + 'doc-pictex', + 'pst-bspline', + 'pgfplots', + 'pst-labo', + 'pst-stru', + 'JPicEdt', + 'multibox', + 'pst-ode', + 'pedigree-perl', + 'pst-thick', + 'tkz-linknodes', + 'proofs', + 'sparklines', + 'docmute', + 'prerex', + 'pst-optexp', + 'ecltree', + 'pst-vue3d', + 'pgf', + 'timeline', + 'xfig', + 'RRGtrees', + 'tkz-berge', + 'eppstein-trees', + 'hobby', + 'picmac', + 'pst-diffraction', + 'pst-ob3d', + 'sdrt', + 'flow', + 'mandel', + 'pst-rubans', + 'pst-solides3d', + 'logpap', + 'linguex', + 'ebezier', + 'tkz-graph', + 'pictexwd', + 'scalebar', + 'bez123', + 'eltex', + 'syngen', + 'metalogo', + 'util-half', + 'latexdraw', + 'Swimgraf', + 'pst-magneticfield', + 'pst-geo', + 'pst-plot', + 'pst-bar', + 'pst-cox', + 'bondgraph', + 'steinmetz', + 'tqft', + 'pst-poly', + 'pst-gr3d', + 'dot2texi', + 'progressbar', + 'pst-pad', + 'randbild', + 'clock', + 'pst-slpe', + 'pgf-umlsd', + 'tikz-inet', + 'Petri-nets', + 'rtsched', + 'tktexcad', + 'graphics', + 'bardiag', + 'pdftricks', + 'fchart', + 'pst-uml', + 'fastpictex', + 'pst-light3d', + 'histogr', + 'piano', + 'circuitikz', + 'tableaux', + 'xetex-def' + ], + 'output viewer' => [ + 'dvgtk', + 'dvgt', + 'dvi2tty', + 'gv', + 'scientificviewer', + 'xpdf', + 'xdvi', + 'hp2xx', + 'gv-savepos', + 'dviout', + 'xpdfopen', + 'prv', + 'dvi2ln3', + 'meper', + 'tfmpk', + 'gsview', + 'vpp', + 'autoview', + 'screen', + 'ps_view', + 'epsfview', + 'tkdvi', + 'windvi', + 'dvi2xx', + 'dviwin', + 'javaDVI', + 'tmview', + 'texshop' + ], + 'quotation, poetry' => [ + 'balancedquotes', + 'altverse', + 'dirtytalk', + 'quotation', + 'verse', + 'blkcntrl', + 'epigraph', + 'csquotes', + 'attrib', + 'gmverse', + 'wiki', + 'nestquot', + 'quoting', + 'ssqquote', + 'poetrytex', + 'poemscol', + 'fancychapters', + 'csquotes-de' + ], + 'footnotes, end notes' => [ + 'endnote', + 'fixltx2e', + 'threeparttable', + 'ftnxtra', + 'fnpara', + 'mbenotes', + 'pfnote', + 'footnoterange', + 'endnotes', + 'footbib', + 'bigfoot', + 'pagenote', + 'koma-script', + 'threeparttablex', + 'blkcntrl', + 'footmisc', + 'nnfootnote', + 'eledform', + 'titlesec', + 'fnpct', + 'ftnright', + 'edmargin', + 'gcite', + 'ledarab', + 'footnotebackref', + 'fn2end', + 'manyfoot', + 'enotez', + 'footnpag', + 'fnlineno', + 'superiors', + 'fixfoot', + 'fnpara-pln', + 'notes2bib', + 'edmac', + 'tablefootnote', + 'dblfnote', + 'yafoot', + 'fnpos', + 'parnotes', + 'fnbreak', + 'pagefoots', + 'edfnotes', + 'savefnmark', + 'nccfoots', + 'footnote', + 'titlefoot', + 'fnote', + 'ednotes', + 'sepfootnotes', + 'finstrut', + 'ftn' + ], + 'letters, envelopes, labels' => [ + 'address', + 'bellmac', + 'envbig', + 'C.D.P. Bundle', + 'context-letter', + 'labelmac3', + 'koma-script-sfs', + 'newlfm', + 'dinbrief-gui', + 'envlab', + 'shsulet', + 'postcards', + 'koma-script', + 'serial', + 'make-env', + 'chletter', + 'lxmail', + 'frletter', + 'isodoc', + 'hletter', + 'envelope', + 'letter', + 'chextras', + 'beletter', + 'knuth-letter', + 'textmerg', + 'laletter', + 'cjw', + 'label-pln', + 'lettre', + 'block', + 'akletter', + 'formlett', + 'zip', + 'labelmag', + 'fribrief', + 'dinbrief', + 'flabels', + 'gtex-letter', + 'mailing', + 'letter1', + 'adrlist', + 'letter-plain', + 'fullblck', + 'kix', + 'KIXfont', + 'labels', + 'lettermac', + 'mailmerge', + 'g-brief', + 'merge' + ], + 'distributions, whole systems' => [ + 'mactex', + 'mactextras', + 'javatex', + 'Portable MikTeX', + 'cmactex', + 'mactex-additions', + 'ptex', + 'knuth-dist', + 'atari-cstex', + 'knuth-base', + 'Eqmlite/Free', + 'bakoma-mac', + 'texlive', + 'mactex-basic', + 'ptex-texmf', + 'TeX', + 'miktex-portable', + 'base', + 'protext', + 'os2tex', + 'directtex', + 'miktex_update', + 'VTeX/Free', + 'w32tex', + 'miktex', + 'bakoma', + 'fpTeX' + ], + 'page numbering' => [ + 'pagecont', + 'nonumonpart', + 'arabicfront', + 'pagereference', + 'lastpage', + 'evenpage', + 'romanneg', + 'pageno', + 'duplicat', + 'nopageno', + 'chappg', + 'pagerange', + 'emptypage', + 'pagesel', + 'tex-label', + 'totpages', + 'pageslts', + 'engord', + 'onepagem', + 'ifoddpage' + ], + 'watermark, draftmark' => [ + 'draftwatermark', + 'watermark', + 'fixmetodonotes', + 'drafthead', + 'prelim2e', + 'xwatermark', + 'draftcopy', + 'psboxit', + 'eso-pic', + 'background', + 'draftmark', + 'wallpaper', + 'prelim', + 'marnote' + ], + 'commutative diagrams' => [ + 'kuvio', + 'diagxy', + 'amsmath', + 'diagmac', + 'amscd', + 'arrow', + 'diagmac2', + 'xymatrix', + 'ams-cd', + 'xypic', + 'pb-diagram', + 'tikz-cd', + 'amstex', + 'DCpic', + 'amslatex-primer', + 'Array Maker', + 'borceux' + ], + 'chapters, sectioning' => [ + 'bsheaders', + 'texilikechaps', + 'stdclsdv', + 'nonumonpart', + 'alphanum', + 'automagic', + 'chapref', + 'seceqn', + 'koma-script', + 'anonchap', + 'gettitlestring', + 'epigram', + 'serbianpart', + 'nameref', + 'sectsty', + 'sectionbox', + 'titlesec', + 'thumby', + 'coseoul', + 'chapterbib', + 'hyperref', + 'secdot', + 'layouts', + 'quotchap', + 'alnumsec', + 'chappg', + 'bits', + 'wiki', + 'sfheaders', + 'fncychap', + 'outliner', + 'titleref', + 'chapterfolder', + 'nccsect', + 'tocvsec2', + 'topsection', + 'varsects', + 'section', + 'indentfirst', + 'foilhtml', + 'sshdbk10', + 'fancychapters', + 'fancytabs' + ], + 'MetaFont, Metapost' => [ + 'gray', + 'mfpic', + 'tablor', + 'universa', + 'chemarrow', + 'testeq', + 'orkhun', + 'mpcolornames', + 'mf2tex', + 'pgothic', + 'exteps', + 'twcal', + 'cmfrak', + 'MPStoEPS', + 'tapir', + 'rune', + 'metago', + 'karta', + 'logic', + 'closefrm', + 'cm-mf-extra', + 'mkpic', + 'vncmr', + 'gothic', + 'go', + 'recycle', + 'thai-usl', + 'pandora', + 'dancers', + 'modes', + 'mf2ps', + 'rotunda', + 'knitting', + 'cchess', + 't1-fraktur', + 'garrigues', + 'mfpic4ode', + 'cm-pk', + 'umrand', + 'trajan', + 'dingbat', + 'eurosym', + 'uncial', + 'mftinc', + '3DLDF', + 'halftone', + 'telugu', + 'metaobj', + 'fig2mf', + 'mf2pt1', + 'thai-rmit', + 'MetaPlot', + 'textpath', + 'VSliTeX', + 'metafont-beginners', + 'mflogo-font', + 'ocherokee', + 'knuth-lib', + 'mex', + 'suanpan', + 'ps2mf', + 'feynmf', + 'trsym', + 'hatching', + 'pigpen', + 'wntamil', + 'emp', + 'calligra', + 'dice', + 'byzfonts', + 'fig2mfpic', + 'hands', + 'semaphor', + 'inslrmin', + 'Finomaton', + 'yfrak', + 'yswab', + 'docmfp', + 'vicentino', + 'frcursive', + 'piechartmp', + 'redis', + 'oesch', + 'latex-fonts', + 'luamplib', + 'dviincl', + 'ocr-b', + 'drawing', + 'MakeCirc', + 'mxd', + 'yannisgr', + 'METATeX', + 'gen', + 'futhark', + 'simpsons', + 'ega2mf', + 'makefonts', + 'meper', + 'feyn', + 'skak', + 'ifsym', + 'hge', + 'mpgraphics', + 'txp', + 'bbold', + 'rsfs', + 'georgian-stanier', + 'drv', + 'diagramf', + 'pdf-mps-supp', + 'kdgreek', + 'genealogy', + 'tableauVariations', + 'skull', + 'timing', + 'knot', + 'ygoth', + 'tgothic', + 'goblin', + 'threeddice', + 'shade', + 'metauml', + 'syriac', + 'poorman', + 'futhorc', + 'mbboard', + 'slideshow', + 'gmp', + 'euro-ce', + 'interpol', + 'croatian', + 'mftrace', + 'oriya', + 'cirth', + 'plfonts', + 'm3D', + 'epsfview', + 'metapost', + 'venn', + 'Metafont book', + 'cm-gf', + 'epsincl', + 'committee-font', + 'vispeech', + 'phonetic', + 'mpman-ru', + 'metafp', + 'mflogo', + 'script-font', + 'morse', + 'splines', + 'yinit', + 'cmarrows', + 'labtex', + 'shuffle', + 'pacioli', + 'mf2pt3', + 'i-ching', + 'rustic', + 'nkarta', + 'mpattern', + 'util-half', + 'mf-ps', + 'ecc', + 'cm-mf', + 'fmp', + 'ttf2mf', + 'featpost', + 'klinz', + 'Metafont', + 'scyrillic', + 'KIXfont', + 'truchet', + 'mff-util', + 'mff', + 'ps4mf', + 'ethiop', + 'MetaPost examples', + 'iching', + 'jablantile', + 'mfware', + 'metatype1', + 'greenpoint', + 'ulsy', + 'moonphase', + 'metapost-matlab', + 'gpdata', + 'magic', + 'cmll', + 'threed', + 'lfb', + 'latexMP', + 'izhitsa', + 'othello' + ], + 'report style' => [ + 'techreport', + 'fbithesis', + 'ntgclass', + 'koma-script', + 'sf298', + 'iwhdp', + 'onrannual', + 'erdc', + 'estcpmm' + ], + 'fonts, text' => [ + 'dejavu', + 'txgreeks', + 'sarabian', + 'xecjk', + 'universa', + 'sanskrit-t1', + 'tex-gyre-chorus', + 'orkhun', + 'fntproof', + 'oands', + 'malayalam-latex', + 'ptserif', + 'pgothic', + 'tipa', + 'tt2001', + 'sirlin', + 'ogham', + 'twcal', + 'thaifonts-arundina', + 'urw', + 'tapir', + 'rune', + 'linearA', + 'softmakerfreefont', + 'pcfonts', + 'niceframe-type1', + 'musixtex-t1fonts', + 'levy-font', + 'tex-gyre-pagella', + 'vncmr', + 'recycle', + 'thai-usl', + 'pandora', + 'lettergothic', + 'lcyw', + 'rotunda', + 'droid', + 'lh', + 'va', + 't1-fraktur', + 'trajan', + 'punknova', + 'umtypewriter', + 'mathcomp', + 'protosem', + 'tex-gyre-cursor', + 'mf2pt1', + 'thai-rmit', + 'malvern', + 'xits', + 'urw-arial', + 'VSliTeX', + 'mflogo-font', + 'pxfonts', + 'romandeadf', + 'ocherokee', + 'pxgreeks', + 'mex', + 'pigpen', + 'wntamil', + 'pl-mf', + 'fonts-tlwg', + 'ptsans', + 'staves', + 'shavian', + 'fundus-pvscript', + 'yfrak', + 'mdsymbol', + 'yswab', + 'URW-Grotesq', + 'wncyr', + 'typeface', + 'urw-garamond', + 'cm-unicode', + 'redis', + 'oesch', + 'latex-fonts', + 'wnri', + 'baskervaldadf', + 'ocr-b', + 'plpsfont', + 'tex-gyre-heros', + 'mxd', + 'yannisgr', + 'punk', + 'fontbook', + 'tfmpk', + 'tex-gyre-schola', + 'tex-gyre-adventor', + 'utopia', + 'xepersian', + 'tex-gyre-termes', + 'srune', + 'schwell', + 'libris', + 'comfortaa', + 'pandora-type1', + 'gnu-freefont', + 'runic', + 'ygoth', + 'superiors', + 'calligra-type1', + 'tabfigures', + 'dmfonts', + 'mathptmx', + 'uhc', + 'nabatean', + 'syriac', + 'poorman', + 'psfonts', + 'urw-antiqua', + 'helvet', + 'fundus-va', + 'palladam', + 'phoenician', + 'stix', + 'ocr-a', + 'hacm', + 'babyloniannum', + 'oriya', + 'persian-modern', + 'testfont', + 'ipaex', + 'plfonts', + 'marvosym', + 'LXfonts', + 'zhmCJK', + 'committee-font', + 'phonetic', + 'lm', + 'oldprsn', + 'soyombo', + 'psgreek', + 'psnfss', + 'auto1', + 'mxedruli', + 'poltawski', + 'venturisADF', + 'script-font', + 'fundus-calligra', + 'SouthArabian', + 'opensans', + 'sauter', + 'electrumadf', + 'sqrcaps', + 'pacioli', + 'literaturnaya', + 'paratype', + 'wadalab', + 'berenisadf', + 'rustic', + 'nkarta', + 'adobecaslon', + 'lato', + 'fundus-sueterlin', + 'Metafont', + 'scyrillic', + 'verdana', + 'sanskrit', + 'cantarell', + 'fonts-sipa-arundina', + 'yfonts-t1', + 'mff-util', + 'typespec', + 'oldstandard', + 'mff', + 'xcmr', + 'gillcm', + 'metatype1', + 'wsuipa', + 'linearb', + 'URW-base35', + 'phaistos', + 'LuxiMono', + 'zefonts', + 'amiri', + 'oca', + 'tolkienfonts', + 'lfb', + 'tex-gyre-bonum', + 'osmanian' + ], + 'changebars' => [ + 'changebar', + 'texdiff', + 'backgrnd', + 'vertbars', + 'changes', + 'editbar', + 'chbar', + 'chgbar' + ], + 'theorems' => [ + 'coolthms', + 'ntheorem-vn', + 'amsmath', + 'seceqn', + 'amslatex', + 'ntheorem', + 'Shaded theorems', + 'thmtools', + 'theoremref', + 'nccthm', + 'thrmappendix', + 'amsthm', + 'amstex' + ], + 'document style' => [ + 'active-conf', + 'sciposter', + 'amsppt', + 'nature', + 'histyle', + 'lextex', + 'cassette', + 'iso10303', + 'memo209', + 'nostarch', + 'invoice', + 'memo-pln', + 'cdcover', + 'uspatent', + 'iso209', + 'courseoutline', + 'ticket', + 'semioneside', + 'classes', + 'bigsign', + 'memhfixc', + 'corrects', + 'koma-script', + 'card', + 'NCC-LaTeX', + 'rule-d', + 'aaai', + 'rtklage', + 'drama', + 'geomsty', + 'cassette-shipunov', + 'sf298', + 'isodoc', + 'megatape', + 'euproposal', + 'dramatist', + 'refman', + 'octavo', + 'apa6', + 'dfgproposal', + 'chextras', + 'fax', + 'coursepaper', + 'cd', + 'plari', + 'csbulletin', + 'newapa', + 'unixman', + 'cdlabeler', + 'gcard', + 'badge', + 'bizcard', + 'wordlike', + 'hausarbeit-jura', + 'mla-paper', + 'buscard', + 'xtemplate', + 'catechis', + 'magaz', + 'fig2sty', + 'xmlplay', + 'TeXProject', + 'iso', + 'facsimile', + 'dvdcoll', + 'mceinleger', + 'manpage', + 'gkpmac', + 'manual209', + 'meetingmins', + 'card-set', + 'poster-mac', + 'nrc', + 'gamebook', + 'nih', + 'zigaretten', + 'bookform', + 'jura', + 'AkkTeX', + 'proposal', + 'recipecard', + 'memo2', + 'pdfscreen', + 'arsclassica', + 'concprog', + 'leaflet', + 'maple', + 'lamemo', + 'booklet', + 'hcbundle', + 'hitec', + 'mwcls', + 'labbook', + 'tikzposter', + 'Pecha', + 'fillform', + 'tugboat', + 'faltblat', + 'jpsj', + 'ledmac', + 'extsizes', + 'milstd', + 'memoir', + 'facture', + 'petiteannonce', + 'minutes', + 'protocol', + 'sc21-wg1', + 'poemscol', + 'papertex', + 'play' + ], + 'languages other than English' => [ + 'msg', + 'pauldoc', + 'friulan', + 'logical-markup-utils', + 'xecjk', + 'context-french', + 'dinat', + 'orkhun', + 'zhspacing', + 'EBONG', + 'pxcjkcat', + 'coptic', + 'serbian-date-lat', + 'babelbib', + 'malayalam-latex', + 'ethiop-t1', + 'bashkirian', + 'antp', + 'la', + 'cherokee', + 'sirlin', + 'ogham', + 'inrstex', + 'cmcyr', + 'kalender-209', + 'linearA', + 'hlatex', + 'cspsfonts', + 'bengali-pandey', + 'hellas', + 'bgreek', + 'texemplar', + 'xpinyin', + 'dinbrief-gui', + 'swebib', + 'xtcapts', + 'levy-font', + 'vncmr', + 'uptex', + 'CJHebrew', + 'levy-latex', + 'babeltools', + 'luatexja', + 'codepage', + 'accenti', + 'csfonts', + 'csx', + 'bardi', + 'foreign', + 'bangtex', + 'esindex', + 'slatex', + 'lcyw', + 'dk-bib', + 'guia-bibtex', + 'iflang', + 'persian-bib', + 'lh', + 'jsclasses', + 'cmcyralt-fonts', + 'xecyr', + 'eskdx', + 'spanish', + 'georgian', + 'mlbib', + 'catalanbib', + 'telprint', + 'xgreek', + 'telugu', + 'latexcheat-ptbr', + 'mafr', + 'kerkis', + 'grverb', + 'oriental', + 'serbianpart', + 'china2e', + 'epiolmec', + 'babel-doc', + 'kalender', + 'serbian-apostrophe', + 'latexcheat-esmx', + 'german', + 'csindex', + 'bahyph', + 'gurmukhi', + 'frletter', + 'arphic', + 'japanese-otf-uptex', + 'ptex', + 'mnttex', + 'hieroglf', + 'hebtex', + 'cslatex', + 'ocherokee', + 'adami', + 'chitex', + 'mex', + 'rmligs', + 'ecclesiastic', + 'finplain', + 'montex', + 'icelandic', + 'wntamil', + 'armtex', + 'fonts-tlwg', + 'burmese', + 'dfgproposal', + 'ptsans', + 'devanagari-omega', + 'japanese', + 'context-ruby', + 'swetex', + 'guarani', + 'norbib', + 'ibycus-babel', + 'tcvn', + 'polyglossia', + 'aramaic-serto', + 'Bengali Omega', + 'sr-hyphen-spec', + 'wncyr', + 'serbian-def-cyr', + 'slovak', + 'metre', + 'turkmen', + 'GFS Porson', + 'redis', + 'latin', + 'impnattypo', + 'mongolian-babel', + 'combelow', + 'e-french', + 'maltese', + 'Makor 2', + 'mxd', + 'pbsheet', + 'yannisgr', + 'ratex', + 'basque-date', + 'sinhala', + 'eskd', + 'greek-makeindex', + 'langcode', + 'teubner', + 'babel', + 'ibygrk', + 'beamer-tut-pt', + 'ledarab', + 'esieecv', + 'a2ac', + 'antt', + 'csplain', + 'fc', + 'devanagari', + 'georgian-stanier', + 'casyl', + 'xepersian', + 'fribrief', + 'tamil-omega', + 'romaniantex', + 'romansh', + 'spanish-mx', + 'greekdates', + 'kdgreek', + 'dinbrief', + 'basque-book', + 'juramisc', + 'frontespizio', + 'ascii-cyrillic', + 'antomega', + 'ngerman', + 'serbianc', + 'ttt', + 'uhc', + 'nabatean', + 'vietnet', + 'poorman', + 'oinuit', + 'vntex', + 'bidi', + 'zhmetrics', + 'palladam', + 'germkorr', + 'bard', + 'aramaic', + 'semtrans', + 'japanese-otf', + 'cun', + 'hrlatex', + 'frenchpro', + 'hacm', + 'arabi', + 'babyloniannum', + 'paracol', + 'betababel', + 'HyPlain', + 'oriya', + 'jurarsp', + 'bib-greek', + 'fixlatvian', + 'mkbangtex', + 'itnumpar', + 'ptex-texmf', + 'french-translations', + 'zhmCJK', + 'jura', + 'spanglish', + 'arabxetex', + 'itrans-processor', + 'arabtex', + 'mpman-ru', + 'oldprsn', + 'soyombo', + 'caesarcm', + 'turkish', + 'cahyph', + 'russ', + 'psgreek', + 'ethtex', + 'mxedruli', + 'mem', + 'lithuanian', + 'arosgn', + 'he-le-na', + 'cjkpunct', + 'ginpenc', + 'polski', + 'abstyles-babel', + 'wadalab', + 'cmcyralt-ltx', + 'ctib4tex', + 'rawprint', + 'indic-type1', + 'lithuanian-babel', + 'encxvlna', + 'GFS Solomos', + 'klinz', + 'bib-fr', + 'fundus-cyr', + 'zhnumber', + 'sanskrit', + 'accents-cs', + 'Pecha', + 'greek-inputenc', + 'frenchle', + 'gurmukhi-singh', + 'fonts-sipa-arundina', + 'russian', + 'ctex', + 'cjk-fonts', + 'HLaTeX fonts', + 'xetex-itrans', + 'ordinalpt', + 'esperant', + 'cmcyr-patch', + 'ethiop', + 'CSTeX', + 'serbian-lig', + 'disser', + 'cbcoptic', + 'delig', + 'ISO-TeX', + 'csfonts-t1', + 'phaistos', + 'malayalam-omega', + 'espo', + 'w32tex', + 'cyrillic', + 'amiri', + 'Thai LaTeX', + 'hieroglyph', + 'shalom', + 'osmanian', + 'xetex-devanagari', + 'cjk', + 'lgrx' + ], + 'Physics, Chemistry, Biology' => [ + 'aiaa', + 'pst-spectra', + 'sciposter', + 'ppchtex', + 'Hepunits', + 'aguplus', + 'mychemistry', + 'chemarrow', + 'tikz-timing', + 'nature', + 'pgfmolbio', + 'jmb', + 'bohr', + 'jhep', + 'mnras-plain', + 'nar', + 'circ', + 'chemfig', + 'konwerter', + 'corridx-latex', + 'chemstruct', + 'grafcet', + 'chemexec', + 'chemcompounds', + 'biocon', + 'geophysics', + 'emulateapj', + 'mol2chemfig', + 'aaai-named', + 'elbioimp', + 'xymtex', + 'physe', + 'chembst', + 'textopo', + 'development', + 'ptptex', + 'circuit-macros', + 'classif2', + 'astron', + 'feynman', + 'dnaseq', + 'texshade', + 'latexcheat-ptbr', + 'susy', + 'ametsoc', + 'latexcheat-esmx', + 'chemsym', + 'chemmacros', + 'ltxutil', + 'feynmf', + 'lewis', + 'chem-journal', + 'biblatex-ieee', + 'chemstyle', + 'findbib', + 'pst-lens', + 'pawpict', + 'ochem', + 'jneurosci', + 'chemcono', + 'aastex', + 'cryst', + 'pst-circ', + 'texsis', + 'gu', + 'osa', + 'biblatex-nature', + 'phyzzx', + 'pst-pdgr', + 'miller', + 'MakeCirc', + 'pst-am', + 'ama', + 'pst-electricfield', + 'hepnames', + 'bodegraph', + 'r_und_s', + 'jphysiol', + 'pst-osci', + 'procIAGssymp', + 'pst-optic', + 'feyn', + 'braket', + 'cpssp', + 'nuc', + 'modiagram', + 'PNAS', + 'sfg', + 'phy-bstyles', + 'ascelike', + 'HEPparticles', + 'jas99_m', + 'jbact', + 'duotenzor', + 'sseq', + 'formula', + 'biolist', + 'jqt1999', + 'bloques', + 'revtex4-1', + 'anti', + 'slashed', + 'timing', + 'chemnum', + 'mnras', + 'bbs', + 'bracketkey', + 'humanbio', + 'bpchem', + 'jtb', + 'physics', + 'qm', + 'nrc', + 'luasseq', + 'MEP article', + 'rsc', + 'nih', + 'dichokey', + 'pgfplots', + 'pst-labo', + 'biokey', + 'iopart-num', + 'aichej', + 'sageep', + 'latexcheat', + 'pst-optexp', + 'biblatex-chem', + 'lcircuit', + 'fbs', + 'axodraw', + 'physymb', + 'chemarr', + 'endiagram', + 'pst-diffraction', + 'achemso', + 'context-chromato', + 'hep-gen', + 'eltex', + 'pst-magneticfield', + 'neuron', + 'bondgraph', + 'steinmetz', + 'labbook', + 'cbe', + 'opteng', + 'asaetr', + 'isotope', + 'substances', + 'jpsj', + 'cell', + 'pst-pad', + 'natbib', + 'chemscheme', + 'engtlc', + 'Vancouver', + 'isomath', + 'hep', + 'mhchem', + 'jtbnew', + 'moonphase', + 'psizzl', + 'streetex', + 'circuitikz', + 'hepthesis', + 'scientificpaper' + ], + 'fonts, mathematics' => [ + 'bbm', + 'greek4cbc', + 'bera', + 'tex-gyre-math', + 'initials', + 'kurier', + 'induni-om', + 'fntproof', + 'coptic', + 'eiad', + 'comicsans', + 'cmslup', + 'mathrsfs', + 'msym', + 'ethiop-t1', + 'archaic', + 'bashkirian', + 'antp', + 'la', + 'cherokee', + 'calrsfs', + 'brushscr', + 'cmcyr', + 'fpl', + 'bold-extra', + 'gentium', + 'logic', + 'DayRoman', + 'cm-mf-extra', + 'aeguill', + 'cmextra-latex', + 'concrete', + 'AFMtoPL (Clark)', + 'a0poster', + 'mathkit', + 'gothic', + 'mathabx-type1', + 'GFS Baskerville', + 'cmpica', + 'libgreek', + 'cmtest', + 'bbold-type1', + 'accenti', + 'yhmath', + 'belleek', + 'csfonts', + 'humanist', + 'esint-type1', + 'dancers', + 'greek6cbc', + 'auncial-new', + 'charter', + 'cmcyralt-fonts', + 'mnsymbol', + 'kelly-greek-font', + 'igo', + 'dutchcal', + 'cm', + 'eurosym', + 'cmoefont', + 'free-math-font-survey', + 'amslatex', + 'cypriot', + 'bitstrea', + 'ConTeXt-cmttbf', + 'mathpazo', + 'tex-gyre-math-pagella', + 'cmbright', + 'concrete-macros', + 'kerkis', + 'cyklop', + 'china2e', + 'epiolmec', + 'cbgreek-complete', + 'mf2pt1', + 'anttvf', + 'The Comprehensive LaTeX Symbol List.', + 'ulsy-ps', + 'auncial', + 'xits', + 'hyphenat', + 'arphic', + 'pxfonts', + 'Courier', + 'hieroglf', + 'adami', + 'mex', + 'bbding', + 'trsym', + 'amsbsy', + 'beton', + 'mathbbol', + 'icelandic', + 'kpfonts', + 'calligra', + 'byzfonts', + 'AFMtoPL (Elwell)', + 'corelpak', + 'cc-pl', + 'corelpak-contrib', + 'cryst', + 'aramaic-serto', + 'Bengali Omega', + 'mdsymbol', + 'fontbl', + 'blacklettert1', + 'blackletter', + 'frcursive', + 'ae', + 'duerer', + 'typeface', + 'urwchancal', + 'cm-unicode', + 'GFS Porson', + 'latex-fonts', + 'anleitung', + 'cm-afm', + 'boondox', + 'CM Type3', + 'bakoma-fonts', + 'fdsymbol', + 'esint', + 'asana-math', + 'iwona', + 'egothic', + 'futhark', + 'ega2mf', + 'ec', + 'fontbook', + 'ibygrk', + 'junicode', + 'tmmath-fonts', + 'FourierNC', + 'eulervm', + 'foekfont', + 'a2ac', + 'loggates', + 'antt', + 'ifsym', + 'hge', + 'fc', + 'allrunes', + 'bbm-macros', + 'grtimes', + 'msx2msa', + 'inconsolata', + 'devanagari', + 'bbold', + 'rsfs', + 'georgian-stanier', + 'context-cmscbf', + 'cmsd', + 'casyl', + 'hfbright', + 'HPtfm2pl', + 'augie', + 'kdgreek', + 'GFS Artemisia', + 'aifont', + 'cm-lgc', + 'carolmin-t1', + 'GFS Complutum', + 'goblin', + 'inslrmaj', + 'mathptmx', + 'mathinst', + 'covfonts', + 'maths-symbols', + 'pxtxalfa', + 'adobe-euro', + 'futhorc', + 'etruscan', + 'mathdesign', + 'carolmin', + 'euro-ce', + 'bard', + 'aramaic', + 'arev', + 'AFMtopl (Wolczko)', + 'tex-gyre-math-termes', + 'lm-math', + 'sansmathaccent', + 'cmolddig', + 'croatian', + 'aurical', + 'hvmath-fonts', + 'elmath', + 'amsfonts', + 'mdputu', + 'engwar', + 'concmath', + 'LXfonts', + 'corelfonts', + 'mathspec', + 'stmaryrd', + 'cmoutlines', + 'arabtex', + 'lm', + 'GFS Bodoni', + 'cm-super', + 'arosgn', + 'courier scaled', + 'sauter', + 'mathabx', + 'cypriote', + 'cmtiup', + 'shuffle', + 'cm-tfm', + 'hershey', + 'accents', + 'cmcyralt-ltx', + 'apl', + 'indic-type1', + 'mtp2lite', + 'b1encoding', + 'ecc', + 'cm-mf', + 'scriptfonts', + 'GFS Solomos', + 'Epigrafica', + 'Metafont', + 'classico', + 'accents-cs', + 'mff-util', + 'typespec', + 'capbas', + 'upgreek', + 'cjk-fonts', + 'HLaTeX fonts', + 'mff', + 'prodint', + 'cmcyr-patch', + 'ethiop', + 'concmath-fonts', + 'boisik', + 'grkfinst', + 'greektex', + 'esstix', + 'GFS Didot', + 'doublestroke', + 'cbcoptic', + 'metatype1', + 'fourier', + 'URW-base35', + 'csfonts-t1', + 'ulsy', + 'huncial', + 'txfonts', + 'hieroglyph', + 'GFS NeoHellenic', + 'pzccal', + 'accfonts' + ], + 'arrays, matrices' => [ + 'bigstrut', + 'easybmat', + 'tabls', + 'hvdashln', + 'hhtensor', + 'boldline', + 'mattens', + 'hhline', + 'delarray', + 'arydshln', + 'digiconfigs', + 'array', + 'linsys', + 'tabularht', + 'pmat', + 'rccol', + 'bigdelim', + 'vector', + 'easymat', + 'mdwtab', + 'easyvector', + 'tabu', + 'blkarray', + 'Array Maker', + 'multirow' + ], + 'collections, proceedings, conferences' => [ + 'active-conf', + 'IEEEconf', + 'confproc', + 'imac', + 'cascadilla', + 'iagproc', + 'ieeepes', + 'classes', + 'acmconf', + 'icsv', + 'amsproc', + 'siggraph', + 'procIAGssymp', + 'spie', + 'ijcai89', + 'combine', + 'usenix', + 'abstbook', + 'Birkhaeuser', + 'IEEEtran', + 'ifacmtg', + 'sugconf', + 'acmproc', + 'amscls' + ], + 'word processor conversion' => [ + 'texperf', + 'tex2word', + 'rtf2latex2e', + 'tex2rtf', + 'word2x', + 'word2latex', + 'wordlike', + 'WP2LaTeX', + 'word2tex', + 'rtf2tex', + 'nb4latex', + 'wp-conv', + 'WordML2LaTeX' + ], + 'author' => [ + 'authoraftertitle', + 'authorindex', + 'authblk' + ], + 'bibliography, formatting' => [ + 'biblatex-juradiss', + 'nature', + 'nar', + 'luabibentry', + 'biblatex-fiwi', + 'perception', + 'biblatex-luh-ipw', + 'biblatex-musuos', + 'swebib', + 'chapref', + 'ut-backref', + 'dk-bib', + 'persian-bib', + 'geschichtsfrkl', + 'astron', + 'mlbib', + 'wmaainf', + 'apabst', + 'biblatex-caspervector', + 'mciteplus', + 'biblatex-chicago', + 'biblatex-ieee', + 'norbib', + 'biber', + 'biblatex-bwl', + 'newapa', + 'natmove', + 'biblatex-trad', + 'biblatex-nature', + 'multibbl', + 'plainyr', + 'Orderer', + 'noTeX', + 'opcit', + 'margbib', + 'namunsrt', + 'ksfh-nat', + 'bibleref-lds', + 'PNAS', + 'francais-bst', + 'phy-bstyles', + 'vak', + 'biblatex-philosophy', + 'usebib', + 'mcite', + 'biblatex-swiss-legal', + 'alphanum-bst', + 'named', + 'tocbibind', + 'biblatex-publist', + 'mla', + 'librarian', + 'bibentry', + 'notoccite', + 'macbibtex', + 'oxford', + 'notes2bib', + 'rsc', + 'showtags', + 'oscola', + 'spain', + 'uni-wtal-ger', + 'biblatex-phys', + 'munich', + 'titles', + 'urlbst', + 'TameTheBeast', + 'multibib', + 'neuron', + 'these', + 'orderrefs', + 'bibmods', + 'natbib', + 'Vancouver', + 'chscite', + 'sort-by-letters', + 'biblatex-nejm' + ], + 'proof sheets (typographical)' => [ + 'crop', + 'cropmarks-pt', + 'evautofl', + 'cropmrks', + 'kantlipsum', + 'poligraf', + 'blindtext', + 'cropmark-pu', + 'pagegrid', + 'cropmark', + 'ncccropmark' + ], + 'color' => [ + 'pdftex-def', + 'mpcolornames', + 'pdfcolfoot', + 'shadebox', + 'pdfcolparallel', + 'backgrnd', + 'contour', + 'shading', + 'xcolor', + 'colorinfo', + 'Shaded theorems', + 'truecols', + 'bclogo', + 'framed', + 'pst-grad', + 'pdfcolparcolumns', + 'chroma', + 'pagecolor', + 'colorwav', + 'transparent', + 'pdfcol', + 'cmyk-hax', + 'xecolour', + 'quotchap', + 'plates', + 'voss-mathcol', + 'colordvi', + 'xecolor', + 'gradientframe', + 'pdfcolmk', + 'shadbox', + 'colortab', + 'shade', + 'poligraf', + 'dvipscol', + 'colors', + 'spotcolor', + 'colortbl', + 'luacolor', + 'hycolor', + 'background', + 'color', + 'svgcolor', + 'colorsep', + 'RGB', + 'pst-slpe', + 'colortex', + 'xetex-def' + ], + 'hyphenation' => [ + 'extdash', + 'ithyph', + 'gahyph', + 'gnhyph', + 'kmrhyph', + 'plhyph', + 'glhyph', + 'hypht1', + 'czhyph', + 'eehyph', + 'hyphsubst', + 'hyphenex', + 'hyph-utf8', + 'hyphenation-greek', + 'hrhyph', + 'tkhyph', + 'frhyph', + 'hyacc-cm', + 'NL hyphenation', + 'inhyph', + 'ushyph', + 'bahyph', + 'hyphenat', + 'ukhyph', + 'shhyphl', + 'fahyph', + 'grchyph', + 'ibycus-babel', + 'sr-hyphen-spec', + 'ghyphen', + 'huhyph', + 'ruhyphen', + 'ukrhyph', + 'mltex-ltx', + 'findhyph', + 'mltex', + 'dkhyphen', + 'babel', + 'icehyph', + 'elhyphen', + 'hyphen-spanish', + 'Make patterns.', + 'slhyph', + 'iahyphen', + 'nohyphbx', + 'ngerman', + 'sphyphb', + 'pthyphs', + 'magyar', + 'ishyph', + 'lahyph', + 'croatian', + 'HyPlain', + 'xetex-greek', + 'srhyphc', + 'sanhyph', + 'fihyph', + 'hungarian', + 'showhyphens', + 'caesarcm', + 'cahyph', + 'lithuanian', + 'lua-check-hyphen', + 'bghyphen', + 'nohyph', + 'fixltxhyph', + 'sehyph', + 'dehyph-exptl', + 'mnhyphn', + 'catalan', + 'greektex', + 'czhyph2e', + 'soulutf8', + 'soul' + ], + 'index, indexing' => [ + 'xindy', + 'idxtex', + 'corridx-latex', + 'makeidx', + 'index', + 'makeindex', + 'makeindexk', + 'forindex', + 'esindex', + 'amsmidx', + 'csindex', + 'hvindex', + 'genindex', + 'greek-makeindex', + 'lamstex-index', + 'idxlayout', + 'xeindex', + 'multind', + 'tocbibind', + 'splitindex', + 'repeatindex', + 'glossary', + 'addindex', + 'ltxindex', + 'imakeidx', + 'indxcite', + 'toolbox', + 'robustindex', + 'texindex', + 'luaindex', + 'varindex', + 'xindy-persian' + ], + 'abbreviations, acronyms' => [ + 'acromake', + 'acronym', + 'acro', + 'dhua', + 'abbrevs', + 'acronym209', + 'abbr', + 'acroterm' + ], + 'paper size, orientation' => [ + 'a4wide', + 'mpdinbrief', + 'sidecap', + 'lscape', + 'pdflscape', + 'rotpages', + 'a5comb', + 'scale', + 'side' + ], + 'page styles' => [ + 'twoside', + 'ltxgrid', + 'pfnote', + 'stdpage', + 'titlepage-uni-dortmund', + 'cascover', + 'gradback', + 'semioneside', + 'koma-script', + 'parskip', + 'texi-like cover', + 'leading', + 'rule-d', + 'deproc', + 'tocenter', + 'cassette209', + 'typogrid', + 'everypage', + 'pagecolor', + 'savetrees', + 'canoniclayout', + 'nopageno', + 'midpage', + 'footnpag', + 'titlepic', + 'changepage', + 'casslbl', + 'vruler', + 'zwpagelayout', + 'context-fullpage', + 'emptypage', + 'everyshi', + 'floatpag', + 'setspace', + 'thesis-titlepage-fhac', + 'wallpaper', + 'titlepages', + 'tex-label', + 'fjodor', + 'Layaureo', + 'pagegrid', + 'hcbundle', + 'rmpage', + 'changelayout', + 'stubs', + 'ncccropmark', + 'textpos', + 'titleps', + 'fancytabs' + ], + 'calendar, schedule' => [ + 'calxxxx-yyyy', + 'pst-calendar', + 'yplan', + 'china2e', + 'evweek', + 'schedule209', + 'calendar-Barr', + 'calendarweek', + 'calendar', + 'termcal', + 'schedule', + 'plcalendar', + 'calxxxx' + ], + 'figures, floating matter' => [ + 'titletoc', + 'fixltx2e', + 'algorithm2e', + 'subfigmat', + 'caption', + 'topcapt', + 'graphfig', + 'semioneside', + 'subfloat', + 'koma-script', + 'figplace', + 'subfig', + 'ccaption', + 'float', + 'algorithms', + 'smalltableof', + 'placeins', + 'morefloats', + 'titlesec', + 'hvfloat', + 'floatrow', + 'caption2', + 'multicap', + 'lpic', + 'layouts', + 'chkfloat', + 'fullpict', + 'verbasef', + 'stfloats', + 'zaccone', + 'rotating', + 'here', + 'captcont', + 'titlepic', + 'trivfloat', + 'newfloat', + 'placeins-plain', + 'nonfloat', + 'dblfloatfix', + 'rotfloat', + 'floatpag', + 'subfigure', + 'dpfloat', + 'endfloat', + 'fig4latex', + 'topfloat', + 'nccfloats', + 'tamefloats', + 'side', + 'dmhgener', + 'copyrightbox', + 'boxhandler' + ], + 'lists, bullets' => [ + 'enumerate', + 'paralist', + 'multenum', + 'todo', + 'coolthms', + 'greekctr', + 'outline', + 'easylist', + 'koma-script', + 'nicetext', + 'outlines', + 'ebnf', + 'sitem', + 'listliketab', + 'enumspec', + 'deflist', + 'grnumalt', + 'autolist', + 'shortlst', + 'alnumsec', + 'wiki', + 'moreenum', + 'eqlist', + 'tablists', + 'desclist', + 'sentences', + 'etaremune', + 'enumitem-zref', + 'bullcntr', + 'revnum', + 'expdlist', + 'enumitem' + ], + 'DVI file manipulation' => [ + 'dviconcat', + 'twoup-gen', + 'dvipaste', + 'dvitty', + 'BSR2dvi', + 'dvicopy', + 'dtl', + 'dviincl', + 'dvidvi', + 'colordvi', + 'dvipdfmx', + 'DVItoLN03', + 'dvibook', + 'dvipdfmx-def', + 'textool', + 'Beebe-DVI', + 'dviasm', + 'boxedeps', + 'dvichk', + 'boundbox', + 'vrsion', + 'ivd2dvi', + 'dvimerge', + 'dvii', + 'dviljk', + 'grfpaste', + 'dvitype' + ], + 'arrows' => [ + 'chemarrow', + 'dotarrow', + 'taylor', + 'tikzpfeile' + ], + 'dates and times' => [ + 'dates', + 'serbian-date-lat', + 'kalender-209', + 'dow', + 'dates209', + 'koma-script', + 'kalender', + 'eukdate', + 'dayofweek', + 'basque-date', + 'advdate', + 'abbrevs', + 'datenumber', + 'greekdates', + 'daytime', + 'datetime', + 'fileinfo', + 'isodate' + ], + 'output format PDF, PostScript' => [ + 'trans', + 'rmannot', + 'pst-spectra', + 'pdftex-def', + 'kuvio', + 'pst-eucl', + 'hypdestopt', + 'psnfssx-adobe', + 'context', + 'aeb-tilebg', + 'pst-sigsys', + 'hrefhide', + 'pdfslide', + 'fixpdfmag', + 'pdfcolfoot', + 'embedfile', + 'ecards', + 'hypgotoe', + 'epspdfconversion', + 'pst-pdf', + 'yt4pdf', + 'exteps', + 'twoupltx', + 'MPStoEPS', + 'idealfonts', + 'pstricks-add', + 'shadebox', + 'popupmenu', + 'pdfcolparallel', + 'aurora', + 'aeguill', + 'pdftex', + 'analogclock', + 'mm', + 'AddTeX2Eps', + 'psmerge', + 'dvipsconfig', + 'pinlabel', + 'mathabx-type1', + 'pst-knot', + 'gv', + 'testflow', + 'eforms', + 'ocgtools', + 'gradback', + 'refreshpdf', + 'pst-platon', + 'mf2ps', + 'jeopardy', + 'fontload', + 'umrand', + 'acroflex', + 'pst-vowel', + 'eqexam', + 'epstopdf-pkg', + 'PDFrack', + 'fragmaster', + 'xpdf', + 'shading', + 'mf2pt1', + 'flashmovie', + 'adobemapping', + 'pdfbook', + 'epspdf-extra', + 'figfrag', + 'aeb-mlink', + 'morehype', + 'pdfescape', + 'GraphicxSP', + 'acroweb', + 'xpdfopen', + 'psnfss-source', + 'pst-mirror', + 'pdfcrop', + 'prv', + 'fldigigal', + 'pst-lens', + 'epsfx', + 'psnfssx', + 'impose', + 'gapfill', + 'bophook', + 'texdraw', + 'tkz-kiviat', + 'pst-infixplot', + 'hyperxmp', + 'pstool', + 'ps4pdf', + 'dvips', + 'pdfsync', + 'pdfcprot', + 'pst-grad', + 'ae', + 'cachepic', + 'ps_conv', + 'interactiveworkbook', + 'pagedraw', + 'lapdf', + 'psfragx', + 'AeB Pro', + 'tikzpagenodes', + 'oletex', + 'auto-pst-pdf', + 'pst-pdgr', + 'pkfix', + 'tree-dvips', + 'pdfrender', + 'fancytooltips', + 'pst-xkey', + 'mmap', + 'pdfjam', + 'hypdvips', + 'pstricks', + 'pst-eps', + 'ghostscript', + 'annot-pro', + 'rlepsf', + 'pst-soroban', + 'attachfile', + 'pst-osci', + 'dvipdfm', + 'pst-qtree', + 'eps2pdf', + 'transparent', + 'gsview', + 'pdfcol', + 'ps2eps', + 'vpe', + 'quotchap', + 'cmap', + 'pst-exa', + 'epsdice', + 'insdljs', + 'AeB slicing', + 'dvipdfmx', + 'pst-Jtree', + 'pdflscape', + 'vpp', + 'pdf-mps-supp', + 'aeb-mobile', + 'epsf', + 'pdfcomment', + 'pdfpages', + 'psfrag', + 'pdfcrypt', + 'pdfcolmk', + 'glossaries-accsupp', + 'acroreloadpdf', + 'svg-inkscape', + 'flippdf', + 'pst-tools', + 'pstoedit', + 'poligraf', + 'dvipdfmx-def', + 'pax', + 'pst-node', + 'pst-tree', + 'dvipscol', + 'jmakepdfx', + 'pst-gantt', + 'colors', + 'pdfmarginpar', + 'mactotex', + 'draftcopy', + 'pst-fill', + 'protex', + 'poster-mac', + 'epstopdf', + 'psutils', + 'pst-math', + 'xmpincl', + 'pdf-trans', + 'mftrace', + 'graphicx-psmin', + 'pst-func', + 'thepdfnumber', + 'animate', + 'AcroMemory', + 'pst-labo', + 'dvipsk', + 'pst-thick', + 'ifpdf', + 'lametex', + 'jj-game', + 'navigator', + 'mirr', + 'epsincl', + 'docmute', + 'ghostscript-GPL', + 'pst-optexp', + 'pst-vue3d', + 'pgf', + 'thumbpdf', + 'epsfig', + 'fitr', + 'pdfscreen', + 'RRGtrees', + 'tkz-berge', + 'psnfss', + 'tex-ps', + 'pst-ob3d', + 'tdclock', + 'pdfx', + 'pst-rubans', + 'pst-solides3d', + 'bookmark', + 'pdftexcmds', + 'pdf14', + 'mf2pt3', + 'exerquiz', + 'accsupp', + 'tkz-graph', + 'fc-arith', + 'media9', + 'mf-ps', + 'attachfile2', + 'pst-geo', + 'pst-plot', + 'colorsep', + 'movie15', + 'acrotex-web', + 'pst-poly', + 'rotate', + 'yfonts-t1', + 'pst-gr3d', + 'pst-pad', + 'randbild', + 'pst-slpe', + 'tpic2pdftex', + 'letterspacing', + 'pdftricks', + 'pst-uml', + 'VTeX/Free', + 'SkakNew', + 'purifyeps', + 'pst-light3d', + 'aebenvelope', + 'marnote', + 'ocgx', + 'cep' + ], + 'paragraph' => [ + 'initials', + 'rjlparshap', + 'paragraphs', + 'shapepar', + 'tabto-generic', + 'ledpar', + 'shapepatch', + 'parskip', + 'mparhack', + 'infpic', + 'nolbreaks', + 'varindent', + 'lettrine', + 'hanging', + 'cutwin', + 'secret', + 'nccparskip', + 'fancypar', + 'tabto for LaTeX.', + 'indentfirst', + 'invertedparagraphs', + 'firstline' + ], + 'exams, exercises, answers' => [ + 'exercise', + 'adrconv', + 'ecards', + 'multenum', + 'knst', + 'chemexec', + 'exsheets', + 'Exam design', + 'eqexam', + 'mafr', + 'exam209', + 'vxu', + 'flashcard', + 'acroweb', + 'QCM', + 'mathexam', + 'bhcexam', + 'uebungsblatt', + 'probsoln', + 'exam', + 'pbsheet', + 'assignment', + 'flacards', + 'exams', + 'ktv-texdata', + 'alterqcm', + 'macqassign', + 'exerquiz', + 'fc-arith', + 'flashcards', + 'arbeit', + 'ans', + 'ANUfinalexam', + 'dashundergaps', + 'answers' + ], + 'wrap around a figure' => [ + 'insbox', + 'infpic', + 'figflow', + 'picins', + 'floatflt', + 'cutwin', + 'wrapfig', + 'window', + 'picinpar' + ], + 'cross references' => [ + 'cleveref', + 'rangecite', + 'upref', + 'todo', + 'saferef', + 'refcheck', + 'coolthms', + 'xcite', + 'ut-backref', + 'drftcite', + 'fancyref', + 'draft', + 'prettyref', + 'fncylab', + 'texref', + 'labelcas', + 'pagereference', + 'crossreference', + 'chngcntr', + 'nameref', + 'refstyle', + 'lablst-pkg', + 'theoremref', + 'lastpage', + 'pdfsync', + 'autonum', + 'checkcites', + 'refcount', + 'hyperref', + 'hypdvips', + 'smartref', + 'modref', + 'zref', + 'philex', + 'sublabel', + 'xr', + 'fnlineno', + 'amslatex-primer', + 'titleref', + 'lineno', + 'edfnotes', + 'showkeys', + 'undolabl', + 'typedref', + 'enumitem-zref', + 'dmhgener', + 'xr-hyper', + 'varioref', + 'backref', + 'showlabels' + ], + 'proofs' => [ + 'newproof', + 'bussproofs', + 'tex-ewd', + 'LKproof', + 'constants', + 'thrmappendix', + 'gene-logic', + 'proofs' + ], + 'macro programming' => [ + 'ytex', + 'ifxetex', + 'mtbe', + 'endnote', + 'mdwlist', + 'xtrcode', + 'verbatimbox', + 'optparams', + 'lua2dox', + 'logical-markup-utils', + 'expl3', + 'substr', + 'chickenize', + 'rangen', + 'mylatexformat', + 'bitset', + 'tweb', + 'context', + 'texinfo-latest', + 'mlist', + 'removefr', + 'srcltx', + 'pdcmac', + 'plainpkg', + 'DB_process', + 'realboxes', + 'kvsetkeys', + 'keyreader', + 'ifmtarg', + 'aro-bend', + 'etexcmds', + 'bigintcalc', + 'mfirstuc', + 'LamsTeX', + 'luatex-pkg', + 'uniquecounter', + 'settobox', + 'regstats', + 'renditions', + 'rotchiffre', + 'etoolbox-de', + 'doc', + 'lcg', + 'parselines', + 'stdclsdv', + 'mwrite', + 'l3dt', + 'filecontents', + 'lmacs', + 'intcalc', + 'luatexbase', + 'chklref', + 'setouterhbox', + 'nccstretch', + 'xtcapts', + 'lambda-lists', + 'samples', + 'tex2tok', + 'xparse', + 'technics', + 'texsort', + 'texdef', + 'calc', + 'inversepath', + 'luatextra', + 'babeltools', + 'nbaseprt', + 'pgfkeyx', + 'eplain', + 'fwlw', + 'perltex', + 'mhsetup', + 'makecmds', + 'logfilter', + 'hanoi', + 'xoptarg', + 'iftex', + 'xargs', + 'luacode', + 'filehook', + 'latex', + 'plain', + 'interfaces', + 'wright', + 'exp-testopt', + 'classes', + 'pgfkeys', + 'xcoffins', + 'xspace', + 'maybeload', + 'iflang', + 'ltxfileinfo', + 'engrec', + 'forarray', + 'cmdstring', + 'texapi', + 'ifetex', + 'fltpoint', + 'polynomial', + 'dprogress', + 'twoopt', + 'extradefs', + 'processkv', + 'ltxnew', + 'nameauth', + 'makerobust209', + 'labelcas', + 'arrayjobx', + 'xpatch', + 'pi', + 'ifplatform', + 'redefine', + 'patchcmd', + 'tokenizer', + 'translation-filecontents-de', + 'afterpage', + 'How to Package Your LaTeX Package', + 'rule-d', + 'optional', + 'environ', + 'blkcntrl', + 'makeprog', + 'stack', + 'preview', + 'arrayjob', + 'cmdtrack', + 'pgfopts', + 'auxhook', + 'sphack', + 'euro', + 'js-misc', + 'xpunctuate', + 'nicefilelist', + 'grffile', + 'chngcntr', + 'storebox', + 'nicetext', + 'calctab', + 'binomexp', + 'xltxtra', + 'multido', + 'hobsub', + 'format', + 'trace', + 'dox', + 'ltxutil', + 'memexsupp', + 'trigonometry', + 'xfor', + 'l3experimental', + 'locality', + 'export', + 'myfilist', + 'binhex', + 'inlinedef', + 'random', + 'counttexruns', + 'longnamefilelist', + 'lua-visual-debug', + 'sgmlcmpt', + 'xkvview', + 'stex', + 'newinsert', + 'l3kernel', + 'ps4pdf', + 'laansort', + 'atenddvi', + 'textfit', + 'ifdraft', + 'basix', + 'zero', + 'xifthen', + 'polynom', + 'makedtx', + 'xlop', + 'gmutils', + 'authoraftertitle', + 'dcounter', + 'occam', + 'linegoal', + 'realcalc', + 'syntrace', + 'repeat', + 'texsis', + 'everypage', + 'ifnextok', + 'trig', + 'makebox', + 'magicnum', + 'default', + 'ifvtex', + 'textmerg', + 'remreset', + 'refcount', + 'context-rst', + 'protecteddef', + 'cjw', + 'silence', + 'laps', + 'ifluatex', + 'pst-xkey', + 'storecmd', + 'xkeyval', + 'advdate', + 'langcode', + 'zref', + 'drac', + 'l3keys2e', + 'alphalph', + 'ted', + 'clefval', + 'verbdef', + 'getoptk', + 'atbegshi', + 'ydoc', + 'doafter', + 'skeycommand', + 'checklab', + 'catcodes', + 'warning', + 'kvoptions', + 'xtemplate', + 'gates', + 'miniltx', + 'totcount', + 'lmake', + 'zwgetfdate', + 'randtext', + 'printlen', + 'newcommand', + 'ltxdoc', + 'showcharinbox', + 'midpage', + 'fibnum', + 'texinfo', + 'xhfill', + 'dowith', + 'niceverb', + 'dialogl', + 'catchfile', + 'boolexpr', + 'plain-ltx', + 'calcage', + 'papermas', + 'xpeek', + 'xkvltxp', + 'ifthenx', + 'kantlipsum', + 'l3packages', + 'arabic', + 'tip', + 'catchfilebetweentags', + 'multienv', + 'macros2e', + 'emarks', + 'codicefiscaleitaliano', + 'makerobust', + 'aliascnt', + 'makedoc', + 'moredefs', + 'DTX gallery', + 'xmltex', + 'hackalloc', + 'skeyval', + 'extract', + 'tdsfrmath', + 'seqsplit', + 'fp', + 'mdwtools', + 'kpathsea', + 'harvmac', + 'numprint', + 'savesym', + 'ifthen', + 'modroman', + 'count1to', + 'collcell', + 'bitelist', + 'reverxii', + 'compare', + 'comma', + 'properties', + 'fancynum', + 'yax', + 'thepdfnumber', + 'mylatex', + 'wochtag', + 'inputtrc', + 'hardwrap', + 'declare', + 'inscrutable', + 'itnumpar', + 'pst-ode', + 'kvdefinekeys', + 'loops', + 'ltxkeys', + 'robustcommand', + 'overword', + 'coolstr', + 'namespc', + 'everyshi', + 'ifpdf', + 'letltxmacro', + 'filemod', + 'texfilt', + 'l3regex', + 'at', + 'statistik', + 'etex-pkg', + 'infwarerr', + 'brclc', + 'stringstrings', + 'skb', + 'etextools', + 'regcount', + 'xgalley', + 'localloc', + 'luaxml', + 'showdim', + 'afterpackage', + 'morewrites', + 'checkend', + 'hex', + 'show2e', + 'everyhook', + 'clsguide', + 'base', + 'around-the-bend', + 'grfext', + 'fragments', + 'weekday', + 'python', + 'mflogo', + 'escapeTeXt', + 'defstring', + 'onlyamsmath', + 'williams', + 'suffix', + 'ltxtools', + 'numname', + 'eurofont', + 'trimspaces', + 'showkeys', + 'pdftexcmds', + 'collect', + 'etoolbox', + 'noprot', + 'pictexwd', + 'lualatex-platform', + 'atveryend', + 'currfile', + 'newfile', + 'unouter', + 'romannum', + 'keyval2e', + 'xcomment', + 'catoptions', + 'dozenal', + 'setstrut', + 'keycommand', + 'getfiledate', + 'ltxcmds', + 'latex-base', + 'fileinfo', + 'fifinddo', + 'time', + 'lazylist', + 'e-TeX', + 'midnight', + 'nth', + 'cprotect', + 'adjustbox', + '12many', + 'pageslts', + 'lipsum', + 'rvwrite', + 'tamefloats', + 'ordinalpt', + 'perpage', + 'settosize', + 'varsfromjobname', + 'iching', + 'fenixpar', + 'fileerr', + 'logbox', + 'eolgrab', + 'he-she', + 'plainmisc', + 'fmtcount', + 'xstring', + 'somedefs', + 'engord', + 'LaTeX-tds', + 'regexpatch', + 'zahl2string', + 'compsci', + 'coollist', + 'sines', + 'hopatch', + 'ifoddpage', + 'dPS', + 'collectbox', + 'settosize-ltx', + 'xesearch', + 'xnewcommand', + 'forloop', + 'keyval', + 'picture', + 'calorie', + 'sty2dtx' + ], + 'text decoration (underline, etc.)' => [ + 'ushort', + 'shadowtext', + 'undertilde', + 'esvect', + 'textcase', + 'ulem', + 'pst-3d', + 'fakebold', + 'fixmetodonotes', + 'underlin', + 'umoline', + 'changes', + 'wiggly', + 'subscript', + 'soulpos', + 'xcmr', + 'underlin-generic', + 'soulutf8', + 'soul' + ], + 'music' => [ + 'abc2mtex', + 'biblatex-musuos', + 'M-Tx', + 'Mid2TeX/Free', + 'byzfonts', + 'pmxChords', + 'dvdcoll', + 'musictex', + 'gtrcrd', + 'musixtex-fonts', + 'musixtex', + 'gchords', + 'abc' + ], + 'glossary, dictionary' => [ + 'mfirstuc', + 'glosstex', + 'listofsymbols', + 'glossaries', + 'genindex', + 'gb4e', + 'gloss', + 'glotex', + 'glossaries-accsupp', + 'makeglos', + 'glossary', + 'lexikon', + 'robustindex', + 'makeglossariesgui' + ], + 'bibliography, management' => [ + 'biblos', + 'dinat', + 'adrconv', + 'jmb', + 'acs', + 'abstyles-orig', + 'babelbib', + 'pybib', + 'chicago', + 'decsci', + 'easybib', + 'biblatex-mla', + 'references', + 'hellas', + 'aaai-named', + 'biblist', + 'bibtex-test', + 'chembst', + 'development', + 'drftcite', + 'isi2bibtex', + 'splitbib', + 'alphanumb', + 'bibtopicprefix', + 'humannat', + 'dk-bib', + 'footbib', + 'citesidx', + 'JavaBib', + 'chicago-annote', + 'jabref', + 'is-bst', + 'docarc', + 'catalanbib', + 'directory', + 'mkbib', + 'biblio-perl', + 'bibtex-examples', + 'pybliographer', + 'bibexport', + 'citeref', + 'bibarts', + 'achicago', + 'Econometrica', + 'bibcard', + 'bibview-x', + 'bibhtml', + 'alphabib', + 'bibdb', + 'bibtex', + 'apalike2', + 'ecclesiastic', + 'finplain', + 'bibutils', + 'chem-journal', + 'ebib', + 'biblatex-historian', + 'findbib', + 'Synapsen', + 'jneurosci', + 'listbib', + 'bibfile-reformat-pages', + 'jurabib', + 'tex2bib', + 'checkcites', + 'bibclean', + 'bibweb', + 'bibsort', + 'camel', + 'bibfind', + 'EndNote2bib', + 'mab2bib', + 'ams2bib', + 'cite', + 'crosstex', + 'chapterbib', + 'bib2dvi', + 'biblatex-science', + 'custom-bib', + 'jphysiol', + 'obas', + 'getrefs', + 'namunsrt', + 'biblatex-authoryear-icomp-tt', + 'bibleref', + 'biblatex-apa', + 'bibtexmng', + 'refer', + 'bibunits', + 'refer-tools', + 'amsrefs', + 'bibtool', + 'bibindex', + 'acmtrans', + 'ascelike', + 'breakcites', + 'tib', + 'bibtopic', + 'jas99_m', + 'jbact', + 'authordate', + 'r2bib', + 'authorindex', + 'biblatex', + 'qbibman', + 'biblatex-dw', + 'bibtools', + 'xbibtex', + 'jqt1999', + 'bibtex8bit', + 'bibbuild', + 'rfc2bib', + 'bib2xhtml', + 'fixbbl', + 'biblatex-jura', + 'librarian', + 'din1505', + 'annotate', + 'bbs', + 'humanbio', + 'jtb', + 'chicagoa', + 'bib2ml', + 'bbl2html', + 'Bibex', + 'JBibtexManager', + 'jurarsp', + 'bib-greek', + 'tkbibtex', + 'jcc', + 'CJ', + 'historische-zeitschrift', + 'iopart-num', + 'aichej', + 'doipubmed', + 'apasoft', + 'text2bib', + 'inlinebib', + 'apacite', + 'biblatex-chem', + 'BiBLE', + 'fbs', + 'printbib', + 'compactbib', + 'annotation', + 'indxcite', + 'bidstobibtex', + 'automatica', + 'chbibref', + 'arXivBib', + 'gost', + 'IEEEannot', + 'achemso', + 'harvard', + 'abstyles-babel', + 'bibextract', + 'BibTeX Database Generator', + 'ijqc', + 'ecta', + 'bib-fr', + 'BibTeX-help', + 'mrcheckbib', + 'economic', + 'bibview', + 'isi2bib-vim', + 'bibplain', + 'xbibfile', + 'lookbibtex', + 'hypernat', + 'jtbnew', + 'mathscinet', + 'achicago-bst', + 'btOOL', + 'biblook', + 'backref', + 'mathsci2bibtex' + ], + 'page geometry (margins, etc.)' => [ + 'fixpdfmag', + 'gmeometric', + 'a0poster', + 'typearea', + 'koma-script', + 'portland', + 'context-typearea', + 'leading', + 'addlines', + 'fullpage', + 'typogrid', + 'tikzpagenodes', + 'showframe', + 'layouts', + 'savetrees', + 'xtemplate', + 'lscape', + 'pdflscape', + 'aeb-mobile', + 'screen', + 'fullpict', + 'layout', + 'indent', + 'changepage', + 'card-set', + 'zwpagelayout', + 'isorot', + 'vmargin', + 'boundbox', + 'hoffset-voffset', + 'a4', + 'pos-at', + 'LatexPaper', + 'Layaureo', + 'pagegrid', + 'textarea', + 'acrotex-web', + 'rmpage', + 'geometry', + 'changelayout', + 'fullwidth' + ], + 'literate programming' => [ + 'tweb', + 'funnelweb', + 'wordweb', + 'doc', + 'docstrip', + 'web', + 'lpw', + 'colordoc', + 'tango-weevil', + 'source2e', + 'web2c', + 'c2latex', + 'tie', + 'How to Package Your LaTeX Package', + 'makeprog', + 'fweb', + 'tangle', + 'noweb', + 'nicetext', + 'statrep', + 'matlabweb', + 'awb', + 'schemeTeX', + 'webfiles', + 'makedtx', + 'pydocstrip', + 'xdoc', + 'cweb-hy', + 'cweb-latex', + 'weave', + 'ydoc', + 'gates', + 'ltxdoc', + 'c2cweb', + 'catchfilebetweentags', + 'tclldoc', + 'DTX gallery', + 'protex', + 'web9pt', + 'textoolspro', + 'cwebbin', + 'literate', + 'texpack', + 'cwebx', + 'pl', + 'ctie', + 'cweb', + 'webmacss', + 'sty2dtx' + ], + 'publisher\'s style' => [ + 'aiaa', + 'sc21', + 'aguplus', + 'nature', + 'acs', + 'ejpecp', + 'mnras-plain', + 'acm', + 'ist21', + 'nostarch', + 'mpdinbrief', + 'systcontrolletters', + 'biblatex-mla', + 'geophysics', + 'amsart', + 'philosophersimprint', + 'mentis', + 'emulateapj', + 'tugboat-plain', + 'elbioimp', + 'mitpress', + 'chembst', + 'uspatent', + 'siam', + 'ptptex', + 'iagproc', + 'smflatex', + 'cea', + 'acmconf', + 'amsbook', + 'lps', + 'chicago-annote', + 'wmaainf', + 'jamtimes', + 'ametsoc', + 'famt', + 'Econometrica', + 'deproc', + 'sf298', + 'chem-journal', + 'biblatex-historian', + 'euproposal', + 'apa6', + 'aastex', + 'dtk', + 'gaceta', + 'biblatex-nature', + 'siggraph', + 'biblatex-science', + 'ama', + 'beamer-fuberlin', + 'pracjourn', + 'biblatex-apa', + 'iwhdp', + 'sffms', + 'spie', + 'acmtrans', + 'iso', + 'elsarticle', + 'add-wes', + 'fac', + 'sae', + 'apa', + 'bbs', + 'jmlr', + 'chicagoa', + 'MEP article', + 'cmpj', + 'CJ', + 'bookform', + 'erdc', + 'Birkhaeuser', + 'resphilosophica', + 'achemso', + 'IEEEtran', + 'designcon', + 'cbe', + 'springer', + 'tugboat', + 'asaetr', + 'sugconf', + 'Vancouver', + 'business-research', + 'bgteubner', + 'computational-complexity', + 'kdgdocs', + 'estcpmm', + 'amscls', + 'biblatex-nejm' + ], + 'URLs, hyperlinks' => [ + 'hypdestopt', + 'hrefhide', + 'breakurl', + 'popupmenu', + 'memhfixc', + 'aeb-mlink', + 'morehype', + 'doi', + 'cweb-hy', + 'hyperref', + 'hypdvips', + 'gmiflink', + 'uri', + 'hyper', + 'footnotebackref', + 'hypbmsec', + 'hycolor', + 'cooltooltips', + 'bookmark', + 'hypcap', + 'issuulinks', + 'hypernat', + 'url', + 'xr-hyper' + ], + 'equations, subequations' => [ + 'eqnarray', + 'amstext', + 'automagic', + 'easyeqn', + 'amsmath', + 'cases', + 'subeqn', + 'cursor', + 'autonum', + 'oubraces', + 'empheq', + 'termlist', + 'envmath', + 'eqmark', + 'systeme', + 'linsys', + 'subeqnarray', + 'eqnarray209', + 'cancel', + 'hf-tikz', + 'apeqnum', + 'breqn', + 'tkz-linknodes', + 'eqname', + 'dotseqn', + 'alleqno', + 'gauss', + 'deleq', + 'dmhgener', + 'mhequ' + ], + 'page breaks' => [ + 'needspace', + 'nextpage', + 'afterpage', + 'statrep', + 'nowidow' + ], + 'symbols, text' => [ + 'tipa-de', + 'tccompat', + 'losymbol', + 'manfnt', + 'nomencl', + 'frenchquote', + 'oands', + 'romanbar', + 'textgreek', + 'adfsymbols', + 'upquote', + 'linearA', + 'niceframe-type1', + 'nomentbl', + 'ugaritic', + 'musixtex-t1fonts', + 'symbolindex', + 'recycle', + 'actuarialangle', + 'EAN', + 'va', + 'umrand', + 'trajan', + 'uncial', + 'wasy2-ps', + 'quotmark', + 'mathcomp', + 'cookingsymbols', + 'tex-gyre-cursor', + 'lips', + 'listofsymbols', + 'textcomp', + 'ocr-b-outline', + 'mflogo-font', + 'pigpen', + 'pst-asr', + 'semaphor', + 'pifont', + 'mdsymbol', + 'vicentino', + 'wasy2', + 'wasy', + 'underscore', + 'ccicons', + 'ugarite', + 'countriesofeurope', + 'skak', + 'nuc', + 'ogonek', + 'zip', + 'webomints', + 'tfrupee', + 'genealogy', + 'upca', + 'skull', + 'oldlatin', + 'tgothic', + 'tabfigures', + 'enparen', + 'manual', + 'savesym', + 'sansmathaccent', + 'babyloniannum', + 'quote', + 'marvosym', + 'subscript', + 'sueterlin', + 'embrac', + 'decorule', + 'txfontsb', + 'bartel-chess-fonts', + 'smartmn', + 'vispeech', + 'phonetic', + 'texlogos', + 'lcd', + 'yinit', + 'abraces', + 'nkarta', + 'util-half', + 'elvish', + 'aspectratio', + 'xcmr', + 'wsuipa', + 'phaistos', + 'yagusylo', + 'moonphase', + 'starfont', + 'SkakNew', + 'quotes', + 'oca', + 'viking', + 'magic' + ], + 'make, compilation systems' => [ + 'gitinfo', + 'latex-make', + 'chktex', + 'mfpic', + 'proof', + 'vhistory', + 'metainfo', + 'svn-prov', + 'refcheck', + 'docstrip', + 'lmacs', + 'classlist', + 'texdiff', + 'texdirflatten', + 'latexdiff', + 'testflow', + 'ldiff', + 'tagging', + 'texlog_extract', + 'AutoLaTeX', + 'texliveonfly', + 'texdepend', + 'LaTeX for Autoconf', + 'rerunfilecheck', + 'tex_it', + 'subfiles', + 'runtex', + 'frankenbundle', + 'svn', + 'rake4latex', + 'rcs', + 'flatten', + 'lacheck', + 'prv', + 'TVS', + 'counttexruns', + 'ShLaTeX', + 'vc', + 'ifdraft', + 'versions', + 'mk', + 'ltxdiff', + 'lintex', + 'progress', + 'rcs-pln', + 'mkjobtexmf', + 'logreq', + 'match_parens', + 'ctanify', + 'texdeps', + 'wordcount', + 'latexmk', + 'bundledoc', + 'mversion', + 'svn-multi', + 'latexn', + 'snapshot', + 'make_latex', + 'mylatex', + 'ltxinput', + 'Imake-TeX', + 'texi2dvi-latest', + 'ant-worker-tasks', + 'rcs-multi', + 'chapterfolder', + 'stampinclude', + 'latexmake', + 'svninfo', + 'qstest', + 'version', + 'subdocs', + 'rcsinfo', + 'syntonly', + 'artex', + 'volumes', + 'go-make' + ], + 'include file' => [ + 'embedfile', + 'askinclude', + 'hypgotoe', + 'hexdump', + 'texdirflatten', + 'fortran', + 'filehook', + 'maybeload', + 'excludeonly', + 'texdepend', + 'FiNK', + 'flatten', + 'db', + 'inputfile', + 'latexpand', + 'versions', + 'chapterbib', + 'annot-pro', + 'attachfile', + 'includex', + 'flatex', + 'texdeps', + 'pdfpages', + 'catchfile', + 'newclude', + 'verbasef', + 'extract', + 'import', + 'vrbexin', + 'inputtrc', + 'ltxinput', + 'chapterfolder', + 'readprov', + 'ginpenc', + 'stampinclude', + 'verbatimcopy', + 'currfile', + 'newfile', + 'attachfile2', + 'fileinfo', + 'version', + 'esk', + 'csvsimple' + ], + 'external programs, interfacing' => [ + 'DB_process', + 'odsfile', + 'makeplot', + 'nlatexdb', + 'bit2spr', + 'LaTeXDB', + 'Exceltex', + 'MetaPlot', + 'sgmlcmpt', + 'csvtools', + 'xl2latex', + 'bibweb', + 'de-macro', + 'oletex', + 'ratexdb', + 'context-inifile', + 'amspell', + 'maketable', + 'ConTeXt-gnuplot', + 'aplweb', + 'autoview', + 'delimtxt', + 'catchfilebetweentags', + 'Midi2TeX/Free', + 'csv2latex', + 'mattex', + 'context-filter', + 'schemeweb', + 'bashful', + 'interpreter', + 'filemod', + 'autotab', + 'morewrites', + 'bidstobibtex', + 'python', + 'arXivBib', + 'mctex', + 'techexplorer', + 'SQLTeX', + 'lualatex-platform', + 'BibTeX Database Generator', + 'pst-geo', + 'pst-plot', + 'Array Maker', + 'Excel-to-LaTeX', + 'csvtolatex' + ], + 'title, maketitle' => [ + 'sc21', + 'ist21', + 'titling', + 'titlepage-uni-dortmund', + 'rectopma', + 'titlepic', + 'titlepages', + 'titlefoot' + ], + 'presentations (powerpoint-like, using a beamer)' => [ + 'beamersubframe', + 'latex-course', + 'pdfslide', + 'texpower', + 'beamer2thesis', + 'talk', + 'beamerthemeJLTree', + 'beamerthemenirma', + 'statex', + 'morehype', + 'appendixnumberbeamer', + 'hobete', + 'cntdwn', + 'colourchange', + 'ha-prosper', + 'uwmslide', + 'beamer-fuberlin', + 'powerdot-fuberlin', + 'dynblocks', + 'beamer-tut-pt', + 'beameraudience', + 'context-taspresent', + 'elpres', + 'tpslifonts', + 'beamer', + 'soton', + 'spot', + 'slideshow', + 'ppr-prv', + 'powerdot', + 'prosper', + 'sansmathaccent', + 'GuITbeamer', + 'pdfscreen', + 'lecturer', + 'ifmslide', + 'tdclock', + 'xcomment', + 'present', + 'ppower4' + ], + 'headers, footers' => [ + 'fixltx2e', + 'turnthepage', + 'fancyhdr-it', + 'koma-script', + 'floatnohead', + 'fix2col', + 'layouts', + 'pageno', + 'endheads', + 'drafthead', + 'prelim2e', + 'underlin', + 'thumb', + 'nccfancyhdr', + 'fancyhdrboxed', + 'fancyhdr', + 'flipbook', + 'biihead', + 'tex-label' + ], + 'abstract' => [ + 'abstbook', + 'abstract' + ], + 'columns, multiple columns' => [ + 'midfloat', + 'fixltx2e', + 'ltxgrid', + 'multenum', + 'pdfcolparallel', + 'eledpar', + 'iagproc', + 'ledpar', + 'flushend', + 'parcolumns', + 'threecolumn', + 'threecol', + 'split', + 'cuted', + 'ftnright', + 'multicap', + 'pdfcolparcolumns', + 'doublecol', + 'ltxtable', + 'gridset', + 'fix2col', + 'parrun', + 'pst-exa', + 'grid', + 'balanced', + 'parallel', + 'twocolumns', + 'multitoc', + 'paracol', + 'multicol', + 'dblfloatfix', + 'adjmulticol', + 'dblfnote', + 'multicolpar', + 'balance', + 'vwcol' + ], + 'Computer Science' => [ + 'listings-ext', + 'acs', + 'fbithesis', + 'acm', + 'algorithm2e', + 'listings', + 'drawstack', + 'syntax-mdw', + 'register', + 'fortran', + 'zed-csp', + 'acmconf', + 'GasTeX', + 'struktex', + 'javadoc', + 'syntax2', + 'tex-ewd', + 'ada', + 'objectz', + 'tkz-orm', + 'aaai', + 'algorithms', + 'jflap2tikz', + 'complexity', + 'clrscode', + 'UML', + 'ebnf', + 'latex-bnf', + 'pst-dbicons', + 'Finomaton', + 'context-algorithmic', + 'msc', + 'wotree', + 'nassflow', + 'expressg', + 'context-gantt', + 'siggraph', + 'lsc', + 'context-bnf', + 'vdm', + 'bnf-plain', + 'method', + 'slatex_scheme', + 'listingsutf8', + 'drv', + 'aplweb', + 'chomsky', + 'acmtrans', + 'idverb', + 'algorithmicx', + 'highlight', + 'grapher', + 'fac', + 'metauml', + 'jmlr', + 'UPmethodology', + 'newalg', + 'tesla', + 'CJ', + 'stmaryrd', + 'bytefield', + 'flow', + 'progkeys', + 'apl', + 'syngen', + 'consdiag', + 'hitec', + 'pgf-umlsd', + 'alg', + 'fchart', + 'computational-complexity', + 'pst-uml', + 'semantic', + 'acmproc', + 'rail' + ], + 'computer code, verbatim text' => [ + 'listings-ext', + 'verbatimbox', + 'llist', + 'vrb', + 'newverbs', + 'context-vim', + 'algorithm2e', + 'verbatim-pln', + 'listings', + 'upquote', + 'minted', + 'translation-moreverb-de', + 'program', + 'code', + 'verbtext', + 'alltt2', + 'cnoweb', + 'fortran', + 'javadoc', + 'grverb', + 'showexpl', + 'algorithms', + 'hyphenat', + 'nicetext', + 'statrep', + 'alltt', + 'clrscode', + 'sagetex', + 'ebnf', + 'webfiles', + 'context-algorithmic', + 'listing-pln', + 'context-bnf', + 'method', + 'lgrind', + 'slatex_scheme', + 'verbdef', + 'listingsutf8', + 'texments', + 'tgrind', + 'pst-exa', + 'c-pascal', + 'lstaddons', + 'documentation', + 'jvlisting', + 'listing', + 'idverb', + 'algorithmicx', + 'highlight', + 'c2cweb', + 'verbasef', + 'examplep', + 'wiki', + 'metauml', + 'menukeys', + 'vrbexin', + 'shortvrb', + 'sverb', + 'path', + 'spverbatim', + 'cmtt', + 'sasnrdisplay', + 'newalg', + 'schemeweb', + 'astyped', + 'verbments', + 'verbatim', + 'verbtim2', + 'verbatim-gen', + 'progkeys', + 'gincltex', + 'newvbtm', + 'tinyc2l', + 'example', + 'version', + 'moreverb', + 'smalltalk', + 'cprotect', + 'list', + 'verbatim-tub', + 'cprog', + 'alg', + 'gmverb', + 'fancyvrb', + 'url', + 'pseudocode', + 'codedoc', + 'texlist' + ], + 'front matter, end matter' => [ + 'toc-zar', + 'coverpage', + 'losymbol', + 'titlepage-uni-dortmund', + 'pagenote', + 'tocloft', + 'frontespizio', + 'tocbibind', + 'titlepic', + 'toc', + 'titleref', + 'titles', + 'titlepages', + 'toolbox', + 'tocvsec2', + 'texindex', + 'titlefoot' + ], + 'symbols, mathematical' => [ + 'bbm', + 'extdash', + 'losymbol', + 'initials', + 'qed', + 'bg', + 'maybemath', + 'mathrsfs', + 'cheq', + 'msym', + 'trfsigns', + 'tt2001', + 'la', + 'calrsfs', + 'amsopn', + 'ziffer', + 'astro', + 'karta', + 'holtpolt', + 'braille', + 'niceframe-type1', + 'nomentbl', + 'extpfeil', + 'amsmath', + 'libgreek', + 'bm', + 'symbolindex', + 'context-mathsets', + 'belleek', + 'csfonts', + 'esint-type1', + 'multiobjective', + 'ar', + 'venndiagram', + 'cchess', + 'colonequals', + 'rsfso', + 'mnsymbol', + 'kelly-greek-font', + 'arcs', + 'dingbat', + 'eurosym', + 'cmoefont', + 'amslatex', + 'paresse', + 'esvect', + 'pi', + 'The Comprehensive LaTeX Symbol List.', + 'listofsymbols', + 'complexity', + 'CClicenses', + 'bbding', + 'trsym', + 'amsbsy', + 'dice', + 'byzfonts', + 'hands', + 'inslrmin', + 'frege', + 'fixmath', + 'cryst', + 'mdsymbol', + 'bguq', + 'nccbbb', + 'GuITlogo', + 'fdsymbol', + 'esint', + 'asana-math', + 'boldtensors', + 'dictsym', + 'loggates', + 'ifsym', + 'braket', + 'bbm-macros', + 'qsymbols', + 'bbold', + 'code128', + 'rsfs', + 'hfoldsty', + 'harpoon', + 'fouridx', + 'dotlessj', + 'appelt-chess', + 'rccol', + 'carolmin-t1', + 'circle', + 'anti', + 'ascii-chart', + 'inslrmaj', + 'exscale', + 'gensymb', + 'mbboard', + 'carolmin', + 'euro-ce', + 'turnstile', + 'amstex', + 'harmony', + 'savesym', + 'cun', + 'sansmathaccent', + 'qm', + 'cmolddig', + 'mathalfa', + 'elmath', + 'cmastro', + 'bigints', + 'realscripts', + 'proba', + 'sansmath', + 'subsupscripts', + 'mathastext', + 'smartmn', + 'centernot', + 'chemarr', + 'ean13isbn', + 'mleftright', + 'cm-super', + 'cmarrows', + 'tensor', + 'shuffle', + 'eurofont', + 'simplewick', + 'i-ching', + 'flexisym', + 'dotlessi', + 'bfsymb', + 'scriptfonts', + 'leftidx', + 'Extensive Arrows.', + 'fge', + 'upgreek', + 'fonetika', + 'prodint', + 'isomath', + 'jablantile', + 'euroitc', + 'doublestroke', + 'faktor', + 'greenpoint', + 'csfonts-t1', + 'yagusylo', + 'isonums', + 'ellipsis', + 'ncccomma', + 'ionumbers', + 'cmll', + 'bookhands', + 'decimal', + 'eco', + 'keystroke', + 'pzccal' + ], + 'alignment' => [ + 'longnamefilelist', + 'tabbing' + ], + 'editing, graphical work environment' => [ + 'check', + 'TeXmacs', + 'srcltx', + 'LaTexMng', + 'MicroIMP', + 'epmtfe', + 'vmspell', + 'lyx', + 'MPEdit', + 'alpha', + 'easyLaTeX', + 'texdiff', + 'texshell32', + 'xtexcad', + 'dinbrief-gui', + 'meta-mode', + 'LaTeX-WIDE', + 'yi4latex', + 'latex4jed', + 'auctex', + 'NEdit-LaTeX-Extensions', + 'XteXShell', + 'pmcstex', + 'LaTable', + 'JavaBib', + 'docarc', + 'shapepatch', + 'mftinc', + 'tsconfig', + 'WinEdt', + 'xtem', + 'MathType', + 'ispell', + 'MathSpad', + 'filehdr', + 'latexwizard', + 'ftetx', + 'Sikumuna', + 'javascript_TeXed', + 'ebib', + 'unfinished', + 'scientificauthor', + 'brief_t', + 'kile', + 'pdfsync', + 'LaTeXPiX', + 'win32-emacs-auctex', + 'occam', + 'jlm', + 'latexcad', + 'standalone', + 'storecmd', + 'xetal', + 'meper', + 'iTe', + 'winlatex', + 'vpe', + 'gbrief-creator', + 'fig2sty', + 'TeXnicCenter', + 'wordcount', + 'acroreloadpdf', + 'TpX', + 'xbibtex', + 'word2tex', + 'changes', + 'aspell', + 'gtex-letter', + 'TeXshell', + 'lated', + 'JBibtexManager', + 'texpict', + 'tkbibtex', + 'JPicEdt', + 'mkbangtex', + 'tcltexed', + 'cms4talks', + 'prerex', + 'Ultra-TeX', + 'xfig', + 'WinTeX XP', + 'FiXme', + 'u8tex', + 'shortcuttool', + 'plasTeX', + 'eukleides', + 'visualtex', + 'check-parens', + 'pst-support', + 'xlatex', + 'latexdraw', + 'SmileTeX', + 'equationauthor', + 'todonotes', + 'firefox_ctan_plugins', + 'mewltx', + 'winshell', + 'synctex-parser', + 'xbibfile', + 'swiftex', + 'texlipse', + 'KTeXShell', + 'tktexcad', + 'ISO-TeX', + 'makeglossariesgui', + 'LEd', + 'latexcount', + 'texshop', + 'unicode', + 'WordML2LaTeX' + ], + 'Mathematics (the subject)' => [ + 'tkz-euclide', + 'subdepth', + 'amsppt', + 'pst-eucl', + 'cool', + 'context', + 'sfmath', + 'noitcrul', + 'amsopn', + 'amsart', + 'ytableau', + 'young', + 'tkz-fct', + 'siam', + 'amsmath', + 'context-mathsets', + 'newproof', + 'youngtab', + 'multiobjective', + 'amsbook', + 'mfpic4ode', + 'acroflex', + 'polynomial', + 'amslatex', + 'bussproofs', + 'mathcomp', + 'LKproof', + 'mathdots', + 'commath', + 'statex', + 'ulsy-ps', + 'taylor', + 'delim', + 'stackrel', + 'mathtex', + 'amsbsy', + 'mathbbol', + 'mathtools', + 'amsproc', + 'fixmath', + 'amscd', + 'mathstyle', + 'polynom', + 'tensind', + 'oubraces', + 'tabvar', + 'nccmath', + 'termlist', + 'syllogism', + 'digiconfigs', + 'envmath', + 'systeme', + 'array', + 'linsys', + 'synproof', + 'voss-mathcol', + 'resizegather', + 'gene-logic', + 'circle', + 'amsthm', + 'esdiff', + 'mathcmd', + 'vector', + 'mathlig', + 'braids', + 'Nath', + 'turnstile', + 'amstex', + 'thepdfnumber', + 'mh', + 'pgfplots', + 'begriff', + 'breqn', + 'longdiv', + 'amslatex-primer', + 'proofs', + 'rec-thy', + 'AkkTeX', + 'proba', + 'overrightarrow', + 'mathastext', + 'permute', + 'sobolev', + 'lualatex-math', + 'tensor', + 'accents', + 'unicode-math', + 'steinmetz', + 'tabularcalc', + 'nicefrac', + '12many', + 'xfrac', + 'gauss', + 'functan', + 'isomath', + 'statex2', + 'rmthm', + 'decimal', + 'amscls' + ], + 'thesis style' => [ + 'techreport', + 'ryethesis', + 'seuthesis', + 'umthesis', + 'fbithesis', + 'pitthesis', + 'unswthesis', + 'pkuthss', + 'sapthesis', + 'ulthese', + 'psu-thesis', + 'uiucthesis', + 'hpsdiss', + 'titlepage-uni-dortmund', + 'thuthesis', + 'unamthesis', + 'classicthesis', + 'withesis', + 'suthesis', + 'vxu', + 'uafthesis', + 'thmbox', + 'ut-thesis', + 'gatech-thesis', + 'thesis', + 'uothesis', + 'utorontothesis', + 'droit-fr', + 'lifia-th', + 'jasthesis', + 'uhthesis', + 'msu-thesis', + 'pittetd', + 'pmdpl', + 'uowthesis', + 'tui', + 'frontespizio', + 'ebsthesis', + 'adfathesis', + 'uwthesis209', + 'york-thesis', + 'muthesis', + 'hrlatex', + 'uwthesis', + 'AkkTeX', + 'utthesis', + 'uaclasses', + 'thesis-titlepage-fhac', + 'arsclassica', + 'jkthesis', + 'stellenbosch', + 'IMTEKda', + 'toptesi', + 'suftesi', + 'ucdavisthesis', + 'uscthesis', + 'ucthesis', + 'disser', + 'elteikthesis', + 'kdgdocs', + 'nddiss', + 'umich-thesis', + 'afthesis', + 'hepthesis' + ], + 'punctuation' => [ + 'eqell', + 'context-french', + 'xpunctuate', + 'nicetext', + 'fnpct', + 'frenchponct' + ], + 'table of contents' => [ + 'titletoc', + 'automagic', + 'koma-script', + 'morehype', + 'autotoc', + 'longtocline', + 'layouts', + 'fixmetodonotes', + 'phoncard', + 'alnumsec', + 'tocbibind', + 'multitoc', + 'notoccite', + 'minitoc', + 'nccsect', + 'shorttoc' + ], + 'marginal material' => [ + 'marginfix', + 'mcaption', + 'mhack', + 'marginnote', + 'thumbs', + 'marginote', + 'draft', + 'sidenotes', + 'mparhack', + 'context-fixme', + 'titlesec', + 'thumby', + 'edmargin', + 'margbib', + 'vertbars', + 'fixmetodonotes', + 'secret', + 'pdfmarginpar', + 'minipage-marginpar', + 'FiXme', + 'marginal', + 'showkeys', + 'randbild', + 'marnote', + 'showlabels', + 'fancytabs' + ], + 'Social Science' => [ + 'apalike2', + 'pgfgantt', + 'apa', + 'apasoft', + 'apacite' + ], + 'encodings, Unicode' => [ + 'tccompat', + 'pxcjkcat', + 'rtkinenc', + 'tipa', + 'latin2jk', + 'unisugar', + 'xpinyin', + 'uptex', + 'verbtext', + 'hyph-utf8', + 'codepage', + 'scrindex', + 'csx', + 'omega', + 'GELLMU', + 'relenc', + 'cm-unicode', + 'selinput', + 'newunicodechar', + 'maltese', + 'asana-math', + 'pmboxdraw', + 'babel', + 'ly1', + 'ucs', + 'cptex', + 'listingsutf8', + 'EUenc', + 'xunicode', + 'convert', + 't2', + 'inputenc', + 'latin3jk', + 'utf2any', + 'stix', + 'latin1jk', + 'mkbangtex', + 'ucharclasses', + 'itrans-processor', + 'luainputenc', + 'u8tex', + 'ginpenc', + 'koi8', + 'unicode-math', + 'b1encoding', + 'lhcyr', + 'greek-inputenc', + 'stringenc', + 'xetex-itrans', + 'euxunicode', + 'ISO-TeX', + 'cyrillic', + 'soulutf8', + 'encTeX', + 'inputenx', + 'xetex-devanagari', + 'unicode', + 'lgrx' + ], + 'minipage' => [ + 'genmpage', + 'boxedminipage', + 'eqparbox', + 'varwidth' + ], + 'output format other than PDF (HTML, etc.)' => [ + 'hpgl2ps', + 'dvipng', + 'catdvi', + 'twoup-gen', + 'typehtml', + 'l2x', + 'dvitty', + 'latex2html', + 'texi2www', + 'tex2rtf', + 'morehype', + 'nicefilelist', + 'bibhtml', + 'myfilist', + 'mimetex', + 'longnamefilelist', + 'vutex', + 'mdvi', + 'gladtex', + 'TeX Converter', + 'xetal', + 'noTeX', + 'obas', + 'screen', + 'DVItoLN03', + 'latex2rtf', + 'l2a', + 'pclnfss', + 'ln03dvi', + 'bib2xhtml', + 'pstoedit', + 'tex2page', + 'textool', + 'hyperlatex', + 'dvi2bitmap', + 'fotex', + 'protex', + 'Beebe-DVI', + 'ltx2rtf', + 'dvisvgm', + 'bbl2html', + 'latex2man', + 'tex4ht', + 'plasTeX', + 'ltoh', + 'jadetex', + 'dviljk', + 'aebXMP', + 'texi2html', + 'tth', + 'LatexRender', + 'crudetype' + ], + 'vita, CV, resume' => [ + 'res', + 'moderntimeline', + 'koma-moderncvclassic', + 'cv', + 'harnon-cv', + 'moderncv', + 'ECV', + 'mycv', + 'translation-europecv-de', + 'currvita', + 'CurVe', + 'esieecv', + 'CVsty', + 'vita', + 'vita209', + 'europecv', + 'simplecv', + 'translation-ecv-de', + 'resumemac', + 'tucv', + 'ibmres-tex' + ], + 'help, documentation, FAQ' => [ + 'tipa-de', + 'ltnews', + 'epslatex', + 'ntg', + 'dante-book-reviews', + 'mtbe', + 'msg', + 'pauldoc', + 'pointruler', + 'maad', + 'amsmath-it', + 'latex-course', + 'ruler', + 'texinfo-latest', + 'lshort-japanese', + 'lgc-examples', + 'presentations', + 'lshort-persian', + 'xypic-tut-pt', + 'LaTeX-brochure', + 'texdoctk', + 'templates-sommer', + 'pstricks-examples-en', + 'fifinddo-info', + 'XeTeXref', + 'lshort-italian', + 'compact-symbols', + 'translation-array-fr', + 'etoolbox-de', + 'doc', + 'docstrip', + 'texdoc', + 'ntsfaq', + 'book-examples', + 'germdoc', + 'fontinstallationguide', + 'impatient', + 'tlc2-examples', + 'colordoc', + 'gleitobjekte', + 'hypdoc', + 'latex-hlp', + 'translation-tabbing-fr', + 'ntheorem-vn', + 'bibtex-test', + 'ttn', + 'TeX-mag', + 'GuIT-corso', + 'tugboat-toc', + 'pstricks-examples', + 'computer-typesetting-using-latex', + 'first-latex-doc', + 'ntg-maps', + 'dvistd', + 'lshort-spanish', + 'l2tabu-french', + 'latex2e-help-texinfo', + 'TeXbyTopic', + 'fancyhdr-it', + 'guia-bibtex', + 'typografie', + 'l2picfaq', + 'tcobrowser', + 'lgc2-examples', + 'Portable MikTeX', + 'cursolatex', + 'lshort-vietnamese', + 'texi2www', + 'MemoirChapterStyles', + 'latex-bib-ex', + 'lshort-portuguese-br', + 'lshort-korean', + 'ttf-howto', + 'free-math-font-survey', + 'patgen2-tutorial', + 'faq-de', + 'comp-fonts-FAQ', + 'einfuehrung', + 'latexcheat-ptbr', + 'latex-tabellen', + 'blackboard', + 'babel-doc', + 'translation-biblatex-de', + 'biblio', + 'bibtex-examples', + 'latexcheat-esmx', + 'apprends-latex', + 'metafont-beginners', + 'PicTeXsum', + 'asymptote-manual-zh-cn', + 'catalogue', + 'gmdoc-enhance', + 'pst-eucl-translation-bg', + 'tipos', + 'dox', + 'pdf-forms-tutorial', + 'l2tabu', + 'turkishintro', + 'fancyfolien', + 'lshort-polish', + 'lshort-bulgarian', + 'UK-TeX', + 'vf-howto', + 'vf-knuth', + 'testmath', + 'latex-doc', + 'nag', + 'translation-dcolumn-fr', + 'docmfp', + 'pstdoc', + 'lshort-ukr', + 'TeXhax', + 'anleitung', + 'russian-help', + 'geometry-de', + 'latex2e-reference', + 'TeEncontreX', + 'Il sistema PSfrag', + 'tabulars-e', + 'MFwL', + 'latex-sciences-humaines', + 'firststeps-xampl', + 'webguide', + 'lshort-turkish', + 'grfguide', + 'lshort-german', + 'asymptote-by-example-zh-cn', + 'texi2roff', + 'visualFAQ', + 'texmalli', + 'morehelp', + 'pmdpl', + 'beamer-tut-pt', + 'latexfileinfo-pkgs', + 'ctex-faq', + 'lshort-portuguese', + 'ydoc', + 'przechlewski-book', + 'layouts', + 'lshort-zh-cn', + 'lwc-examples', + 'dvips-shell', + 'latex4wp-it', + 'lshort-czech', + 'doc-k', + 'voss-mathcol', + 'latex-doc-ptr', + 'tkz-doc', + 'templates-fenn', + 'csname-doc', + 'texinfo', + 'pphlp', + 'dialogl', + 'latex4wp', + 'tex-overview', + 'lshort-mongolian', + 'examplep', + 'svg-inkscape', + 'tip', + 'layout', + 'macros2e', + 'math-into-latex-4', + 'lkort', + 'texbuch', + 'l2tabu-english', + 'makedoc', + 'maths-symbols', + 'intro-scientific', + 'DTX gallery', + 'lshort', + 'koma-script-examples', + 'TeXbook', + 'NTS-L', + 'lshort-mongol', + 'translation-booktabs-fr', + 'mil3', + 'gentl-gr', + 'PWT', + 'fancyhdrboxed', + 'neufont', + 'components', + 'lb2-examples', + 'lshort-slovak', + 'gmdoc', + 'tabsatz', + 'doc-pictex', + 'fepslatex', + 'pstricks-calcnotes', + 'mwe', + 'lshort-finnish', + 'math-e', + 'simplified-latex', + 'lshort-russian', + 'xetexfontinfo', + 'cfgguide', + 'faq-fr', + 'french-translations', + 'amslatex-primer', + 'translation-natbib-fr', + 'mathesatz-examples', + 'uktug-bask', + 'Metafont book', + 'infwarerr', + 'latexcheat', + 'grafik', + 'usrguide', + 'fonteinf', + 'memdesign', + 'LaTeX-veryshortguide', + 'ltt', + 'lshort-english', + 'mpman-ru', + 'encguide', + 'context-notes-zh-cn', + 'latex-notes-zh-cn', + 'clsguide', + 'metafp', + 'translation-enumitem-de', + 'textoolspro', + 'lshort-slovenian', + 'protext', + 'fntguide', + 'tex-implementors', + 'translation-pst-jtree-de', + 'titlepages', + 'lualatex-doc', + 'TameTheBeast', + 'lshort-french', + 'htmlhelp', + 'gentle', + 'voss-mathmode', + 'translation-footmisc-de', + 'latex-essential', + 'blanks', + 'LaTeX-Referenz', + 'scriptfonts', + 'faq-es', + 'mil', + 'tbe', + 'modguide', + 'cyrmemo', + 'example', + 'BibTeX-help', + 'lshort-dutch', + 'context-top-ten', + 'wp-conv', + 'uk-tex-faq', + 'TeXline', + 'tex-font-errors-cheatsheet', + 'tex-references', + 'asymptote-faq-zh-cn', + 'typespec', + 'beginlatex', + 'ltx3pub', + 'MetaPost examples', + 'latex-pro-pragmatiky', + 'lshort-thai', + 'cyrguide', + 'tds', + 'free-math-font-survey-vn', + 'l2tabu-italian', + 'translation-chemsym-de', + 'latex-info', + 'l2tabu-spanish', + 'translation-arsclassica-de', + 'fontsampler', + 'microtype-de', + 'fcltxdoc', + 'codedoc', + 'amslatexdoc-vietnamese', + 'csquotes-de', + 'dvitype' + ], + 'boxed text, frames' => [ + 'shadebox', + 'oval', + 'minibox', + 'outerhbox', + 'boxit-ltx', + 'contour', + 'umrand', + 'fancybox', + 'boites', + 'shading', + 'boxedminipage', + 'flowfram', + 'Shaded theorems', + 'bclogo', + 'framed', + 'pbox', + 'sectionbox', + 'frame', + 'bbfig', + 'textfit', + 'border', + 'pst-fr3d', + 'pmboxdraw', + 'nolbreaks', + 'mdframed', + 'shadow', + 'parboxx', + 'crbox', + 'varwidth', + 'gradientframe', + 'shadbox', + 'rotating', + 'shade', + 'lhelp', + 'ovalfbox', + 'mboxfill', + 'niceframe', + 'tram', + 'psboxit', + 'multibox', + 'dashbox', + 'nccboxes', + 'ghab', + 'ncccropbox', + 'minipage-marginpar', + 'tcolorbox', + 'tracking', + 'boxit', + 'roundbox', + 'truncate', + 'textpos', + 'tabbingbox', + 'loval' + ], + 'graphics from outside TeX' => [ + 'pdftex-def', + 'aeb-tilebg', + 'bg', + 'gnuplottex', + 'epspdfconversion', + 'pst-pdf', + 'yt4pdf', + 'image-gallery', + 'graphicx', + 'metago', + 'karta', + 'treetex-ltx209', + 'barcodes', + 'pinlabel', + 'go', + 'asyfig', + 'circuit-macros', + 'graphfig', + 'graphics-pln', + 'dot2tex', + 'lgraph', + 'nccpic', + 'bmeps', + 'garrigues', + 'acroflex', + 'igo', + 'piechart', + 'svg', + 'epstopdf-pkg', + 'bmpsize', + '3DLDF', + 'PDFrack', + 'wmf2eps', + 'mma2ltx', + 'a2ping', + 'flashmovie', + 'epspdf-extra', + 'egplot', + 'graphicp', + 'textpath', + 'GraphicxSP', + 'photo', + 'suanpan', + 'feynmf', + 'pdfcrop', + 'infpic', + 'fldigigal', + 'pawpict', + 'epsfx', + 'bakoma-games', + 'gapfill', + 'Finomaton', + 'pstool', + 'bbfig', + 'pagedraw', + 'bpolynomial', + 'pgfgantt', + 'bm2ltx', + 'barcodes-vulis', + 'lpic', + 'drawing', + 'grfguide', + 'standalone', + 'ePiX', + 'eps2pdf', + 'feyn', + 'incgraph', + 'mpgraphics', + 'plates', + 'epsdice', + 'ConTeXt-gnuplot', + 'diagramf', + 'AeB slicing', + 'GraphConv', + 'pdf-mps-supp', + 'hilowres', + 'bm2font', + 'epsf', + 'rviewport', + 'psfrag', + 'bbcard', + 'labelfig', + 'pbmtogf', + 'svg-inkscape', + 'grapher', + 'overpic', + 'timing', + 'asymptote', + 'combinedgraphics', + 'pax', + 'automata', + 'pstex', + 'gmp', + 'boxedart4mac', + 'epstopdf', + 'pbm2tex', + 'dottex', + 'context-degrade', + 'MiniPlot', + 'interpol', + 'graphicx-psmin', + 'fig2eng', + 'psboxit', + 'texpict', + 'boxedeps', + 'animate', + 'sprite', + 'venn', + 'xwpick', + 'dosepsbin', + 'epstool', + 'thumbpdf', + 'epsfig', + 'eukleides', + 'degrade', + 'transfig', + 'PBMtoPK', + 'icons', + 'gincltex', + 'jpgfdraw', + 'featpost', + 'easyfig', + 'dot2texi', + 'asymptote-faq-zh-cn', + 'esk', + 'gnuplot', + 'tpic2pdftex', + 'graphics', + 'poster', + 'grfpaste', + 'GraphTeX', + 'limap', + 'blockdraw_mp', + 'purifyeps', + 'threed', + 'keystroke', + 'xetex-def', + 'cep' + ], + 'justification' => [ + 'ragged2e', + 'xhfill', + 'ragged' + ], + 'Humanities' => [ + 'xytree', + 'biblatex-juradiss', + 'vowel', + 'oands', + 'chicago', + 'mslapa', + 'tipa', + 'biblatex-fiwi', + 'philosophersimprint', + 'biblatex-luh-ipw', + 'eledpar', + 'pstrees', + 'engpron', + 'humannat', + 'ledpar', + 'bigfoot', + 'chicago-annote', + 'pst-vowel', + 'lingtrees', + 'drama', + 'Technica', + 'achicago', + 'xyling', + 'apa6e', + 'biblatex-chicago', + 'biblatex-historian', + 'pst-asr', + 'drs', + 'eledform', + 'apa6', + 'frege', + 'jurabib', + 'newapa', + 'metre', + 'gb4e', + 'tree-dvips', + 'dictsym', + 'gen', + 'synttree', + 'edmargin', + 'teubner', + 'junicode', + 'ledarab', + 'mla-paper', + 'biblatex-apa', + 'pst-Jtree', + 'chomsky', + 'juraabbrev', + 'biblatex-philosophy', + 'biblatex-dw', + 'codicefiscaleitaliano', + 'eledmac', + 'ebsthesis', + 'mla', + 'RST', + 'chicagoa', + 'oxford', + 'babyloniannum', + 'edmac', + 'covington', + 'uni-wtal-ger', + 'RRGtrees', + 'edfnotes', + 'linguex', + 'suftesi', + 'oldstandard', + 'ledmac', + 'multicolpar', + 'business-research', + 'rtsched', + 'ednotes', + 'achicago-bst', + 'poemscol' + ], + 'dropped letter, often initial letter' => [ + 'capparmode', + 'initials', + 'context-lettrine', + 'drcaps', + 'magaz', + 'lettrine', + 'yinit', + 'dropcaps' + ] + }, + 'functionality' => {}, + 'secondary' => { + 'Programming in TeX > + Other' => { + '_packages_' => [ + 'macros2e' + ] + }, + 'Document types > + Books' => { + '_packages_' => [ + 'eledpar', + 'eledmac' + ] + }, + 'Page-focused > + Footnotes' => { + '_packages_' => [ + 'superiors', + 'tablefootnote' + ] + }, + 'Fonts > + Other' => { + '_packages_' => [ + 'xecjk' + ] + }, + 'Fonts' => { + 'Text body + fonts' => { + '_packages_' => [ + 'hacm' + ] + }, + 'Support + files' => { + '_packages_' => [ + 'thaifonts-arundina', + 'japanese-otf' + ] + }, + 'Font + tools' => { + '_packages_' => [ + 'fontaxes' + ] + }, + 'Symbol + fonts' => { + '_packages_' => [ + 'babyloniannum' + ] + } + }, + 'Programming in TeX > + Package management' => { + '_packages_' => [ + 'myfilist', + 'versions', + 'fileinfo', + 'regexpatch' + ] + }, + 'Non-English languages > + Chinese, Japanese, Korean' => { + '_packages_' => [ + 'japanese-otf-uptex', + 'jfontmaps', + 'zhmCJK' + ] + }, + 'Programming in TeX' => { + 'Box + manipulation' => { + '_packages_' => [ + 'nolbreaks', + 'collectbox' + ] + }, + 'Date + and time' => { + '_packages_' => [ + 'serbian-date-lat' + ] + } + }, + 'Graphics > + Other' => { + '_packages_' => [ + 'flipbook', + 'decorule', + 'copyrightbox' + ] + }, + 'Document types' => { + 'Articles + ' => { + 'Journal styles' => { + '_packages_' => [ + 'apa6' + ] + } + }, + 'Other + ' => { + 'Music' => { + '_packages_' => [ + 'musixtex-fonts' + ] + } + } + }, + 'Page-focused > + Verbatim' => { + '_packages_' => [ + 'nicetext', + 'statrep', + 'wiki' + ] + }, + 'Infrastructure > + Extensions' => { + '_packages_' => [ + 'l3kernel', + 'l3packages' + ] + }, + 'Document types > + Curriculum Vita' => { + '_packages_' => [ + 'moderntimeline' + ] + }, + 'Document parts > + Bibliography' => { + 'Bibliographic styles' => { + '_packages_' => [ + 'biblatex-bwl' + ] + } + }, + 'Output' => { + 'PDF, + PostScript' => { + '_packages_' => [ + 'pdfbook', + 'storebox', + 'tkz-graph' + ] + } + }, + 'Tools' => { + 'Document + management' => { + '_packages_' => [ + 'catchfilebetweentags' + ] + }, + 'PDF + tools' => { + '_packages_' => [ + 'png2pdf', + 'fixpdfmag', + 'epspdfconversion', + 'yt4pdf', + 'pdftex', + 'refreshpdf', + 'epstopdf-pkg', + 'PDFrack', + 'xpdf', + 'epspdf-extra', + 'pdfcrop', + 'ps4pdf', + 'pdfsync', + 'auto-pst-pdf', + 'pdfrender', + 'pdfjam', + 'pst2pdf', + 'eps2pdf', + 'epspdf', + 'pdflscape', + 'pdf-mps-supp', + 'pdfcomment', + 'pdfpages', + 'pdfcrypt', + 'acroreloadpdf', + 'flippdf', + 'pdfmarginpar', + 'epstopdf', + 'pdf-trans', + 'thumbpdf', + 'pdftexcmds', + 'pdf14' + ] + }, + 'Convert + formats' => { + '_packages_' => [ + 'odsfile' + ] + } + }, + 'Graphics' => { + 'Inside + TeX' => { + '_packages_' => [ + 'bohr', + 'modiagram' + ] + }, + 'Postscript or + PDF graphics' => { + '_packages_' => [ + 'tkz-kiviat', + 'lapdf', + 'tkz-berge', + 'pst-rubans' + ] + } + }, + 'Page-focused > + Lists' => { + '_packages_' => [ + 'smartdiagram' + ] + }, + 'Page-focused > + Color' => { + '_packages_' => [ + 'mpcolornames' + ] + }, + 'Non-English languages > + Other' => { + '_packages_' => [ + 'dk-bib', + 'serbianpart', + 'basque-book', + 'persian-modern', + 'fonts-sipa-arundina' + ] + }, + 'Document parts' => { + 'Table of + contents' => { + '_packages_' => [ + 'fixmetodonotes' + ] + } + }, + 'Output > + Other' => { + '_packages_' => [ + 'screen', + 'tsemlines' + ] + }, + 'Page-focused' => { + 'Page + geometry' => { + '_packages_' => [ + 'tikzpagenodes', + 'xtemplate', + 'aeb-mobile' + ] + } + }, + 'Tools > + Other' => { + '_packages_' => [ + 'nlatexdb', + 'python' + ] + }, + 'Programming in TeX > + Programming structures' => { + '_packages_' => [ + 'morehype' + ] + }, + 'Document parts > + Appendix' => { + '_packages_' => [ + 'appendixnumberbeamer' + ] + }, + ' + Uncharacterized' => { + '_packages_' => [ + 'xytree', + 'eqell', + 'tipa-de', + 'ytex', + 'dviconcat', + 'tccompat', + 'ltnews', + 'trans', + 'ifxetex', + 'techreport', + 'softmaker-iceberg', + 'twoside', + 'epslatex', + 'ushort', + 'scalefnt', + 'ntg', + 'dante-book-reviews', + 'biblos', + 'alatex', + 'listings-ext', + 'tkz-euclide', + 'latex-make', + 'txgreeks', + 'rmannot', + 'titletoc', + 'obsolete', + 'mtbe', + 'marginfix', + 'aiaa', + 'bbm', + 'lucold', + 'guitar', + 'gray', + 'endnote', + 'softmaker-broadway', + 'ot2cyr', + 'active-conf', + 'sarabian', + 'hpgl2ps', + 'chktex', + 'pst-spectra', + 'mdwlist', + 'toc-zar', + 'greek4cbc', + 'xtrcode', + 'mfpic', + 'tablor', + 'sc21', + 'verbatimbox', + 'tabverb', + 'sciposter', + 'coverpage', + 'msg', + 'hvmath', + 'optparams', + 'ppchtex', + 'qms', + 'pgf-soroban', + 'pauldoc', + 'IEEEconf', + 'exercise', + 'logical-markup-utils', + 'dashrule', + 'curves', + 'extdash', + 'universa', + 'midfloat', + 'dates', + 'bsheaders', + 'substr', + 'pdftex-def', + 'losymbol', + 'texperf', + 'res', + 'Hepunits', + 'anysize', + 'aguplus', + 'context-french', + 'mychemistry', + 'dvipng', + 'subdepth', + 'llist', + 'dinat', + 'amsppt', + 'address', + 'kuvio', + 'ghostscript-afpl', + 'preprint', + 'crop', + 'chemarrow', + 'bera', + 'sanskrit-t1', + 'pointruler', + 'manfnt', + 'vrb', + 'rangen', + 'maad', + '2in1', + 'pst-eucl', + 'amsmath-it', + 'undertilde-gen', + 'mylatexformat', + 'bitset', + 'pmx', + 'testeq', + 'Punk-LaTeX', + 'hypdestopt', + 'tikz-timing', + 'latex-course', + 'tweb', + 'catdvi', + 'ruler', + 'otfinst', + 'psnfssx-adobe', + 'cool', + 'capparmode', + 'check', + 'sauerj', + 'ltxmisc', + 'fixltx2e', + 'context', + 'psbao', + 'nomencl', + 'aeb-tilebg', + 'adrconv', + 'tex-gyre-chorus', + 'initials', + 'acromake', + 'orkhun', + 'texinfo-latest', + 'comment-pln', + 'lshort-japanese', + 'ithyph', + 'confproc', + 'proof', + 'nature', + 'kurier', + 'tex2word', + 'ltxgrid', + 'xindy', + 'time-gen', + 'lgc-examples', + 'knuth-local', + 'zhspacing', + 'TeXmacs', + 'a4wide', + 'induni-om', + 'qed', + 'chessboard', + 'EBONG', + 'tables', + 'jmb', + 'ryethesis', + 'pst-sigsys', + 'hrefhide', + 'enumerate', + 'mlist', + 'presentations', + 'sfmath', + 'histyle', + 'fntproof', + 'coptic', + 'lshort-persian', + 'gahyph', + 'balancedquotes', + 'threeparttable', + 'acs', + 'abstyles-orig', + 'bigstrut', + 'pdfslide', + 'bsf', + 'removefr', + 'xypic-tut-pt', + 'seuthesis', + 'funnelweb', + 'altverse', + 'srcltx', + 'softmaker-moab', + 'idxtex', + 'ec-plain', + 'jhep', + 'eurotex', + 'dotarrow', + 'xskak', + 'LaTeX-brochure', + 'eiad', + 'bg', + 'lextex', + 'mnras-plain', + 'umthesis', + 'nar', + 'needspace', + 'pdcmac', + 'gnuplottex', + 'cassette', + 'pfm2afm', + 'bellmac', + 'LaTexMng', + 'latexinfo', + 'fundus-la', + 'MicroIMP', + 'frenchquote', + 'eqnarray', + 'newverbs', + 'circ', + 'slides', + 'wordweb', + 'fbithesis', + 'DB_process', + 'babelbib', + 'acm', + 'ist21', + 'texdoctk', + 'oands', + 'mf2tex', + 'easybmat', + 'pdfcolfoot', + 'rtkinenc', + 'pybib', + 'embedfile', + 'ftnxtra', + 'tex-gpc', + 'ecards', + 'draftwatermark', + 'mcaption', + 'comicsans', + 'chicago', + 'pitthesis', + 'iso10303', + 'noitcrul', + 'lua-alt-getopt', + 'hyphen-accent', + 'malayalam-latex', + 'softmaker-newcastle', + 'chemfig', + 'maybemath', + 'kvsetkeys', + 'askinclude', + 'templates-sommer', + 'ibm', + 'vhistory', + 'memo209', + 'algorithm2e', + 'twoup-gen', + 'turnthepage', + 'ifmtarg', + 'hexgame', + 'verbatim-pln', + 'longtable', + 'pagecont', + 'aro-bend', + 'fnpara', + 'cmslup', + 'mathrsfs', + 'cheq', + 'rtf2latex2e', + 'ptserif', + 'konwerter', + 'hypgotoe', + 'etexcmds', + 'psbox', + 'mt11p', + 'cleveref', + 'msym', + 'corridx-latex', + 'mslapa', + 'bar', + 'metainfo', + 'decsci', + 'typehtml', + 'pgothic', + 'tabls', + 'dvgtk', + 'trfsigns', + 'pst-pdf', + 'ethiop-t1', + 'tipa', + 'bigintcalc', + 'rangecite', + 'makeidx', + 'archaic', + 'bashkirian', + 'rjlparshap', + 'nostarch', + 'foiltex', + 'tt2001', + 'mpdinbrief', + 'mfirstuc', + 'LamsTeX', + 'upref', + 'mfnfss', + 'mmtools', + 'vertex', + 'paralist', + 'luatex-pkg', + 'textgreek', + 'image-gallery', + 'antp', + 'systcontrolletters', + 'ltx2x', + 'la', + 'gnhyph', + 'exteps', + 'uniquecounter', + 'texilikechaps', + 'multenum', + 'cherokee', + 'XeTeXref', + 'todo', + 'sirlin', + 'ogham', + 'titling', + 'hexdump', + 'paragraphs', + 'lshort-italian', + 'easybib', + 'twcal', + 'settobox', + 'regstats', + 'renditions', + 'inrstex', + 'index', + 'calrsfs', + 'rotchiffre', + 'abc2mtex', + 'mhack', + 'compact-symbols', + 'svn-prov', + 'biblatex-mla', + 'amsopn', + 'knst', + 'numalg', + 'kmrhyph', + 'tap', + 'saferef', + 'ziffer', + 'insbox', + 'etoolbox-de', + 'doc', + 'unswthesis', + 'chemstruct', + 'pst-coil', + 'lcg', + 'eddi4tex', + 'grafcet', + 'parselines', + 'brushscr', + 'chemexec', + 'invoice', + 'mbenotes', + 'epmtfe', + 'cmcyr', + 'kalender-209', + 'twoupltx', + 'latin2jk', + 'fpl', + 'cmfrak', + 'adforn', + 'graphicx', + 'germbib', + 'refcheck', + 'dectab', + 'MPStoEPS', + 'breakurl', + 'plhyph', + 'urw', + 'sketch', + 'ntgclass', + 'amstext', + 'chemcompounds', + 'stdclsdv', + 'docstrip', + 'vmspell', + 'idealfonts', + 'bold-extra', + 'pstricks-add', + 'biocon', + 'makeindex', + 'dogma', + 'mwrite', + 'preview-latex', + 'shadebox', + 'psu-thesis', + 'geophysics', + 'amsart', + 'tapir', + 'rune', + 'philosophersimprint', + 'seminar', + 'hvdashln', + 'changebar', + 'gentium', + 'filecontents', + 'adfsymbols', + 'lyx', + 'perception', + 'listings', + 'astro', + 'selectpage', + 'har2nat', + 'mentis', + 'envbig', + 'C.D.P. Bundle', + 'metago', + 'context-letter', + 'upquote', + 'popupmenu', + 'labelmac3', + 'uiucthesis', + 'karta', + 'mactex', + 'emulateapj', + 'futurans', + 'gmeometric', + 'shapepar', + 'nonumonpart', + 'intcalc', + 'unisugar', + 'classlist', + 'timetab', + 'logic', + 'linearA', + 'hlatex', + 'cspsfonts', + 'fontchart', + 'dirtytalk', + 'dvgt', + 'MPEdit', + 'web', + 'makeplot', + 'holtpolt', + 'alpha', + 'references', + 'fix-cm', + 'easyLaTeX', + 'mactextras', + 'softmakerfreefont', + 'easy-todo', + 'luatexbase', + 'texdiff', + 'treetex-plain', + 'minted', + 'hpsdiss', + 'hhtensor', + 'bengali-pandey', + 'zed', + 'texdirflatten', + 'pdfcolparallel', + 'tugboat-plain', + 'aurora', + 'nextpage', + 'dvi2tty', + 'greekctr', + 'memo-pln', + 'closefrm', + 'outline', + 'glhyph', + 'chklref', + 'texdoc', + 'pcfonts', + 'setouterhbox', + 'hellas', + 'cropmarks-pt', + 'ntsfaq', + 'type1ec', + 'hypht1', + 'malayalam-obsolete', + 'DayRoman', + 'cm-mf-extra', + 'book-examples', + 'oval', + 'germdoc', + 'aeguill', + 'treetex-ltx209', + 'koma-script-sfs', + 'pfnote', + 'fontinstallationguide', + 'impatient', + 'mkpic', + 'koma-moderncvclassic', + 'texshell32', + 'lpw', + 'cv', + 'ytableau', + 'bgreek', + 'subfigmat', + 'passivetex', + 'drawstack', + 'czhyph', + 'young', + 'texemplar', + 'nlctdoc', + 'aaai-named', + 'tlc2-examples', + 'colordoc', + 'siunitx', + 'dow', + 'cdcover', + 'newlfm', + 'l2x', + 'braille', + 'arabicfront', + 'niceframe-type1', + 'eehyph', + 'tkz-fct', + 'analogclock', + 'xtexcad', + 'gleitobjekte', + 'nccstretch', + 'hwkatakana', + 'marginnote', + 'mm', + 'nomentbl', + 'minibox', + 'eijkhout', + 'pkfix-helper', + 'old-fontch', + 'program', + 'dinbrief-gui', + 'swebib', + 'hypdoc', + 'tango-weevil', + 'biblist', + 'dateiliste', + 'latex-hlp', + 'code', + 'alphanum', + 'automagic', + 'ugaritic', + 'imac', + 'elbioimp', + 'xtcapts', + 'ntheorem-vn', + 'meta-mode', + 'acronym', + 'backgrnd', + 'bibtex-test', + 'xymtex', + 'musixtex-t1fonts', + 'dvipaste', + 'cmextra-latex', + 'Exam design', + 'AddTeX2Eps', + 'lambda-lists', + 'samples', + 'tex2tok', + 'ttn', + 'barcodes', + 'xparse', + 'concrete', + 'recipe', + 'TeX-mag', + 'AFMtoPL (Clark)', + 'psmerge', + 'piff', + 'mitpress', + 'chapref', + 'levy-font', + 'hyphsubst', + 'physe', + 'a0poster', + 'bigtabular', + 'diagxy', + 'technics', + 'bibcheck', + 'texsort', + 'texdef', + 'mathkit', + 'tex-gyre-pagella', + 'greektex-fd', + 'chembst', + 'dvitty', + 'calc', + 'vncmr', + 'LaTeX-WIDE', + 'jeep', + 'envlab', + 'yi4latex', + 'gothic', + 'GuIT-corso', + 'fltpage', + 'fi2t1', + 'units', + 'tugboat-toc', + 'stdpage', + 'dvipsconfig', + 'shsulet', + 'textopo', + 'syntax-mdw', + 'inversepath', + 'pinlabel', + 'mathabx-type1', + 'titlepage-uni-dortmund', + 'mmafm', + 'ut-backref', + 'luatextra', + 'thumbs', + 'pst-knot', + 'plantslabels', + 'CJHebrew', + 'latex4jed', + 'levy-latex', + 'extpfeil', + 'babeltools', + 'verbtext', + 'development', + 'nbaseprt', + 'XeT-TeX', + 'outerhbox', + 'dates209', + 'siam', + 'gv', + 'drftcite', + 'easyeqn', + 'prepr', + 'excalibur', + 'jspell', + 'chronology', + 'poetica', + 'fancyheadings', + 'scientificviewer', + 'eplain', + 'pstricks-examples', + 'GFS Baskerville', + 'BSR2dvi', + 'typearea', + 'go', + 'register', + 'context-lettrine', + 'makeindexk', + 'fwlw', + 'amsmath', + 'latexdiff', + 'cascover', + 'hyphenex', + 'perltex', + 'ptptex', + 'cmpica', + 'anyfontsize', + 'asyfig', + 'testflow', + 'fontch', + 'fontname', + 'mhsetup', + 'alltt2', + 'auctex', + 'NEdit-LaTeX-Extensions', + 'libgreek', + 'cmtest', + 'hyph-utf8', + 'easylist', + 'caption', + 'iagproc', + 'makecmds', + 'liturg', + 'bm', + 'softmaker-sunset', + 'first-latex-doc', + 'logfilter', + 'fundus', + 'rplain', + 'symbolindex', + 'recycle', + 'context-mathsets', + 'XteXShell', + 'quotation', + 'calxxxx-yyyy', + 'cnoweb', + 'eforms', + 'bbold-type1', + 'newproof', + 'ieeepes', + 'isi2bibtex', + 'fortran', + 'topcapt', + 'codepage', + 'scrindex', + 'pstrees', + 'thai-usl', + 'moderncv', + 'source2e', + 'iso209', + 'accenti', + 'ntg-maps', + 'circuit-macros', + 'zed-csp', + 'smflatex', + 'courseoutline', + 'texpower', + 'yhmath', + 'belleek', + 'beamerposter', + 'texcad32', + 'pandora', + 'graphfig', + 'dvistd', + 'csfonts', + 'thuthesis', + 'lshort-spanish', + 'lettergothic', + 'fancyref', + 'cases', + 'texspell', + 'l2tabu-french', + 'boldline', + 'javatex', + 'engpron', + 'csx', + 'graphics-pln', + 'xoptarg', + 'iftex', + 'hyphenation-greek', + 'dcolumn', + 'bardi', + 'pst-calendar', + 'xargs', + 'softmaker-delanocaps', + 'humanist', + 'seceqn', + 'youngtab', + 'bangtex', + 'dot2tex', + 'forindex', + 'cea', + 'esindex', + 'splitbib', + 'softmaker-grenoble', + 'beamer2thesis', + 'ocgtools', + 'marginote', + 'luacode', + 'chess', + 'slashbox', + 'pst-text', + 'alphanumb', + 'filehook', + 'latex', + 'hrhyph', + 'gradback', + 'plain', + 'esint-type1', + 'interfaces', + 'dancers', + 'wright', + 'latex2e-help-texinfo', + 'bibtopicprefix', + 'TeXbyTopic', + 'unamthesis', + 'ticket', + 'slatex', + 'semioneside', + 'multiobjective', + 'lcyw', + 'exp-testopt', + 'classif2', + 'classes', + 'pmcstex', + 'genmpage', + 'fancyhdr-it', + 'vvcode', + 'softmaker-oldblackletter', + 'endnotes', + 'aleph', + 'tkhyph', + 'latex2html', + 'ar', + 'humannat', + 'draft', + 'comment', + 'bigtable', + 'web2c', + 'pst-platon', + 'dratex', + 'pgfkeys', + 'subfloat', + 'landscape', + 'xcoffins', + 'FigSize', + 'xspace', + 'appendix', + 'numline', + 'modes', + 'mf2ps', + 'maybeload', + 'lgraph', + 'guia-bibtex', + 'rotunda', + 'boxit-ltx', + 'tex-math', + 'tabto-generic', + 'omega', + 'greek6cbc', + 'eslides', + 'bigsign', + 'auncial-new', + 'knitting', + 'xarticle', + 'iflang', + 'footbib', + 'typografie', + 'ltxfileinfo', + 'acmconf', + 'TrueTypeToType42', + 'tikz-qtree', + 'ledpar', + 'memhfixc', + 'charter', + 'nccpic', + 'l2picfaq', + 'GELLMU', + 'droid', + 'dirtree', + 'contour', + 'tcobrowser', + 'persian-bib', + 'ldiff', + 'lh', + 'va', + 'amsbook', + 'jeopardy', + 'c2latex', + 'LaTable', + 'icomma', + 'bmeps', + 'cchess', + 'bigfoot', + 'fontload', + 'colonequals', + 'engrec', + 't1-fraktur', + 'postcards', + 'jsclasses', + 'garrigues', + 'texlog_extract', + 'rsfso', + 'pagenote', + 'mfpic4ode', + 'forarray', + 'talk', + 'prettyref', + 'cmcyralt-fonts', + 'xecyr', + 'lps', + 'cm-pk', + 'qobitree', + 'mnsymbol', + 'excludeonly', + 'cmdstring', + 'corrects', + 'umrand', + 'lgc2-examples', + 'citesidx', + 'numericplots', + 'koma-script', + 'kelly-greek-font', + 'anonchap', + 'texapi', + 'JavaBib', + 'chicago-annote', + 'gettitlestring', + 'fncylab', + 'ijmart', + 'acroflex', + 'eskdx', + 'fltpoint', + 'arcs', + 'Portable MikTeX', + 'polynomial', + 'fancybox', + 'galois', + 'card', + 'cursolatex', + 'dprogress', + 'classicthesis', + 'twoopt', + 'figplace', + 'trajan', + 'jabref', + 'switcheml', + 'softmaker-flagstaff', + 'eiad-ltx', + 'tikz-3dplot', + 'NTS', + 'igo', + 'frhyph', + 'backrefx', + 'mattens', + 'extradefs', + 'lshort-vietnamese', + 'astron', + 'pst-vowel', + 'spanish', + 'texi2www', + 'schemabloc', + 'verse', + 'dingbat', + 'AutoLaTeX', + 'portland', + 'ljmetrics', + 'bsl', + 'GasTeX', + 'eqexam', + 'MemoirChapterStyles', + 'cm', + 'georgian', + 'latex-bib-ex', + 'is-bst', + 'docarc', + 'piechart', + 'feynman', + 'bit2spr', + 'hyacc-cm', + 'yplan', + 'shapepatch', + 'parskip', + 'eurosym', + 'texdepend', + 'threeparttablex', + 'dlfltxb', + 'cite-bundle', + 'punknova', + 'uncial', + 'lshort-portuguese-br', + 'mlbib', + 'lshort-korean', + 'trademarks', + 'struktex', + 'dnaseq', + 'cmoefont', + 'LaTeX for Autoconf', + 'ttf-howto', + 'thinsp', + 'free-math-font-survey', + 'beamerthemeJLTree', + 'tools', + 'serial', + 'javadoc', + 'syntax2', + 'bmpsize', + 'texshade', + 'subfig', + 'mftinc', + 'flushend', + 'epigram', + 'catalanbib', + 'rerunfilecheck', + 'pst-abspos', + 'make-env', + 'wmaainf', + 'wasy2-ps', + 'texref', + 'undertilde', + 'NL hyphenation', + 'texi-like cover', + 'amslatex', + 'fourproject', + 'processkv', + 'tex_it', + 'ltxnew', + 'cypriot', + 'LaTeXDB', + 'jamtimes', + 'chletter', + 'apabst', + 'patgen2-tutorial', + 'parcolumns', + 'yfonts', + 'telprint', + 'nbaskerv', + 'withesis', + 'tie', + 'cooking', + 'bitstrea', + '3DLDF', + 'makerobust209', + 'bussproofs', + 'umtypewriter', + 'vplutils', + 'paresse', + 'halftone', + 'ConTeXt-cmttbf', + 'suthesis', + 'ntheorem', + 'NCC-LaTeX', + 'faq-de', + 'quotmark', + 'comp-fonts-FAQ', + 'tsconfig', + 'directory', + 'wmf2eps', + 'subfiles', + 'mathcomp', + 'xgreek', + 'runtex', + 'fragmaster', + 'catdoc', + 'frankenbundle', + 'context-typearea', + 'inhyph', + 'labelcas', + 'qfonts', + 'leading', + 'AcroSort', + 'tex-ewd', + 'esvect', + 'arrayjobx', + 'boites', + 'knit', + 'ECV', + 'fonttable', + 'mathpazo', + 'Carlisle', + 'telugu', + 'cmactex', + 'softmaker-bonita', + 'latexcheat-ptbr', + 'protosem', + 'shading', + 'LKproof', + 'boxedminipage', + 'blue', + 'latex-tabellen', + 'pi', + 'tex2rtf', + 'eemeir', + 'cmbright', + 'Exceltex', + 'mafr', + 'beamerthemenirma', + 'concrete-macros', + 'fig2vect', + 'tkz-base', + 'susy', + 'glosstex', + 'tex-gyre-cursor', + 'ifplatform', + 'kerkis', + 'grverb', + 'toil', + 'oriental', + 'icsv', + 'redefine', + 'tgrind209', + 'ncctools', + 'metaobj', + 'productbox', + 'patchcmd', + 'macfont', + 'pagereference', + 'blackboard', + 'cyklop', + 'china2e', + 'epiolmec', + 'babel-doc', + 'lingtrees', + 'cbgreek-complete', + 'tokenizer', + 'fig2mf', + 'ametsoc', + 'mma2ltx', + 'psgo', + 'baum', + 'ccaption', + 'svn', + 'mf2pt1', + 'lips', + 'afterpage', + 'anttvf', + 'WinEdt', + 'float', + 'ada', + 'asc2tex', + 'a2ping', + 'flashmovie', + 'figsinltx', + 'ushyph', + 'kalender', + 'How to Package Your LaTeX Package', + 'objectz', + 'tkz-orm', + 'mathdots', + 'commath', + 'tufte-latex', + 'biblio-perl', + 'ltablex', + 'adobemapping', + 'statex', + 'sorhyph', + 'aaai', + 'TFMPKtest', + 'rtklage', + 'optional', + 'environ', + 'blkcntrl', + 'The Comprehensive LaTeX Symbol List.', + 'makeprog', + 'showexpl', + 'stack', + 'rnototex', + 'lxmail', + 'listofsymbols', + 'biblio', + 'preview', + 'arrayjob', + 'cmdtrack', + 'xtem', + 'softmaker-congress', + 'pgfopts', + 'algorithms', + 'thirteen', + 'bibtex-examples', + 'auxhook', + 'thai-rmit', + 'slemph', + 'egplot', + 'sphack', + 'vfinst', + 'latexcheat-esmx', + 'german', + 'euro', + 'csindex', + 'figfrag', + 'pybliographer', + 'crossword', + 'aeb-mlink', + 'drama', + 'malvern', + 'thsmc', + 'formular', + 'bibexport', + 'xcolor', + 'apprends-latex', + 'textcomp', + 'footmisc', + 'xdvi', + 'ulsy-ps', + 'epigraph', + 'auncial', + 'MetaPlot', + 'fweb', + 'MathType', + 'js-misc', + 'graphicp', + 'exam209', + 'vxu', + 'bahyph', + 'textpath', + 'crossreference', + 'smalltableof', + 'xits', + 'ocr-b-outline', + 'pdfescape', + 'gurmukhi', + 'urw-arial', + 'duerer-LaTeX', + 'tangle', + 'sidecap', + 'noweb', + 'mathtime-metrics', + 'frletter', + 'VSliTeX', + 'hyphenat', + 'grffile', + 'LigaTeX', + 'arphic', + 'chngcntr', + 'hp2xx', + 'nameref', + 'metafont-beginners', + 'citeref', + 'mflogo-font', + 'hhline', + 'geomsty', + 'ukhyph', + 'gv-savepos', + 'chemsym', + 'ltxdockit', + 'Technica', + 'wsuipa2tipa', + 'fundus-twcal', + 'threecolumn', + 'musixtex-egler', + 'ijc', + 'addlines', + 'bibarts', + 'outlines', + 'uafthesis', + 'pxfonts', + 'collref', + 'jflap2tikz', + 'PicTeXsum', + 'achicago', + 'chemmacros', + 'Econometrica', + 'mparhack', + 'ispell', + 'calctab', + 'floatnohead', + 'dvips-os2', + 'asymptote-manual-zh-cn', + 'MathSpad', + 'mif2xfig', + 'flashcard', + 'xyling', + 'taylor', + 'bibcard', + 'Courier', + 'fontspec', + 'catalogue', + 'context-construction-plan', + 'filehdr', + 'acrotex', + 'apa6e', + 'binomexp', + 'cassette-shipunov', + 'mactex-additions', + 'moresize', + 'gmdoc-enhance', + 'latexwizard', + 'ptex', + 't-angles', + 'deproc', + 'refstyle', + 'GraphicxSP', + 'complexity', + 'mciteplus', + 'xltxtra', + 'colorinfo', + 'bibview-x', + 'romandeadf', + 'mnttex', + 'bibhtml', + 'flowfram', + 'multido', + 'pst-eucl-translation-bg', + 'rake4latex', + 'FiNK', + 'sf298', + 'hobsub', + 'alltt', + 'fullpage', + 'format', + 'hieroglf', + 'dvicopy', + 'alphabib', + 'Mid2TeX/Free', + 'acroweb', + 'bibdb', + 'rcs', + 'hebtex', + 'cslatex', + 'ocherokee', + 'Shaded theorems', + 'photo', + 'biblatex-chicago', + 'trace', + 'matlabweb', + 'jpeg2ps', + 'bibtex', + 'adami', + 'chitex', + 'knuth-lib', + 'doi', + 'dviout', + 'pxgreeks', + 'CClicenses', + 'tipos', + 'mex', + 'piff-ams', + 'tocenter', + 'word2x', + 'truecols', + 'flatten', + 'bclogo', + 'stackrel', + 'evweek', + 'shhyphl', + 'mathtex', + 'ftetx', + 'dox', + 'ltxutil', + 'pdf-forms-tutorial', + 'apalike2', + 'Manuscript', + 'floatfig', + 'eepic', + 'ttf2pfb', + 'suanpan', + 'nnfootnote', + 'fahyph', + 'subeqn', + 'textcase', + 'Sikumuna', + 'bbding', + 't1utils', + 'memexsupp', + 'leawood', + 'lablst-pkg', + 'thmtools', + 'ps2mf', + 'softmaker-alteschwabacher', + 'eukdate', + 'psnfss-source', + 'trigonometry', + 'placeins', + 'xfor', + 'rmligs', + 'ltabptch', + 'thmbox', + 'javascript_TeXed', + 'feynmf', + 'Winfonts', + 'pst-barcode', + 'ecclesiastic', + 'locality', + 'lewis', + 'trsym', + 'threecol', + 'lacheck', + 'finplain', + 'amsbsy', + 'bibutils', + 'export', + 'split', + 'dktools', + 'montex', + 'binhex', + 'chem-journal', + 'ebib', + 'sbtex', + 'inlinedef', + 'glossaries', + 'beton', + 'biblatex-ieee', + 'ulem', + 'isodoc', + 'framed', + 'barkom', + 'pst-mirror', + 'mathbbol', + 'icelandic', + 'chemstyle', + 'infpic', + 'hatching', + 'pigpen', + 'clrscode', + 'morefloats', + 'kpfonts', + 'wntamil', + 'biblatex-historian', + 'diagmac', + 'random', + 'findbib', + 'sectsty', + 'ocr-latex', + 'emp', + 'pbox', + 'myletter', + 'mathstone', + 'slem', + 'softmaker-digital', + 'prv', + 'megatape', + 'dvibit', + 'calligra', + 'dice', + 'euproposal', + 'awb', + 'sagetex', + 'theoremref', + 'fldigigal', + 'cassette209', + 'byzfonts', + 'pst-lens', + 'pst-asr', + 'drs', + 'lucida', + 'pawpict', + 'fig2mfpic', + 'armtex', + 'TVS', + 'knuth-dist', + 'context-fixme', + 'db', + 'pl-mf', + 'dramatist', + 'tetex', + 'ps4mf-dos', + 'inputfile', + 'UML', + 'sectionbox', + 'AFMtoPL (Elwell)', + 'burmese', + 'cntdwn', + 'Synapsen', + 'mimetex', + 'colourchange', + 'unfinished', + 'titlesec', + 'epsfx', + 'psrip', + 'refman', + 'l2tabu', + 'bakoma-games', + 'turkishintro', + 'psnfssx', + 'ScriptTeX', + 'frame', + 'vutex', + 'octavo', + 'fancyfolien', + 'ebnf', + 'ochem', + 'corelpak', + 'mdvi', + 'mathtools', + 'jneurosci', + 'dfgproposal', + 'impose', + 'sgmlcmpt', + 'ptsans', + 'devanagari-omega', + 'listbib', + 'variations', + 'japanese', + 'xkvview', + 'stex', + 'hvindex', + 'context-ruby', + 'lshort-polish', + 'staves', + 'swetex', + 'hangcaption', + 'chemcono', + 'lshort-bulgarian', + 'latexpand', + 'hands', + 'gapfill', + 'amsproc', + 'bibfile-reformat-pages', + 'fontinst', + 'dropping', + 'ShLaTeX', + 'newinsert', + 'hvfloat', + 'UK-TeX', + 'cc-pl', + 'dtl', + 'vf-howto', + 'semaphor', + 'bibleref-german', + 'pst-graphicx', + 'bophook', + 'corelpak-contrib', + 'latex-bnf', + 'inslrmin', + 'psnfssx-em', + 'vc', + 'gladtex', + 'scientificauthor', + 'lastpage', + 'texdraw', + 'relenc', + 'csquotes', + 'softmaker-nevada', + 'nccthm', + 'figflow', + 'softmaker-baskervillenova', + 'aastex', + 'cm-mf-opt-kern', + 'pst-infixplot', + 'old-faq-en', + 'csvtools', + 'vf-knuth', + 'testmath', + 'pst-dbicons', + 'guarani', + 'Finomaton', + 'grchyph', + 'brief_t', + 'constants', + 'hyperxmp', + 'norbib', + 'shavian', + 'fixmath', + 'amscd', + 'jurabib', + 'pstool', + 'autotoc', + 'pictex-autoarea', + 'bbfig', + 'sitem', + 'cryst', + 'qtree', + 'kile', + 'latex-doc', + 'cuted', + 'envelope', + 'schemeTeX', + 'ibycus-babel', + 'dvips', + 'tcvn', + 'polyglossia', + 'letter', + 'chextras', + 'ut-thesis', + 'errata', + 'yfrak', + 'attrib', + 'untex', + 'oztex-fonts', + 'laansort', + 'typogrid', + 'webfiles', + 'atenddvi', + 'cursor', + 'genindex', + 'gatech-thesis', + 'sltables', + 'ps2pk', + 'listliketab', + 'textfit', + 'mathstyle', + 'ifdraft', + 'aramaic-serto', + 'Bengali Omega', + 'basix', + 'fax', + 'zero', + 'SciWordConv', + 'yswab', + 'watermark', + 'pst-circ', + 'bezos', + 'coursepaper', + 'simplecd', + 'nag', + 'floatrow', + 'beletter', + 'thesis', + 'LaTeXPiX', + 'dtk', + 'biber', + 'docmfp', + 'picins', + 'xifthen', + 'ttftogf', + 'polynom', + 'knuth-letter', + 'uothesis', + 'arrow', + 'makedtx', + 'QCM', + 'ha-prosper', + 'pictex2', + 'softmaker-egyptiennestd', + 'ghyphen', + 'vicentino', + 'tensind', + 'ftcap', + 'fontbl', + 'mathexam', + 'context-algorithmic', + 'xlop', + 'URW-Grotesq', + 'TeX-live source', + 'gmutils', + 'authoraftertitle', + 'drcaps', + 'pdfcprot', + 'ftnright', + 'dcounter', + 'caption2', + 'tex2bib', + 'utorontothesis', + 'thumby', + 'blacklettert1', + 'huhyph', + 'cd', + 'blackletter', + 'border', + 'occam', + 'tkz-tab', + 'wncyr', + 'frcursive', + 'pst-grad', + 'plari', + 'ae', + 'curve2e', + 'ucthesis209', + 'cachepic', + 'overcite', + 'pydocstrip', + 'csbulletin', + 'duerer', + 'linegoal', + 'gmverse', + 'newapa', + 'uebungsblatt', + 'natmove', + 'ps_conv', + 'probsoln', + 'slovak', + 'multicap', + 'realcalc', + 'interactiveworkbook', + 'ruhyphen', + 'ragged2e', + 'xl2latex', + 'pstdoc', + 'pdfcolparcolumns', + 'msc', + 'floatflt', + 'oubraces', + 'bibclean', + 'xdoc', + 'wotree', + 'kerntest', + 'lout', + 'urw-garamond', + 'unixman', + 'urwchancal', + 'syntrace', + 'dayofweek', + 'repeat', + 'piechartmp', + 'jlm', + 'tabvar', + 'metre', + 'texsis', + 'pagedraw', + 'bibweb', + 'cm-unicode', + 'turkmen', + 'GFS Porson', + 'gb4e', + 'redis', + 'oesch', + 'everypage', + 'bibsort', + 'xetex-pstricks', + 'empheq', + 'ipa', + 'oldstyle', + 'bpolynomial', + 'cdlabeler', + 'gu', + 'gcard', + 'lgreek', + 'font_selection', + 'lshort-ukr', + 'camel', + 'word2latex', + 'latex-fonts', + 'softmaker-marseille', + 'TeXhax', + 'pst-fr3d', + 'latexcad', + 'listing-pln', + 'bibfind', + 'ifnextok', + 'EndNote2bib', + 'anleitung', + 'cm-afm', + 'psfragx', + 'russian-help', + 'trig', + 'luamplib', + 'TengwarScript', + 'pgfgantt', + 'nccmath', + 'latin', + 'pst-3d', + 'geometry-de', + 'currvita', + 'makebox', + 'ccfonts', + 'enumspec', + 'latex2e-reference', + 'TeEncontreX', + 'osa', + 'nccbbb', + 'magicnum', + 'emtrees', + 'AeB Pro', + 'gaceta', + 'wasy2', + 'longtocline', + 'default', + 'selinput', + 'mab2bib', + 'mk', + 'mongolian-babel', + 'ifvtex', + 'boondox', + 'textmerg', + 'CM Type3', + 'lifia-th', + 'remreset', + 'ams2bib', + 'eqparbox', + 'emtexgi', + 'Il sistema PSfrag', + 'termlist', + 'diagmac2', + 'tabulars-e', + 'exam', + 'refcount', + 'jasthesis', + 'badge', + 'rotate-textures', + 'amsaddr', + 'de-macro', + 'cite', + 'ltxdiff', + 'biblatex-nature', + 'crosstex', + 'nassflow', + 'context-rst', + 'chapterbib', + 'dco', + 'oletex', + 'newunicodechar', + 'was', + 'multibbl', + 'bm2ltx', + 'bakoma-fonts', + 'protecteddef', + 'laletter', + 'cjw', + 'expressg', + 'phyzzx', + 'MFwL', + 'cweb-hy', + 'wnri', + 'ukrhyph', + 'chess-problem-diagrams', + 'combelow', + 'dos-dc', + 'syllogism', + 'delarray', + 'mltex-ltx', + 'barcodes-vulis', + 'deflist', + 'pict2e', + 'silence', + 'baskervaldadf', + 'stabular', + 'lpic', + 'hyperref', + 'siunits', + 'ratexdb', + 'lintex', + 'firststeps-xampl', + 'dviincl', + 'webguide', + 'evautofl', + 'pst-pdgr', + 'pkfix', + 'ocr-b', + 'GuITlogo', + 'fdsymbol', + 'evenpage', + 'siggraph', + 'miller', + 'maltese', + 'pandora-latex', + 'drawing', + 'xrefwarn', + 'Makor 2', + 'tree-dvips', + 'arydshln', + 'laps', + 'crw', + 'ifluatex', + 'MakeCirc', + 'pst-fun', + 'esint', + 'romanneg', + 'plpsfont', + 'TeX Converter', + 'bizcard', + 'plainyr', + 'fancytooltips', + 'progress', + 'pst-am', + 'secdot', + 'cyrillic209', + 'lshort-turkish', + 'uwmslide', + 'asana-math', + 'label-pln', + 'digiconfigs', + 'boldtensors', + 'tex-gyre-heros', + 'mxd', + 'grfguide', + 'chroma', + 'dvi2ln3', + 'envmath', + 'bib2dvi', + 'pst-xkey', + 'gloss', + 'cweb-latex', + 'wasy', + 'softmaker-helium', + 'cfr-lm', + 'grnumalt', + 'ntabbing', + 'Oberdiek', + 'eqmark', + 'biblatex-science', + 'LCDF-typetools', + 'lshort-german', + 'ama', + 'pbsheet', + 'mmap', + 'CTAN tools', + 'Orderer', + 'glotex', + 'asymptote-by-example-zh-cn', + 'uhthesis', + 'pdftex_oztex', + 'yannisgr', + 'standalone', + 'hypdvips', + 'doublecol', + 'iwona', + 'egothic', + 'xetal', + 'systeme', + 'epic', + 'dictsym', + 'smartref', + 'beamer-fuberlin', + 'texi2roff', + 'METATeX', + 'weave', + 'manjutex', + 'lsc', + 'lettre', + 'pst-electricfield', + 'underscore', + 'gen', + 'context-bnf', + 'synttree', + 'pstricks', + 'ratex', + 'pst-eps', + 'futhark', + 'xkeyval', + 'fakebold', + 'polytable', + 'custom-bib', + 'simpsons', + 'msu-thesis', + 'sinhala', + 'sober', + 'block', + 'pageframe', + 'showframe', + 'ega2mf', + 'minionpro', + 'eskd', + 'wordlike', + 'hepnames', + 'egameps', + 'bodegraph', + 'italic', + 'vdm', + 'makefonts', + 'context-inifile', + 'noTeX', + 'ghostscript', + 'bnf-plain', + 'ec', + 'annot-pro', + 'modref', + 'schedule209', + 'visualFAQ', + 'advdate', + 'ltxtable', + 'colorwav', + 'meper', + 'gl-tree', + 'r_und_s', + 'greek-makeindex', + 'ccicons', + 'rlepsf', + 'findhyph', + 'zref', + 'rcs-pln', + 'drac', + 'powerdot-fuberlin', + 'mltex', + 'jphysiol', + 'ugarite', + 'obas', + 'amspell', + 'raggedr', + 'texmalli', + 'opcit', + 'array', + 'edmargin', + 'dkhyphen', + 'gcite', + 'morehelp', + 'pst-soroban', + 'method', + 'gridset', + 'CurVe', + 'punk', + 'ulqda', + 'alphalph', + 'teubner', + 'pmboxdraw', + 'mhs', + 'linsys', + 'pittetd', + 'mkjobtexmf', + 'babel', + 'iTe', + 'tfmpk', + 'ibygrk', + 'txt2tex', + 'attachfile', + 'ted', + 'fix2col', + 'winlatex', + 'junicode', + 'pst-osci', + 'procIAGssymp', + 'logreq', + 'pst-optic', + 'philex', + 'akletter', + 'doublespace', + 'ly1', + 'clefval', + 'mdframed', + 'dvipdfm', + 'mmpfb', + 'lgrind', + 'shadow', + 'assignment', + 'maketable', + 'slatex_scheme', + 'nfssext-cfr', + 'tex--xet', + 'pst-qtree', + 'vaucanson-g', + 'tmmath-fonts', + 'ePiX', + 'verbdef', + 'beamer-tut-pt', + 'cptex', + 'margbib', + 'gmiflink', + 'FourierNC', + 'monster', + 'feyn', + 'pst-fractal', + 'ctex-faq', + 'lshort-portuguese', + 'ledarab', + 'synproof', + 'listingsutf8', + 'atbegshi', + 'getrefs', + 'eulervm', + 'ydoc', + 'esieecv', + 'transparent', + 'texments', + 'skak', + 'namunsrt', + 'calendar-Barr', + 'doafter', + 'tabularx', + 'layouts', + 'lshort-zh-cn', + 'match_parens', + 'gsview', + 'tif2eps', + 'karnaugh', + 'thrmappendix', + 'foekfont', + 'treesvr', + 'a2ac', + 'loggates', + 'atari-cstex', + 'pdfcol', + 'parrun', + 'mla-paper', + 'antt', + 'ifsym', + 'parboxx', + 'calendarweek', + 'cmyk-hax', + 'dyntree', + 'wrtfile', + 'braket', + 'hge', + 'includex', + 'biblatex-authoryear-icomp-tt', + 'csplain', + 'lamstex-index', + 'xecolour', + 'pageno', + 'mtgreek', + 'fc', + 'dvidvi', + 'cpssp', + 'JustFontItTE', + 'allrunes', + 'lwc-examples', + 'cookybooky', + 'dvips-shell', + 'FigBib', + 'ps2eps', + 'fontwrap', + 'buscard', + 'sublabel', + 'skeycommand', + 'tex-gyre-schola', + 'pst-bezier', + 'bibleref', + 'uri', + 'psfixbb', + 'pracjourn', + 'biblatex-apa', + 'checklab', + 'bibtexmng', + 'bbm-macros', + 'tex-gyre-adventor', + 'pst-2dplot', + 'abbrevs', + 'vpe', + 'ctanify', + 'grtimes', + 'savetrees', + 'autolist', + 'EUenc', + 'sudoku', + 'vertbars', + 'nuc', + 'formlett', + 'genfam', + 'quotchap', + 'msx2msa', + 'inconsolata', + 'style-showcase', + 'texchord', + 'xunicode', + 'mtex', + 'makebarcode', + 'lualibs', + 'latex4wp-it', + 'flatex', + 'qsymbols', + 'hyper', + 'warning', + 'duplicat', + 'cmap', + 'dvisun', + 'tocloft', + 'devanagari', + 'idxlayout', + 'phoncard', + 'dialogue', + 'iwhdp', + 'altfont', + 'mpgraphics', + 'icehyph', + 'context-taspresent', + 'txp', + 'subeqnarray', + 'refer', + 'kvoptions', + 'si', + 'bbold', + 'tgrind', + 'plates', + 'canoniclayout', + 'code128', + 'bibunits', + 'ogonek', + 'doc-k', + 'zip', + 'relsize', + 'pst-exa', + 'rsfs', + 'epsdice', + 'georgian-stanier', + 'hfoldsty', + 'shortlst', + 'ConTeXt-gnuplot', + 'c-pascal', + 'voss-mathcol', + 'miniltx', + 't1infos', + 'sffms', + 'PNAS', + 'drv', + 'context-cmscbf', + 'diagramf', + 'totcount', + 'catechis', + 'elhyphen', + 'colordvi', + 'refer-tools', + 'texdeps', + 'insdljs', + 'cmsd', + 'psfont', + 'amsrefs', + 'grid', + 'tex2ltx', + 'flags', + 'tr2latex', + 'uowthesis', + 'AeB slicing', + 'latex-doc-ptr', + 'casyl', + 'tkz-doc', + 'figcaps', + 'aplweb', + 'labelmag', + 'ransom', + 'lscape', + 'psnfssx-8r', + 'templates-fenn', + 'dblfont', + 'nopageno', + 'utopia', + 'zwgetfdate', + 'randtext', + 'dvipdfmx', + 'endheads', + 'onrannual', + 'drafthead', + 'resizegather', + 'ams-cd', + 'sfg', + 'eqnarray209', + 'spreadtab', + 'pst-Jtree', + 'calendar', + 'xepersian', + 'bibtool', + 'plain-cm', + 'bibindex', + 'printlen', + 'balanced', + 'tibetan', + 'GraphConv', + 'vpp', + 'spie', + 'lms', + 'chomsky', + 'phy-bstyles', + 'fribrief', + 'hyphen-spanish', + 'prelim2e', + 'fn2end', + 'fontenc', + 'acmtrans', + 'newcommand', + 'm-pictex', + 'ascelike', + 'hfbright', + 'termcal', + 'WP2LaTeX', + 'magaz', + 'autoview', + 'xr', + 'ltxdoc', + 'hilowres', + 'tabularht', + 'datenumber', + 'gbrief-creator', + 'fig2sty', + 'xmlplay', + 'xeindex', + 'libertine', + 'harpoon', + 'csname-doc', + 'gene-logic', + 'tamil-omega', + 'romaniantex', + 'biblatex-philosophy', + 'pmat', + 'TeXProject', + 'midpage', + 'fouridx', + 'varisize', + 'bm2font', + 'HPtfm2pl', + 'logsys', + 'augie', + 'breakcites', + 'xypic', + 'TeXnicCenter', + 'webomints', + 'tib', + 'bibtopic', + 'spanish-mx', + 'HEPparticles', + 'varindent', + 'texinfo', + 'tex-gyre-termes', + 'tfrupee', + 'listing', + 'xhfill', + 'jas99_m', + 'manyfoot', + 'jbact', + 'knuth-base', + 'idverb', + 'fullpict', + 'srune', + 'dotlessj', + 'ijcai89', + 'iso', + 'varwidth', + 'pphlp', + 'algorithmicx', + 'highlight', + 'duotenzor', + 'greekdates', + 'kdgreek', + 'dialogl', + 'gradientframe', + 'alnumsec', + 'elsarticle', + 'sans', + 'lettrine', + 'isf', + 'genealogy', + 'catchfile', + 'cropmrks', + 'sseq', + 'psfrag', + 'schwell', + 'mcite', + 'coordsys', + 'texpictex', + 'dinbrief', + 'facsimile', + 'formula', + 'tableauVariations', + 'authordate', + 'boolexpr', + 'detex', + 'appelt-chess', + 'c2cweb', + 'CVsty', + 'r2bib', + 'Make patterns.', + 'upca', + 'plain-ltx', + 'slhyph', + 'GFS Artemisia', + 'censor', + 'Eqmlite/Free', + 'iahyphen', + 'wordcount', + 'underlin', + 'slidenotes', + 'latex4wp', + 'libris', + 'DVItoLN03', + 'authorindex', + 'bbcard', + 'umoline', + 'multind', + 'flabels', + 'OzTeX-german', + 'rccol', + 'skull', + 'context-sgf', + 'pdfcolmk', + 'paper', + 'cuisine', + 'tex-overview', + 'glossaries-accsupp', + 'aifont', + 'gentabtex', + 'TpX', + 'oztex', + 'newclude', + 'verbasef', + 'notes', + 'elpres', + 'biblatex', + 'qbibman', + 'pssplit', + 'cm-lgc', + 'treedef', + 'chappg', + 'latex2rtf', + 'lshort-mongolian', + 'bigdelim', + 'biblatex-dw', + 'bibtools', + 'biolist', + 'add-wes', + 'dvibook', + 'stfloats', + 'makeglos', + 'zaccone', + 'carolmin-t1', + 'bits', + 'papermas', + 'GFS Complutum', + 'xbibtex', + 'luaotfload', + 'alphanum-bst', + 'combine', + 'datatool', + 'jqt1999', + 'labelfig', + 'word2tex', + 'pb-diagram', + 'circle', + 'dvdcoll', + 'examplep', + 'easytable', + 'shadbox', + 'changes', + 'rotating', + 'xkvltxp', + 'pbmtogf', + 'colortab', + 'bloques', + 'comfortaa', + 'footnpag', + 'pandora-type1', + 'oldlatin', + 'cellspace', + 'fnlineno', + 'svg-inkscape', + 'named', + 'grapher', + 'overpic', + 'fac', + 'revtex4-1', + 'gnu-freefont', + 'bibtex8bit', + 'anti', + 'convert', + 'l2a', + 'pclnfss', + 'bibbuild', + 'juramisc', + 'pkfind', + 'tpslifonts', + 'vita', + 'runic', + 'slashed', + 'timing', + 'knot', + 'arabic', + 'ln03dvi', + 'ygoth', + 'frontespizio', + 'ascii-cyrillic', + 'beamer', + 'mathtime-pln', + 'tip', + 'rfc2bib', + 'delimtxt', + 'hanging', + 'GFS', + 'layout', + 'nohyphbx', + 'amiweb2c', + 'bib2xhtml', + 'graphpap', + 'antomega', + 'mathematica', + 'tgothic', + 'schedule', + 'usenix', + 'rtf2tex', + 'ascii-chart', + 'asymptote', + 'chemtex', + 'goblin', + 'soton', + 'bridge-pln', + 'ragged', + 'ofntinst', + 'here', + 'vita209', + 'tclldoc', + 'SIstyle', + 'pst-3dplot', + 'nofill', + 'tocbibind', + 'sphyphb', + 'threeddice', + 'shade', + 'mceinleger', + 'sae', + 'plnfss', + 'mdwfonts', + 't2', + 'type1cm', + 'rectopma', + 'softmaker-velo', + 'math-into-latex-4', + 'manpage', + 'spot', + 'rotpages', + 'lkort', + 'inslrmaj', + 'apa', + 'pstoedit', + 'metauml', + 'ebsthesis', + 'makerobust', + 'nemocal', + 'lhelp', + 'ttt', + 'dmfonts', + 'aliascnt', + 'latexmk', + 'mathptmx', + 'mathinst', + 'amsthm', + 'acronym209', + 'texbuch', + 'europecv', + 'fixbbl', + 'splitindex', + 'plcalendar', + 'uhc', + 'simplecv', + 'poligraf', + 'dvipdfmx-def', + 'exscale', + 'Midi2TeX/Free', + 'flacards', + 'jpeg2ps-os2', + 'psfig', + 'ovalfbox', + 'html2latex', + 'l2tabu-english', + 'esdiff', + 'tengwar', + 'cancel', + 'adfathesis', + 'covfonts', + 'tex2page', + 'mla', + 'nabatean', + 'captcont', + 'luatex', + 'gensymb', + 'syriac', + 'biblatex-jura', + 'frankenstein', + 'pitex', + 'maths-symbols', + 'editbar', + 'intro-scientific', + 'combinedgraphics', + 'moredefs', + 'pf2afm', + 'titlepic', + 'tabbing', + 'pax', + 'mathcmd', + 'gkpmac', + 'librarian', + 'sam2p', + 'textool', + 'DTX gallery', + 'xwatermark', + 'tabularborder', + 'aspell', + 'inputenc', + 'vietnet', + 'parallel', + 'REdit', + 'din1505', + 'lshort', + 'pst-tvz', + 'poorman', + 'vector', + 'mnras', + 'koma-script-examples', + 'xmltex', + 'twocolumns', + 'gtex-letter', + 'adobe-euro', + 'futhorc', + 'hackalloc', + 'indent', + 'annotate', + 'etruscan', + 'hyperlatex', + 'skeyval', + 'mbboard', + 'bundledoc', + 'changepage', + 'manual209', + 'randomwalk', + 'mathlig', + 'sfheaders', + 'TeXbook', + 'repeatindex', + 'cyrtug', + 'cutwin', + 'freetype', + 'mathdesign', + 'uwthesis209', + 'pst-node', + 'secret', + 'NTS-L', + 'musixguit', + 'slideshow', + 'automata', + 'card-set', + 'extract', + 'oinuit', + 'psfonts', + 'lshort-mongol', + 'urw-antiqua', + 'thumb', + 'easymat', + 'qdtexvpl', + 'txt2latex', + 'pthyphs', + 'pst-tree', + 'pstex', + 'psfonts-tools', + 'dvipscol', + 'bbs', + 'tdsfrmath', + 'casslbl', + 'pagerange', + 'mil3', + 'otftofd', + 'jmlr', + 'magyar', + 'dvi2bitmap', + 'figbas', + 'bracketkey', + 'fotex', + 'latin3jk', + 'vntex', + 'multitoc', + 'softmaker-artistic', + 'gmp', + 'tex-kurs', + 'nccparskip', + 'svn-multi', + 'softmaker-jugendstil', + 'wrapfig', + 'mathspic', + 'seqsplit', + 'Nath', + 'mailing', + 'bidi', + 'fp', + 'apeqnum', + 'pst-gantt', + 'glossary', + 'pmgraph', + 'ant', + 'colors', + 'humanbio', + 'latexn', + 'carolmin', + 'fixfoot', + 'mdwmath', + 'vruler', + 'nccfancyhdr', + 'fontools', + 's2latex', + 'nb4latex', + 'ishyph', + 'mdwtools', + 'booktabs', + 'gentl-gr', + 'zhmetrics', + 'bpchem', + 'euro-ce', + 'import', + 'TeXshell', + 'jtb', + 'mboxfill', + 'vrbexin', + 'context-lilypond', + 'font-change', + 'altnline', + 'texlive', + 'tsipa', + 'textures-metrics', + 'spotcolor', + 'manual', + 'mactotex', + 'palladam', + 'niceframe', + 'draftcopy', + 'york-thesis', + 'pst-fill', + 'phoenician', + 'pst-blur', + 'shortvrb', + 'fnpara-pln', + 'kpathsea', + 'protex', + 'harvard-obsolete', + 'poster-mac', + 'utf2any', + 'lahyph', + 'germkorr', + 'harvmac', + 'sverb', + 'numprint', + 'ppr-prv', + 'boxedart4mac', + 'lated', + 'RST', + 'Beebe-DVI', + 'fncychap', + 'turnstile', + 'ltx2rtf', + 'colortbl', + 'psutils', + 'txt', + 'TeXmate', + 'pst-math', + 'bard', + 'aramaic', + 'amstex', + 'PWT', + 'arlatex', + 'context-URWGaramond', + 'semtrans', + 'nestquot', + 'muthesis', + 'fancyhdrboxed', + 'neufont', + 'sfarticle', + 'hypbmsec', + 'pbm2tex', + 'arev', + 'harmony', + 'stix', + 'savesym', + 'path', + 'csv2latex', + 'xmpincl', + 'notoccite', + 'fancyhdr', + 'AFMtopl (Wolczko)', + 'components', + 'cun', + 'dottex', + 'dviasm', + 'powerdot', + 'chicagoa', + 'hrlatex', + 'spverbatim', + 'prosper', + 'ocr-a', + 'dvisvgm', + 'et', + 'tab4tex', + 'context-degrade', + 'trivfloat', + 'ifthen', + 'ed', + 'modroman', + 'MiniPlot', + 'bib2ml', + 'letter1', + 'mdwtab', + 'macbibtex', + 'frenchpro', + 'cmtt', + 'pst-layout', + 'context-filter', + 'lb2-examples', + 'UPmethodology', + 'qm', + 'mrecog', + 'arabi', + 'cmolddig', + 'isorot', + 'fourspell', + 'ps_view', + 'oxford', + 'bbl2html', + 'snapshot', + 'count1to', + 'collcell', + 'Bibex', + 'blindtext', + 'menu', + 'interpol', + 'PicTeX', + 'minitoc', + 'croatian', + 'papercdcase', + 'nrc', + 'mftrace', + 'graphicx-psmin', + 'make_latex', + 'DCpic', + 'pkbbox', + 'mactex-basic', + 'compare', + 'autopict', + 'latex2man', + 'tex4ht', + 'pst-func', + 'adrlist', + 'bookest', + 'lshort-slovak', + 'luasseq', + 'MEP article', + 'gmdoc', + 'isolatin1', + 'qfig', + 'cmpj', + 'tabsatz', + 'addindex', + 'comma', + 'doc-pictex', + 'notes2bib', + 'properties', + 'betababel', + 'fancynum', + 'aurical', + 'dvitops', + 'fepslatex', + 'yax', + 'context-fullpage', + 'HyPlain', + 'uwthesis', + 'JBibtexManager', + 'newalg', + 'fig2eng', + 'tesla', + 'multicol', + 'lfonts-ams', + 'rsc', + 'oriya', + 'texsketch', + 'pstricks-calcnotes', + 'ot-tableau', + 'ms', + 'schemeweb', + 'GuITbeamer', + 'jurarsp', + 'mylatex', + 'psboxit', + 'microtype', + 'wochtag', + 'bib-greek', + 'lshort-finnish', + 'texpict', + 'showtags', + 'fixlatvian', + 'crosswrd', + 'math-e', + 'nih', + 'ltcaption', + 'mh', + 'inputtrc', + 'xq', + 'boxedeps', + 'hardwrap', + 'latex209', + 'tiff', + 'pslatex', + 'dichokey', + 'simplified-latex', + 'pst-bspline', + 'mathalfa', + 'abbr', + 'latin1jk', + 'unpacked', + 'quote', + 'cirth', + 'edmac', + 'animate', + 'jknappen', + 'tkbibtex', + 'testfont', + 'scorecard', + 'hvmath-fonts', + 'xetex-greek', + 'lshort-russian', + 'bashful', + 'declare', + 'pgfplots', + 'AcroMemory', + 'eso-pic', + 'inscrutable', + 'elmath', + 'jcc', + 'pst-labo', + 'amsfonts', + 'pst-stru', + 'JPicEdt', + 'emptypage', + 'multibox', + 'ltxindex', + 'wiggly', + 'mdputu', + 'toc', + 'softmaker-henderson', + 'jas99', + 't1tools', + 'plfonts', + 'outliner', + 'begriff', + 'letter-plain', + 'mkbangtex', + 'itnumpar', + 'm3D', + 'calxxxx', + 'xetexfontinfo', + 'zigaretten', + 'covington', + 'breqn', + 'engwar', + 'kvdefinekeys', + 'urwvf', + 'ttf2tex', + 'srhyphc', + 'spain', + 'concmath', + 'vmargin', + 'robustcommand', + 'marvosym', + 'LXfonts', + 'ptex-texmf', + 'winemtex', + 'subscript', + 'uni-wtal-ger', + 'cellular', + 'cmastro', + 'eurosans', + 'bigints', + 'captdef', + 'tcltexed', + 'ltxinput', + 'cfgguide', + 'placeins-plain', + 'TeX', + 'diagnose', + 'biokey', + 'CJ', + 'epsfview', + 'historische-zeitschrift', + 'astyped', + 'dvipsk', + 'faq-fr', + 'smaller', + 'pedigree-perl', + 'french-translations', + 'dashbox', + 'pst-thick', + 'vpage', + 'TeXcount', + 'longdiv', + 'overword', + 'metapost', + 'tkdvi', + 'sprite', + 'tkz-linknodes', + 'amslatex-primer', + 'coolstr', + 'stables', + 'corelfonts', + 'namespc', + 'lollipop', + 'iopart-num', + 'truetypemetrics', + 'mathspec', + 'proofs', + 'bookform', + 'everyshi', + 'sparklines', + 'nccboxes', + 'venn', + 'aichej', + 'cropmark-pu', + 'ifpdf', + 'luacolor', + 'cms4talks', + 'dvichk', + 'btable', + 'abstbook', + 'aomart', + 'letltxmacro', + 'jura', + 'cals', + 'sueterlin', + 'Imake-TeX', + 'hycolor', + 'lametex', + 'filemod', + 'imakeidx', + 'mathesatz-examples', + 'nonfloat', + 'ncccropbox', + 'erdc', + 'texfilt', + 'Metafont book', + 'rec-thy', + 'at', + 'exams', + 'doipubmed', + 'jj-game', + 'navigator', + 'dblfloatfix', + 'statistik', + 'daytime', + 'AkkTeX', + 'etex-pkg', + 'stmaryrd', + 'mirr', + 'xwpick', + 'cm-gf', + 'epsincl', + 'realscripts', + 'infwarerr', + 'sanhyph', + 'texi2dvi-latest', + 'eqlist', + 'sfwmac', + 'proba', + 'apasoft', + 'spanglish', + 'sageep', + 'sansmath', + 'docmute', + 'boundbox', + 'rotfloat', + 'latexcheat', + 'text2bib', + 'sauterfonts', + 'ghostscript-GPL', + 'grafik', + 'brclc', + 'sepnum', + 'subsupscripts', + 'usrguide', + 'floatpag', + 'stringstrings', + 'skb', + 'fonteinf', + 'memdesign', + 'corridx-obsolete', + 'overrightarrow', + 'adjmulticol', + 'LaTeX-veryshortguide', + 'txfontsb', + 'prerex', + 'verbatim', + 'ucharclasses', + 'pst-optexp', + 'titleref', + 'ktv-texdata', + 'a5comb', + 'etextools', + 'verbtim2', + 'datetime', + 'ctable', + 'biihead', + 'inlinebib', + 'startex', + 'regcount', + 'minipage-marginpar', + 'committee-font', + 'apacite', + 'ecltree', + 'flagderiv', + 'localloc', + 'biblatex-chem', + 'background', + 'chbar', + 'utthesis', + 'lcircuit', + 'tex-gyre', + 'showdim', + 'BiBLE', + 'afterpackage', + 'fbs', + 'fihyph', + 'llncs209', + 'Ultra-TeX', + 'hungarian', + 'euler', + 'windvi', + 'setspace', + 'ant-worker-tasks', + 'cmoutlines', + 'autotab', + 'xtab', + 'rcs-multi', + 'mathastext', + 'printbib', + 'web9pt', + 'dblfnote', + 'pst-vue3d', + 'compactbib', + 'arabxetex', + 'yafoot', + 'checkend', + 'itrans-processor', + 'acroterm', + 'fontsmpl', + 'bartel-chess-fonts', + 'ltt', + 'amsltx11', + 'recipecard', + 'pgf', + 'munich', + 'verbatim-gen', + 'epstool', + 'smartmn', + 'hex', + 'annotation', + 'axodraw', + 'wasysym', + 'bosisio', + 'lshort-english', + 'indxcite', + 'vispeech', + 'shipunov', + 'emtex', + 'timeline', + 'luainputenc', + 'show2e', + 'mathtime-ltx', + 'draftmark', + 'arabtex', + 'fullblck', + 'Birkhaeuser', + 'screenplay', + 'phonetic', + 'xfig', + 'WinTeX XP', + 'physymb', + 'FiXme', + 'uaclasses', + 'umlaute', + 'softmaker-inverserif', + 'texlogos', + 'mpman-ru', + 'pmtex', + 'permute', + 'memo2', + 'chapterfolder', + 'authblk', + 'encguide', + 'bidstobibtex', + 'bytefield', + 'lm', + 'epsfig', + 'everyhook', + 'hoffset-voffset', + 'oldprsn', + 'context-notes-zh-cn', + 'soyombo', + 'centernot', + 'caesarcm', + 'wnri-latex', + 'philokalia', + 'pagesel', + 'miktex-portable', + 'chemarr', + 'turkish', + 'fnpos', + 't1enc', + 'latex-notes-zh-cn', + 'lineno', + 'clsguide', + 'base', + 'pdfscreen', + 'RRGtrees', + 'cahyph', + 'around-the-bend', + 'u8tex', + 'eqname', + 'russ', + 'metafp', + 'marginal', + 'texloganalyser', + 'shortcuttool', + 'plasTeX', + 'psgreek', + 'resumemac', + 'psnfss', + 'thesis-titlepage-fhac', + 'eukleides', + 'auto1', + 'eppstein-trees', + 'textoolspro', + 'grfext', + 'ethtex', + 'lshort-slovenian', + 'newspaper', + 'GFS Bodoni', + 'mxedruli', + 'tmmath', + 'tengtex', + 'fragments', + 'lcd', + 'arsclassica', + 'degrade', + 'weekday', + 'easyvector', + 'poltawski', + 'selectp', + 'transfig', + 'alterqcm', + 'tex-ps', + 'protext', + 'macqassign', + 'mflogo', + 'ean13isbn', + 'vrsion', + 'ltoh', + 'wallpaper', + 'venturisADF', + 'TeX T1', + 'mleftright', + 'script-font', + 'PBMtoPK', + 'fundus-calligra', + 'revtex4-0', + 'readprov', + 'titles', + 'escapeTeXt', + 'jkthesis', + 'automatica', + 'fnbreak', + 'lexikon', + 'lecturer', + 'picmac', + 'morse', + 'fntguide', + 'ifmslide', + 'pst-diffraction', + 'capt-of', + 'pagefoots', + 'sobolev', + 'ivd2dvi', + 'splines', + 'SouthArabian', + 'scale', + 'mem', + 'mflogo209', + 'concprog', + 'chbibref', + 'edfnotes', + 'nccsect', + 'visualtex', + 'sttools', + 'palatino-nfss', + 'pst-ob3d', + 'tape', + 'cm-super', + 'arXivBib', + 'tex-implementors', + 'lualatex-math', + 'lithuanian', + 'defstring', + 'onlyamsmath', + 'frenchponct', + 'arosgn', + 'frankenstein-unsupported', + 'yinit', + 'leaflet', + 'a4', + 'cooltooltips', + 'installfont', + 'translation-pst-jtree-de', + 'chessmin', + 'cmarrows', + 'savefnmark', + 'jadetex', + 'sdrt', + 'labtex', + 'courier scaled', + 'pstotext', + 'cwebbin', + 'he-le-na', + 'sauter', + 'gost', + 'knittingpattern', + 'tablists', + 'required', + 'williams', + 'suffix', + 'flow', + 'mathabx', + 'cjkpunct', + 'softmaker-vagrounded', + 'cypriote', + 'tdclock', + 'IEEEannot', + 'progkeys', + 'softmaker-heliumtwo', + 'maple', + 'achemso', + 'context-chromato', + 'electrumadf', + 'mctex', + 'urlbst', + 'titlepages', + 'pos-at', + 'pdfx', + 'mandel', + 'spiderweb', + 'sqrcaps', + 'tensor', + 'lualatex-doc', + 'toolbox', + 'TameTheBeast', + 'literate', + 'color', + 'desclist', + 'cmtiup', + 'LatexPaper', + 'shuffle', + 'pacioli', + 'numname', + 'ginpenc', + 'kix', + 'literaturnaya', + 'stampinclude', + 'swrule', + 'eurofont', + 'simplewick', + 'chet', + 'dvi2xx', + 'cm-tfm', + 'tex2mail', + 'paratype', + 'trimspaces', + 'pst-solides3d', + 'bookmark', + 'techexplorer', + 'showkeys', + 'tocvsec2', + 'polski', + 'hershey', + 'diagrams', + 'nccfoots', + 'mf2pt3', + 'enpassant', + 'icons', + 'IEEEtran', + 'tabu', + 'hypcap', + 'stellenbosch', + 'softmaker-stonehand', + 'accents', + 'harvard', + 'collect', + 'logpap', + 'hep-gen', + 'shorttoc', + 'abstyles-babel', + 'linguex', + 'tex-label', + 'exerquiz', + 'verbatimcopy', + 'ebezier', + 'bibextract', + 'SQLTeX', + 'etoolbox', + 'wadalab', + 'hologo', + 'pst-support', + 'bghyphen', + 'i-ching', + 'totpages', + 'cmcyralt-ltx', + 'accsupp', + 'ctib4tex', + 'svgcolor', + 'robustindex', + 'rawprint', + 'noprot', + 'fjodor', + 'pictexwd', + 'os2tex', + 'apl', + 'lualatex-platform', + 'BibTeX Database Generator', + 'texindex', + 'Layaureo', + 'scalebar', + 'nohyph', + 'indic-type1', + 'flexisym', + 'easy', + 'chngpage', + 'berenisadf', + 'footnote', + 'latexmake', + 'atveryend', + 'xlatex', + 'multibib', + 'bez123', + 'IMTEKda', + 'rustic', + 'lamemo', + 'currfile', + 'eltex', + 'nkarta', + 'timetable', + 'syngen', + 'pagegrid', + 'texpack', + 'dotlessi', + 'metalogo', + 'pspicture', + 'lshort-french', + 'htmlhelp', + 'mpattern', + 'consdiag', + 'europs', + 'fc-arith', + 'util-half', + 'mtp2lite', + 'koi8', + 'newfile', + 'luaindex', + 'ijqc', + 'unouter', + 'bfsymb', + 'toptesi', + 'subfigure', + 'mf-ps', + 'latexdraw', + 'SmileTeX', + 'unicode-math', + 'newsletr', + 'context-simplefonts', + 'b1encoding', + 'Swimgraf', + 'equationauthor', + 'gincltex', + 'romannum', + 'newvbtm', + 'abstr-collect', + 'texed', + 'cwebx', + 'booklet', + 'attachfile2', + 'context-URWGothic', + 'gentle', + 'pst-magneticfield', + 'pst-geo', + 'voss-mathmode', + 'dotseqn', + 'blkarray', + 'hcbundle', + 'mkpkfontdir', + 'ecc', + 'pl', + 'ofs', + 'elvish', + 'jpgfdraw', + 'xcomment', + 'translation-footmisc-de', + 'cm-mf', + 'latex-essential', + 'songbook', + 'catoptions', + 'blanks', + 'undump', + 'textarea', + 'pst-plot', + 'ecta', + 'hitec', + 'titlefoot', + 'tpcmfont', + 'alleqno', + 'todonotes', + 'LaTeX-Referenz', + 'scriptfonts', + 'prelim', + 'faq-es', + 'dviwin', + 'colorsep', + 'encxvlna', + 'cropmark', + 'fmp', + 'directtex', + 'movie15', + 'leftidx', + 'neuron', + 'lhcyr', + 'pcarl', + 'lato', + 'dvimerge', + 'undolabl', + 'ttf2mf', + 'dpfloat', + 'ifacmtg', + 'topsection', + 'dozenal', + 'dvii', + 'mwcls', + 'mil', + 'tbe', + 'tracking', + 'window', + 'featpost', + 'GFS Solomos', + 'modguide', + 'blowup', + 'svninfo', + 'mathptm', + 'klinz', + 'setstrut', + 'pst-bar', + 'cyrmemo', + 'tinyc2l', + 'bib-fr', + 'firefox_ctan_plugins', + 'RGB', + 'script', + 'pst-cox', + 'Epigrafica', + 'keycommand', + 'scmac', + 'dviljk', + 'example', + 'Metafont', + 'bondgraph', + 'endfloat', + 'BibTeX-help', + 'mapcodes', + 'getfiledate', + 'present', + 'lshort-dutch', + 'vfware', + 'qstest', + 'mrcheckbib', + 'these', + 'steinmetz', + 'acrotex-web', + 'labbook', + 'winshell', + 'sentences', + 'scyrillic', + 'context-top-ten', + 'classico', + 'verdana', + 'cbe', + 'booktabs-fr', + 'Array Maker', + 'uhrzeit', + 'sanskrit', + 'Extensive Arrows.', + 'accents-cs', + 'ltxcmds', + 'pst-poly', + 'Pecha', + 'latex-base', + 'rotate', + 'rmpage', + 'greek-inputenc', + 'newthm', + 'warpcol', + 'patch', + 'cantarell', + 'lexitex', + 'wp-conv', + 'economic', + 'miktex_update', + 'time', + 'frenchle', + 'gurmukhi-singh', + 'lazylist', + 'uk-tex-faq', + 'opteng', + 'aebXMP', + 'bibview', + 'stringenc', + 'e-TeX', + 'isi2bib-vim', + 'TeXline', + 'vfcomb', + 'varsects', + 'version', + 'springer', + 'tabularcalc', + 'tucv', + 'fillform', + 'tabularkv', + 'tugboat', + 'orderrefs', + 'yfonts-t1', + 'pst-gr3d', + 'suftesi', + 'fge', + 'xii', + 'etaremune', + 'varindex', + 'ucdavisthesis', + 'tex-font-errors-cheatsheet', + 'typedref', + 'tex-references', + 'enumitem-zref', + 'fig4latex', + 'moreverb', + 'geometry', + 'KIXfont', + 'truchet', + 'softmaker-canossa', + 'faltblat', + 'nicefrac', + 'mff-util', + 'asaetr', + 'isotope', + 'sehyph', + 'dot2texi', + 'asymptote-faq-zh-cn', + 'typespec', + 'progressbar', + 'capbas', + 'subdocs', + 'smalltalk', + 'bibplain', + 'uscthesis', + 'fnote', + 'oldstandard', + 'midnight', + 'nth', + 'synctex-parser', + 'ctex', + 'jpsj', + 'cprotect', + 'cell', + 'boxit', + 'ppower4', + 'adjustbox', + 'rcsinfo', + 'sugconf', + 'topfloat', + 'Excel-to-LaTeX', + 'bridge', + 'upgreek', + 'chgbar', + 'smallcap', + 'pst-pad', + '12many', + 'cjk-fonts', + 'borceux', + 'fonetika', + 'ledmac', + 'randbild', + 'ctie', + 'clock', + 'pageslts', + 'bibmods', + 'xbibfile', + 'syntonly', + 'dehyph-exptl', + 'HLaTeX fonts', + 'beginlatex', + 'esk', + 'lookbibtex', + 'lipsum', + 'natbib', + 'amsppt1', + 'mathpple', + 'chemscheme', + 'bullcntr', + 'xfrac', + 'texi2html', + 'nccfloats', + 'multicolpar', + 'engtlc', + 'gnuplot', + 'pst-slpe', + 'mnhyphn', + 'mff', + 'list', + 'ps4mf', + 'xetex-itrans', + 'rvwrite', + 'extsizes', + 'prodint', + 'pgf-umlsd', + 'gauss', + 'tamefloats', + 'hypernat', + 'tpic2pdftex', + 'functan', + 'rawfonts', + 'ordinalpt', + 'ltx3pub', + 'fancypar', + 'fundus-outline', + 'stage', + 'tikz-inet', + 'esperant', + 'Vancouver', + 'section', + 'cmcyr-patch', + 'tabto for LaTeX.', + 'perpage', + 'ethiop', + 'chessfss', + 'swiftex', + 'isomath', + 'concmath-fonts', + 'revnum', + 'settosize', + 'Petri-nets', + 'verbatim-tub', + 'boisik', + 'grkfinst', + 'hep', + 'milstd', + 'texlipse', + 'indentfirst', + 'KTeXShell', + 'MetaPost examples', + 'psnfssx-luc', + 'cprog', + 'roundbox', + 'headerfooter', + 'tabularew', + 'memoir', + 'side', + 'varsfromjobname', + 'iching', + 'ucthesis', + 'ean', + 'fenixpar', + 'fileerr', + 'javaDVI', + 'widetable', + 'texware', + 'lshort-thai', + 'catalan', + 'greektex', + 'isodate', + 'CSTeX', + 'bgteubner', + 'esstix', + 'bdfchess', + 'holtxdoc', + 'changelayout', + 'jablantile', + 'serbian-lig', + 'eolgrab', + 'euroitc', + 'GFS Didot', + 'ukdate', + 'doublestroke', + 'tmview', + 'mhchem', + 'he-she', + 'tktexcad', + 'graphics', + 'balance', + 'viiptart', + 'cweb', + 'faktor', + 'disser', + 'euxunicode', + 'alg', + 'gchords', + 'verbinp', + 'plainmisc', + 'bibleref-french', + 'songs', + 'ednotes', + 'czhyph2e', + 'gsftopk', + 'colortex', + 'deleq', + 'bardiag', + 'nccrules', + 'stubs', + 'mfware', + 'elteikthesis', + 'labels', + 'xcmr', + 'poster', + 'dvi-economic', + 'webmacss', + 'jtbnew', + 'flashcards', + 'letterspacing', + 'pdftricks', + 'gillcm', + 'fmtcount', + 'cbcoptic', + 'fchart', + 'cyrguide', + 'tds', + 'computational-complexity', + 'grfpaste', + 'free-math-font-survey-vn', + 'l2tabu-italian', + 'xstring', + 'ttf2pt1', + 'metatype1', + 'mathscinet', + 'delig', + 'arbeit', + 'everysel', + 'dmhgener', + 'greenpoint', + 'invertedparagraphs', + 'wsuipa', + 'GraphBase', + 'picinpar', + 'ans', + 'achicago-bst', + 'petiteannonce', + 'ISO-TeX', + 'linearb', + 'fourier', + 'URW-base35', + 'ibmres-tex', + 'pst-uml', + 'csfonts-t1', + 'minutes', + 'phaistos', + 'somedefs', + 'malayalam-omega', + 'LuxiMono', + 'engord', + 'semantic', + 'mhequ', + 'theorem', + 'artex', + 'yagusylo', + 'djgpp', + 'ulsy', + 'nddiss', + 'context-typescripts', + 'zefonts', + 'gmverb', + 'GraphTeX', + 'truncate', + 'moonphase', + 'LaTeX-tds', + 'metapost-matlab', + 'isonums', + 'onepagem', + 'bibleref-parse', + 'latex-info', + 'espo', + 'l2tabu-spanish', + 'ellipsis', + 'VTeX/Free', + 'protocol', + 'fastpictex', + 'sides', + 'limap', + 'zahl2string', + 'w32tex', + 'Robot Man', + 'psfragger', + 'multirow', + 'underlin-generic', + 'finstrut', + 'w-a-schmidt', + 'psizzl', + 'context-account', + 'gpdata', + 'streetex', + 'LEd', + 'ncccomma', + 'gplot', + 'compsci', + 'cyrillic', + 'annotation-pkg', + 'texlive-repo', + 'abc', + 'ANUfinalexam', + 'fontsampler', + 'coollist', + 'emerald', + 'ssqquote', + 'csvsimple', + 'fancyvrb', + 'sc21-wg1', + 'volumes', + 'starfont', + 'SkakNew', + 'sudokubundle', + 'huncial', + 'texas', + 'quotes', + 'supertabular', + 'blockdraw_mp', + 'softmaker-tampa', + 'oca', + 'ionumbers', + 'foilhtml', + 'sines', + 'rfil', + 'softfonts', + 'acmproc', + 'Thai LaTeX', + 'btOOL', + 'hopatch', + 'TeXmuse', + 'purifyeps', + 'dropcaps', + 'viking', + 'tolkienfonts', + 'txfonts', + 'go-make', + 'miktex', + 'url', + 'bakoma', + 'ruled-tables', + 'sshdbk10', + 'dPS', + 'ital', + 'Knuth-errata', + 'magic', + 'umich-thesis', + 'microtype-de', + 'glonti', + 'pst-light3d', + 'ncccropmark', + 'cmll', + 'vmsps', + 'statex2', + 'rail', + 'pseudocode', + 'boxhandler', + 'threed', + 'biblook', + 'settosize-ltx', + 'estcpmm', + 'lfb', + 'xesearch', + 'hieroglyph', + 'drop', + 'latexMP', + 'theapa', + 'lettermac', + 'sgame', + 'tth', + 'izhitsa', + 'tex-gyre-bonum', + 'xr-hyper', + 'rmthm', + 'fpTeX', + 'aebenvelope', + 'snote', + 'mailmerge', + 'poemscol', + 'soulutf8', + 'bookhands', + 'histogr', + 'LatexRender', + 'othello', + 'decimal', + 'codedoc', + 'times', + 'slantsc', + 'piano', + 'xnewcommand', + 'amslatexdoc-vietnamese', + 'varioref', + 'papertex', + 'textpos', + 'soul', + 'afthesis', + 'g-brief', + 'dashundergaps', + 'eco', + 'GFS NeoHellenic', + 'okuda', + 'fancychapters', + 'keystroke', + 'circuitikz', + 'encTeX', + 'marnote', + 'csquotes-de', + 'inputenx', + 'answers', + 'forloop', + 'expdlist', + 'dvitype', + 'latexcount', + 'mathgifg', + 'backref', + 'tableaux', + 'bitfield', + 'hepthesis', + 'showlabels', + 'abstract', + 'pzccal', + 'xetex-def', + 'softmaker-quadrat', + 'makecell', + 'shalom', + 'osmanian', + 'keyval', + 'texshop', + 'amscls', + 'xetex-devanagari', + 'cjk', + 'unitsdef', + 'fancytabs', + 'sort-by-letters', + 'firstline', + 'merge', + 'unicode', + 'cep', + 'ftn', + 'tabulary', + 'WordML2LaTeX', + 'crudetype', + 'picture', + 'vwcol', + 'calorie', + 'softmaker-veracruz', + 'scientificpaper', + 'mathsci2bibtex', + 'accfonts', + 'play', + 'tabbingbox', + 'enumitem', + 'booktabs-de', + 'mempatch', + 'sty2dtx', + 'texlist', + 'loval' + ] + }, + 'Documentation > + Other' => { + '_packages_' => [ + 'fontbook' + ] + }, + 'Subject-specific typesetting + ' => { + 'Linguistics' => { + '_packages_' => [ + 'vowel' + ] + }, + 'Social sciences' => { + '_packages_' => [ + 'geschichtsfrkl' + ] + }, + 'Computer science' => { + '_packages_' => [ + 'context-vim', + 'documentation', + 'verbments' + ] + }, + 'Music' => { + '_packages_' => [ + 'musictex' + ] + }, + 'Other' => { + '_packages_' => [ + 'biblatex-juradiss' + ] + }, + 'Other natural sciences' => { + '_packages_' => [ + 'pgfmolbio' + ] + }, + 'Mathematics' => { + 'Theorems' => { + '_packages_' => [ + 'tcolorbox' + ] + }, + 'Other' => { + '_packages_' => [ + 'venndiagram', + 'pst-ode' + ] + }, + 'Mathematical symbols' => { + '_packages_' => [ + 'sansmathaccent' + ] + } + }, + 'Other subjects in the humanitites' => { + '_packages_' => [ + 'biblatex-swiss-legal', + 'business-research' + ] + } + } + }, + 'primary' => { + 'Programming in TeX > + Other' => { + '_packages_' => [ + 'ifxetex', + 'xtrcode', + 'logical-markup-utils', + 'extdash', + 'chickenize', + 'plipsum', + 'ifmtarg', + 'luatex-pkg', + 'regstats', + 'renditions', + 'rotchiffre', + 'intcalc', + 'unisugar', + 'tex2tok', + 'texdef', + 'inversepath', + 'hanoi', + 'interfaces', + 'maybeload', + 'iflang', + 'excludeonly', + 'cmdstring', + 'texapi', + 'fltpoint', + 'twoopt', + 'extradefs', + 'makerobust209', + 'pi', + 'environ', + 'preview', + 'cmdtrack', + 'auxhook', + 'euro', + 'chngcntr', + 'calctab', + 'xltxtra', + 'export', + 'inputfile', + 'sgmlcmpt', + 'atenddvi', + 'zero', + 'xlop', + 'dcounter', + 'everypage', + 'ifnextok', + 'magicnum', + 'default', + 'remreset', + 'context-rst', + 'protecteddef', + 'mhs', + 'ted', + 'EUenc', + 'catcodes', + 'xtemplate', + 'totcount', + 'lmake', + 'randtext', + 'printlen', + 'ltxdoc', + 'fibnum', + 'dialogl', + 'catchfile', + 'l3packages', + 'arabic', + 'makerobust', + 'aliascnt', + 'gkpmac', + 'xmltex', + 'tdsfrmath', + 'mdwtools', + 'kpathsea', + 'modroman', + 'collcell', + 'reverxii', + 'fancynum', + 'abbr', + 'inscrutable', + 'ifpdf', + 'letltxmacro', + 'at', + 'statistik', + 'etex-pkg', + 'etextools', + 'startex', + 'luaxml', + 'morewrites', + 'checkend', + 'suffix', + 'collect', + 'lualatex-platform', + 'atveryend', + 'metalogo', + 'newfile', + 'romannum', + 'midnight', + 'rvwrite', + 'tamefloats', + 'perpage', + 'varsfromjobname', + 'plainmisc', + 'xstring', + 'zahl2string', + 'sines', + 'inputenx', + 'ytex', + 'mtbe', + 'rangen', + 'fixltx2e', + 'acromake', + 'removefr', + 'srcltx', + 'DB_process', + 'bigintcalc', + 'uniquecounter', + 'etoolbox-de', + 'parselines', + 'filecontents', + 'luatexbase', + 'passivetex', + 'samples', + 'calc', + 'fwlw', + 'logfilter', + 'eforms', + 'xoptarg', + 'xspace', + 'ltxfileinfo', + 'dprogress', + 'processkv', + 'ifplatform', + 'tokenizer', + 'translation-filecontents-de', + 'rule-d', + 'sphack', + 'js-misc', + 'xpunctuate', + 'binomexp', + 'format', + 'trace', + 'ltxutil', + 'memexsupp', + 'l3experimental', + 'inlinedef', + 'counttexruns', + 'stex', + 'newinsert', + 'l3kernel', + 'ifdraft', + 'basix', + 'authoraftertitle', + 'gmutils', + 'occam', + 'realcalc', + 'fnumprint', + 'ifvtex', + 'cjw', + 'silence', + 'ifluatex', + 'context-inifile', + 'zref', + 'drac', + 'alphalph', + 'cptex', + 'atbegshi', + 'doafter', + 'checklab', + 'abbrevs', + 'miniltx', + 'niceverb', + 'plain-ltx', + 'papermas', + 'xkvltxp', + 'emarks', + 'inputenc', + 'extract', + 'fp', + 'harvmac', + 'savesym', + 'context-filter', + 'count1to', + 'blindtext', + 'properties', + 'hardwrap', + 'quote', + 'declare', + 'bashful', + 'overword', + 'everyshi', + 'infwarerr', + 'brclc', + 'skb', + 'regcount', + 'localloc', + 'hex', + 'everyhook', + 'fragments', + 'python', + 'defstring', + 'ltxtools', + 'trimspaces', + 'verbatimcopy', + 'etoolbox', + 'noprot', + 'currfile', + 'unouter', + 'catoptions', + 'getfiledate', + 'fifinddo', + 'cprotect', + 'ordinalpt', + 'fileerr', + 'fenixpar', + 'eolgrab', + 'he-she', + 'fmtcount', + 'engord', + 'context-account', + 'csvsimple', + 'collectbox', + 'xnewcommand', + 'picture' + ] + }, + 'Page-focused > + Footnotes' => { + '_packages_' => [ + 'endnote', + 'pfnote', + 'endnotes', + 'pagenote', + 'footmisc', + 'fnpct', + 'footnotebackref', + 'fnlineno', + 'dblfnote', + 'yafoot', + 'fnbreak', + 'pagefoots', + 'savefnmark', + 'nccfoots', + 'footnote', + 'titlefoot', + 'fnote', + 'ftnxtra', + 'fnpara', + 'footnoterange', + 'bigfoot', + 'nnfootnote', + 'ftnright', + 'fn2end', + 'manyfoot', + 'enotez', + 'footnpag', + 'fixfoot', + 'fnpara-pln', + 'fnpos', + 'sepfootnotes', + 'finstrut', + 'ftn' + ] + }, + 'Document types > + Other' => { + '_packages_' => [ + 'mpdinbrief', + 'a0poster', + 'geomsty', + 'euproposal', + 'wordlike', + 'facsimile', + 'erdc', + 'mwcls', + 'milstd', + 'lextex', + 'knst', + 'sf298', + 'fax', + 'bookform', + 'macqassign', + 'lexikon', + 'estcpmm' + ] + }, + 'Page-focused > + Tables' => { + '_packages_' => [ + 'threeparttable', + 'longtable', + 'odsfile', + 'tap', + 'dectab', + 'hvdashln', + 'dateiliste', + 'bigtabular', + 'bigtable', + 'threeparttablex', + 'ltablex', + 'ltabptch', + 'stabular', + 'tabularx', + 'phoncard', + 'spreadtab', + 'tabularht', + 'gentabtex', + 'easytable', + 'booktabs', + 'mdwtab', + 'ot-tableau', + 'tablefootnote', + 'pgfplots', + 'cellular', + 'ctable', + 'autotab', + 'tabu', + 'booktabs-fr', + 'tabularew', + 'widetable', + 'multirow', + 'ruled-tables', + 'sgame', + 'diagbox', + 'booktabs-de', + 'bigstrut', + 'tabls', + 'boldline', + 'dcolumn', + 'slashbox', + 'monofill', + 'hhline', + 'variations', + 'sltables', + 'polytable', + 'ltxtable', + 'maketable', + 'cellwise', + 'rccol', + 'treedef', + 'cellspace', + 'tabularborder', + 'colortbl', + 'tab4tex', + 'ltcaption', + 'stables', + 'btable', + 'cals', + 'xtab', + 'blkarray', + 'Array Maker', + 'warpcol', + 'tabularkv', + 'Excel-to-LaTeX', + 'supertabular', + 'makecell', + 'tabulary' + ] + }, + 'Non-English languages > + Chinese, Japanese, Korean' => { + '_packages_' => [ + 'xpinyin', + 'uptex', + 'luatexja', + 'zhnumber', + 'pxcjkcat', + 'japanese-otf' + ] + }, + 'Graphics > + Other' => { + '_packages_' => [ + 'yt4pdf', + 'barcodes', + 'FigSize', + 'nccpic', + 'svg', + 'floatflt', + 'GuITlogo', + 'hilowres', + 'fullpict', + 'rviewport', + 'combinedgraphics', + 'boxedart4mac', + 'boxedeps', + 'tiff', + 'sprite', + 'ean13isbn', + 'jpgfdraw', + 'easyfig', + 'esk', + 'grfpaste', + 'limap', + 'xetex-def', + 'pointruler', + 'pinlabel', + 'asyfig', + 'pawpict', + 'incgraph', + 'overpic', + 'asymptote', + 'MiniPlot', + 'degrade', + 'icons', + 'pst-plot', + 'keystroke' + ] + }, + 'Tools' => { + 'PDF + tools' => { + '_packages_' => [ + 'xpdfopen', + 'issuulinks', + 'pdfbook' + ] + }, + 'Word + counting' => { + '_packages_' => [ + 'latexcount', + 'wordcount', + 'TeXcount' + ] + }, + 'Bibliographic + manipulation' => { + '_packages_' => [ + 'biblist', + 'isi2bibtex', + 'splitbib', + 'directory', + 'mkbib', + 'biblio-perl', + 'pybliographer', + 'alphabib', + 'bibfile-reformat-pages', + 'biber', + 'tex2bib', + 'pydocstrip', + 'bibweb', + 'bibsort', + 'EndNote2bib', + 'bib2dvi', + 'Orderer', + 'refer', + 'bibtool', + 'bibtools', + 'fixbbl', + 'bbl2html', + 'bibview', + 'isi2bib-vim', + 'orderrefs', + 'lookbibtex', + 'mathsci2bibtex', + 'pybib', + 'bibcheck', + 'bibutils', + 'findbib', + 'bibclean', + 'mab2bib', + 'ams2bib', + 'refer-tools', + 'bibindex', + 'tib', + 'r2bib', + 'qbibman', + 'bibbuild', + 'rfc2bib', + 'bib2xhtml', + 'bib2ml', + 'text2bib', + 'bidstobibtex', + 'arXivBib', + 'mathscinet', + 'btOOL' + ] + }, + 'Document + management' => { + '_packages_' => [ + 'gitinfo', + 'proof', + 'svn-prov', + 'refcheck', + 'texdirflatten', + 'latexdiff', + 'testflow', + 'AutoLaTeX', + 'texliveonfly', + 'LaTeX for Autoconf', + 'rerunfilecheck', + 'tex_it', + 'runtex', + 'frankenbundle', + 'svn', + 'lacheck', + 'prv', + 'versions', + 'ltxdiff', + 'lintex', + 'rcs-pln', + 'mkjobtexmf', + 'flatex', + 'texdeps', + 'typeoutfileinfo', + 'mversion', + 'latexn', + 'import', + 'arlatex', + 'mylatex', + 'ant-worker-tasks', + 'chapterfolder', + 'stampinclude', + 'latexmake', + 'subdocs', + 'go-make', + 'latex-make', + 'check', + 'askinclude', + 'texdiff', + 'ldiff', + 'tagging', + 'texlog_extract', + 'texdepend', + 'texref', + 'subfiles', + 'rake4latex', + 'rcs', + 'flatten', + 'TVS', + 'latexpand', + 'ShLaTeX', + 'vc', + 'mk', + 'progress', + 'logreq', + 'match_parens', + 'includex', + 'ctanify', + 'censor', + 'adhocfilelist', + 'changes', + 'latexmk', + 'bundledoc', + 'svn-multi', + 'snapshot', + 'make_latex', + 'ltxinput', + 'cms4talks', + 'Imake-TeX', + 'texi2dvi-latest', + 'rcs-multi', + 'LatexPaper', + 'svninfo', + 'qstest', + 'rcsinfo', + 'syntonly', + 'artex' + ] + }, + 'Editors and + shells' => { + '_packages_' => [ + 'MicroIMP', + 'texshell32', + 'yi4latex', + 'auctex', + 'NEdit-LaTeX-Extensions', + 'pmcstex', + 'LaTable', + 'tsconfig', + 'xpdf', + 'xtem', + 'gv-savepos', + 'filehdr', + 'latexwizard', + 'Sikumuna', + 'javascript_TeXed', + 'brief_t', + 'LaTeXPiX', + 'win32-emacs-auctex', + 'pagedraw', + 'ratexdb', + 'iTe', + 'gbrief-creator', + 'TeXnicCenter', + 'windvi', + 'u8tex', + 'visualtex', + 'SmileTeX', + 'winshell', + 'synctex-parser', + 'texlipse', + 'ISO-TeX', + 'LEd', + 'texshop', + 'TeXmacs', + 'LaTexMng', + 'epmtfe', + 'lyx', + 'alpha', + 'dinbrief-gui', + 'meta-mode', + 'LaTeX-WIDE', + 'latex4jed', + 'gv', + 'XteXShell', + 'WinEdt', + 'MathType', + 'MathSpad', + 'ftetx', + 'scientificauthor', + 'kile', + 'jlm', + 'latexcad', + 'winlatex', + 'gsview', + 'vpe', + 'vpp', + 'word2tex', + 'TeXshell', + 'tcltexed', + 'tkdvi', + 'Ultra-TeX', + 'WinTeX XP', + 'shortcuttool', + 'eukleides', + 'check-parens', + 'pst-support', + 'xlatex', + 'latexdraw', + 'equationauthor', + 'firefox_ctan_plugins', + 'mewltx', + 'swiftex', + 'KTeXShell', + 'makeglossariesgui' + ] + }, + 'Bibliography + managers' => { + '_packages_' => [ + 'biblos', + 'references', + 'JavaBib', + 'jabref', + 'bibexport', + 'bibview-x', + 'bibdb', + 'ebib', + 'listbib', + 'jurabib', + 'bibfind', + 'bibtexmng', + 'macbibtex', + 'Bibex', + 'JBibtexManager', + 'printbib', + 'BibTeX Database Generator', + 'mrcheckbib', + 'biblook', + 'docarc', + 'bibcard', + 'bibhtml', + 'Synapsen', + 'camel', + 'obas', + 'xbibtex', + 'tkbibtex', + 'BiBLE', + 'bibextract', + 'xbibfile' + ] + }, + 'DVI + manipulation' => { + '_packages_' => [ + 'dvipaste', + 'dvibook', + 'dvii', + 'dviconcat', + 'BSR2dvi', + 'dvicopy', + 'dtl', + 'dvidvi', + 'dviasm', + 'dvichk' + ] + }, + 'Convert + formats' => { + '_packages_' => [ + 'tex2word', + 'rtf2latex2e', + 'epspdfconversion', + 'csx', + 'epstopdf-pkg', + 'a2ping', + 'epspdf-extra', + 'mif2xfig', + 'word2x', + 'untex', + 'ps_conv', + 'de-macro', + 'txt2tex', + 'tex2ltx', + 'tr2latex', + 'WP2LaTeX', + 'html2latex', + 'fotex', + 'utf2any', + 'epstopdf', + 'ltx2rtf', + 'csv2latex', + 'interpreter', + 'transfig', + 'escapeTeXt', + 'mctex', + 'tex2mail', + 'WordML2LaTeX', + 'texperf', + 'ltx2x', + 'easyLaTeX', + 'bit2spr', + 'catdoc', + 'tex2rtf', + 'Exceltex', + 'rnototex', + 'xl2latex', + 'texi2roff', + 'eps2pdf', + 'epspdf', + 'detex', + 'convert', + 'delimtxt', + 'rtf2tex', + 'Midi2TeX/Free', + 'txt2latex', + 'jmakepdfx', + 'nb4latex', + 's2latex', + 'epstool' + ] + } + }, + 'Document parts > + Bibliography' => { + 'Bibliographic styles' => { + '_packages_' => [ + 'biblatex-juradiss', + 'dinat', + 'abstyles-orig', + 'nar', + 'luabibentry', + 'chicago', + 'biblatex-fiwi', + 'alphanumb', + 'dk-bib', + 'geschichtsfrkl', + 'is-bst', + 'mlbib', + 'biblatex-caspervector', + 'apalike2', + 'biblatex-historian', + 'jneurosci', + 'norbib', + 'biblatex-trad', + 'custom-bib', + 'jphysiol', + 'getrefs', + 'bibleref', + 'biblatex-apa', + 'ksfh-nat', + 'PNAS', + 'francais-bst', + 'phy-bstyles', + 'vak', + 'biblatex-philosophy', + 'jas99_m', + 'jbact', + 'authordate', + 'biblatex-swiss-legal', + 'biblatex-dw', + 'alphanum-bst', + 'jtb', + 'chicagoa', + 'oxford', + 'bib-greek', + 'showtags', + 'oscola', + 'uni-wtal-ger', + 'CJ', + 'biblatex-phys', + 'fbs', + 'chbibref', + 'gost', + 'abstyles-babel', + 'ecta', + 'neuron', + 'bib-fr', + 'economic', + 'natbib', + 'sort-by-letters', + 'jmb', + 'decsci', + 'easybib', + 'biblatex-mla', + 'perception', + 'biblatex-luh-ipw', + 'biblatex-musuos', + 'hellas', + 'aaai-named', + 'swebib', + 'development', + 'humannat', + 'persian-bib', + 'chicago-annote', + 'catalanbib', + 'wmaainf', + 'apabst', + 'bibarts', + 'Econometrica', + 'biblatex-chicago', + 'ecclesiastic', + 'finplain', + 'biblatex-ieee', + 'newapa', + 'biblatex-nature', + 'plainyr', + 'biblatex-science', + 'biblatex-authoryear-icomp-tt', + 'bibleref-lds', + 'ascelike', + 'jqt1999', + 'named', + 'biblatex-publist', + 'biblatex-jura', + 'din1505', + 'annotate', + 'humanbio', + 'rsc', + 'jcc', + 'spain', + 'historische-zeitschrift', + 'iopart-num', + 'aichej', + 'apacite', + 'biblatex-chem', + 'munich', + 'annotation', + 'automatica', + 'IEEEannot', + 'ijqc', + 'these', + 'hypernat', + 'Vancouver', + 'jtbnew', + 'chscite', + 'biblatex-nejm' + ] + }, + 'Others' => { + '_packages_' => [ + 'footbib', + 'chapterbib', + 'namunsrt', + 'bibunits', + 'bibtopic', + 'authorindex', + 'bibentry', + 'notes2bib', + 'urlbst', + 'bibplain', + 'backref', + 'bibtopicprefix', + 'margbib', + 'usebib', + 'librarian', + 'doipubmed', + 'titles' + ] + }, + '_packages_' => [ + 'chapref', + 'bibtex', + 'crosstex', + 'multibbl', + 'noTeX', + 'bibtex8bit', + 'compactbib', + 'babelbib', + 'amsrefs', + 'biblatex', + 'multibib', + 'bibmods' + ] + }, + 'Document parts' => { + 'Table of + contents' => { + '_packages_' => [ + 'autotoc', + 'minitoc', + 'shorttoc', + 'titletoc', + 'longtocline', + 'tocbibind', + 'multitoc', + 'toc' + ] + }, + 'Chapters + and Sections' => { + '_packages_' => [ + 'gettitlestring', + 'sectionbox', + 'titlesec', + 'thumby', + 'secdot', + 'alnumsec', + 'titleref', + 'tocvsec2', + 'indentfirst', + 'bsheaders', + 'texilikechaps', + 'automagic', + 'alphanum', + 'anonchap', + 'epigram', + 'serbianpart', + 'sectsty', + 'coseoul', + 'quotchap', + 'chappg', + 'bits', + 'sfheaders', + 'fncychap', + 'outliner', + 'nccsect', + 'topsection', + 'varsects', + 'section', + 'sshdbk10', + 'fancychapters' + ] + } + }, + 'Page-focused > + Floats' => { + '_packages_' => [ + 'subfigmat', + 'graphfig', + 'subfloat', + 'figplace', + 'hvfloat', + 'floatrow', + 'placeins-plain', + 'dblfloatfix', + 'floatpag', + 'nccfloats', + 'dmhgener', + 'subfig', + 'float', + 'photo', + 'placeins', + 'morefloats', + 'chkfloat', + 'stfloats', + 'here', + 'trivfloat', + 'newfloat', + 'nonfloat', + 'rotfloat', + 'subfigure', + 'dpfloat', + 'endfloat', + 'topfloat', + 'side' + ] + }, + 'Tools > + Other' => { + '_packages_' => [ + 'scientificviewer', + 'LaTeXDB', + 'xetal', + 'lualibs', + 'pssplit', + 'mattex', + 'texfilt', + 'hoffset-voffset', + 'techexplorer', + 'SQLTeX', + 'lua2dox', + 'lua-alt-getopt', + 'fourproject', + 'oletex', + 'lgrind', + 'fig2sty', + 'eitl', + 'latexfileversion', + 'texloganalyser', + 'ltoh', + 'fileinfo', + 'LatexRender' + ] + }, + 'Programming in TeX > + Programming structures' => { + '_packages_' => [ + 'mdwlist', + 'expl3', + 'substr', + 'mlist', + 'kvsetkeys', + 'stdclsdv', + 'mwrite', + 'l3dt', + 'nlatexdb', + 'xparse', + 'texsort', + 'perltex', + 'makecmds', + 'exp-testopt', + 'ltxnew', + 'xpatch', + 'redefine', + 'patchcmd', + 'stack', + 'arrayjob', + 'xfor', + 'xifthen', + 'repeat', + 'storecmd', + 'skeycommand', + 'boolexpr', + 'ifthenx', + 'skeyval', + 'bitelist', + 'coolstr', + 'namespc', + 'stringstrings', + 'showdim', + 'show2e', + 'ltxcmds', + 'regexpatch', + 'coollist', + 'forloop', + 'chktex', + 'optparams', + 'bitset', + 'plainpkg', + 'keyreader', + 'etexcmds', + 'lcg', + 'lambda-lists', + 'pgfkeyx', + 'xargs', + 'luacode', + 'wright', + 'pgfkeys', + 'forarray', + 'ifetex', + 'arrayjobx', + 'optional', + 'blkcntrl', + 'pgfopts', + 'multido', + 'trigonometry', + 'locality', + 'random', + 'db', + 'lua-visual-debug', + 'xkvview', + 'laansort', + 'trig', + 'pst-xkey', + 'xkeyval', + 'l3keys2e', + 'clefval', + 'getoptk', + 'kvoptions', + 'newcommand', + 'dowith', + 'xpeek', + 'multienv', + 'moredefs', + 'hackalloc', + 'ifthen', + 'compare', + 'yax', + 'kvdefinekeys', + 'loops', + 'ltxkeys', + 'robustcommand', + 'l3regex', + 'keyval2e', + 'keycommand', + 'lazylist', + 'logbox', + 'xesearch', + 'keyval' + ] + }, + 'Document parts > + Other' => { + '_packages_' => [ + 'sc21', + 'losymbol', + 'symbolindex', + 'listofsymbols', + 'smalltableof', + 'annot-pro', + 'plates', + 'titlepic', + 'toc-zar', + 'coverpage', + 'nomencl', + 'titling', + 'nomentbl', + 'texi-like cover', + 'evenpage', + 'tocloft', + 'rectopma', + 'authblk', + 'volumes' + ] + }, + 'Non-English languages > + Indian languages' => { + '_packages_' => [ + 'xetex-devanagari' + ] + }, + 'Document parts > + Index' => { + '_packages_' => [ + 'idxtex', + 'makeidx', + 'makeindex', + 'makeindexk', + 'esindex', + 'hvindex', + 'lamstex-index', + 'multind', + 'repeatindex', + 'spotcolor', + 'addindex', + 'indxcite', + 'varindex', + 'xindy', + 'index', + 'forindex', + 'amsmidx', + 'genindex', + 'greek-makeindex', + 'idxlayout', + 'xeindex', + 'splitindex', + 'ltxindex', + 'imakeidx', + 'toolbox', + 'robustindex', + 'texindex', + 'luaindex', + 'xindy-persian' + ] + }, + 'Documentation > + Tutorial' => { + '_packages_' => [ + 'maad', + 'latex-course', + 'fifinddo-info', + 'lshort-italian', + 'GuIT-corso', + 'first-latex-doc', + 'lshort-spanish', + 'typografie', + 'lshort-portuguese-br', + 'lshort-korean', + 'patgen2-tutorial', + 'apprends-latex', + 'l2tabu', + 'turkishintro', + 'vf-howto', + 'anleitung', + 'lshort-german', + 'asymptote-by-example-zh-cn', + 'beamer-tut-pt', + 'latex4wp-it', + 'latex4wp', + 'lshort-mongolian', + 'intro-scientific', + 'lshort', + 'gentl-gr', + 'components', + 'lshort-slovak', + 'tabsatz', + 'pstricks-calcnotes', + 'lshort-finnish', + 'lshort-russian', + 'amslatex-primer', + 'lshort-english', + 'context-notes-zh-cn', + 'lshort-slovenian', + 'TameTheBeast', + 'gentle', + 'lshort-dutch', + 'latex-pro-pragmatiky', + 'l2tabu-italian', + 'l2tabu-spanish', + 'epslatex', + 'lshort-japanese', + 'lshort-persian', + 'xypic-tut-pt', + 'fontinstallationguide', + 'gleitobjekte', + 'l2tabu-french', + 'guia-bibtex', + 'cursolatex', + 'lshort-vietnamese', + 'How to Package Your LaTeX Package', + 'metafont-beginners', + 'asymptote-manual-zh-cn', + 'pdf-forms-tutorial', + 'lshort-polish', + 'lshort-bulgarian', + 'lshort-ukr', + 'MFwL', + 'lshort-turkish', + 'texmalli', + 'lshort-portuguese', + 'lshort-zh-cn', + 'lshort-czech', + 'voss-mathcol', + 'latex-doc-ptr', + 'tex-overview', + 'svg-inkscape', + 'lkort', + 'l2tabu-english', + 'DTX gallery', + 'lshort-mongol', + 'neufont', + 'fepslatex', + 'simplified-latex', + 'grafik', + 'fonteinf', + 'latex-notes-zh-cn', + 'metafp', + 'lualatex-doc', + 'lshort-french', + 'latex-essential', + 'context-top-ten', + 'beginlatex', + 'lshort-thai' + ] + }, + 'Document types > + Letters' => { + '_packages_' => [ + 'address', + 'envbig', + 'C.D.P. Bundle', + 'newlfm', + 'envlab', + 'postcards', + 'lxmail', + 'envelope', + 'knuth-letter', + 'lettre', + 'akletter', + 'formlett', + 'fribrief', + 'gtex-letter', + 'letter1', + 'fullblck', + 'mailmerge', + 'g-brief', + 'merge', + 'bellmac', + 'context-letter', + 'koma-script-sfs', + 'shsulet', + 'serial', + 'chletter', + 'frletter', + 'isodoc', + 'hletter', + 'chextras', + 'letter', + 'beletter', + 'textmerg', + 'laletter', + 'block', + 'dinbrief', + 'mailing', + 'letter-plain', + 'lettermac' + ] + }, + 'Output > + HTML' => { + '_packages_' => [ + 'typehtml', + 'morehype', + 'gladtex', + 'TeX Converter', + 'tex2page', + 'texi2html', + 'latex2html', + 'GELLMU', + 'texi2www', + 'hyperlatex', + 'tex4ht', + 'tth' + ] + }, + 'Document types > + Theses' => { + '_packages_' => [ + 'thesis', + 'Manuscript' + ] + }, + 'Infrastructure > + Extensions' => { + '_packages_' => [ + 'LamsTeX', + 'eplain', + 'aleph', + 'tie', + 'xetex', + 'luamplib', + 'luatex', + 'ant', + 'undump', + 'LaTeX-tds', + 'encTeX', + 'alatex', + 'tex-gpc', + 'luatextra', + 'XeT-TeX', + 'omega', + 'NTS', + 'SciWordConv', + 'antomega' + ] + }, + 'Page-focused > + Background' => { + '_packages_' => [ + 'backgrnd', + 'bophook', + 'eso-pic', + 'draftwatermark', + 'gradback', + 'xwatermark', + 'draftcopy', + 'background', + 'draftmark' + ] + }, + 'Graphics' => { + 'Postscript or PDF + graphics' => { + '_packages_' => [ + 'pst-am', + 'pst-tools', + 'pax', + 'graphicx-psmin', + 'pdftricks', + 'purifyeps', + 'makeplot', + 'pdfcolparallel', + 'acroflex', + 'fragmaster', + 'flashmovie', + 'fldigigal', + 'epsfx', + 'texdraw', + 'pst2pdf', + 'epsdice', + 'epsf', + 'mactotex', + 'psboxit', + 'animate', + 'epsfig' + ] + }, + '_packages_' => [ + 'bmpsize', + 'graphics', + 'graphicx', + 'graphics-pln', + 'movie15' + ], + 'Inside + TeX' => { + '_packages_' => [ + 'pgf-soroban', + 'curves', + 'pgf-blur', + 'moderntimeline', + 'tikz-timing', + 'psbao', + 'pst-sigsys', + 'vowel', + 'gnuplottex', + 'pst-solarsystem', + 'pst-coil', + 'bchart', + 'diagxy', + 'pst-knot', + 'plantslabels', + 'chronology', + 'pst-platon', + 'venndiagram', + 'qobitree', + 'schemabloc', + 'feynman', + 'context-construction-plan', + 't-angles', + 'eepic', + 'pst-barcode', + 'smartdiagram', + 'tkz-kiviat', + 'pictex-autoarea', + 'qtree', + 'tikzpfeile', + 'reotex', + 'pst-grad', + 'curve2e', + 'xetex-pstricks', + 'pst-fr3d', + 'lapdf', + 'tikzpagenodes', + 'pst-fun', + 'epic', + 'pst-soroban', + 'pst-qtree', + 'treesvr', + 'pst-bezier', + 'makebarcode', + 'code128', + 'm-pictex', + 'xypic', + 'sseq', + 'coordsys', + 'tsemlines', + 'graphpap', + 'pst-tvz', + 'pst-node', + 'mathspic', + 'pmgraph', + 'pst-math', + 'chronosys', + 'dottex', + 'pst-layout', + 'pst-func', + 'pst-thick', + 'pst-vue3d', + 'hobby', + 'pst-ob3d', + 'sdrt', + 'pst-rubans', + 'pst-solides3d', + 'logpap', + 'bez123', + 'eltex', + 'syngen', + 'pst-magneticfield', + 'tqft', + 'dot2texi', + 'progressbar', + 'pst-slpe', + 'pgf-umlsd', + 'Petri-nets', + 'fastpictex', + 'tkz-euclide', + 'pst-eucl', + 'pgfmolbio', + 'bar', + 'sketch', + 'pstricks-add', + 'pst-pulley', + 'treetex-plain', + 'tkz-fct', + 'vocaltract', + 'pst-text', + 'dratex', + 'tikz-qtree', + 'dirtree', + 'numericplots', + 'tikz-3dplot', + 'tkz-base', + 'productbox', + 'baum', + 'egplot', + 'barkom', + 'pst-mirror', + 'emp', + 'pst-graphicx', + 'pst-infixplot', + 'pictex2', + 'tkz-tab', + 'pst-3d', + 'expressg', + 'pict2e', + 'context-gantt', + 'pst-electricfield', + 'pstricks', + 'gl-tree', + 'pst-fractal', + 'dyntree', + 'tikz-dependency', + 'pst-2dplot', + 'logsys', + 'texpictex', + 'upca', + 'pst-3dplot', + 'randomwalk', + 'pst-tree', + 'braids', + 'pst-gantt', + 'pst-fill', + 'pst-blur', + 'PicTeX', + 'autopict', + 'pst-bspline', + 'pst-ode', + 'sparklines', + 'docmute', + 'ecltree', + 'pgf', + 'timeline', + 'RRGtrees', + 'tkz-berge', + 'eppstein-trees', + 'picmac', + 'flow', + 'mandel', + 'ebezier', + 'tkz-graph', + 'pictexwd', + 'scalebar', + 'Swimgraf', + 'pst-geo', + 'pst-cox', + 'pst-poly', + 'pst-gr3d', + 'clock', + 'tikz-inet', + 'bardiag', + 'fchart', + 'pst-light3d', + 'histogr' + ] + }, + 'MetaFont or + Metapost' => { + '_packages_' => [ + 'gray', + 'testeq', + 'mpcolornames', + 'mf2tex', + 'exteps', + 'MPEdit', + 'mkpic', + 'garrigues', + 'mftinc', + 'bpolynomial', + 'drawing', + 'METATeX', + 'meper', + 'txp', + 'threeddice', + 'm3D', + 'epsfview', + 'metapost', + 'cm-gf', + 'labtex', + 'mpattern', + 'featpost', + 'Metafont', + 'truchet', + 'metapost-matlab', + 'gpdata', + 'latexMP', + 'mfpic', + 'MPStoEPS', + 'closefrm', + 'modes', + 'cm-pk', + '3DLDF', + 'metaobj', + 'MetaPlot', + 'textpath', + 'knuth-lib', + 'suanpan', + 'feynmf', + 'hatching', + 'piechartmp', + 'barcodes-vulis', + 'dviincl', + 'feyn', + 'mpgraphics', + 'drv', + 'diagramf', + 'timing', + 'automata', + 'gmp', + 'interpol', + 'venn', + 'epsincl', + 'splines', + 'cmarrows', + 'fmp', + 'mfware', + 'blockdraw_mp', + 'threed' + ] + } + }, + 'Page-focused > + Color' => { + '_packages_' => [ + 'chroma', + 'pagecolor', + 'colorwav', + 'cmyk-hax', + 'colordvi', + 'colortab', + 'dvipscol', + 'colors', + 'colorsep', + 'RGB', + 'colortex', + 'contour', + 'xcolor', + 'colorinfo', + 'truecols', + 'transparent', + 'xecolour', + 'xecolor', + 'luacolor', + 'color', + 'svgcolor' + ] + }, + 'Page-focused > + Lists' => { + '_packages_' => [ + 'enumerate', + 'paralist', + 'todo', + 'outline', + 'easylist', + 'outlines', + 'sitem', + 'grnumalt', + 'shortlst', + 'tablists', + 'desclist', + 'etaremune', + 'enumitem-zref', + 'expdlist', + 'greekctr', + 'listliketab', + 'enumspec', + 'deflist', + 'autolist', + 'moreenum', + 'eqlist', + 'sentences', + 'bullcntr', + 'revnum', + 'enumitem' + ] + }, + 'Non-English languages > + Other' => { + '_packages_' => [ + 'serbian-date-lat', + 'bardi', + 'foreign', + 'mnttex', + 'context-ruby', + 'serbian-def-cyr', + 'langcode', + 'hacm', + 'esperant', + 'serbian-lig', + 'espo', + 'friulan', + 'serbian-apostrophe', + 'tcvn', + 'sr-hyphen-spec', + 'basque-date', + 'romaniantex', + 'romansh', + 'serbianc', + 'fixlatvian', + 'he-le-na', + 'lithuanian-babel', + 'fundus-cyr' + ] + }, + 'Page-focused > + Captions' => { + '_packages_' => [ + 'subcaption', + 'caption', + 'ccaption', + 'sidecap', + 'hangcaption', + 'ftcap', + 'zaccone', + 'mcaption', + 'fltpage', + 'topcapt', + 'bicaption', + 'caption2', + 'multicap', + 'figcaps', + 'captcont', + 'captdef', + 'capt-of', + 'hypcap', + 'copyrightbox', + 'boxhandler' + ] + }, + 'Document parts > + Appendix' => { + '_packages_' => [ + 'appendix' + ] + }, + 'Page-focused > + Paragraphs' => { + '_packages_' => [ + 'insbox', + 'shapepar', + 'shapepatch', + 'lettrine', + 'hanging', + 'wrapfig', + 'dropcaps', + 'firstline', + 'rjlparshap', + 'paragraphs', + 'context-lettrine', + 'tabto-generic', + 'parskip', + 'infpic', + 'picins', + 'varindent', + 'cutwin', + 'secret', + 'nccparskip', + 'setspace', + 'window', + 'fancypar', + 'tabto for LaTeX.', + 'invertedparagraphs', + 'picinpar' + ] + }, + 'Tools > + Spell-checkers' => { + '_packages_' => [ + 'excalibur', + 'amspell', + 'aspell', + 'vmspell', + 'texspell', + 'ispell', + 'fourspell' + ] + }, + 'Documentation > + Other' => { + '_packages_' => [ + 'ltnews', + 'dante-book-reviews', + 'pauldoc', + 'amsmath-it', + 'ruler', + 'LaTeX-brochure', + 'templates-sommer', + 'pstricks-examples-en', + 'XeTeXref', + 'docstrip', + 'ntsfaq', + 'impatient', + 'tlc2-examples', + 'translation-tabbing-fr', + 'ntg-maps', + 'l2picfaq', + 'ttf-howto', + 'einfuehrung', + 'latex-tabellen', + 'babel-doc', + 'bibtex-examples', + 'catalogue', + 'gmdoc-enhance', + 'fancyfolien', + 'vf-knuth', + 'translation-dcolumn-fr', + 'TeXhax', + 'Il sistema PSfrag', + 'tabulars-e', + 'grfguide', + 'latexfileinfo-pkgs', + 'ydoc', + 'przechlewski-book', + 'lwc-examples', + 'doc-k', + 'tkz-doc', + 'templates-fenn', + 'examplep', + 'tip', + 'ascii-chart', + 'macros2e', + 'texbuch', + 'makedoc', + 'maths-symbols', + 'mil3', + 'lb2-examples', + 'mwe', + 'french-translations', + 'mathesatz-examples', + 'Metafont book', + 'sfwmac', + 'LaTeX-veryshortguide', + 'ltt', + 'encguide', + 'textoolspro', + 'fntguide', + 'tex-implementors', + 'voss-mathmode', + 'scriptfonts', + 'faq-es', + 'tbe', + 'example', + 'MetaPost examples', + 'translation-chemsym-de', + 'translation-arsclassica-de', + 'csquotes-de', + 'ntg', + 'lgc-examples', + 'presentations', + 'texdoctk', + 'aro-bend', + 'translation-array-fr', + 'book-examples', + 'germdoc', + 'hypdoc', + 'bibtex-test', + 'ttn', + 'TeX-mag', + 'tugboat-toc', + 'pstricks-examples', + 'computer-typesetting-using-latex', + 'dvistd', + 'lgc2-examples', + 'Portable MikTeX', + 'MemoirChapterStyles', + 'latex-bib-ex', + 'free-math-font-survey', + 'faq-de', + 'comp-fonts-FAQ', + 'blackboard', + 'translation-biblatex-de', + 'biblio', + 'PicTeXsum', + 'pst-eucl-translation-bg', + 'tipos', + 'dox', + 'UK-TeX', + 'testmath', + 'latex-doc', + 'docmfp', + 'geometry-de', + 'latex-sciences-humaines', + 'firststeps-xampl', + 'webguide', + 'pmdpl', + 'ctex-faq', + 'dvips-shell', + 'csname-doc', + 'math-into-latex-4', + 'presentations-en', + 'koma-script-examples', + 'NTS-L', + 'translation-booktabs-fr', + 'PWT', + 'doc-pictex', + 'math-e', + 'xetexfontinfo', + 'faq-fr', + 'translation-natbib-fr', + 'uktug-bask', + 'usrguide', + 'memdesign', + 'mpman-ru', + 'around-the-bend', + 'translation-enumitem-de', + 'translation-pst-jtree-de', + 'titlepages', + 'translation-footmisc-de', + 'blanks', + 'LaTeX-Referenz', + 'mil', + 'modguide', + 'cyrmemo', + 'wp-conv', + 'TeXline', + 'asymptote-faq-zh-cn', + 'typespec', + 'ltx3pub', + 'cyrguide', + 'free-math-font-survey-vn', + 'compsci', + 'fontsampler', + 'Knuth-errata', + 'amslatexdoc-vietnamese', + 'dvitype' + ] + }, + 'Page-focused > + Other' => { + '_packages_' => [ + 'needspace', + 'metainfo', + 'prettyref', + 'pst-abspos', + 'afterpage', + 'ulem', + 'csquotes', + 'watermark', + 'nowidow', + 'sublabel', + 'relsize', + 'kantlipsum', + 'enparen', + 'tabbing', + 'zwpagelayout', + 'menu', + 'parnotes', + 'todonotes', + 'prelim', + 'lipsum', + 'nccrules', + 'stubs', + 'annotation-pkg', + 'messagebubbles', + 'ncccropmark', + 'dashrule', + 'comment-pln', + 'nextpage', + 'stdpage', + 'semioneside', + 'comment', + 'eemeir', + 'slemph', + 'formular', + 'tocenter', + 'figflow', + 'errata', + 'attrib', + 'border', + 'evautofl', + 'ntabbing', + 'nolbreaks', + 'dialogue', + 'lscape', + 'midpage', + 'catchfilebetweentags', + 'indent', + 'vruler', + 'altnline', + 'ed', + 'quoting', + 'texlogos', + 'lineno', + 'wallpaper', + 'pos-at', + 'swrule', + 'xcomment', + 'chgbar', + 'dashundergaps' + ] + }, + 'Document types > + Books' => { + '_packages_' => [ + 'NCC-LaTeX', + 'octavo', + 'bookest' + ] + }, + 'Fonts > + Other' => { + '_packages_' => [ + 'shadowtext', + 'fakebold', + 'allrunes', + 'figbas', + 'realscripts', + 'frenchquote', + 'halftone', + 'hands', + 'typeface', + 'varisize', + 'sans', + 'cirth', + 'euxunicode', + 'everysel' + ] + }, + 'Fonts' => { + 'Text body + fonts' => { + '_packages_' => [ + 'dejavu', + 'sarabian', + 'sanskrit-t1', + 'induni-om', + 'coptic', + 'comicsans', + 'malayalam-latex', + 'ptserif', + 'archaic', + 'la', + 'bold-extra', + 'DayRoman', + 'cm-mf-extra', + 'aeguill', + 'concrete', + 'levy-font', + 'gothic', + 'thai-usl', + 'accenti', + 'pandora', + 'humanist', + 'greek6cbc', + 'auncial-new', + 'charter', + 'punknova', + 'cmoefont', + 'cypriot', + 'umtypewriter', + 'ConTeXt-cmttbf', + 'kerkis', + 'mf2pt1', + 'auncial', + 'xits', + 'pxfonts', + 'Courier', + 'romandeadf', + 'ocherokee', + 'calligra', + 'fonts-tlwg', + 'ptsans', + 'ibycus-babel', + 'yfrak', + 'URW-Grotesq', + 'blacklettert1', + 'blackletter', + 'ae', + 'GFS Porson', + 'CM Type3', + 'baskervaldadf', + 'ocr-b', + 'tex-gyre-heros', + 'iwona', + 'egothic', + 'futhark', + 'punk', + 'foekfont', + 'hge', + 'fc', + 'tex-gyre-adventor', + 'grtimes', + 'georgian-stanier', + 'utopia', + 'augie', + 'tex-gyre-termes', + 'kdgreek', + 'schwell', + 'libris', + 'GFS Complutum', + 'gnu-freefont', + 'ygoth', + 'calligra-type1', + 'dmfonts', + 'covfonts', + 'syriac', + 'poorman', + 'futhorc', + 'psfonts', + 'phoenician', + 'stix', + 'ocr-a', + 'croatian', + 'persian-modern', + 'plfonts', + 'soyombo', + 'GFS Bodoni', + 'mxedruli', + 'electrumadf', + 'pacioli', + 'literaturnaya', + 'paratype', + 'indic-type1', + 'rustic', + 'ecc', + 'GFS Solomos', + 'fundus-sueterlin', + 'verdana', + 'cantarell', + 'fonts-sipa-arundina', + 'yfonts-t1', + 'capbas', + 'oldstandard', + 'cjk-fonts', + 'HLaTeX fonts', + 'greektex', + 'linearb', + 'csfonts-t1', + 'zefonts', + 'huncial', + 'tolkienfonts', + 'GFS NeoHellenic', + 'txgreeks', + 'greek4cbc', + 'universa', + 'bera', + 'tex-gyre-chorus', + 'kurier', + 'eiad', + 'ethiop-t1', + 'bashkirian', + 'tt2001', + 'antp', + 'thaifonts-arundina', + 'brushscr', + 'cmcyr', + 'fpl', + 'rune', + 'tapir', + 'gentium', + 'linearA', + 'pcfonts', + 'tex-gyre-pagella', + 'vncmr', + 'GFS Baskerville', + 'cmpica', + 'csfonts', + 'lettergothic', + 'lcyw', + 'droid', + 'lh', + 't1-fraktur', + 'trajan', + 'eurosym', + 'cyklop', + 'cbgreek-complete', + 'thai-rmit', + 'malvern', + 'urw-arial', + 'icelandic', + 'pl-mf', + 'cc-pl', + 'shavian', + 'fundus-pvscript', + 'Bengali Omega', + 'yswab', + 'frcursive', + 'wncyr', + 'duerer', + 'urw-garamond', + 'cm-unicode', + 'redis', + 'oesch', + 'bakoma-fonts', + 'wnri', + 'plpsfont', + 'yannisgr', + 'ega2mf', + 'ibygrk', + 'junicode', + 'antt', + 'tex-gyre-schola', + 'inconsolata', + 'altfont', + 'context-cmscbf', + 'hfbright', + 'srune', + 'GFS Artemisia', + 'cm-lgc', + 'pandora-type1', + 'runic', + 'superiors', + 'goblin', + 'wiki', + 'tabfigures', + 'adobe-euro', + 'etruscan', + 'urw-antiqua', + 'helvet', + 'fundus-va', + 'palladam', + 'bard', + 'arev', + 'aurical', + 'ipaex', + 'LXfonts', + 'committee-font', + 'oldprsn', + 'poltawski', + 'venturisADF', + 'SouthArabian', + 'opensans', + 'courier scaled', + 'cypriote', + 'eurofont', + 'wadalab', + 'berenisadf', + 'Epigrafica', + 'scyrillic', + 'classico', + 'cmcyr-patch', + 'concmath-fonts', + 'boisik', + 'GFS Didot', + 'gillcm', + 'URW-base35', + 'amiri', + 'lfb', + 'izhitsa', + 'tex-gyre-bonum', + 'osmanian' + ] + }, + '_packages_' => [ + 'cm', + 'cmbright', + 'asana-math', + 'amsfonts', + 'cm-mf', + 'kpfonts', + 'latex-fonts', + 'ec', + 'mathptmx', + 'lm', + 'cm-super', + 'fourier' + ], + 'Support + files' => { + '_packages_' => [ + 'scalefnt', + 'softmaker-broadway', + 'Punk-LaTeX', + 'softmaker-moab', + 'ec-plain', + 'ibm', + 'mt11p', + 'mfnfss', + 'cmfrak', + 'urw', + 'dogma', + 'lsabon', + 'cspsfonts', + 'fontchart', + 'poetica', + 'anyfontsize', + 'fundus', + 'softmaker-oldblackletter', + 'softmaker-flagstaff', + 'ljmetrics', + 'dutchcal', + 'nbaskerv', + 'bitstrea', + 'fonttable', + 'softmaker-bonita', + 'anttvf', + 'softmaker-congress', + 'thsmc', + 'textcomp', + 'japanese-otf-uptex', + 'fontspec', + 'CClicenses', + 'softmaker-alteschwabacher', + 'beton', + 'ocr-latex', + 'mathstone', + 'psnfssx', + 'corelpak', + 'softmaker-baskervillenova', + 'softmaker-egyptiennestd', + 'ipa', + 'lgreek', + 'font_selection', + 'softmaker-marseille', + 'ccfonts', + 'cfr-lm', + 'minionpro', + 'nfssext-cfr', + 'FourierNC', + 'mtgreek', + 'fontwrap', + 'bbm-macros', + 'libertine-legacy', + 'genfam', + 'hfoldsty', + 'cmsd', + 'plain-cm', + 'libertine', + 'webomints', + 'luaotfload', + 'pclnfss', + 'mathtime-pln', + 'plnfss', + 'mdwfonts', + 'softmaker-velo', + 'exscale', + 'jfontmaps', + 'softmaker-artistic', + 'font-change', + 'cmolddig', + 'softmaker-henderson', + 'urwvf', + 'concmath', + 'eurosans', + 'zhmCJK', + 'sauterfonts', + 'cmoutlines', + 'mathtime-ltx', + 'wnri-latex', + 'tmmath', + 'libertineotf', + 'softmaker-heliumtwo', + 'enpassant', + 'cmcyralt-ltx', + 'newtx', + 'context-simplefonts', + 'b1encoding', + 'context-URWGothic', + 'mkpkfontdir', + 'tpcmfont', + 'adobecaslon', + 'lato', + 'softmaker-canossa', + 'smallcap', + 'fonetika', + 'psnfssx-luc', + 'context-typescripts', + 'w-a-schmidt', + 'emerald', + 'softmaker-tampa', + 'glonti', + 'vmsps', + 'mathgifg', + 'softmaker-quadrat', + 'softmaker-iceberg', + 'lucold', + 'ot2cyr', + 'hvmath', + 'manfnt', + 'psnfssx-adobe', + 'imprintmtshadow', + 'fundus-la', + 'softmaker-newcastle', + 'cmslup', + 'futurans', + 'fix-cm', + 'softmakerfreefont', + 'type1ec', + 'cmextra-latex', + 'greektex-fd', + 'levy-latex', + 'fontch', + 'fontname', + 'softmaker-sunset', + 'softmaker-delanocaps', + 'softmaker-grenoble', + 'bickham', + 'cmcyralt-fonts', + 'eiad-ltx', + 'yfonts', + 'duerer-LaTeX', + 'mathtime-metrics', + 'fundus-twcal', + 'moresize', + 'pxgreeks', + 'leawood', + 'psnfss-source', + 'Winfonts', + 'softmaker-digital', + 'lucida', + 'fontinst', + 'psnfssx-em', + 'softmaker-nevada', + 'cm-mf-opt-kern', + 'substitutefont', + 'pandora-latex', + 'softmaker-helium', + 'fontenc', + 'comfortaa', + 'mathematica', + 'softmaker-jugendstil', + 'minion2newtx', + 'zhmetrics', + 'context-URWGaramond', + 'biolinum-type1', + 'mathalfa', + 'fontaxes', + 'truetypemetrics', + 'euler', + 'mathastext', + 'softmaker-inverserif', + 'philokalia', + 'psgreek', + 'psnfss', + 'auto1', + 'fundus-calligra', + 'libertine-type1', + 'softmaker-vagrounded', + 'cmtiup', + 'cm-tfm', + 'hershey', + 'softmaker-stonehand', + 'europs', + 'pcarl', + 'vfware', + 'extsizes', + 'rawfonts', + 'fundus-outline', + 'ean', + 'euroitc', + 'cyrillic', + 'slantsc', + 'softmaker-veracruz' + ] + }, + 'Font + tools' => { + '_packages_' => [ + 'sfmath', + 'fntproof', + 'cmtest', + 'TrueTypeToType42', + 'vplutils', + 'concrete-macros', + 'macfont', + 'TFMPKtest', + 'fontbl', + 'LCDF-typetools', + 'tfmpk', + 'JustFontItTE', + 't2', + 'mathinst', + 'freetype', + 'qdtexvpl', + 'psfonts-tools', + 'fontools', + 'mftrace', + 'testfont', + 't1tools', + 'fontsmpl', + 'sauter', + 'ttf2mf', + 'mff-util', + 'ps4mf', + 'grkfinst', + 'ttf2pt1', + 'metatype1', + 'rfil', + 'otfinst', + 'pfm2afm', + 'mm', + 'pkfix-helper', + 'AFMtoPL (Clark)', + 'mathkit', + 'fi2t1', + 'vfinst', + 'wsuipa2tipa', + 't1utils', + 'ps2mf', + 'AFMtoPL (Elwell)', + 'corelpak-contrib', + 'relenc', + 'ps2pk', + 'kerntest', + 'pkfix', + 'makefonts', + 'fontbook', + 'a2ac', + 't1infos', + 'HPtfm2pl', + 'aifont', + 'pkfind', + 'ofntinst', + 'pf2afm', + 'otftofd', + 'AFMtopl (Wolczko)', + 'pkbbox', + 'corelfonts', + 'ucharclasses', + 'installfont', + 'mf-ps', + 'ofs', + 'mff', + 'texware', + 'accfonts' + ] + }, + 'Symbol + fonts' => { + '_packages_' => [ + 'initials', + 'oands', + 'textgreek', + 'twcal', + 'calrsfs', + 'karta', + 'logic', + 'musixtex-t1fonts', + 'recycle', + 'yhmath', + 'esint-type1', + 'dancers', + 'ar', + 'va', + 'kelly-greek-font', + 'uncial', + 'wasy2-ps', + 'mathpazo', + 'protosem', + 'tex-gyre-math-pagella', + 'cookingsymbols', + 'VSliTeX', + 'hieroglf', + 'trsym', + 'amsbsy', + 'mathbbol', + 'dice', + 'staves', + 'semaphor', + 'wasy2', + 'wasy', + 'dictsym', + 'gen', + 'simpsons', + 'countriesofeurope', + 'eulervm', + 'msx2msa', + 'tfrupee', + 'genealogy', + 'carolmin-t1', + 'tgothic', + 'inslrmaj', + 'mathdesign', + 'carolmin', + 'euro-ce', + 'manual', + 'tex-gyre-math-termes', + 'hvmath-fonts', + 'mdputu', + 'cmastro', + 'sueterlin', + 'decorule', + 'stmaryrd', + 'bartel-chess-fonts', + 'sqrcaps', + 'accents', + 'musixtex-fonts', + 'mtp2lite', + 'KIXfont', + 'esstix', + 'jablantile', + 'greenpoint', + 'starfont', + 'oca', + 'viking', + 'magic', + 'bookhands', + 'tipa-de', + 'bbm', + 'tex-gyre-math', + 'mathrsfs', + 'msym', + 'pgothic', + 'ogham', + 'adforn', + 'adfsymbols', + 'astro', + 'braille', + 'niceframe-type1', + 'ugaritic', + 'mathabx-type1', + 'bbold-type1', + 'belleek', + 'rotunda', + 'rsfso', + 'mnsymbol', + 'dingbat', + 'mathcomp', + 'tex-gyre-cursor', + 'ocr-b-outline', + 'mflogo-font', + 'bbding', + 'pigpen', + 'inslrmin', + 'cryst', + 'pifont', + 'mdsymbol', + 'bguq', + 'vicentino', + 'urwchancal', + 'cm-afm', + 'boondox', + 'fdsymbol', + 'esint', + 'ccicons', + 'ugarite', + 'tmmath-fonts', + 'loggates', + 'ifsym', + 'bbold', + 'rsfs', + 'nabatean', + 'gensymb', + 'pxtxalfa', + 'mbboard', + 'cun', + 'lm-math', + 'marvosym', + 'mathspec', + 'txfontsb', + 'vispeech', + 'phonetic', + 'lcd', + 'script-font', + 'morse', + 'yinit', + 'mathabx', + 'nkarta', + 'util-half', + 'elvish', + 'klinz', + 'fge', + 'xcmr', + 'wsuipa', + 'phaistos', + 'LuxiMono', + 'moonphase', + 'txfonts', + 'cmll', + 'hieroglyph', + 'eco' + ] + } + }, + 'Programming in TeX' => { + 'Cross + references' => { + '_packages_' => [ + 'cleveref', + 'chklref', + 'nameref', + 'labelcas', + 'checkcites', + 'hyperref', + 'xr', + 'undolabl' + ] + }, + 'Box + manipulation' => { + '_packages_' => [ + 'verbatimbox', + 'realboxes', + 'setouterhbox', + 'storebox', + 'makebox', + 'adjustbox', + 'settosize-ltx', + 'settobox', + 'nccstretch', + 'outerhbox', + 'xcoffins', + 'thinsp', + 'textfit', + 'linegoal', + 'laps', + 'showcharinbox', + 'xhfill', + 'xgalley', + 'tracking', + 'setstrut', + 'settosize' + ] + }, + 'Package + management' => { + '_packages_' => [ + 'mylatexformat', + 'lmacs', + 'classlist', + 'mhsetup', + 'hobsub', + 'longnamefilelist', + 'wrtfile', + 'gmdoc', + 'afterpackage', + 'onlyamsmath', + 'patch', + 'somedefs', + 'hopatch', + 'vhistory', + 'nicefilelist', + 'warning', + 'inputtrc', + 'version' + ] + }, + 'Date + and time' => { + '_packages_' => [ + 'dates', + 'dates209', + 'eukdate', + 'advdate', + 'datenumber', + 'greekdates', + 'calcage', + 'wochtag', + 'weekday', + 'uhrzeit', + 'time', + 'dow', + 'dayofweek', + 'zwgetfdate', + 'filedate', + 'daytime', + 'datetime', + 'isodate', + 'ukdate' + ] + } + }, + 'Page-focused > + Verbatim' => { + '_packages_' => [ + 'llist', + 'vrb', + 'verbatim-pln', + 'upquote', + 'minted', + 'documentation', + 'jvlisting', + 'shortvrb', + 'sverb', + 'cmtt', + 'sasnrdisplay', + 'astyped', + 'verbments', + 'verbtim2', + 'newvbtm', + 'tinyc2l', + 'fancyvrb', + 'newverbs', + 'context-vim', + 'translation-moreverb-de', + 'program', + 'code', + 'verbtext', + 'listing-pln', + 'verbdef', + 'c-pascal', + 'lstaddons', + 'highlight', + 'verbasef', + 'menukeys', + 'vrbexin', + 'path', + 'spverbatim', + 'newalg', + 'verbatim', + 'verbatim-gen', + 'gincltex', + 'moreverb', + 'list', + 'verbatim-tub', + 'cprog', + 'gmverb', + 'url', + 'codedoc' + ] + }, + ' + Infrastructure' => { + '_packages_' => [ + 'CTAN tools', + 'context', + 'amiweb2c' + ] + }, + 'Output' => { + 'PDF, + PostScript' => { + '_packages_' => [ + 'pdftex-def', + 'hrefhide', + 'pdfcolfoot', + 'hypgotoe', + 'idealfonts', + 'pdftex', + 'dvipsconfig', + 'fontload', + 'pdfescape', + 'impose', + 'hyperxmp', + 'pdfsync', + 'auto-pst-pdf', + 'mmap', + 'pdfjam', + 'ghostscript', + 'attachfile', + 'insdljs', + 'aeb-mobile', + 'autoview', + 'pdfpages', + 'pdfmarginpar', + 'pdf-trans', + 'dvipsk', + 'navigator', + 'mirr', + 'ghostscript-GPL', + 'fitr', + 'pdfx', + 'bookmark', + 'pdftexcmds', + 'pdf14', + 'accsupp', + 'attachfile2', + 'aebenvelope', + 'ocgx', + 'trans', + 'rmannot', + 'hypdestopt', + 'embedfile', + 'popupmenu', + 'aurora', + 'analogclock', + 'ocgtools', + 'refreshpdf', + 'PDFrack', + 'adobemapping', + 'aeb-mlink', + 'ps4pdf', + 'dvips', + 'pdfcprot', + 'cachepic', + 'interactiveworkbook', + 'AeB Pro', + 'pdfrender', + 'fancytooltips', + 'hypdvips', + 'dvipdfm', + 'pdfcol', + 'cmap', + 'dvipdfmx', + 'pdflscape', + 'pdf-mps-supp', + 'pdfcomment', + 'pdfcrypt', + 'pdfcolmk', + 'acroreloadpdf', + 'flippdf', + 'dvipdfmx-def', + 'xmpincl', + 'lametex', + 'pdfscreen', + 'tex-ps', + 'tdclock', + 'media9', + 'aebXMP' + ] + }, + '_packages_' => [ + 'pagesel' + ] + }, + 'Page-focused > + Poetry' => { + '_packages_' => [ + 'verse', + 'gmverse', + 'altverse', + 'poetrytex' + ] + }, + 'Infrastructure' => { + 'Current + systems' => { + '_packages_' => [ + 'mactex', + 'plain', + 'knit', + 'knuth-dist', + 'phyzzx', + 'texinfo', + 'knuth-base', + 'bakoma-mac', + 'directtex', + 'pdcmac', + 'mactextras', + 'javatex', + 'cmactex', + 'mactex-additions', + 'Eqmlite/Free', + 'mactex-basic', + 'base', + 'e-TeX', + 'bakoma', + 'fpTeX' + ] + } + }, + 'Non-English languages > + German' => { + '_packages_' => [ + 'dhua', + 'ngerman' + ] + }, + 'Programming in + TeX' => { + '_packages_' => [ + 'iftex', + 'latex', + 'latex-base', + 'diagnose' + ] + }, + 'Output > + Other' => { + '_packages_' => [ + 'twoside', + 'dvipng', + '2in1', + 'catdvi', + 'selectpage', + 'l2x', + 'myfilist', + 'mimetex', + 'dvisvgm', + 'selectp', + 'jadetex', + 'crudetype', + 'hpgl2ps', + 'twoup-gen', + 'twoupltx', + 'dvitty', + 'vutex', + 'latex2rtf', + 'l2a', + 'poligraf', + 'dvi2bitmap', + 'latex2man', + 'plasTeX' + ] + }, + 'Document types > + Proceedings' => { + '_packages_' => [ + 'combine' + ] + }, + 'Page-focused' => { + 'Headers and + footers' => { + '_packages_' => [ + 'fancyhdr-it', + 'fix2col', + 'endheads', + 'drafthead', + 'thumb', + 'fancyhdr', + 'flipbook', + 'turnthepage', + 'floatnohead', + 'prelim2e', + 'underlin', + 'nccfancyhdr', + 'fancyhdrboxed', + 'biihead', + 'tex-label', + 'titleps' + ] + }, + 'Page + numbers' => { + '_packages_' => [ + 'pagecont', + 'nonumonpart', + 'arabicfront', + 'lastpage', + 'duplicat', + 'pagerange', + 'totpages', + 'pageslts', + 'onepagem', + 'ifoddpage', + 'pagereference', + 'romanneg', + 'pageno', + 'nopageno', + 'emptypage' + ] + }, + 'Page + geometry' => { + '_packages_' => [ + 'crop', + 'fixpdfmag', + 'cropmarks-pt', + 'portland', + 'leading', + 'addlines', + 'layouts', + 'screen', + 'layout', + 'cropmark-pu', + 'a5comb', + 'a4', + 'Layaureo', + 'pagegrid', + 'textarea', + 'cropmark', + 'acrotex-web', + 'geometry', + 'changelayout', + 'fullwidth', + 'a4wide', + 'gmeometric', + 'typearea', + 'context-typearea', + 'blue', + 'fullpage', + 'typogrid', + 'showframe', + 'savetrees', + 'canoniclayout', + 'cropmrks', + 'rotpages', + 'changepage', + 'isorot', + 'context-fullpage', + 'vmargin', + 'boundbox', + 'fjodor', + 'rmpage' + ] + }, + 'Material in + margins' => { + '_packages_' => [ + 'marginfix', + 'thumbs', + 'mparhack', + 'vertbars', + 'fixmetodonotes', + 'chbar', + 'marginal', + 'mhack', + 'changebar', + 'easy-todo', + 'marginnote', + 'marginote', + 'sidenotes', + 'context-fixme', + 'minipage-marginpar', + 'FiXme', + 'randbild', + 'marnote', + 'fancytabs' + ] + }, + 'Multiple + columns' => { + '_packages_' => [ + 'ltxgrid', + 'flushend', + 'threecolumn', + 'split', + 'pdfcolparcolumns', + 'gridset', + 'balanced', + 'twocolumns', + 'paracol', + 'adjmulticol', + 'vwcol', + 'midfloat', + 'parcolumns', + 'threecol', + 'cuted', + 'doublecol', + 'parrun', + 'grid', + 'parallel', + 'multicol', + 'multicolpar', + 'balance' + ] + }, + 'Boxes and + minipages' => { + '_packages_' => [ + 'fancybox', + 'boites', + 'shading', + 'boxedminipage', + 'flowfram', + 'bclogo', + 'framed', + 'pbox', + 'eqparbox', + 'parboxx', + 'crbox', + 'varwidth', + 'gradientframe', + 'notes', + 'niceframe', + 'dashbox', + 'rotate', + 'roundbox', + 'truncate', + 'textpos', + 'tabbingbox', + 'shadebox', + 'oval', + 'minibox', + 'genmpage', + 'boxit-ltx', + 'umrand', + 'frame', + 'pmboxdraw', + 'mdframed', + 'shadow', + 'shadbox', + 'rotating', + 'shade', + 'ovalfbox', + 'mboxfill', + 'tram', + 'multibox', + 'nccboxes', + 'ghab', + 'ncccropbox', + 'tcolorbox', + 'loval' + ] + } + }, + 'Non-English languages > + Greek' => { + '_packages_' => [ + 'lgrx' + ] + }, + 'Document + types' => { + '_packages_' => [ + 'koma-script', + 'hcbundle', + 'memoir', + 'classes' + ] + }, + 'Non-English languages > + Spanish' => { + '_packages_' => [ + 'spanglish' + ] + }, + 'Literate + programming' => { + '_packages_' => [ + 'funnelweb', + 'web', + 'source2e', + 'ada', + 'fweb', + 'tangle', + 'noweb', + 'nicetext', + 'matlabweb', + 'awb', + 'makedtx', + 'xdoc', + 'gates', + 'c2cweb', + 'tclldoc', + 'protex', + 'schemeweb', + 'texpack', + 'ctie', + 'cweb', + 'webmacss', + 'sty2dtx', + 'tweb', + 'wordweb', + 'lpw', + 'colordoc', + 'tango-weevil', + 'web2c', + 'c2latex', + 'makeprog', + 'schemeTeX', + 'webfiles', + 'cweb-hy', + 'cweb-latex', + 'weave', + 'web9pt', + 'cwebbin', + 'literate', + 'cwebx', + 'pl', + 'GraphBase' + ] + }, + 'Non-English languages > + Russian' => { + '_packages_' => [ + 'russ', + 'russian' + ] + }, + 'Infrastructure > + Hyphenation' => { + '_packages_' => [ + 'gahyph', + 'kmrhyph', + 'glhyph', + 'hypht1', + 'czhyph', + 'eehyph', + 'hyphsubst', + 'hyphenex', + 'hyphenation-greek', + 'hrhyph', + 'tkhyph', + 'hyacc-cm', + 'inhyph', + 'bahyph', + 'ukhyph', + 'fahyph', + 'ghyphen', + 'huhyph', + 'findhyph', + 'mltex', + 'dkhyphen', + 'icehyph', + 'hyphen-spanish', + 'Make patterns.', + 'slhyph', + 'iahyphen', + 'pthyphs', + 'magyar', + 'ishyph', + 'HyPlain', + 'srhyphc', + 'fihyph', + 'hungarian', + 'caesarcm', + 'bghyphen', + 'nohyph', + 'mnhyphn', + 'catalan', + 'czhyph2e', + 'soulutf8', + 'ithyph', + 'gnhyph', + 'plhyph', + 'hyph-utf8', + 'frhyph', + 'NL hyphenation', + 'ushyph', + 'hyphenat', + 'shhyphl', + 'grchyph', + 'ruhyphen', + 'ukrhyph', + 'mltex-ltx', + 'elhyphen', + 'nohyphbx', + 'sphyphb', + 'lahyph', + 'xetex-greek', + 'sanhyph', + 'cahyph', + 'lua-check-hyphen', + 'sehyph', + 'dehyph-exptl', + 'soul' + ] + }, + 'Non-English + languages' => { + '_packages_' => [ + 'bidi' + ] + }, + 'Output > + DVI' => { + '_packages_' => [ + 'dvgtk', + 'dvgt', + 'dviout', + 'Beebe-DVI', + 'vrsion', + 'dviljk', + 'qms', + 'dvi2tty', + 'xdvi', + 'mdvi', + 'dvi2ln3', + 'DVItoLN03', + 'ln03dvi', + 'textool', + 'ivd2dvi', + 'dvi2xx', + 'dviwin', + 'dvimerge', + 'javaDVI', + 'tmview' + ] + }, + 'Document types' => { + 'Theses > + Thesis styles' => { + '_packages_' => [ + 'techreport', + 'ryethesis', + 'seuthesis', + 'fbithesis', + 'sapthesis', + 'uiucthesis', + 'hpsdiss', + 'unamthesis', + 'vxu', + 'lifia-th', + 'jasthesis', + 'msu-thesis', + 'tui', + 'adfathesis', + 'uwthesis209', + 'york-thesis', + 'muthesis', + 'uaclasses', + 'thesis-titlepage-fhac', + 'arsclassica', + 'uscthesis', + 'nddiss', + 'umich-thesis', + 'umthesis', + 'pitthesis', + 'unswthesis', + 'pkuthss', + 'ulthese', + 'psu-thesis', + 'thuthesis', + 'classicthesis', + 'withesis', + 'suthesis', + 'uafthesis', + 'ut-thesis', + 'gatech-thesis', + 'uothesis', + 'utorontothesis', + 'droit-fr', + 'uhthesis', + 'pittetd', + 'uowthesis', + 'ebsthesis', + 'uwthesis', + 'utthesis', + 'jkthesis', + 'stellenbosch', + 'IMTEKda', + 'suftesi', + 'ucdavisthesis', + 'ucthesis', + 'disser', + 'elteikthesis', + 'kdgdocs', + 'afthesis' + ] + }, + 'Other > + Recipes' => { + '_packages_' => [ + 'xcookybooky', + 'recipecard', + 'calorie', + 'recipe', + 'cooking', + 'cookybooky', + 'cuisine' + ] + }, + 'Curriculum + Vita' => { + '_packages_' => [ + 'cv', + 'moderncv', + 'ECV', + 'esieecv', + 'CVsty', + 'translation-ecv-de', + 'tucv', + 'ibmres-tex', + 'res', + 'koma-moderncvclassic', + 'harnon-cv', + 'mycv', + 'translation-europecv-de', + 'currvita', + 'CurVe', + 'vita', + 'vita209', + 'europecv', + 'simplecv', + 'resumemac' + ] + }, + 'Other > + Scripts' => { + '_packages_' => [ + 'ScriptTeX', + 'xmlplay', + 'screenplay', + 'play', + 'drama', + 'dramatist', + 'plari', + 'scmac', + 'stage', + 'sides' + ] + }, + 'Other > + Misc' => { + '_packages_' => [ + 'histyle', + 'timetab', + 'uspatent', + 'rtklage', + 'dfgproposal', + 'badge', + 'bbcard', + 'dvdcoll', + 'nih', + 'zigaretten', + 'jura', + 'concprog', + 'booklet', + 'faltblat', + 'invoice', + 'corrects', + 'coursepaper', + 'unixman', + 'gcard', + 'onrannual', + 'TeXProject', + 'card-set', + 'proposal', + 'leaflet', + 'knittingpattern', + 'hitec', + 'labbook', + 'fillform', + 'facture', + 'petiteannonce', + 'sc21-wg1' + ] + }, + 'Other > + Chess' => { + '_packages_' => [ + 'chess', + 'bakoma-games', + 'chess-problem-diagrams', + 'skak', + 'chessfss', + 'SkakNew', + 'chessboard', + 'xskak', + 'cheq', + 'schwalbe-chess', + 'appelt-chess', + 'TeXmate', + 'chessmin', + 'bdfchess' + ] + }, + 'Reference + manuals' => { + '_packages_' => [ + 'iso10303', + 'manpage', + 'ist21', + 'refman', + 'iso', + 'manual209' + ] + }, + 'Other > + Labels' => { + '_packages_' => [ + 'jlabels', + 'flabels' + ] + }, + 'Other > + Memos' => { + '_packages_' => [ + 'memo2', + 'memo209', + 'memo-pln', + 'lamemo' + ] + }, + 'Other > + Calendars' => { + '_packages_' => [ + 'kalender-209', + 'calxxxx-yyyy', + 'pst-calendar', + 'china2e', + 'evweek', + 'calendar', + 'termcal', + 'schedule', + 'plcalendar', + 'calxxxx', + 'yplan', + 'kalender', + 'schedule209', + 'calendar-Barr', + 'calendarweek', + 'nemocal' + ] + }, + 'Other > + Posters' => { + '_packages_' => [ + 'bigsign', + 'sciposter', + 'beamerposter', + 'poster-mac', + 'tikzposter' + ] + }, + 'Other > + Music' => { + '_packages_' => [ + 'guitar', + 'pmx', + 'M-Tx', + 'Mid2TeX/Free', + 'texchord', + 'musictex', + 'harmony', + 'gtrcrd', + 'musixtex', + 'TeXmuse', + 'snote', + 'piano', + 'pmxChords', + 'mtex', + 'musixguit', + 'songbook', + 'gchords', + 'songs' + ] + }, + 'Exams, + exercise sets, and answers' => { + '_packages_' => [ + 'exercise', + 'multenum', + 'chemexec', + 'exsheets', + 'eqexam', + 'exam209', + 'QCM', + 'bhcexam', + 'uebungsblatt', + 'exam', + 'pbsheet', + 'fc-arith', + 'flashcards', + 'ans', + 'ANUfinalexam', + 'ecards', + 'Exam design', + 'flashcard', + 'acroweb', + 'mathexam', + 'probsoln', + 'assignment', + 'flacards', + 'exams', + 'ktv-texdata', + 'alterqcm', + 'exerquiz', + 'arbeit', + 'answers' + ] + }, + 'Other > + Minutes' => { + '_packages_' => [ + 'minutes', + 'meetingmins', + 'protocol' + ] + }, + 'Books > + Others' => { + '_packages_' => [ + 'scrjrnl', + 'basque-book', + 'dlfltxb' + ] + }, + 'Proceedings + ' => { + 'Proceedings styles' => { + '_packages_' => [ + 'active-conf', + 'confproc', + 'imsproc', + 'iagproc', + 'ieeepes', + 'aaai', + 'amsproc', + 'siggraph', + 'usenix', + 'abstbook', + 'sageep', + 'IEEEconf', + 'imac', + 'cascadilla', + 'icsv', + 'procIAGssymp', + 'ijcai89', + 'ifacmtg', + 'sugconf', + 'acmproc' + ] + } + }, + 'Other > + Envelopes' => { + '_packages_' => [ + 'adrconv', + 'labelmac3', + 'label-pln', + 'adrlist', + 'make-env', + 'zip', + 'kix', + 'labels' + ] + }, + 'Other > + Syllabus' => { + '_packages_' => [ + 'courseoutline' + ] + }, + 'Other > + CD and DVD covers' => { + '_packages_' => [ + 'cassette', + 'cascover', + 'megatape', + 'cassette209', + 'simplecd', + 'cdlabeler', + 'mceinleger', + 'papercdcase', + 'tape', + 'cdcover', + 'cassette-shipunov', + 'cd', + 'casslbl' + ] + }, + 'Other > + Other games' => { + '_packages_' => [ + 'othelloboard', + 'go', + 'liturg', + 'jeopardy', + 'igo', + 'psgo', + 'crossword', + 'crw', + 'sudoku', + 'context-sgf', + 'crosswrd', + 'scorecard', + 'bridge', + 'dPS', + 'bg', + 'hexgame', + 'metago', + 'setdeck', + 'cchess', + 'egameps', + 'catechis', + 'bridge-pln', + 'gamebook', + 'xq', + 'AcroMemory', + 'jj-game', + 'i-ching', + 'iching', + 'sudokubundle', + 'othello' + ] + }, + 'Other > + Newspapers and newsletters' => { + '_packages_' => [ + 'magaz', + 'maple', + 'papertex', + 'newspaper', + 'newsletr' + ] + }, + 'Books > + Publisher styles' => { + '_packages_' => [ + 'systcontrolletters', + 'mentis', + 'siam', + 'Birkhaeuser', + 'designcon', + 'nostarch', + 'amsbook', + 'add-wes' + ] + }, + 'Theses > + Others' => { + '_packages_' => [ + 'frontespizio', + 'titlepage-uni-dortmund', + 'toptesi' + ] + }, + 'Other > + Business cards' => { + '_packages_' => [ + 'card', + 'ticket', + 'bizcard', + 'buscard' + ] + }, + 'Articles + ' => { + 'Others' => { + '_packages_' => [ + 'amsppt', + 'prepr', + 'tufte-latex', + 'deproc', + 'sober', + 'iwhdp', + 'paper', + 'musuos', + 'script', + 'amsppt1', + 'viiptart', + 'scientificpaper', + 'vertex', + 'physe', + 'serbian-book', + 'sffms', + 'sfarticle', + 'chet' + ] + }, + 'Journal styles' => { + '_packages_' => [ + 'acs', + 'mnras-plain', + 'geophysics', + 'tugboat-plain', + 'ptptex', + 'lps', + 'ijmart', + 'jamtimes', + 'famt', + 'ijc', + 'apa6e', + 'dtk', + 'osa', + 'elsarticle', + 'sae', + 'apa', + 'bbs', + 'jmlr', + 'nrc', + 'MEP article', + 'cmpj', + 'resphilosophica', + 'springer', + 'tugboat', + 'asaetr', + 'cell', + 'bgteubner', + 'nature', + 'ejpecp', + 'jhep', + 'amsart', + 'philosophersimprint', + 'emulateapj', + 'elbioimp', + 'mitpress', + 'smflatex', + 'cea', + 'astron', + 'ametsoc', + 'aastex', + 'csbulletin', + 'gaceta', + 'amsaddr', + 'ama', + 'pracjourn', + 'spie', + 'mnras', + 'aomart', + 'IEEEtran', + 'cbe', + 'opteng', + 'jpsj', + 'articleingud', + 'business-research', + 'computational-complexity' + ] + } + }, + 'Overhead + slides' => { + '_packages_' => [ + 'slidenotes', + 'slides', + 'eslides', + 'foilhtml' + ] + } + }, + 'Other' => { + '_packages_' => [ + 'acronym209', + 'happy4th', + 'acroterm', + 'bibleref-parse', + 'ctanupload', + 'acronym', + 'bibleref-mouth', + 'calculator', + 'blowup' + ] + }, + 'Document parts > + Glossary' => { + '_packages_' => [ + 'glosstex', + 'glossaries', + 'glotex', + 'mfirstuc', + 'gloss', + 'glossaries-accsupp', + 'makeglos', + 'glossary' + ] + }, + 'Graphics > + Tools' => { + '_packages_' => [ + 'png2pdf', + 'image-gallery', + 'treetex-ltx209', + 'xtexcad', + 'AddTeX2Eps', + 'psmerge', + 'lgraph', + 'bmeps', + 'piechart', + 'fig2mf', + 'mma2ltx', + 'figfrag', + 'grffile', + 'GraphicxSP', + 'dktools', + 'fig2mfpic', + 'gapfill', + 'Finomaton', + 'standalone', + 'rlepsf', + 'ePiX', + 'tif2eps', + 'psfixbb', + 'AeB slicing', + 'TpX', + 'datatool', + 'labelfig', + 'pbmtogf', + 'pstoedit', + 'jpeg2ps-os2', + 'pstex', + 'lated', + 'fig2eng', + 'JPicEdt', + 'pedigree-perl', + 'prerex', + 'grfext', + 'PBMtoPK', + 'pst-bar', + 'gnuplot', + 'tpic2pdftex', + 'GraphTeX', + 'cep', + 'aeb-tilebg', + 'pst-pdf', + 'texcad32', + 'dot2tex', + 'wmf2eps', + 'fig2vect', + 'graphicp', + 'jpeg2ps', + 'pdfcrop', + 'psrip', + 'pstool', + 'bbfig', + 'psfragx', + 'bm2ltx', + 'lpic', + 'pst-eps', + 'FigBib', + 'ps2eps', + 'ConTeXt-gnuplot', + 'GraphConv', + 'bm2font', + 'psfrag', + 'sam2p', + 'psutils', + 'pbm2tex', + 'context-degrade', + 'texpict', + 'xwpick', + 'dosepsbin', + 'xfig', + 'thumbpdf', + 'pstotext', + 'fig4latex', + 'tktexcad', + 'poster', + 'psfragger' + ] + }, + 'Document types > + Articles' => { + '_packages_' => [ + 'ntgclass', + 'statrep' + ] + }, + 'Page-focused > + Citations' => { + '_packages_' => [ + 'har2nat', + 'draft', + 'citeref', + 'collref', + 'overcite', + 'refcount', + 'opcit', + 'gcite', + 'jurarsp', + 'showkeys', + 'harvard', + 'lexitex', + 'xr-hyper', + 'varioref', + 'rangecite', + 'upref', + 'xcite', + 'ut-backref', + 'drftcite', + 'citesidx', + 'cite-bundle', + 'mciteplus', + 'natmove', + 'cite', + 'xrefwarn', + 'smartref', + 'philex', + 'breakcites', + 'mcite', + 'notoccite', + 'inlinebib', + 'lastbib', + 'typedref', + 'showlabels' + ] + }, + 'Document parts > + Abstract' => { + '_packages_' => [ + 'abstract' + ] + }, + 'Non-English languages > + French' => { + '_packages_' => [ + 'impnattypo', + 'e-french' + ] + }, + ' + Documentation' => { + '_packages_' => [ + 'doc', + 'texdoc', + 'TeXbyTopic', + 'cfgguide', + 'tds', + 'latex-info', + 'visualFAQ', + 'TeXbook', + 'clsguide', + 'uk-tex-faq' + ] + }, + 'Document types > + Presentations' => { + '_packages_' => [ + 'beamersubframe', + 'foiltex', + 'texpower', + 'beamer2thesis', + 'appendixnumberbeamer', + 'hobete', + 'uwmslide', + 'beamer-fuberlin', + 'dynblocks', + 'context-taspresent', + 'soton', + 'ppr-prv', + 'sansmathaccent', + 'GuITbeamer', + 'lecturer', + 'pdfslide', + 'seminar', + 'talk', + 'beamerthemeJLTree', + 'beamerthemenirma', + 'cntdwn', + 'colourchange', + 'ha-prosper', + 'powerdot-fuberlin', + 'beameraudience', + 'elpres', + 'tpslifonts', + 'beamer', + 'spot', + 'slideshow', + 'powerdot', + 'prosper', + 'ifmslide', + 'present', + 'ppower4' + ] + }, + 'Documentation' => { + 'Help + files' => { + '_packages_' => [ + 'compact-symbols', + 'latex-hlp', + 'latex2e-help-texinfo', + 'latex2e-reference', + 'tcobrowser', + 'latexcheat-ptbr', + 'The Comprehensive LaTeX Symbol List.', + 'latexcheat-esmx', + 'nag', + 'pstdoc', + 'russian-help', + 'TeEncontreX', + 'morehelp', + 'pphlp', + 'latexcheat', + 'htmlhelp', + 'BibTeX-help', + 'tex-font-errors-cheatsheet', + 'tex-references' + ] + } + }, + ' + Uncharacterized' => { + '_packages_' => [ + 'eqell', + 'ghostscript-afpl', + 'undertilde-gen', + 'sauerj', + 'ltxmisc', + 'time-gen', + 'knuth-local', + 'tables', + 'bsf', + 'eurotex', + 'romanbar', + 'hyphen-accent', + 'numalg', + 'eddi4tex', + 'mbenotes', + 'dirtytalk', + 'malayalam-obsolete', + 'piff', + 'acro', + 'jspell', + 'fancyheadings', + 'vvcode', + 'landscape', + 'tex-math', + 'patgen', + 'backrefx', + 'bsl', + 'tools', + 'AcroSort', + 'figsinltx', + 'sorhyph', + 'thirteen', + 'epigraph', + 'ltxdockit', + 'dvips-os2', + 'acrotex', + 'piff-ams', + 'ttf2pfb', + 'dvibit', + 'ps4mf-dos', + 'fundus-startrek', + 'dropping', + 'TengwarScript', + 'emtexgi', + 'rotate-textures', + 'newunicodechar', + 'dos-dc', + 'cyrillic209', + 'Oberdiek', + 'pageframe', + 'raggedr', + 'monster', + 'uri', + 'style-showcase', + 'flags', + 'psnfssx-8r', + 'dblfont', + 'isf', + 'umoline', + 'oztex', + 'GFS', + 'psfig', + 'frankenstein', + 'pitex', + 'REdit', + 'et', + 'texsketch', + 'pslatex', + 'unpacked', + 'jas99', + 'ttf2tex', + 'vpage', + 'filemod', + 'embrac', + 'llncs209', + 'showhyphens', + 'bosisio', + 'umlaute', + 'pmtex', + 't1enc', + 'revtex4-0', + 'readprov', + 'required', + 'spiderweb', + 'easy', + 'texed', + 'fixltxhyph', + 'newthm', + 'holtxdoc', + 'djgpp', + 'Robot Man', + 'texlive-repo', + 'texas', + 'softfonts', + 'theapa', + 'mempatch', + 'obsolete', + 'tabverb', + 'xecjk', + 'anysize', + 'preprint', + 'latexinfo', + 'psbox', + 'mmtools', + 'latin2jk', + 'germbib', + 'preview-latex', + 'zed', + 'nlctdoc', + 'hwkatakana', + 'eijkhout', + 'old-fontch', + 'jeep', + 'mmafm', + 'rplain', + 'filehook', + 'numline', + 'EAN', + 'xarticle', + 'switcheml', + 'trademarks', + 'nameauth', + 'qfonts', + 'Carlisle', + 'toil', + 'ncctools', + 'tgrind209', + 'asc2tex', + 'musixtex-egler', + 'refstyle', + 'floatfig', + 'sbtex', + 'myletter', + 'slem', + 'tetex', + 'old-faq-en', + 'oztex-fonts', + 'bezos', + 'ttftogf', + 'TeX-live source', + 'ucthesis209', + 'biblatex-bwl', + 'lout', + 'emtrees', + 'dco', + 'was', + 'pdftex_oztex', + 'manjutex', + 'italic', + 'doublespace', + 'mmpfb', + 'ucs', + 'tex--xet', + 'hyper', + 'dvisun', + 'ransom', + 'tibetan', + 'lms', + 'OzTeX-german', + 'chemtex', + 'type1cm', + 'tengwar', + 'cyrtug', + 'tex-kurs', + 'textures-metrics', + 'tsipa', + 'harvard-obsolete', + 'txt', + 'mrecog', + 'isolatin1', + 'qfig', + 'dvitops', + 'lfonts-ams', + 'ms', + 'latex209', + 'jknappen', + 'winemtex', + 'TeX', + 'smaller', + 'lollipop', + 'corridx-obsolete', + 'tex-gyre', + 'soulpos', + 'amsltx11', + 'emtex', + 'shipunov', + 'tengtex', + 'TeX T1', + 'mflogo209', + 'palatino-nfss', + 'sttools', + 'frenchponct', + 'frankenstein-unsupported', + 'williams', + 'diagrams', + 'hologo', + 'chngpage', + 'pspicture', + 'abstr-collect', + 'mathptm', + 'mapcodes', + 'vfcomb', + 'xii', + 'mathpple', + 'headerfooter', + 'verbinp', + 'gsftopk', + 'dvi-economic', + 'theorem', + 'gplot', + 'ital', + 'microtype-de', + 'fcltxdoc', + 'drop', + 'times', + 'okuda', + 'bitfield', + 'csvtolatex' + ] + }, + ' + Distributions' => { + '_packages_' => [ + 'texlive-dummy-opensuse', + 'texlive', + 'miktex-portable', + 'protext', + 'w32tex', + 'atari-cstex', + 'os2tex', + 'miktex_update', + 'VTeX/Free', + 'miktex' + ] + }, + 'Subject-specific typesetting + ' => { + 'Linguistics' => { + '_packages_' => [ + 'xytree', + 'engpron', + 'pst-asr', + 'syntrace', + 'tree-dvips', + 'pst-Jtree', + 'chomsky', + 'RST', + 'tipa', + 'pstrees', + 'pst-vowel', + 'lingtrees', + 'xyling', + 'drs', + 'gb4e', + 'synttree', + 'covington', + 'linguex' + ] + }, + 'Social sciences' => { + '_packages_' => [ + 'pgfgantt', + 'ulqda' + ] + }, + 'Computer science' => { + '_packages_' => [ + 'listings-ext', + 'algorithm2e', + 'listings', + 'drawstack', + 'syntax-mdw', + 'nbaseprt', + 'register', + 'alltt2', + 'fortran', + 'acmconf', + 'colonequals', + 'GasTeX', + 'struktex', + 'javadoc', + 'syntax2', + 'tex-ewd', + 'showexpl', + 'jflap2tikz', + 'binhex', + 'ebnf', + 'context-algorithmic', + 'nassflow', + 'vdm', + 'bnf-plain', + 'method', + 'slatex_scheme', + 'vaucanson-g', + 'listingsutf8', + 'aplweb', + 'listing', + 'idverb', + 'algorithmicx', + 'grapher', + 'metauml', + 'UPmethodology', + 'bytefield', + 'progkeys', + 'apl', + 'consdiag', + 'smalltalk', + 'rail', + 'pseudocode', + 'acm', + 'cnoweb', + 'zed-csp', + 'objectz', + 'tkz-orm', + 'algorithms', + 'complexity', + 'alltt', + 'clrscode', + 'UML', + 'latex-bnf', + 'pst-dbicons', + 'msc', + 'wotree', + 'lsc', + 'context-bnf', + 'texments', + 'karnaugh', + 'tgrind', + 'pst-exa', + 'acmtrans', + 'fac', + 'tesla', + 'alg', + 'pst-uml', + 'semantic', + 'texlist' + ] + }, + 'Physics' => { + '_packages_' => [ + 'bohr', + 'circuit-macros', + 'texsis', + 'duotenzor', + 'revtex4-1', + 'anti', + 'slashed', + 'SIstyle', + 'physics', + 'luasseq', + 'pst-optexp', + 'lcircuit', + 'axodraw', + 'physymb', + 'pst-diffraction', + 'hep-gen', + 'pst-pad', + 'hep', + 'psizzl', + 'pst-spectra', + 'Hepunits', + 'susy', + 'pst-lens', + 'pst-circ', + 'MakeCirc', + 'hepnames', + 'pst-osci', + 'pst-optic', + 'braket', + 'nuc', + 'si', + 'HEPparticles', + 'formula', + 'qm', + 'endiagram', + 'circuitikz', + 'hepthesis' + ] + }, + 'Music' => { + '_packages_' => [ + 'byzfonts', + 'abc2mtex', + 'context-lilypond', + 'abc' + ] + }, + 'Other natural sciences' => { + '_packages_' => [ + 'aguplus', + 'chemarrow', + 'chemfig', + 'konwerter', + 'corridx-latex', + 'chemstruct', + 'grafcet', + 'chemcompounds', + 'xymtex', + 'textopo', + 'dnaseq', + 'lewis', + 'chem-journal', + 'chemstyle', + 'miller', + 'cpssp', + 'modiagram', + 'sfg', + 'biolist', + 'bloques', + 'chemnum', + 'bracketkey', + 'bpchem', + 'pst-labo', + 'chemarr', + 'aspectratio', + 'bondgraph', + 'isotope', + 'aiaa', + 'ppchtex', + 'mychemistry', + 'circ', + 'biocon', + 'mol2chemfig', + 'chembst', + 'classif2', + 'texshade', + 'chemsym', + 'chemmacros', + 'ochem', + 'chemcono', + 'gu', + 'pst-pdgr', + 'bodegraph', + 'r_und_s', + 'dichokey', + 'pst-stru', + 'biokey', + 'achemso', + 'context-chromato', + 'substances', + 'chemscheme', + 'engtlc', + 'mhchem', + 'streetex' + ] + }, + 'Other' => { + '_packages_' => [ + 'knitting', + 'bibleref-german', + 'ratex', + 'knot', + 'timetable', + 'bibleref-french' + ] + }, + 'Mathematics' => { + 'Theorems' => { + '_packages_' => [ + 'coolthms', + 'Shaded theorems', + 'theoremref', + 'ntheorem-vn', + 'seceqn', + 'ntheorem', + 'thmtools', + 'thmbox', + 'nccthm', + 'thrmappendix', + 'amsthm', + 'rmthm' + ] + }, + 'Other' => { + '_packages_' => [ + 'tablor', + 'cool', + 'noitcrul', + 'amsopn', + 'ytableau', + 'youngtab', + 'mfpic4ode', + 'galois', + 'stackrel', + 'polynom', + 'Nath', + 'longdiv', + 'proofs', + 'flagderiv', + 'lualatex-math', + 'tableaux', + 'young', + 'newproof', + 'multiobjective', + 'icomma', + 'bussproofs', + 'LKproof', + 'statex', + 'constants', + 'tabvar', + 'nccmath', + 'synproof', + 'gene-logic', + 'tableauVariations', + 'mathcmd', + 'mdwmath', + 'comma', + 'permute', + 'tabularcalc', + 'statex2' + ] + }, + 'Mathematical symbols' => { + '_packages_' => [ + 'ziffer', + 'undertilde', + 'fixmath', + 'oldstyle', + 'termlist', + 'digiconfigs', + 'boldtensors', + 'harpoon', + 'circle', + 'mathlig', + 'turnstile', + 'elmath', + 'bigints', + 'smartmn', + 'centernot', + 'mleftright', + 'sobolev', + 'simplewick', + 'dotlessi', + 'leftidx', + 'steinmetz', + 'Extensive Arrows.', + 'nth', + 'isomath', + 'faktor', + 'ulsy', + 'isonums', + 'ncccomma', + 'ionumbers', + 'decimal', + 'subdepth', + 'qed', + 'dotarrow', + 'maybemath', + 'trfsigns', + 'holtpolt', + 'extpfeil', + 'libgreek', + 'bm', + 'context-mathsets', + 'actuarialangle', + 'polynomial', + 'paresse', + 'mathdots', + 'commath', + 'ulsy-ps', + 'delim', + 'oubraces', + 'nccbbb', + 'qsymbols', + 'fouridx', + 'dotlessj', + 'esdiff', + 'seqsplit', + 'numprint', + 'proba', + 'sansmath', + 'sepnum', + 'subsupscripts', + 'overrightarrow', + 'tensor', + 'shuffle', + 'numname', + 'abraces', + 'flexisym', + 'bfsymb', + 'nicefrac', + 'upgreek', + '12many', + 'xfrac', + 'prodint', + 'doublestroke', + 'yagusylo', + 'pzccal' + ] + }, + 'Commutative diagrams' => { + '_packages_' => [ + 'kuvio', + 'arrow', + 'diagmac2', + 'ams-cd', + 'pb-diagram', + 'tikz-cd', + 'DCpic', + 'taylor', + 'diagmac', + 'amscd', + 'xymatrix', + 'borceux' + ] + }, + '_packages_' => [ + 'amsmath', + 'arcs', + 'sagetex', + 'mathstyle', + 'thepdfnumber', + 'rec-thy', + 'AkkTeX', + 'unicode-math', + 'amslatex', + 'mathtex', + 'mathtools', + 'amstex', + 'mh', + 'functan', + 'amscls' + ], + 'Equations' => { + '_packages_' => [ + 'amstext', + 'empheq', + 'envmath', + 'eqmark', + 'linsys', + 'cancel', + 'hf-tikz', + 'apeqnum', + 'breqn', + 'tkz-linknodes', + 'eqname', + 'dotseqn', + 'gauss', + 'deleq', + 'eqnarray', + 'easyeqn', + 'cases', + 'subeqn', + 'cursor', + 'autonum', + 'systeme', + 'subeqnarray', + 'resizegather', + 'eqnarray209', + 'alleqno', + 'mhequ' + ] + }, + 'Matrices, vectors' => { + '_packages_' => [ + 'easybmat', + 'mattens', + 'esvect', + 'tensind', + 'delarray', + 'arydshln', + 'pmat', + 'bigdelim', + 'vector', + 'easyvector', + 'hhtensor', + 'array', + 'easymat' + ] + } + }, + 'Other subjects in the humanitites' => { + '_packages_' => [ + 'mslapa', + 'ledpar', + 'frege', + 'metre', + 'syllogism', + 'edmargin', + 'mla-paper', + 'oldlatin', + 'codicefiscaleitaliano', + 'mla', + 'begriff', + 'edfnotes', + 'achicago-bst', + 'poemscol', + 'eledpar', + 'Technica', + 'achicago', + 'eledform', + 'apa6', + 'hausarbeit-jura', + 'ledarab', + 'juraabbrev', + 'eledmac', + 'babyloniannum', + 'edmac', + 'rtsched', + 'ednotes' + ] + } + } + } + } +}; + diff --git a/Master/texmf-dist/scripts/tlgs/gswin32/eps2eps.tlu b/Master/texmf-dist/scripts/tlgs/gswin32/eps2eps.tlu new file mode 100755 index 00000000000..fe862ec81b5 --- /dev/null +++ b/Master/texmf-dist/scripts/tlgs/gswin32/eps2eps.tlu @@ -0,0 +1,70 @@ +#!/usr/bin/env texlua +--*-Lua-*- +-- $Id$ + +-- Copyright (C) 2008 Reinhard Kotucha. +-- You may freely use, modify and/or distribute this file. + +-- Replacement for eps2eps.bat. +-- 'Distill' Encapsulated PostScript. + +function fixwin(args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +if os.type == 'windows' then + gs='gswin32c' +else + gs='gs' +end + +command={gs, '-q', '-sDEVICE=epswrite'} + +if os.type=='unix' then + command[#command+1]='-sstdout=%stderr' +end + + +for _,v in ipairs{'-dNOPAUSE', '-sOutputFile='..arg[#arg], + '-dBATCH', '-dSAFER', '-dDEVICEWIDTH=250000', + '-dDEVICEHEIGHT=250000'} do + command[#command+1]=v +end + + +files=0 + +for i=1, #arg do + if not string.find(arg[i], '^%-') then + files=files+1 + end + command[#command+1]=arg[i] +end + +if files < 2 then + io.stderr:write('Usage: eps2eps [options] input.eps output.eps\n') + os.exit(0) +end + +command[#command]=nil -- already processed at -sOutputFile + +command=fixwin(command) + +--[[ prepend an additional hyphen to activate this code +for i=0, #command do + print (command[i]) +end +os.exit(ret) +--]] + +ret=os.spawn(command) +os.exit(ret) diff --git a/Master/texmf-dist/scripts/tlgs/gswin32/pdf2dsc.tlu b/Master/texmf-dist/scripts/tlgs/gswin32/pdf2dsc.tlu new file mode 100755 index 00000000000..442284b4a17 --- /dev/null +++ b/Master/texmf-dist/scripts/tlgs/gswin32/pdf2dsc.tlu @@ -0,0 +1,56 @@ +#!/usr/bin/env texlua +--*-Lua-*- +-- $Id$ + +-- Copyright (C) 2007 Reinhard Kotucha. +-- You may freely use, modify and/or distribute this file. + +-- Replacement for pdf2dsc.bat. +-- Convert PDF to DSC + +function fixwin (args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +if os.type == 'windows' then + gs='gswin32c' +else + gs='gs' +end + +if #arg == 0 or #arg > 2 then + io.stderr:write('Usage: pdf2dsc input.pdf [output.dsc]\n') + os.exit(0) +end + +pdffile=arg[1] +if #arg==2 then + dscfile=arg[2] +else + dscfile=string.gsub(pdffile, '\.%a+$', '.dsc') +end + +command={gs, '-q', '-dNODISPLAY', '-dSAFER', '-dDELAYSAFER', + '-sPDFname='..pdffile, '-sDSCname='..dscfile, 'pdf2dsc.ps', + '-c', 'quit'} + +command=fixwin(command) + +--[[ prepend an additional hyphen to activate this code +for i=0, #command do + print (command[i]) +end +os.exit(ret) +--]] + +ret=os.spawn(command) +os.exit(ret) diff --git a/Master/texmf-dist/scripts/tlgs/gswin32/pdfopt.tlu b/Master/texmf-dist/scripts/tlgs/gswin32/pdfopt.tlu new file mode 100755 index 00000000000..2169407a198 --- /dev/null +++ b/Master/texmf-dist/scripts/tlgs/gswin32/pdfopt.tlu @@ -0,0 +1,64 @@ +#!/usr/bin/env texlua +--*-Lua-*- +-- $Id$ + +-- Copyright (C) 2008 Reinhard Kotucha. +-- You may freely use, modify and/or distribute this file. + +-- Replacement for pdfopt.bat. +-- Linearize PDF + +function fixwin (args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +if os.type == 'windows' then + gs='gswin32c' +else + gs='gs' +end + +command={gs, '-q', '-dNODISPLAY', '-dSAFER', '-dDELAYSAFER'} + +files={} + +for i=1, #arg do + if string.find(arg[i], '^%-') then + command[#command+1]=arg[i] + else + files[#files+1]=arg[i] + end +end + +command[#command+1]='--' +command[#command+1]='pdfopt.ps' + +if #files ~= 2 then + io.stderr:write('Usage: pdfopt [options] input.pdf output.pdf\n') + os.exit(0) +else + for i=1, #files do + command[#command+1]=files[i] + end +end + +command=fixwin(command) + +--[[ prepend an additional hyphen to activate this code +for i=0, #command do + print (command[i]) +end +os.exit(ret) +--]] + +ret=os.spawn(command) +os.exit(ret) diff --git a/Master/texmf-dist/scripts/tlgs/gswin32/ps2ascii.tlu b/Master/texmf-dist/scripts/tlgs/gswin32/ps2ascii.tlu new file mode 100755 index 00000000000..2bc31ef26d9 --- /dev/null +++ b/Master/texmf-dist/scripts/tlgs/gswin32/ps2ascii.tlu @@ -0,0 +1,74 @@ +#!/usr/bin/env texlua +--*-Lua-*- +-- $Id$ + +-- Copyright (C) 2008 Reinhard Kotucha. +-- You may freely use, modify and/or distribute this file. + +-- Replacement for ps2ascii.bat. +-- Convert PostScript to ASCII + +function fixwin (args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +function remove_tmpfiles (tmpfiles) + for i=1, #tmpfiles do + if lfs.isfile(tmpfiles[i]) then + os.remove(tmpfiles[i]) + end + end +end + +if os.type == 'windows' then + gs='gswin32c' +else + gs='gs' +end + +command={gs, '-q', '-dNODISPLAY', '-dBATCH', '-dSAFER', '-dDELAYBIND', + '-dWRITESYSTEMDICT', '-dSIMPLE', '-c', 'save', + '-f', 'ps2ascii.ps'} + +if #arg < 2 then + if #arg == 0 then + command[#command+1]='-' + elseif #arg == 1 then + command[#command+1]=arg[1] + end + command=fixwin(command) +elseif #arg == 2 then + -- We need a shell for I/O redirection. + command=gs..' -q -dNODISPLAY -dBATCH -dSAFER -dDELAYBIND '.. + '-dWRITESYSTEMDICT -dSIMPLE -c save '.. + '-f ps2ascii.ps "'..arg[1]..'" > "'..arg[2]..'"' +end + +--[[ prepend an additional hyphen to activate this code +if type(command) == 'string' then + print(command) +else + for i=0, #command do + print (command[i]) + end +end +os.exit(ret) +--]] + +if type(command) == 'string' then + ret=os.execute(command) +else + ret=os.spawn(command) +end + +remove_tmpfiles{'_temp_.err', '_temp_.out'} +os.exit(ret) diff --git a/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf.tlu b/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf.tlu new file mode 100755 index 00000000000..5ee91548751 --- /dev/null +++ b/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf.tlu @@ -0,0 +1,113 @@ +#!/usr/bin/env texlua +--*-Lua-*- +-- $Id$ + +-- Copyright (C) 2008 Reinhard Kotucha. +-- You may freely use, modify and/or distribute this file. + +-- Replacement for ps2pdf*.bat. +-- Convert PS to PDF + +function fixwin (args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +function filename (file) + if string.find(file, '[/\\]') then + return string.match(file, '.*[/\\](.*)$') + else + return file + end +end + +function basename (file) + return string.match(filename(file), '(.*)[\.].*') +end + +if os.type == 'windows' then + gs='gswin32c' +else + gs='gs' +end + +command={gs} +files={} +options={} + +PDF_level='1.4' +if string.find(filename(arg[0]), 'ps2pdf12') then + PDF_level='1.2' +elseif string.find(filename(arg[0]), 'ps2pdf13') then + PDF_level='1.3' +elseif string.find(filename(arg[0]), 'ps2pdf14') then + PDF_level='1.4' +end + +options[#options+1]='-dCompatibilityLevel='..PDF_level + +for i=1, #arg do + if arg[i] == '-' then + files[#files+1]=arg[i] + elseif string.find(arg[i], '^%-') then + options[#options+1]=arg[i] + else + files[#files+1]=arg[i] + end +end + +if #files < 1 or #files > 2 then + io.stderr:write('Usage: ps2pdf [options] (input.[e]ps|-) [output.pdf]\n') + os.exit(0) +end + +if #files == 1 then + if files[1] == '-' then + outfile='-' + elseif string.find(filename(files[1]), '\.[eE]?[pP][sS]$') then + outfile=basename(files[1])..'.pdf' + else + print ('xxx:'..files[1]) + outfile=filename(files[1])..'.pdf' + end +else + outfile=files[2] +end + +for i=1, #options do + command[#command+1]=options[i] +end + +other_opts={'-q', '-dSAFER', '-dNOPAUSE', '-dBATCH', '-sDEVICE=pdfwrite'} + +for i=1, #other_opts do + command[#command+1]=other_opts[i] +end + +command[#command+1]='-sOutputFile='..outfile + +other_opts={'-c', '.setpdfwrite', '-f', files[1]} + +for i=1, #other_opts do + command[#command+1]=other_opts[i] +end + +command=fixwin(command) + +--[[ prepend an additional hyphen to activate this code +for i=0, #command do + print (command[i]) +end +os.exit(ret) +--]] + +ret=os.spawn(command) +os.exit(ret) diff --git a/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf12.tlu b/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf12.tlu new file mode 100755 index 00000000000..5ee91548751 --- /dev/null +++ b/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf12.tlu @@ -0,0 +1,113 @@ +#!/usr/bin/env texlua +--*-Lua-*- +-- $Id$ + +-- Copyright (C) 2008 Reinhard Kotucha. +-- You may freely use, modify and/or distribute this file. + +-- Replacement for ps2pdf*.bat. +-- Convert PS to PDF + +function fixwin (args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +function filename (file) + if string.find(file, '[/\\]') then + return string.match(file, '.*[/\\](.*)$') + else + return file + end +end + +function basename (file) + return string.match(filename(file), '(.*)[\.].*') +end + +if os.type == 'windows' then + gs='gswin32c' +else + gs='gs' +end + +command={gs} +files={} +options={} + +PDF_level='1.4' +if string.find(filename(arg[0]), 'ps2pdf12') then + PDF_level='1.2' +elseif string.find(filename(arg[0]), 'ps2pdf13') then + PDF_level='1.3' +elseif string.find(filename(arg[0]), 'ps2pdf14') then + PDF_level='1.4' +end + +options[#options+1]='-dCompatibilityLevel='..PDF_level + +for i=1, #arg do + if arg[i] == '-' then + files[#files+1]=arg[i] + elseif string.find(arg[i], '^%-') then + options[#options+1]=arg[i] + else + files[#files+1]=arg[i] + end +end + +if #files < 1 or #files > 2 then + io.stderr:write('Usage: ps2pdf [options] (input.[e]ps|-) [output.pdf]\n') + os.exit(0) +end + +if #files == 1 then + if files[1] == '-' then + outfile='-' + elseif string.find(filename(files[1]), '\.[eE]?[pP][sS]$') then + outfile=basename(files[1])..'.pdf' + else + print ('xxx:'..files[1]) + outfile=filename(files[1])..'.pdf' + end +else + outfile=files[2] +end + +for i=1, #options do + command[#command+1]=options[i] +end + +other_opts={'-q', '-dSAFER', '-dNOPAUSE', '-dBATCH', '-sDEVICE=pdfwrite'} + +for i=1, #other_opts do + command[#command+1]=other_opts[i] +end + +command[#command+1]='-sOutputFile='..outfile + +other_opts={'-c', '.setpdfwrite', '-f', files[1]} + +for i=1, #other_opts do + command[#command+1]=other_opts[i] +end + +command=fixwin(command) + +--[[ prepend an additional hyphen to activate this code +for i=0, #command do + print (command[i]) +end +os.exit(ret) +--]] + +ret=os.spawn(command) +os.exit(ret) diff --git a/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf13.tlu b/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf13.tlu new file mode 100755 index 00000000000..5ee91548751 --- /dev/null +++ b/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf13.tlu @@ -0,0 +1,113 @@ +#!/usr/bin/env texlua +--*-Lua-*- +-- $Id$ + +-- Copyright (C) 2008 Reinhard Kotucha. +-- You may freely use, modify and/or distribute this file. + +-- Replacement for ps2pdf*.bat. +-- Convert PS to PDF + +function fixwin (args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +function filename (file) + if string.find(file, '[/\\]') then + return string.match(file, '.*[/\\](.*)$') + else + return file + end +end + +function basename (file) + return string.match(filename(file), '(.*)[\.].*') +end + +if os.type == 'windows' then + gs='gswin32c' +else + gs='gs' +end + +command={gs} +files={} +options={} + +PDF_level='1.4' +if string.find(filename(arg[0]), 'ps2pdf12') then + PDF_level='1.2' +elseif string.find(filename(arg[0]), 'ps2pdf13') then + PDF_level='1.3' +elseif string.find(filename(arg[0]), 'ps2pdf14') then + PDF_level='1.4' +end + +options[#options+1]='-dCompatibilityLevel='..PDF_level + +for i=1, #arg do + if arg[i] == '-' then + files[#files+1]=arg[i] + elseif string.find(arg[i], '^%-') then + options[#options+1]=arg[i] + else + files[#files+1]=arg[i] + end +end + +if #files < 1 or #files > 2 then + io.stderr:write('Usage: ps2pdf [options] (input.[e]ps|-) [output.pdf]\n') + os.exit(0) +end + +if #files == 1 then + if files[1] == '-' then + outfile='-' + elseif string.find(filename(files[1]), '\.[eE]?[pP][sS]$') then + outfile=basename(files[1])..'.pdf' + else + print ('xxx:'..files[1]) + outfile=filename(files[1])..'.pdf' + end +else + outfile=files[2] +end + +for i=1, #options do + command[#command+1]=options[i] +end + +other_opts={'-q', '-dSAFER', '-dNOPAUSE', '-dBATCH', '-sDEVICE=pdfwrite'} + +for i=1, #other_opts do + command[#command+1]=other_opts[i] +end + +command[#command+1]='-sOutputFile='..outfile + +other_opts={'-c', '.setpdfwrite', '-f', files[1]} + +for i=1, #other_opts do + command[#command+1]=other_opts[i] +end + +command=fixwin(command) + +--[[ prepend an additional hyphen to activate this code +for i=0, #command do + print (command[i]) +end +os.exit(ret) +--]] + +ret=os.spawn(command) +os.exit(ret) diff --git a/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf14.tlu b/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf14.tlu new file mode 100755 index 00000000000..5ee91548751 --- /dev/null +++ b/Master/texmf-dist/scripts/tlgs/gswin32/ps2pdf14.tlu @@ -0,0 +1,113 @@ +#!/usr/bin/env texlua +--*-Lua-*- +-- $Id$ + +-- Copyright (C) 2008 Reinhard Kotucha. +-- You may freely use, modify and/or distribute this file. + +-- Replacement for ps2pdf*.bat. +-- Convert PS to PDF + +function fixwin (args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +function filename (file) + if string.find(file, '[/\\]') then + return string.match(file, '.*[/\\](.*)$') + else + return file + end +end + +function basename (file) + return string.match(filename(file), '(.*)[\.].*') +end + +if os.type == 'windows' then + gs='gswin32c' +else + gs='gs' +end + +command={gs} +files={} +options={} + +PDF_level='1.4' +if string.find(filename(arg[0]), 'ps2pdf12') then + PDF_level='1.2' +elseif string.find(filename(arg[0]), 'ps2pdf13') then + PDF_level='1.3' +elseif string.find(filename(arg[0]), 'ps2pdf14') then + PDF_level='1.4' +end + +options[#options+1]='-dCompatibilityLevel='..PDF_level + +for i=1, #arg do + if arg[i] == '-' then + files[#files+1]=arg[i] + elseif string.find(arg[i], '^%-') then + options[#options+1]=arg[i] + else + files[#files+1]=arg[i] + end +end + +if #files < 1 or #files > 2 then + io.stderr:write('Usage: ps2pdf [options] (input.[e]ps|-) [output.pdf]\n') + os.exit(0) +end + +if #files == 1 then + if files[1] == '-' then + outfile='-' + elseif string.find(filename(files[1]), '\.[eE]?[pP][sS]$') then + outfile=basename(files[1])..'.pdf' + else + print ('xxx:'..files[1]) + outfile=filename(files[1])..'.pdf' + end +else + outfile=files[2] +end + +for i=1, #options do + command[#command+1]=options[i] +end + +other_opts={'-q', '-dSAFER', '-dNOPAUSE', '-dBATCH', '-sDEVICE=pdfwrite'} + +for i=1, #other_opts do + command[#command+1]=other_opts[i] +end + +command[#command+1]='-sOutputFile='..outfile + +other_opts={'-c', '.setpdfwrite', '-f', files[1]} + +for i=1, #other_opts do + command[#command+1]=other_opts[i] +end + +command=fixwin(command) + +--[[ prepend an additional hyphen to activate this code +for i=0, #command do + print (command[i]) +end +os.exit(ret) +--]] + +ret=os.spawn(command) +os.exit(ret) diff --git a/Master/texmf-dist/scripts/tlgs/gswin32/ps2ps.tlu b/Master/texmf-dist/scripts/tlgs/gswin32/ps2ps.tlu new file mode 100755 index 00000000000..2d414700ebb --- /dev/null +++ b/Master/texmf-dist/scripts/tlgs/gswin32/ps2ps.tlu @@ -0,0 +1,76 @@ +#!/usr/bin/env texlua +--*-Lua-*- +-- $Id$ + +-- Copyright (C) 2010 Reinhard Kotucha. +-- You may freely use, modify and/or distribute this file. + +-- Replacement for ps2ps.bat. +-- 'Distill' PostScript. + +function fixwin(args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +if os.type == 'windows' then + gs='gswin32c' +else + gs='gs' +end + + +files={} +options={'-dNOPAUSE', '-dBATCH', '-dSAFER'} + +for i=1, #arg do + if string.find(arg[i], '^%-$') then + files[#files+1]=arg[i] + elseif string.find(arg[i], '^%-') then + options[#options+1]=arg[i] + else + files[#files+1]=arg[i] + end +end + + +if #files ~= 2 then + io.stderr:write('Usage: ps2ps [options] input.ps output.ps\n') + io.stderr:write(' e.g. ps2ps -sPAPERSIZE=a4 input.ps output.ps\n') + os.exit(1) +end + + +command={gs, '-q', '-sDEVICE=pswrite'} + +if os.type=='unix' then + command[#command+1]='-sstdout=%stderr' +end + +command[#command+1]='-sOutputFile='..files[2] + +for i=1, #options do + command[#command+1]=options[i] +end + +command[#command+1]=files[1] + +command=fixwin(command) + +--[[ prepend an additional hyphen to activate this code +for i=0, #command do + print (command[i]) +end +os.exit(ret) +--]] + +ret=os.spawn(command) +os.exit(ret) diff --git a/Master/texmf-dist/scripts/tlgs/gswin32/ps2ps2.tlu b/Master/texmf-dist/scripts/tlgs/gswin32/ps2ps2.tlu new file mode 100755 index 00000000000..5fa86abf0d2 --- /dev/null +++ b/Master/texmf-dist/scripts/tlgs/gswin32/ps2ps2.tlu @@ -0,0 +1,79 @@ +#!/usr/bin/env texlua +--*-Lua-*- +-- $Id$ + +-- Copyright (C) 2010 Reinhard Kotucha. +-- You may freely use, modify and/or distribute this file. + +-- Replacement for ps2ps2.bat. +-- Converting PostScript 3 or PDF into PostScript 2 with the +-- Ghostscript 'ps2write' device. +-- This generates a PDF-style stream with an attached +-- PostScript program to interpret it. + +function fixwin(args_unix) + if os.type == 'windows' then + local args_win={} -- new table + args_win[0]=args_unix[1] + for i=1, #args_unix do + args_win[i]='"'..args_unix[i]..'"' + end + return args_win + else + return args_unix + end +end + +if os.type == 'windows' then + gs='gswin32c' +else + gs='gs' +end + + +files={} +options={'-dNOPAUSE', '-dBATCH', '-dSAFER'} + +for i=1, #arg do + if string.find(arg[i], '^%-$') then + files[#files+1]=arg[i] + elseif string.find(arg[i], '^%-') then + options[#options+1]=arg[i] + else + files[#files+1]=arg[i] + end +end + + +if #files ~= 2 then + io.stderr:write('Usage: ps2ps2 [options] input.ps output.ps\n') + io.stderr:write(' e.g. ps2ps2 -sPAPERSIZE=a4 input.ps output.ps\n') + os.exit(1) +end + + +command={gs, '-q', '-sDEVICE=ps2write'} + +if os.type=='unix' then + command[#command+1]='-sstdout=%stderr' +end + +command[#command+1]='-sOutputFile='..files[2] + +for i=1, #options do + command[#command+1]=options[i] +end + +command[#command+1]=files[1] + +command=fixwin(command) + +--[[ prepend an additional hyphen to activate this code +for i=0, #command do + print (command[i]) +end +os.exit(ret) +--]] + +ret=os.spawn(command) +os.exit(ret) diff --git a/Master/texmf-dist/scripts/xindy/texindy.pl b/Master/texmf-dist/scripts/xindy/texindy.pl new file mode 100755 index 00000000000..28a7e0a4dd7 --- /dev/null +++ b/Master/texmf-dist/scripts/xindy/texindy.pl @@ -0,0 +1,639 @@ +#!/usr/bin/env perl +# $Id: texindy,v 1.11 2010/05/10 23:39:24 jschrod Exp $ +#------------------------------------------------------------ +# (history at end) + +=head1 NAME + +texindy - create sorted and tagged index from raw LaTeX index + +=head1 SYNOPSIS + + texindy [-V?h] [-qv] [-iglr] [-d magic] [-o outfile.ind] [-t log] \ + [-L lang] [-C codepage] [-M module] [idx0 idx1 ...] + +=head2 GNU-Style Long Options for Short Options: + + -V / --version + -? / -h / --help + -q / --quiet + -v / --verbose + -i / --stdin + -g / --german + -l / --letter-ordering + -r / --no-ranges + -d / --debug (multiple times) + -o / --out-file + -t / --log-file + -L / --language + -C / --codepage + -M / --module (multiple times) + -I / --input-markup (supported: latex, omega) + + +=head1 DESCRIPTION + +B<texindy> is the LaTeX-specific command of xindy, the flexible +indexing system. It takes a raw index as input, and produces a merged, +sorted and tagged index. Merging, sorting, and tagging is controlled +by xindy modules, with a convenient set already preloaded. + +Files with the raw index are passed as arguments. If no arguments are +passed, the raw index will be read from standard input. + +A good introductionary description of B<texindy> appears in the +indexing chapter of the LaTeX Companion (2nd ed.) + +If you want to produce an index for LaTeX documents with special index +markup, the command xindy(1) is probably more of interest for you. + +B<texindy> is an approach to merge support for the I<make-rules> +framework, own xindy modules (e.g., for special LaTeX commands in the +index), and a reasonable level of MakeIndex compatibility. There are +other older approaches, eventually they will get a description on the +xindy Web Site, http://www.xindy.org/. + + +=head1 OPTIONS + +=over + +=item C<--version> / B<-V> + +output version numbers of all relevant components and exit. + +=item C<--help> / B<-h> / B<-?> + +output usage message with options explanation. + +=item C<--quiet> / B<-q> + +Don't output progress messages. Output only error messages. + +=item C<--verbose> / B<-v> + +Output verbose progress messages. + +=item C<--debug> I<magic> / B<-d> I<magic> + +Output debug messages, this option may be specified multiple times. +I<magic> determines what is output: + + magic remark + ------------------------------------------------------------ + script internal progress messages of driver scripts + keep_tmpfiles don't discard temporary files + markup output markup trace, as explained in xindy manual + level=n log level, n is 0 (default), 1, 2, or 3 + +=item C<--out-file> F<outfile.ind> / B<-o> F<outfile.ind> + +Output index to file F<outfile.ind>. If this option is not passed, the +name of the output file is the base name of the first argument and the +file extension F<ind>. If the raw index is read from standard input, +this option is mandatory. + +=item C<--log-file> F<log.ilg> / B<-t> F<log.ilg> + +Output log messages to file F<log.ilg>. These log messages are +independent from the progress messages that you can influence with +C<--debug> or C<--verbose>. + +=item C<--language> I<lang> / B<-L> I<lang> + +The index is sorted according to the rules of language I<lang>. These +rules are encoded in a xindy module created by I<make-rules>. + +If no input encoding is specified via C<--codepage>, a xindy module +for that language is searched with a latin, a cp, an iso, or ascii +encoding, in that order. + +=item C<--codepage> I<enc> / B <-C> I<enc> + +The raw input is in input encoding I<enc>. This information is used to +select the correct xindy sort module and also the I<inputenc> target +encoding for C<latex> input markup. + +When C<omega> input markup is used, C<utf8> is always used as the sort +codepage and no inputenc module is loaded. Then this option is +ignored. + +=item C<--module> I<module> / B<-M> I<module> + +Load the xindy module F<module.xdy>. This option may be specified +multiple times. The modules are searched in the xindy search path that +can be changed with the environment variable C<XINDY_SEARCHPATH>. + +=item C<--input-markup> I<input> / B<-I> I<input> + +Specifies the input markup of the raw index. Supported values for +I<input> are C<latex> and C<omega>. + +C<latex> input markup is the one that is emitted by default from the +LaTeX kernel, or by the C<index> macro package of David Jones. +^^-notation of single byte characters is supported. Usage of LaTeX's +I<inputenc> package is assumed as well. + +C<omega> input markup is like C<latex> input markup, but with Omega's +^^-notation as encoding for non-ASCII characters. LaTeX I<inputenc> +encoding is not used then, and C<utf8> is enforced to be the codepage +for sorting. + +=back + + +=head1 SUPPORTED LANGUAGES / CODEPAGES + +The following languages are supported: + +=head2 Latin scripts + + albanian gypsy portuguese + croatian hausa romanian + czech hungarian russian-iso + danish icelandic slovak-small + english italian slovak-large + esperanto kurdish-bedirxan slovenian + estonian kurdish-turkish spanish-modern + finnish latin spanish-traditional + french latvian swedish + general lithuanian turkish + german-din lower-sorbian upper-sorbian + german-duden norwegian vietnamese + greek-iso polish + +German recognizes two different sorting schemes to handle umlauts: +normally, C<ä> is sorted like C<ae>, but in phone books or +dictionaries, it is sorted like C<a>. The first scheme is known as +I<DIN order>, the second as I<Duden order>. + +C<*-iso> language names assume that the raw index entries are in ISO +8859-9 encoding. + +C<gypsy> is a northern Russian dialect. + +=head2 Cyrillic scripts + + belarusian mongolian serbian + bulgarian russian ukrainian + macedonian + +=head2 Other scripts + + greek klingon + +=head2 Available Codepages + +This is not yet written. You can look them up in your xindy +distribution, in the F<modules/lang/language/> directory (where +I<language> is your language). They are named +F<variant-codepage-lang.xdy>, where F<variant-> is most often empty +(for german, it's C<din5007> and C<duden>; for spanish, it's C<modern> +and C<traditional>, etc.) + + < Describe available codepages for each language > + + < Describe relevance of codepages (as internal representation) for + LaTeX inputenc > + + +=head1 TEXINDY STANDARD MODULES + +There is a set of B<texindy> standard modules that help to process +LaTeX index files. Some of them are automatically loaded. Some of them +are loaded by default, this can be turned off with a B<texindy> +option. Others may be specified as C<--module> argument to achieve a +specific effect. + + xindy Module Category Description + +=head2 Sorting + + word-order Default A space comes before any letter in the + alphabet: ``index style'' is listed before + ``indexing''. Turn it off with option -l. + letter-order Add-on Spaces are ignored: ``index style'' + is sorted after ``indexing''. + keep-blanks Add-on Leading and trailing white space (blanks + and tabs) are not ignored; intermediate + white space is not changed. + ignore-hyphen Add-on Hyphens are ignored: + ``ad-hoc'' is sorted as ``adhoc''. + ignore-punctuation Add-on All kinds of punctuation characters are + ignored: hyphens, periods, commas, slashes, + parentheses, and so on. + numeric-sort Auto Numbers are sorted numerically, not like + characters: ``V64'' appears before ``V128''. + +=head2 Page Numbers + + page-ranges Default Appearances on more than two consecutive + pages are listed as a range: ``1--4''. + Turn it off with option -r. + ff-ranges Add-on Uses implicit ``ff'' notation for ranges + of three pages, and explicit ranges + thereafter: 2f, 2ff, 2--6. + ff-ranges-only Add-on Uses only implicit ranges: 2f, 2ff. + book-order Add-on Sorts page numbers with common book numbering + scheme correctly -- Roman numerals first, then + Arabic numbers, then others: i, 1, A. + +=head2 Markup and Layout + + tex Auto Handles basic TeX conventions. + latex-loc-fmts Auto Provides LaTeX formatting commands + for page number encapsulation. + latex Auto Handles LaTeX conventions, both in raw + index entries and output markup; implies + tex. + makeindex Auto Emulates the default MakeIndex input syntax + and quoting behavior. + latin-lettergroups Auto Layout contains a single Latin letter + above each group of words starting with the + same letter. + german-sty Add-on Handles umlaut markup of babel's german + and ngerman options. + + +=head1 COMPATIBILITY TO MAKEINDEX + +B<xindy> does not claim to be completely compatible with MakeIndex, +that would prevent some of its enhancements. That said, we strive to +deliver as much compatibility as possible. The most important +incompatibilities are + +=over + +=item * + +For raw index entries in LaTeX syntax, C<\index{aaa|bbb}> is +interpreted differently. For MakeIndex C<bbb> is markup that is output +as a LaTeX tag for this page number. For B<xindy>, this is a location +attribute, an abstract identifier that will be later associated with +markup that should be output for that attribute. + +For straight-forward usage, when C<bbb> is C<textbf> or similar, we +supply location attribute definitions that mimic MakeIndex's +behaviour. + +For more complex usage, when C<bbb> is not an identifier, no such +compatibility definitions exist and may also not been created with +current B<xindy>. In particular, this means that by default the LaTeX +package C<hyperref> will create raw index files that cannot be +processed with B<xindy>. This is not a bug, this is the unfortunate +result of an intented incompatibility. It is currently not possible to +get both hyperref's index links and use B<xindy>. + +A similar situation is reported to exist for the C<memoir> LaTeX +class. + +Programmers who know Common Lisp and Lex and want to work on a remedy +should please contact the author. + +=item * + +The MakeIndex compatibility definitions support only the default raw +index syntax and markup definition. It is not possible to configure +raw index parsing or use a MakeIndex style file to describe output +markup. + +=back + + + +=head1 ENVIRONMENT + +=over + +=item C<TEXINDY_AUTO_MODULE> + +This is the name of the xindy module that loads all auto-loaded +modules. The default is C<texindy>. + +=back + + +=head1 AUTHOR + +Joachim Schrod + + +=head1 LEGALESE + +B<texindy> is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2 of the License, or (at your +option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + + +=for Emacs +#' + +=cut + + +use strict; +use English qw(-no_match_vars); + +our $VERSION = sprintf "%d.%02d", q$Revision: 1.11 $ =~ /: (\d+)\.(\d+)/ ; + + +# Used modules. + +use Cwd; +use File::Basename; +use Getopt::Long qw(:config bundling); + + +# Determine environment. Where is our library directory, and our modules? + +our $is_TL = ( 'yes' eq 'yes' ); +our $is_w32 = ( $OSNAME =~ /^MSWin/i ) ; +our $real_cmd = Cwd::realpath($0); +our $cmd_dir = dirname($real_cmd); +our $cmd = basename($0); +our $xindy; + +# In TeX-Live, user commands are symlinks in some bin directory, and +# the actual scripts are in the library directory and have a .pl +# extension. In standalone installations, user command xindy is +# expected to be in the same directory as our command. + +if ( $is_TL ) { # TeX Live + + if ( $is_w32 ) { + $xindy = "$cmd_dir/xindy.pl"; + } else { + die "$cmd: not a symlink as required for TeX Live" unless -l $0; + # FIXME: What this good for? Ain't xindy not also + # "$cmd_dir/xindy.pl" in a Unix TL installation? Why does + # Peter use the directory of the last symlink, where it just + # finds the symlink again that is then expanded by xindy.pl? + $real_cmd = $0; + $cmd_dir = dirname($real_cmd); + # Follow symlinks, but remember last one + my $lcmd_dir; + while ( -l $real_cmd ) { + $lcmd_dir = $cmd_dir; + $real_cmd = readlink($real_cmd); + $real_cmd = "$lcmd_dir/$real_cmd" unless $real_cmd =~ m,^[\\/],; # relative link + $cmd_dir = dirname($real_cmd); + } + $xindy = "$lcmd_dir/xindy"; + } + # FIXME: That's a very ugly kludge to achieve that the VERSION + # file is found in output_xindy_release(). The real solution is to + # copy the code from xindy.pl that determines $modules_dir and + # $lib_dir and use that code as well. + $cmd_dir = Cwd::realpath("$cmd_dir/../../xindy/modules"); + die "Cannot locate xindy modules directory" unless -f "$cmd_dir/../VERSION"; +} else { + if ( -f "$cmd_dir/xindy" && -x _ ) { + $xindy = "$cmd_dir/xindy"; + } elsif ( -f "$cmd_dir/xindy.pl" && -x _ ) { + $xindy = "$cmd_dir/xindy.pl"; + } else { + die "$cmd: cannot locate xindy\n"; + } +} +die "$cmd: cannot locate xindy\n" unless -f $xindy && ($is_w32 || -x $xindy); + + +# Check arguments, store them in proper variables. + +sub usage ( ;$ ) +{ + my $exit_code = shift; + $exit_code += 0; # turn undef into 0 + print STDERR <<_EOT_ + +usage: $cmd [-V?h] [-qv] [-iglr] [-d magic] [-o outfile.ind] [-t log] \\ + [-L lang] [-C codepage] [-M module] [-I input] [idx0 idx1 ...] + +GNU-STYLE LONG OPTIONS FOR SHORT OPTIONS: + + -V / --version + -? / -h / --help + -q / --quiet + -v / --verbose + -i / --stdin + -g / --german + -l / --letter-ordering + -r / --no-ranges + -d / --debug (multiple times) + (supported: script, keep_tmpfiles, markup, level=n) + -o / --out-file + -t / --log-file + -L / --language + -C / --codepage + -M / --module (multiple times) + -I / --input-markup (supported: latex, omega) + +_EOT_ + ; + exit ($exit_code); +} + +our ($output_version, $quiet, $verbose, $stdin, @debug, + $outfile, $logfile, $language, $codepage, @modules, $input_markup); +$language = 'general'; +$codepage = 'latin'; +$input_markup = 'latex'; + +parse_options(); +output_version() if $output_version; # will not return +usage(1) if ( ! $stdin && @ARGV == 0 ); # brain damaged, but like makeindex + + +# Construct xindy options, and eventually switch to it. + +my @opt; +push (@opt, '-q') if $quiet; +push (@opt, '-v') if $verbose; +push (@opt, map { ('-d', $_) } @debug) if @debug; +push (@opt, '-o', $outfile) if $outfile; +push (@opt, '-t', $logfile) if $logfile; +push (@opt, '-L', $language); +push (@opt, '-C', $codepage) if $codepage; +push (@opt, '-M', "tex/inputenc/$codepage") if $codepage; +push (@opt, map { ('-M', $_) } ($ENV{TEXINDY_AUTO_MODULE} || 'texindy', + @modules)); +push (@opt, '-I', $input_markup); + +print "Calling xindy as: $xindy @opt @ARGV\n" if (grep /^script$/, @debug); +exec_xindy(@opt, @ARGV); + +# NOT REACHED + + +# ------------------------------------------------------------ + + +sub exec_xindy { + if ( $is_w32 ) { + system ($EXECUTABLE_NAME, $xindy, @_); + if ($? == -1) { + die "$cmd: could not execute xindy: $ERRNO\n"; + } elsif ($? & 127) { + die "xindy died with signal " . ($? & 127) ."\n"; + } else { + exit ($? >> 8); + } + } else { + exec ($xindy, @_); + die "$cmd: could not execute xindy: $!\n"; + } +} + + +sub parse_options() { + + my ($german, $letter_ordering, $no_ranges); + GetOptions( + 'version|V' => \$output_version, + 'help|h|?' => \&usage, + 'quiet|q' => \$quiet, + 'verbose|v' => \$verbose, + 'stdin|i' => \$stdin, + 'german|g' => \$german, + 'letter-ordering|l' => \$letter_ordering, + 'no-ranges|r' => \$no_ranges, + 'debug|d=s' => \@debug, + 'out-file|o=s' => \$outfile, + 'log-file|t=s' => \$logfile, + 'language|L=s' => \$language, + 'codepage|C=s' => \$codepage, + 'module|M=s' => \@modules, + 'input-markup|I=s' => \$input_markup, + ) + or usage(1); + + if ( $german ) { + unshift (@modules, 'german-sty'); + if ( $language eq 'general' ) { + $language = 'german-din'; + } elsif ( $language !~ /^german/ ) { + print STDERR "You cannot specify -g and -L at the same time.\n"; + #print STDERR "NOTE: -g is obsolete anyhow.\n"; + exit (1); + } + } + unshift (@modules, ($letter_ordering ? 'letter-order' : 'word-order')); + unshift (@modules, 'page-ranges') unless $no_ranges; + + # Check that the input markup is known. omega markup implies + # codepage utf8 for sorting, but no inputenc. We set the codepage + # to undef to prevent loading of the inputenc module. Setting it + # to utf8 for the sort encoding is done by the xindy script. + if ( $input_markup ne 'latex' && $input_markup ne 'omega' ) { + print STDERR "Unsupported input markup $input_markup.\n"; + usage(1); + } + if ( $input_markup eq 'omega' ) { + $codepage = undef; + } + +} + + +sub output_version () { + output_xindy_release(); + print "$cmd script version: $VERSION\n"; + my @xindy_cmd = ('--internal-version'); + push (@xindy_cmd, qw(-d script --foobar)) if grep(/^script$/, @debug); + exec_xindy(@xindy_cmd); +} + + +sub output_xindy_release () { + my $version = 'unknown'; + my $version_file; + if ( -f "$cmd_dir/../VERSION" ) { + $version_file = "$cmd_dir/../VERSION"; + } else { + # Where is the library directory? + my $lib_dir; + if ( $ENV{XINDY_LIBDIR} ) { + $lib_dir = $ENV{XINDY_LIBDIR}; + } elsif ( '@libdir@' ne '@libdir' . '@' ) { # GNU configure at work? + if ( -d '@libdir@/xindy' ) { # /usr style + $lib_dir = '@libdir@/xindy'; + } else { + $lib_dir = '@libdir@'; # /opt style + } + } elsif ( -f "$cmd_dir/../lib/xindy.run" ) { # /opt style + $lib_dir = "$cmd_dir/../lib"; + } elsif ( -d "$cmd_dir/../lib/xindy" ) { # /usr style + $lib_dir = "$cmd_dir/../lib/xindy"; + } else { + die "Cannot locate xindy library directory"; + } + if ( -f "$lib_dir/VERSION" ) { + $version_file = "$lib_dir/VERSION"; + } + } + + if ( $version_file ) { + if ( open(VERSION, "<$version_file") ) { + while ( $version = <VERSION> ) { + chomp ($version); + $version =~ s/\#.*// ; + $version =~ s/^\s+// ; + $version =~ s/\s+$// ; + last if $version; + } + close (VERSION); + } + } + print "xindy release: $version\n"; +} + + + +#====================================================================== +# +# $Log: texindy,v $ +# Revision 1.11 2010/05/10 23:39:24 jschrod +# Incorporate TeX-Live patches from Vladimir Volovich and Peter +# Breitenlohner: Support for TL installation scheme, support for Mac OS +# X, support for Windows in TL. +# +# Revision 1.10 2010/04/20 00:15:23 jschrod +# Emphasize incompatibility with hyperref in man page. +# +# Revision 1.9 2009/12/03 00:28:22 jschrod +# Search perl via env. +# +# Revision 1.8 2009/03/22 11:08:18 jschrod +# man page: --v is --verbose, not --version. +# +# Revision 1.7 2009/03/21 16:32:06 jschrod +# Inputenc merge rules must be loaded before other texindy modules; +# otherwise inputenc markup would be discarded by tex.xdy. +# +# Revision 1.6 2008/02/17 14:55:32 jschrod +# Use exitcode 0 when usage is explicitly demanded with --help et.al. +# +# Revision 1.5 2006/07/30 10:30:42 jschrod +# Check if an exec() error happened and output an error message. +# (Ticket 1230801) +# +# Revision 1.4 2006/07/19 00:29:56 jschrod +# Support for omega input markup. +# +# Revision 1.3 2004/11/01 22:48:51 jschrod +# Locate xindy script. +# Terminate on option error. +# Fix up version output. +# +# Revision 1.2 2004/05/26 21:30:11 jschrod +# Added POD documentation. +# +# Revision 1.1 2004/05/24 19:47:13 jschrod +# Introduce new driver script, as part of the "Companion Release". +# diff --git a/Master/texmf-dist/scripts/xindy/xindy.pl b/Master/texmf-dist/scripts/xindy/xindy.pl new file mode 100755 index 00000000000..a1fecf65a29 --- /dev/null +++ b/Master/texmf-dist/scripts/xindy/xindy.pl @@ -0,0 +1,927 @@ +#!/usr/bin/env perl +# $Id: xindy.pl,v 1.16 2010/05/10 23:39:24 jschrod Exp $ +#------------------------------------------------------------ +# (history at end) + +=head1 NAME + +xindy - create sorted and tagged index from raw index + +=head1 SYNOPSIS + + xindy [-V?h] [-qv] [-d magic] [-o outfile.ind] [-t log] \ + [-L lang] [-C codepage] [-M module] [-I input] \ + [--interactive] [--mem-file=xindy.mem] \ + [idx0 idx1 ...] + +=head2 GNU-Style Long Options for Short Options: + + -V / --version + -? / -h / --help + -q / --quiet + -v / --verbose + -d / --debug (multiple times) + -o / --out-file + -t / --log-file + -L / --language + -C / --codepage + -M / --module (multiple times) + -I / --input-markup (supported: latex, omega, xindy) + + +=head1 DESCRIPTION + +B<xindy> is the formatter-indepedent command of xindy, the flexible +indexing system. It takes a raw index as input, and produces a merged, +sorted and tagged index. Merging, sorting, and tagging is controlled +by xindy style files. + +Files with the raw index are passed as arguments. If no arguments are +passed, the raw index will be read from standard input. + +B<xindy> is completely described in its manual that you will find on +its Web Site, http://www.xindy.org/. A good introductionary +description appears in the indexing chapter of the LaTeX Companion (2nd ed.) + +If you want to produce an index for LaTeX documents, the command +texindy(1) is probably more of interest for you. It is a wrapper for +B<xindy> that turns on many LaTeX conventions by default. + + +=head1 OPTIONS + +=over + +=item C<--version> / B<-V> + +output version numbers of all relevant components and exit. + +=item C<--help> / B<-h> / B<-?> + +output usage message with options explanation. + +=item C<--quiet> / B<-q> + +Don't output progress messages. Output only error messages. + +=item C<--verbose> / B<-v> + +Output verbose progress messages. + +=item C<--debug> I<magic> / B<-d> I<magic> + +Output debug messages, this option may be specified multiple times. +I<magic> determines what is output: + + magic remark + ------------------------------------------------------------ + script internal progress messages of driver scripts + keep_tmpfiles don't discard temporary files + markup output markup trace, as explained in xindy manual + level=n log level, n is 0 (default), 1, 2, or 3 + +=item C<--out-file> F<outfile.ind> / B<-o> F<outfile.ind> + +Output index to file F<outfile.ind>. If this option is not passed, the +name of the output file is the base name of the first argument and the +file extension F<ind>. If the raw index is read from standard input, +this option is mandatory. + +=item C<--log-file> F<log.ilg> / B<-t> F<log.ilg> + +Output log messages to file F<log.ilg>. These log messages are +independent from the progress messages that you can influence with +C<--debug> or C<--verbose>. + +=item C<--language> I<lang> / B<-L> I<lang> + +The index is sorted according to the rules of language I<lang>. These +rules are encoded in a xindy module created by I<make-rules>. + +If no input encoding is specified via C<--codepage>, a xindy module +for that language is searched with a latin, a cp, an iso, or ascii +encoding, in that order. + +=item C<--codepage> I<enc> / B<-C> I<enc> + +The raw input is in input encoding I<enc>. This information is used to +select the correct xindy sort module and also the I<inputenc> target +encoding for C<latex> input markup. + +When C<omega> input markup is used, C<utf8> is always used as +codepage, this option is then ignored. + +=item C<--module> I<module> / B<-M> I<module> + +Load the xindy module F<module.xdy>. This option may be specified +multiple times. The modules are searched in the xindy search path that +can be changed with the environment variable C<XINDY_SEARCHPATH>. + +=item C<--input-markup> I<input> / B<-I> I<input> + +Specifies the input markup of the raw index. Supported values for +I<input> are C<latex>, C<omega>, and C<xindy>. + +C<latex> input markup is the one that is emitted by default from the +LaTeX kernel, or by the C<index> macro package of David Jones. +^^-notation of single byte characters is supported. Usage of LaTeX's +I<inputenc> package is assumed as well. + +C<omega> input markup is like C<latex> input markup, but with Omega's +^^-notation as encoding for non-ASCII characters. LaTeX I<inputenc> +encoding is not used then, and C<utf8> is enforced to be the codepage. + +C<xindy> input markup is specified in the xindy manual. + +=item C<--interactive> + +Start xindy in interactive mode. You will be in a xindy read-eval-loop +where xindy language expressions are read and evaluated interactively. + +=item C<--mem-file> I<xindy.mem> + +This option is only usable for developers or in very rare situations. +The compiled xindy kernel is stored in a so-called I<memory file>, +canonically named F<xindy.mem>, and located in the xindy library +directory. This option allows to use another xindy kernel. + +=back + + +=head1 SUPPORTED LANGUAGES / CODEPAGES + +The following languages are supported: + +=head2 Latin scripts + + albanian gypsy portuguese + croatian hausa romanian + czech hungarian russian-iso + danish icelandic slovak-small + english italian slovak-large + esperanto kurdish-bedirxan slovenian + estonian kurdish-turkish spanish-modern + finnish latin spanish-traditional + french latvian swedish + general lithuanian turkish + german-din lower-sorbian upper-sorbian + german-duden norwegian vietnamese + greek-iso polish + +German recognizes two different sorting schemes to handle umlauts: +normally, C<ä> is sorted like C<ae>, but in phone books or +dictionaries, it is sorted like C<a>. The first scheme is known as +I<DIN order>, the second as I<Duden order>. + +C<*-iso> language names assume that the raw index entries are in ISO +8859-9 encoding. + +C<gypsy> is a northern Russian dialect. + +=head2 Cyrillic scripts + + belarusian mongolian serbian + bulgarian russian ukrainian + macedonian + +=head2 Other scripts + + greek klingon + +=head2 Available Codepages + +This is not yet written. You can look them up in your xindy +distribution, in the F<modules/lang/language/> directory (where +I<language> is your language). They are named +F<variant-codepage-lang.xdy>, where F<variant-> is most often empty +(for german, it's C<din5007> and C<duden>; for spanish, it's C<modern> +and C<traditional>, etc.) + + < Describe available codepages for each language > + + < Describe relevance of codepages (as internal representation) for + LaTeX inputenc > + + + +=head1 ENVIRONMENT + +=over + +=item C<XINDY_SEARCHPATH> + +A list of directories where the xindy modules are searched in. No +subtree searching is done (as in TDS-conformant TeX). + +If this environment variable is not set, the default is used: +C<.:>I<modules_dir>C<:>I<modules_dir>C</base>. I<modules_dir> is +determined at run time, relative to the B<xindy> command location: +Either it's F<../modules>, that's the case for F<opt>-installations. +Or it's F<../lib/xindy/modules>, that's the case for +F<usr>-installations. + +=item C<XINDY_LIBDIR> + +Library directory where F<xindy.mem> is located. + +The modules directory may be a subdirectory, too. + +=back + + +=head1 COMPATIBILITY TO MAKEINDEX + +B<xindy> does not claim to be completely compatible with MakeIndex, +that would prevent some of its enhancements. That said, we strive to +deliver as much compatibility as possible. The most important +incompatibilities are + +=over + +=item * + +For raw index entries in LaTeX syntax, C<\index{aaa|bbb}> is +interpreted differently. For MakeIndex C<bbb> is markup that is output +as a LaTeX tag for this page number. For B<xindy>, this is a location +attribute, an abstract identifier that will be later associated with +markup that should be output for that attribute. + +For straight-forward usage, when C<bbb> is C<textbf> or similar, we +supply location attribute definitions that mimic MakeIndex's +behaviour. + +For more complex usage, when C<bbb> is not an identifier, no such +compatibility definitions exist and may also not been created with +current B<xindy>. In particular, this means that by default the LaTeX +package C<hyperref> will create raw index files that cannot be +processed with B<xindy>. This is not a bug, this is the unfortunate +result of an intented incompatibility. It is currently not possible to +get both hyperref's index links and use B<xindy>. + +A similar situation is reported to exist for the C<memoir> LaTeX +class. + +Programmers who know Common Lisp and Lex and want to work on a remedy +should please contact the author. + +=item * + +The MakeIndex compatibility definitions support only the default raw +index syntax and markup definition. It is not possible to configure +raw index parsing or use a MakeIndex style file to describe output +markup. + +=back + + +=head1 KNOWN ISSUES + +Option B<-q> also prevents output of error messages. Error messages +should be output on stderr, progress messages on stdout. + +There should be a way to output the final index to stdout. This would +imply B<-q>, of course. + +LaTeX raw index parsing should be configurable. + +Codepage C<utf8> should be supported for all languages, and should be +used as internal codepage for LaTeX inputenc re-encoding. + + +=head1 SEE ALSO + +texindy(1), +tex2xindy(1) + + +=head1 AUTHOR + +Joachim Schrod + + +=head1 LEGALESE + +Copyright (c) 2004-2010 by Joachim Schrod. + +B<xindy> is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2 of the License, or (at your +option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=for Emacs +# ' + +=cut + + +use strict; +use English qw(-no_match_vars); + +our $VERSION = sprintf "%d.%02d", q$Revision: 1.16 $ =~ /: (\d+)\.(\d+)/ ; + + +# Used modules. + +use Cwd; +use File::Basename; +use File::Spec; +use File::Temp qw(tempfile tmpnam); +use Getopt::Long qw(:config bundling); +use POSIX qw(uname); + + +# Determine environment. Where is our library directory, and our modules? + +our $is_TL = ( 'yes' eq 'yes' ); +our $is_w32 = ( $OSNAME =~ /^MSWin/i ) ; +our $path_sep = ( $is_w32 ? ';' : ':' ) ; +our $is_windows = ( $is_w32 || $OSNAME eq 'cygwin' ) ; +our $clisp = ( $is_windows ? 'clisp.exe' : 'clisp' ) ; +our $real_cmd = Cwd::realpath($0); +our $cmd_dir = dirname($real_cmd); +our $cmd = basename($0); + +our ($lib_dir, $modules_dir); + +# xindy-lisp.exe for Windows seems to be unable to interpret the short-name +# format which is a default for the variables TEMP and TMP in Windows OS. +# As a workaround, we create temporary files in the current directory +# in xindy on Windows. + +if ( $is_w32 ) { +use Env qw(TMPDIR); +Env::import(); +$TMPDIR = "."; +} + +# We have different installation structures for TeX-Live and a +# standalone installation. In TeX-Live, the user command is a symlink +# in some bin directory, and the actual script is in the library +# directory where both memory image and modules live as well. +# Standalone installations come in /usr or /opt variants, memory +# images are located in a lib directory, modules are located in a +# share directory. +# +# FIXME: In standalone installations, modules are still placed in lib +# directory. This is not conformant to FHS. + +if ( $is_TL ) { # TeX Live + + $modules_dir = Cwd::realpath("$cmd_dir/../../xindy/modules"); + die "$cmd: Cannot locate xindy modules directory" unless -d $modules_dir; + + if ( $is_w32 ) { + $cmd_dir = "$cmd_dir/../../../bin/win32"; + } else { + die "$cmd: not a symlink as required for TeX Live" unless -l $0; + # Follow symlinks and determine $cmd_dir such that + # $cmd_dir/xindy -> $r0 = XINDY_SCRIPTDIR/xindy.pl + # + # FIXME: What's this code good for? Cwd::realpath() already + # resolves all symbolic links; this just recomputes that + # information manually! It's from Peter, check with him. + $real_cmd = $0; + while (-l $real_cmd) { + $cmd_dir = dirname($real_cmd); + $real_cmd = readlink($real_cmd); + $real_cmd = "$cmd_dir/$real_cmd" unless $real_cmd =~ m,^[\\/],; # relative link + } + } + + # library directory + $lib_dir = $cmd_dir; + + # clisp runtime + my $xindy_run = ( $is_windows ? + "$lib_dir/xindy-lisp.exe" : "$lib_dir/xindy.run" ); + $clisp = $xindy_run if -e $xindy_run; + +} else { # standalone installation + + # library directory + if ( $ENV{XINDY_LIBDIR} ) { + $lib_dir = $ENV{XINDY_LIBDIR}; + } elsif ( '@libdir@' ne '@libdir' . '@' ) { # GNU configure at work? + if ( -d '@libdir@/xindy' ) { # /usr style + $lib_dir = '@libdir@/xindy'; + } else { + $lib_dir = '@libdir@'; # /opt style + } + } elsif ( -f "$cmd_dir/../lib/xindy.mem" ) { # /opt style + $lib_dir = "$cmd_dir/../lib"; + } elsif ( -d "$cmd_dir/../lib/xindy" ) { # /usr style + $lib_dir = "$cmd_dir/../lib/xindy"; + } else { + die "$cmd: Cannot locate xindy library directory"; + } + + # modules directory + if ( -d "$cmd_dir/../modules" ) { # /opt style + $modules_dir = "$cmd_dir/../modules"; + } elsif ( -d "$lib_dir/modules" ) { # /usr style + $modules_dir = "$lib_dir/modules"; + } else { + die "$cmd: Cannot locate xindy modules directory"; + } + +} # determine environment + + +# Check arguments, store them in proper variables. + +sub usage ( ;$ ) +{ + my $exit_code = shift; + $exit_code += 0; # turn undef into 0 + print STDERR <<_EOT_ + +usage: $cmd [-V?h] [-qv] [-d magic] [-o outfile.ind] [-t log] \\ + [-L lang] [-C codepage] [-M module] [-I input] \\ + [--interactive] [--mem-file xindy.mem] \\ + [idx0 idx1 ...] + +GNU-STYLE LONG OPTIONS FOR SHORT OPTIONS: + + -V / --version + -? / -h / --help + -q / --quiet + -v / --verbose + -d / --debug (multiple times) + (supported: script, keep_tmpfiles, markup, level=n) + -o / --out-file + -t / --log-file + -L / --language + -C / --codepage + -M / --module (multiple times) + -I / --input-markup (supported: latex, omega, xindy) + +_EOT_ + ; + exit ($exit_code); +} + +our ($quiet, $verbose, %debug, + $outfile, $logfile, $language, @codepages, @modules, $input_markup, + $interactive, $mem_file); +$input_markup = 'latex'; +$mem_file = "$lib_dir/xindy.mem"; + +my @orig_argv = @ARGV; +parse_options(); + + +# Support universal binary on Mac OS X. + +if ( $OSNAME eq 'darwin' && ! -e $mem_file ) { + my @uname = POSIX::uname(); + if ( $uname[4] eq 'Power Macintosh' ) { + $mem_file = "$lib_dir/xindy-ppc.mem"; + } else { + $mem_file = "$lib_dir/xindy-i386.mem"; + } +} +die "$cmd: Cannot locate $mem_file" unless -e $mem_file; + + +# This script creates temporary files. Whenever a file is created, its +# name is added to @temp_files. In an END handler, the temporary files +# are deleted. Signal handlers are set up to get proper program +# termination on user-induced signals. + +our @temp_files = (); +handle_signals(); +END { + unlink (@temp_files) if ( @temp_files && ! $debug{keep_tmpfiles} ); +} + + +# Raw index handling: xindy is not able (yet?) to handle arguments +# Perl-style, so we do it instead. We gather the raw index in a +# temporary file. We also process it by the filter program it if +# wanted. Signal handlers will discard temporary files if necessary. + +our $raw_index = File::Spec->devnull; +unless ( $interactive ) { + for my $f ( @ARGV ) { + die "$cmd: input file $f does not exist" unless -f $f; + } + $raw_index = create_raw_index(); # processes @ARGV + my $filter_cmd = ''; + if ( $input_markup eq 'latex' ) { + $filter_cmd = "$cmd_dir/tex2xindy"; + } elsif ( $input_markup eq 'omega' ) { + $filter_cmd = "$cmd_dir/tex2xindy -o"; + } + $raw_index = filter_index ($filter_cmd, $raw_index) + if $filter_cmd; +} + + +# Execution: Create xindy start expression and call it. + +my $xindy_expression = xindy_expression(); # accesses global option vars +my $exit_code = call_xindy ($mem_file, $xindy_expression); + + +# Finished: exit, clean up in END handler. + +exit ($exit_code); + + +# ------------------------------------------------------------ + + +sub parse_options() { + + my (@debug); + GetOptions( + 'version|V' => sub { output_version(0); }, + 'internal-version' => sub { output_version(1); }, + 'help|h|?' => \&usage, + 'quiet|q' => \$quiet, + 'verbose|v' => \$verbose, + 'debug|d=s' => \@debug, + 'out-file|o=s' => \$outfile, + 'log-file|t=s' => \$logfile, + 'language|L=s' => \$language, + 'codepage|C=s' => \@codepages, + 'module|M=s' => \@modules, + 'input-markup|I=s' => \$input_markup, + 'interactive' => \$interactive, + 'mem-file=s' => \$mem_file, + ) + or usage(1); + + # Debug option values are easier to test in a hash. Clean up trace + # level options, too. + %debug = map { $_ => 1 } @debug; + my @trace_level = grep /^level=/, @debug; + if ( @trace_level > 1 ) { + print STDERR "You can only specify one trace level.\n\n"; + exit (1); + } + delete $debug{$trace_level[0]}; + $trace_level[0] =~ s/^level=// ; + $debug{trace_level} = $trace_level[0]; + + # Check for unsupported debug option values. + my %debug_check = %debug; + foreach my $magic ( qw(script keep_tmpfiles markup trace_level) ) { + delete $debug_check{$magic}; + } + if ( %debug_check ) { + my @magic = keys(%debug_check); + print STDERR "Unsupported argument for --debug: @magic\n"; + usage(1); + } + + # Script debugging implies running it verbose and not quiet. + if ( $debug{script} ) { + $verbose = 1; + $quiet = 0; + } + + # Default for the output file: first argument, with extension replaced + # by ".ind". + unless ( $outfile || $interactive ) { + if ( @ARGV == 0 ) { + print STDERR +"You need to specify --out-file if the raw index is read from standard input.\n"; + usage(1); + } + my ($name, $path, $suffix) = fileparse ($ARGV[0], '\.[^\.]+'); + $outfile = "$path$name.ind"; + } + + # FIXME: xindy wants a log file. Really? + $logfile = File::Spec->devnull unless $logfile; + + # Modules fixup: If they have no .xdy suffix, they get one. + @modules = map { /\.xdy$/ ? $_ : "$_.xdy" } @modules; + + # Check that the input markup is known. + # omega markup implies codepage utf8. + if ( $input_markup && + $input_markup ne 'latex' && $input_markup ne 'omega' && + $input_markup ne 'xindy' ) { + print STDERR "Unsupported input markup $input_markup.\n"; + usage(1); + } + if ( $input_markup eq 'omega' ) { + @codepages = qw(utf8); + } + +} + + + +# +# SIGNAL HANDLING +# +# FIXME: This is not good enough. We also need to kill subprocesses, +# i.e., filter or xindy, if they are running. + +# Our signal handler function just exits. Temporary files are deleted +# by the END section above. Actually, the exit code looses the +# information about the received signal, that's not good but shouldn't +# hurt either... + +sub signal_exit() { + exit (2); +} + +sub handle_signals () { + $SIG{'HUP'} = \&signal_exit; # 1 + $SIG{'INT'} = \&signal_exit; # 2 + $SIG{'QUIT'} = \&signal_exit; # 3 + $SIG{'TERM'} = \&signal_exit; # 15 +} + + + +# +# CREATION OF RAW XINDY INDEX +# + +# Handle input files Perl-style. Returns file name that contains +# concatenated input file contents. + +sub create_raw_index () { + my ($output, $outfile) = tempfile(); + push (@temp_files, $outfile); + $outfile=quotify($outfile); + while ( <> ) { + print $output $_; + } + close ($output); + print "concatenated xindy input file: $outfile\n" if $debug{script}; + return $outfile; +} + + +# Run a filter over raw index. Returns file name with filtered raw +# index, supposed to be in xindy input format. +# +# We assume the file names to be safe from shell meta characters since +# they were computed by File::Temp. + +sub filter_index ( $$ ) { + my ($filter, $input) = @_; + my $output = tmpnam(); + push (@temp_files, $output); + $output=quotify($output); + print "Running filter: $filter <$input >$output\n" if $verbose; + system "$filter <$input >$output"; + print "filtered xindy input file: $output\n" if $debug{script}; + return $output; +} + + + +# +# XINDY EXECUTION +# + +# Construct final xindy expression, from options. + +sub xindy_expression () { + my ($logging, $tracing, $trace_level, $searchpath); + + # Determine language module of make-rules framework. Part of the + # complexity below is from compatibility with the TLC2 + # description. We need to support the language names listed there, + # even though they are not current. In addition, the codepage + # option was introduced later and we need to guess it. This + # guesswork will often be wrong, sadly. + # + # FIXME: I didn't see all languages. What's on with gypsy and + # hausa? + if ( $language ) { + my $ld = "$modules_dir/lang"; + my $variant; + # If there is no language directory, this might be a variant. + # Language names and variants are separated by hyphens. The + # variant name "din" is an abbreviation for "din5007". The + # variant name "iso" is ignored, that is actually a codepage + # name. + # + # FIXME: Or is "iso" the variant "translit"?! + if ( ! -d "$ld/$language" ) { + $language =~ /^([^-]*)-(.*)/ ; # language name ends with 1st hyphen + if ( $2 && -d "$ld/$1" ) { # $2 is not set if the regex didn't match + $language = $1; + $variant = "$2-" unless ( $2 eq 'iso' ); + $variant eq 'din-' and $variant = 'din5007-'; + } + } + # Let's guess the codepage. We take any that starts with + # "latin", "cp", "iso8859", or "ascii". + @codepages = qw(latin cp iso8859 ascii) unless @codepages; + my @styles; + foreach my $cp ( @codepages ) { + @styles = glob("$ld/$language/$variant$cp*-lang.xdy"); + last if @styles; + } + unless ( @styles ) { + print STDERR "Cannot locate xindy module for language $language"; + print STDERR " in codepage $codepages[0]" if ( @codepages == 1 ); + print STDERR ".\n"; + exit (1); + } + # Extract language module name: It's the relative part after + # the module directory. Put it at the front of the list of + # needed modules. It's important that the language module is + # loaded first, it defines the sort rulesets, and subsequent + # modules shall be able to add sort rules. + unshift (@modules, substr($styles[0], length("$modules_dir/"))); + print "Found language module $styles[0]\n" if $debug{script}; + } + + # If there is more than one xindy module, construct a style file. + # This is bad, of course; xindy should handle a list of style + # files itself. + my $style_file = $modules[0]; # will be undef if @modules is not set + if ( @modules > 1 ) { + my $sf; + ($sf, $style_file) = tempfile(); + push (@temp_files, $style_file); + $style_file=quotify($style_file); + foreach my $module ( @modules ) { + print $sf "(require \"$module\")\n"; + } + close ($sf); + } + + $outfile = quotify($outfile); + $logging = ':logfile ' . quotify($logfile) if $logfile; + $tracing = ':markup-trace :on' if $debug{markup}; + $trace_level = ":trace-level $debug{trace_level}" if $debug{trace_level}; + $searchpath = quotify(join($path_sep, ".", $modules_dir, "$modules_dir/base")); + + my $exp = <<_EOT_ +(progn + (searchpath $searchpath) + (xindy:startup + :idxstyle $style_file + :rawindex $raw_index + :output $outfile + $logging + $tracing + $trace_level) + (exit)) +_EOT_ + ; + + return $exp; +} + + +# Actual xindy call. Returns exit code. + +sub call_xindy ( $$ ) { + my ($mem_file, $xindy_exp) = @_; + + my @command = ($clisp, '-M', $mem_file, '-E', 'iso-8859-1'); + if ( $interactive ) { + print "Proposed xindy expression:\n\n$xindy_exp\n" unless $quiet; + } elsif ($is_w32) { + my ($output, $outfile) = tempfile(); + push (@temp_files, $outfile); + $outfile=quotify($outfile); + print $output $xindy_exp; + close ($output); + print "xindy startup file: $outfile\n" if $debug{script}; + push (@command, "$outfile"); + } else { + push (@command, '-x', $xindy_exp); + } + + if ( $debug{script} ) { + print "modules directory: $modules_dir.\n"; + print "command: @command\n"; + } + + if ( $quiet && ! $interactive ) { + open (STDOUT, '>', File::Spec->devnull); + } + system @command; + if ( $? == -1 ) { + print STDERR "$cmd: Could not execute xindy kernel: $!\n"; + } elsif ( $? & 127 ) { + return 4; + } else { + return $? >> 8; + } +} + +sub output_version ( ;$ ) { # optional arg: internal-version flag + my $internal = shift; + output_xindy_release() unless $internal; + print "$cmd script version: $VERSION\n"; + my $exit_code = call_xindy($mem_file, '(xindy:startup :show-version t)'); + exit ($exit_code); +} + + +sub output_xindy_release () { + my $version = 'unknown'; + my $version_file; + if ( -f "$modules_dir/../VERSION" ) { + $version_file = "$modules_dir/../VERSION"; + } elsif ( -f "$cmd_dir/../VERSION" ) { + $version_file = "$cmd_dir/../VERSION"; + } elsif ( -f "$lib_dir/VERSION" ) { + $version_file = "$lib_dir/VERSION"; + } + if ( $version_file ) { + if ( open(VERSION, "<$version_file") ) { + while ( $version = <VERSION> ) { + chomp ($version); + $version =~ s/\#.*// ; + $version =~ s/^\s+// ; + $version =~ s/\s+$// ; + last if $version; + } + close (VERSION); + } + } + print "xindy release: $version\n"; +} + + +# Helper function: Make a proper quoted Lisp string. + +sub quotify ( $ ) { + my $s = shift; + $s =~ s:([\\\"]):\\$1:g ; + return "\"$s\""; +} + + + +#====================================================================== +# +# $Log: xindy.pl,v $ +# Revision 1.16 2010/05/10 23:39:24 jschrod +# Incorporate TeX-Live patches from Vladimir Volovich and Peter +# Breitenlohner: Support for TL installation scheme, support for Mac OS +# X, support for Windows in TL. +# +# Revision 1.15 2010/04/20 00:15:23 jschrod +# Emphasize incompatibility with hyperref in man page. +# +# Revision 1.14 2009/12/03 00:28:22 jschrod +# Search perl via env. +# +# Revision 1.13 2009/03/29 11:14:04 jschrod +# xindy.run does not exist any more, call clisp directly. +# +# Revision 1.12 2009/03/26 17:27:28 jschrod +# Checking for variant name din needs to take trailing hyphen into account. +# +# Revision 1.11 2009/03/22 11:08:18 jschrod +# man page: --v is --verbose, not --version. +# +# Revision 1.10 2009/03/21 18:05:11 jschrod +# Variant rename of din to din5007 made explicit. (Proposed by +# Zdenek Wagner at 16 Mar 09.) +# +# Revision 1.9 2008/02/17 14:55:32 jschrod +# Use exitcode 0 when usage is explicitly demanded with --help et.al. +# +# Revision 1.8 2006/07/30 10:30:42 jschrod +# Check if an exec() error happened and output an error message. +# (Ticket 1230801) +# +# Revision 1.7 2006/07/19 00:29:56 jschrod +# Support for omega input markup. +# +# Revision 1.6 2005/05/02 19:16:26 jschrod +# Support new RTE 2.2, built with CLISP 2.33.2, that needs -E option +# to specify the default charset. +# xindy also has proper version output in Lisp now, no need for +# workarounds in script any more. +# +# Revision 1.5 2004/11/01 22:48:51 jschrod +# Locate xindy script. +# Terminate on option error. +# Fix up version output. +# +# Revision 1.4 2004/08/05 14:10:54 jschrod +# Language variant names may have hyphens now. Language names must +# not have hyphens -- the first hyphen of the -L option argument +# separates language and variant name. +# Revision 1.3 was completely off -- I committed a copy of texindy. +# I really don't know what happened there. +# +# Revision 1.2 2004/05/26 21:30:11 jschrod +# Added POD documentation. +# +# Revision 1.1 2004/05/24 19:47:13 jschrod +# Introduce new driver script, as part of the "Companion Release". +# |