[texhax] Locating macros

Uwe Lück uwe.lueck at web.de
Thu Jul 10 14:51:50 CEST 2008


At 16:55 07.07.08, Yo Sato wrote:
>Hi all,
>
>I was wondering what's the best way to locate the source of a
>macro/command (ie which file the definition resides in).
>
>The only way I know at the moment is simply go through the loaded
>style files, first the personal and then the default /texmf
>directories, which can become a big hassle. Also, this method would
>fail to uniquely identify the definition that is actually used, if
>there are multiple occurrences of the same-named macro across
>different files...
>
>So I feel there must be a better way. I use \show to show the
>'content' of a macro, but it doesn't tell you where it comes from...

I have had the same problem these days, with own packages
I made in the previous millenium.

What just came to my mind:

1. use \listfiles in your document `job.tex' (say)
2. convert the list of files in job.log as follows:
     turn a line containing package `foo' into
         \afterpackage{foo}{\show\foo}
3. change job.tex as follows:
     right after \documentclass, insert
         \usepackage{afterpackage}
         and then the \afterpackage list as above.
4. after the next run of job.tex, look in job.log
where the result of \show\foo changes.

[sorry, not tested]

This confines the search to packages that you are
actually using. For the "conversion", you may have
a smart editor or be able to use Perl or AWK
(I am developping docstrip-like macros for purposes
like this one, some already working).

Difficulties coming to my mind:
* what about .def files? and some of these have been
loaded by initex already.
* If you use memoir.cls, the definition may be there.

HTH -- Uwe.




More information about the texhax mailing list