2010-08-02 16 views
21

J'utilise le code ci-dessous pour définir le titre et l'auteur dans les propriétés du document pdf.Définition automatique de pdftitle et pdfauthor dans une feuille de style LaTeX

\usepackage[pdftex]{hyperref} 
\hypersetup{ 
    pdftitle = {The documents title}, 
    pdfauthor = {me} 
} 

Je voudrais automatiser cela en mettant dans une feuille de style (.sty) Voici ma tentative, mais il ne fonctionne pas. Le pdf est compilé (pdflatex) avec des erreurs. Mais les propriétés du document pdf restent vides. J'utilise les variables \ @title et \ @author pour créer une page de titre personnalisée. Donc, je connais ces travaux.

Des suggestions?

Répondre

25

Si vous obtenez des erreurs de compilation, je suppose que le problème est le caractère @. Vous devez envelopper votre code dans \makeatletter et \makeatother. Un autre problème possible est que vous le faites avant d'exécuter les commandes \title et \author. Une bonne solution pour cela serait d'utiliser \AtBeginDocument, ce qui vous permettrait de placer cela n'importe où dans votre préambule. Notez que vous devez définir les informations \title et \author avant \begin{document}.

\documentclass{article} 
\usepackage[pdftex]{hyperref} 

\makeatletter 
\AtBeginDocument{ 
    \hypersetup{ 
    pdftitle = {\@title}, 
    pdfauthor = {\@author} 
    } 
} 
\makeatother 

\title{Test title} 
\author{Sam Author} 

\begin{document} 
\maketitle 
\end{document} 

MISE À JOUR: mettre les parties pertinentes dans un fichier de style nommé xxx.sty:

\NeedsTeXFormat{LaTeX2e} 
\ProvidesPackage{xxx} 
\RequirePackage{hyperref} 

\makeatletter 
\AtBeginDocument{ 
    \hypersetup{ 
    pdftitle = {\@title}, 
    pdfauthor = {\@author} 
    } 
} 
\makeatother 
+0

Votre solution fonctionne correctement lorsqu'elle est placée dans le fichier tex principal. Cependant, cela ne fonctionne pas lorsque vous le mettez dans un fichier .sty. – Thierry

+0

@Thierry: Je n'ai aucun problème pour mettre ceci dans un fichier '.sty'. – grddev

+0

Après votre mise à jour, tout fonctionne correctement. Merci pour la réponse. – Thierry