[metapost] Input and relative paths

Nicola nvitacolonna at gmail.com
Tue Sep 27 21:45:26 CEST 2016


On 2016-09-27 19:23:05 +0000, Reinhard Kotucha said:

> On 2016-09-27 at 18:19:36 +0200, Nicola wrote:
> 
>  > Quick question: is using relative paths with (back)slashes portable?
>  >
>  > I see that both
>  >
>  >     input a/b/c.mp
>  >     input a\b\c.mp
>  >
>  > work in macOS (so, I suppose, in *nix systems in general).
> 
> Hi Nicola,
> I'm really wondering that it works for you on OS X at all.  On Unix
> the directory separator is the forward slash, unconditionally.
> Backslashes have a special meaning on Unix unless quoted.  But even if
> properly quoted, a backslash is never recognized as a directory
> separator.
> 
> On Linux, for instance:
> 
>    *input tmp/foo.mp
>    (./tmp/foo.mp)
>    *input tmp\foo.mp
>    ! I can't open file `tmp\foo.mp'.
>    <*> input tmp\foo.mp
> 
>    Please type another input file name:

That has surprised me as well, but indeed it works, even with mixed slashes:

]mpost
This is MetaPost, version 1.9991 (TeX Live 2016) (kpathsea version 6.2.2)
**\
(/usr/local/texlive/2016/texmf-dist/metapost/base/mpost.mp
(/usr/local/texlive/2016/texmf-dist/metapost/base/plain.mp
Preloading the plain mem file, version 1.005) )
*input base/mpiv\mp-tool.mpiv
(/usr/local/texlive/2016/texmf-dist/metapost/context/base/mpiv/mp-tool.mpiv)
*show metapostversion;
>> 1.9991

Maybe you are using a different version?

>> Can you please confirm that they both work in Windows, too?
> 
> On Windows both are allowed, the MS-DOS API supported them both from
> the beginning.  This doesn't mean that you can use forward slashes
> reliably on the command line.  But in your case the filename is passed
> from a program to a system call, hence no command-line parsing involed.
> 
> Thus forward slashes are portable, backslashes are not.
> 
>  > Also, is it correct that the input command above searches only
>  >
>  > (a) in the directory from which mpost is launched, but not in its
>  >     subdirectories (so, it would find ./a/b/c.mp, but not ./x/y/a/b/c.mp);
>  > (b) in a set of predefined directories, like /texlive/texmf/metapost,
>  >     *and* in all of its subdirectories (so, it would find both
>  >     /texlive/metapost/a/b/c.mp and /texlive/metapost/x/y/a/b/c.mp);
>  >
>  > in that order?
> 
> Yes, but this is not hard coded into the binary.  The configuration
> file is
> 
>   texmd-dist/web2c/texmf.cnf
> 
> I recommend to read the explanations at the top of the file first.
> 
> The current value is
> 
>   MPINPUTS = .;$TEXMF/metapost//
> 
> TEXMF contains TEXMFHOME, TEXMFLOCAL, TEXMFDIST, among others, and the
> two trailing slashes denote that subdirectories are searched as well.
> 
>  > And this also in Windows?
> 
> TeX Live behaves identical on all platforms, fortunately.

That's very valuable information! I did not know about MPINPUTS: it helps
me solve some headaches I have with finding files in my working directory.

Thanks!
Nicola




More information about the metapost mailing list