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!