Pode-se desejar gerar automaticamente um cabeçalho ou rodapé de página que registre qual arquivo está sendo processado. Não é fácil…
O TeX retém somente o que ele considera ser o nome do job, no primitivo \jobname; é o nome do arquivo entregue ao TeX, despido do nome do diretório e de qualquer extensão (como tex). Se nenhum arquivo tiver sido entregue (ou seja, você está usando o
TeX interativamente), o \jobname terá o valor texput
(neste caso, o nome dado a arquivos log).
Isso é satisfatório no caso de um documento pequeno, mantido em um único arquivo; documentos mais significativos estarão contidos em um monte de arquivos, e o
TeX não faz qualquer tentativa de manter rastro de entrada de arquivos para o
job. Assim, o usuário precisa manter registro por si mesmo — o único jeito é remendar os comandos de entrada e fazer com que eles retenham detalhes do nome do arquivo. Isso é particularmente difícil no caso do Plain TeX,
já que a sintaxe do comando \input é muito peculiar.
No caso do LaTeX, os comandos de entrada têm uma sintaxe bem normal, e as mais simples técnicas de patch podem ser usadas neles. (Observe que o próprio comando \input do LaTeX é um patch em cima do comando do Plain TeX. Nossos patches se aplicam à versão
LaTeX do comando, que é usada como \input{file})
%%
%% \def\ThisFile{\jobname}
%% \let\OldInput\input
%% \renewcommand{\input}[1]{%
%% \renewcommand{\ThisFile}{#1}%
%% \OldInput#1%
%% }
%%
%%
%% \documentclass{article}
%% ... (macros above)
%% \begin{document}
%% \input{preamble}
%%
%% \input{postamble}
%% \end{document}
%%
%%
%% \def\ThisFile{\jobname}
%% \newcounter{FileStack}
%% \let\OrigInput\input
%% \renewcommand{\input}[1]{%
%% \stackinput{#1}{\OrigInput}%
%% }
%% \newcommand{\stackinput}[2]{%
%% \stepcounter{FileStack}%
%% \expandafter\let
%% \csname NameStack\theFileStack\endcsname
%% \ThisFile
%% \def\ThisFile{#1}%
%% #2#1%
%% \expandafter\let\expandafter
%% \ThisFile
%% \csname NameStack\theFileStack\endcsname
%% \addtocounter{FileStack}{-1}%
%% }
%%
%%
%% \let\OrigInclude\include
%% \renewcommand{\include}[1]{%
%% \stackinput{#1}{\OrigInclude}%
%% }
%%
É possível manter registro do nome do arquivo que está sendo processado, mas é surpreendentemente difícil (por muito tempo, essas FAQs ofereceram código que simplesmente não funcionava em muitos casos).
O pacote currfile fornece um meio normal de manter registro de detalhes do arquivo em uso (nome no
\currfilename, diretório no \currfiledir, bem como o nome ‘base’ do arquivo (sem sua extensão) e sua extensão).
O Currfile faz isso com a ajuda de um segundo pacote, o
filehook, que identifica operações de arquivo que usem \input,
\InputIfFileExists e \include, bem como o carregamento de pacotes e classes.
O pacote FiNK (“File Name Keeper”) mantém a informação do nome de arquivo e extensão em uma macro \finkfile. O FiNK , agora, está obsoleto, tendo cedido o lugar ao currfile, mas permanece disponível para uso em documentos antigos
%%
%% \def\striptexext#1.tex{#1}
%% ...
%% \edef\ThisFile{\expandafter\stripext\finkfile}
%%
A coleção FiNK inclui um fink.el que fornece suporte no emacs com AUC-TeX.07038187969
This question on the Web: http://latex.net.br/faq/FAQ-filename.html
Do you have any question? Ask on: latex.net.br - we love qood questions!