# [tex4ht] make output of tex4ht go to sub-folder without leaving temporary and intermediate files in the current folder?

Nasser M. Abbasi nma at 12000.org
Mon Feb 11 19:16:14 CET 2013

On 2/11/2013 7:21 AM, Radhakrishnan CV wrote:
> On Mon, Feb 11, 2013 at 5:23 PM, Nasser M. Abbasi <nma at 12000.org> wrote:
>
>> On 2/11/2013 5:46 AM, Radhakrishnan CV wrote:
>>
>>   True, aux and other scratch files still remain in your working directory.
>>> In order to move all files to your target directory, you need to provide
>>> \Needs{} directive in your source document. For example, I will modify
>>> your
>>> example document to the following manner:
>>>
>>> --- foo-changed.tex ----------
>>> \documentclass{article}%
>>> \usepackage{graphics}
>>>
>>> \begin{document}
>>>
>>> \includegraphics{a.png}
>>>
>>> \Needs{"find ./ -maxdepth 1 -mindepth 1 -type f -not -name \jobname.tex
>>> -exec mv '{}' A \string\; "}
>>>
>>> \end{document}
>>> -------------------------
>>>
>>> \Needs{...} directive is operating system dependent. The one I have given
>>> above is for bash in linux or unix like operating systems.  You might
>>> provide the one fit for your OS.
>>>
>>>
>> Thanks, that is useful. But is it possible to put this \Needs
>> command in my .cfg file somehow? The reason is, I have one common
>> .cfg file, and if this can be used in .cfg file, then I do not
>> have to edit all my .tex file and add this command to each. I
>> have 1,000's of small .tex files, and they all use the same .cfg file.
>>
>
> That is quite possible. You might add the following line in your *.cfg:
>
>   \AtEndDocument{\Needs{...}}
>
> Let that be the last directive in \jobname.lg file which is read by t4ht
> binary.
>
> Best regards
>

I am sorry, but I am not following you. Your description is short
and assumes knowledge of the user. It will really help if you
could give a tiny/minimal but complete example of how all this
is supposed to work.

You mention that I need to put something at end of \jobname.lg,
which I do not understand. Do I need to put the command

\AtEndDocument{\Needs{...}}

in the .cfg file or in this .lg file?

I only know about myconfig.cfg. Also, the command itself

\Needs{"find ./ -maxdepth 1 -mindepth 1 -type f -not
-name \jobname.tex -exec mv '{}' A \string\; "}

seems to have hardcoded values in it. What is 'A' above? This
folder will be different from one .tex file to another, I can't
have it hardcoded, as I have large tree and different names for
latex files all over. I send output of each latex file to a
sub-folder by the same name as the latex file.

Also the name \jobname.tex in the command, should that also a function
of the latex file itself?

When I run this small example (no config file for now,
just wanted to see how it work)

------------- t15.tex---------------
\documentclass{article}%
\begin{document}

\Needs{"find ./ -maxdepth 1 -mindepth 1 -type f -not -name \jobname.tex
-exec mv '{}' A \string\; "}

\end{document}
------------------------------------

htlatex foo.tex

I get

Execute script t15.lg'
----------------------------
t4ht.c (2009-01-31-07:34 kpathsea)
t4ht -f/t15.tex
(/usr/share/texmf/tex4ht/tex4ht.env)
Entering t15.lg
Entering t15.css
Entering t15.tmp
System call: find ./ -maxdepth 1 -mindepth 1 -type f -not
-name t15.tex -exec mv '{}' A \;

mv: cannot move ./t15.lg' to A/t15.lg': Text file busy

System return: 0
>

In addition, this command removed all other .tex files in
the same folder to the folder A ! which is not what I want.

The folder A should really be the same as the latex file.
So in this example, it should be t15/

I really think the best solution should be to make

-dFolder

which currently works, finish the job right, and move
all these scratch and temp files to the Folder above
as well. That would be the best solution to this problem.

Thank you,
--Nasser

`