[texworks] New version 302/303

Alain Delmotte esperanto at swing.be
Sat Jun 6 09:40:20 CEST 2009


Hi!

Ok the new build 306 is available on my site.
But making a test: there is an error *both* with and without any 
information for the path in the typesetting preference.
I mean in 303, when there was something for the path, it worked, without 
not; now it's not working at all.
The error message says:
=================
The program "pdflatex" was not found.
Searched in directories:
Check configuration of the pdflatex tool and path settings in the 
Preference dialog.
=================
if the preference path is empty, the "Searched in directories:" is 
empty; if there is something, that folder is shown one line below with a 
bullet (ex. [bullet]C:/attente ).

Thinking about it: with 303 when for the path in preference 1) there was 
nothing - error, 2) with something the path was replaced. So a 
comparison was done to see if there is something; shouldn't it be just 
to replace what is (or not) in the rpreference by what is in 
texworks-setup.ini?
But of course that you probably already discovered (once you get into 
technical discussions, I am lost! :-(( )

Alain


Jonathan Kew a écrit :
> Thanks for all your investigation, Tomek....
>
> On 5 Jun 2009, at 17:34, T T wrote:
>
>> I've done some more forensic work on this issue. I've added to 
>> texworks.ini:
>>
>> binaryPaths=
>>
>> This shows in the preferences dialog as an empty slot. With this in
>> place everything works, i.e. my test call to 'cmd /c path' returns the
>> PATH with leading ';'. If I have:
>>
>> binaryPaths=,
>>
>> then I get two empty entries in the dialog and 'cmd /c path' returns
>> the PATH with two leading semicolons, and so on. Now, if I remove all
>> those empty slots from the preferences, then I get the following entry
>> in texworks.ini:
>>
>> binaryPaths=@Invalid()
>
> Curious, but I guess this is how Qt represents an empty stringlist in 
> the .ini file (to distinguish it from a list containing a single, 
> empty string, as in your first example).
>
>> With this in place the call to 'cmd /c path' (or any other tool) fails
>> with program not found. This means that, if binaryPaths is @Invalid(),
>> adding the PATH to it fails (at least on Windows). Here's the relevant
>> piece of code from TeXDocument::typeset():
>>
>>  QStringList binPaths = TWApp::instance()->getBinaryPaths();
>>  QStringList env = QProcess::systemEnvironment();
>>  QMutableStringListIterator envIter(env);
>>  while (envIter.hasNext()) {
>>          QString& envVar = envIter.next();
>>          if (envVar.startsWith("PATH=")) {
>>                  foreach (const QString& s,
>> envVar.mid(5).split(PATH_SEPARATOR, QString::SkipEmptyParts))
>>                  if (!binPaths.contains(s))
>>                          binPaths.append(s);
>>                  envVar = "PATH=" + binPaths.join(PATH_SEPARATOR);
>>                  break;
>>          }
>>  }
>>
>> If binaryPaths key exists in texworks.ini, then its content is
>> returned by TWApp::getBinaryPaths() but if it doesn't exist then the
>> result of TWApp::setDefaultPaths() is returned.
>
> Right.
>
>> Now the question is:
>> what TWApp::setDefaultPaths() returns if tex is not found on any of
>> the predefined paths?
>
> setDefaultPaths doesn't care whether tex (or anything else) is 
> actually present in the predefined paths; it just returns the list of 
> paths, it's the typeset() function that will look for tools.
>
>> If the return value is @Invalid() as for
>> binaryPaths, then we have the same problem.
>
> setDefaultPaths shouldn't ever be returning an empty list, though even 
> if it does, an empty list ought to be harmless.
>
>> Another wierd thing I've noticed is that, w/o binaryPaths in
>> texworks.ini and using e.g.
>> PATH=..;D:\Software\LocalApps\miktex27\miktex\bin;C:\Windows\system32,
>> my test call returns (rev.303):
>>
>> PATH=D:\Software\PortableApps\PortableApps\TeXworksPortable;..;D:\Software\LocalApps\miktex27\miktex\bin;C:\Windows\system32;..;D:\Software\LocalApps\miktex27\miktex\bin;C:\Windows\system32 
>>
>>
>> Note that the original PATH is repeated twice in the one passed to the
>> spawned process, which should not happen, because of the condition
>> (see above):
>>
>>     if (!binPaths.contains(s))  binPaths.append(s);
>>
>> So something is not right here.
>
> Rev 303 did not include that condition, it unconditionally added the 
> PATH in typeset(). This was revised in r.306. So this part, at least, 
> is not a mystery.
>
>> Unfortunately I don't know enough
>> about Qt to troubleshoot this any further but I hope I narrowed this
>> down sufficiently that someone can figure this out now. Jonathan, does
>> it make any sense to you?
>
> Not really! :(  When you have cleared all the paths from Preferences, 
> so that texworks.ini has binaryPaths=@Invalid(), what paths show up in 
> the Program Not Found alert? I guess you'll need a new build from 
> Alain to see the new version of that alert, which lists the final list 
> of paths.... I'm very curious to see what happens with that.
>
> JK
>
>



More information about the texworks mailing list