[tex-live] Patch for "texdoc -s" to use the ls-R database

George N. White III gnwiii at gmail.com
Sat May 26 19:06:32 CEST 2007


On 5/25/07, Frank Küster <frank at kuesterei.ch> wrote:

> Hi all,
>
> with teTeX, I've been using "texdoc -s" a lot.  With a full texlive
> install, this is hardly usable, because it runs "find" over all
> $TEXMF/doc trees, which takes ages.  Of course if you use it a second
> time, it's much faster as long as the directories are cached, but you
> never want to use it the first time, not with utilities like "locate"
> present on your system.

I not sure what you mean.  Your script just looks in the last
texmf-tree.  The reason for using TEXDOCS is to ensure that
all the $TEXMF/doc trees are searched.

Unfortunately, kpsewhich --expand-path='$TEXDOCS'
gives directories under the top-level "doc" directory.

> I suggest that "texdoc -s" should use the ls-R database, just as usual
> texdoc does.  It's hard, however, to get the exactly same result as the
> current behavior only with shell scripting, because of the format of the
> ls-R database.  The approach I took was to search for directories that
> match first (that makes long listings more readable, anyway), and for
> non-directory files afterwards.
>
> The attached patch does that, except that I don't know whether
>
> tree=${database%ls-R}
>
> is portable (would have to use echo | sed instead).
>
> Comments?

I like that it lists the directories (I've been using a version hacked
to add a "-d" option that only looks for directories).

The loop to construct lsR_files:

      OLDIFS=$IFS
      IFS=':'
      for path in `kpsewhich --expand-path='$TEXMF'`; do
       lsR_files=$(eval TEXMFDBS=\$path kpsewhich ls-R)
      done
      IFS=$OLDIFS

saves only the last one.  Do you want to exclude the other
trees, or did you mean:

       lsR_files="$lsR_files $(env TEXMFDBS=$path kpsewhich ls-R)"

There are still performance problems.  Try to find the latin modern
docs:

"texdoc -s lmodern" doesn't help, but "texdoc -s lm" takes much too
long because the last kpathsea search is run for every lm*.tfm file!

What is needed is a way to select only the shortest prefixes from
"kpsewhich --expand-path='$TEXDOCS'" so that find isn't searching
the same places over and over:

$ kpsewhich --expand-path='$TEXDOCS' | tr ':' ' ' | wc
      1    1630  110497


-- 
George N. White III <aa056 at chebucto.ns.ca>
Head of St. Margarets Bay, Nova Scotia


More information about the tex-live mailing list