Qual é o nome desse arquivo?

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
currfile.sty
currfile
filehook.sty
filehook
fink.sty
fink


Do you have any question? Ask on: latex.net.br - we love qood questions!