2010-08-02 5 views
21

Uso il codice seguente per impostare il titolo e l'autore nelle proprietà del documento PDF.Impostazione di pdftitle e pdfauthor automaticamente in un foglio di stile LaTeX

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

Vorrei automatizzare questo mettendolo in un foglio di stile (.sty) Di seguito è il mio tentativo, ma non sta funzionando. Il pdf è compilato (pdflatex) con errori. Ma le proprietà del documento pdf rimangono vuote.

\usepackage[pdftex]{hyperref} 
\hypersetup{ 
    pdftitle = {\@title}, 
    pdfauthor = {\@author} 
} 

Uso le variabili \ @title e \ @author per creare una pagina di destinazione personalizzata. Quindi conosco quei lavori.

Qualche suggerimento?

risposta

25

Se si verificano errori di compilazione, il problema è il @. È necessario avvolgere il codice in \makeatletter e \makeatother. Un altro possibile problema è che lo si fa prima di eseguire i comandi \title e \author. Una buona soluzione per questo sarebbe usare \AtBeginDocument, che ti permetterebbe di posizionarlo ovunque nel tuo preambolo. Si noti che è necessario definire le informazioni \title e \author prima di \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} 

UPDATE: mettendo le parti rilevanti in un file di stile denominato xxx.sty:

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

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

La soluzione funziona correttamente quando viene inserito nel file tex principale. Tuttavia, non funziona quando lo metti in un file .sty. – Thierry

+0

@Thierry: non ho problemi nel metterlo in un file '.sty'. – grddev

+0

Dopo l'aggiornamento, tutto funziona correttamente. Grazie per la risposta. – Thierry

Problemi correlati