使用 filecontents 包设置 PDF/A 属性

使用 filecontents 包设置 PDF/A 属性

我想提供以下课程:

\ProvidesClass{pdfatest}[2018/04/12 V0.1 PDF/A Test]
\LoadClass[a4paper,11pt]{article}

\newcommand{\cnumber}[1]{\def\@cnumber{#1}}
\newcommand{\cauthor}[1]{\def\@cauthor{#1}}

% Set PDF/A properties using pdfx and filecontens packages
\usepackage[a-3b]{pdfx}
\RequirePackage{filecontents}
\begin{filecontents}{\jobname.xmpdata}
    \Title{Certificate of Calibration No \@cnumber} % not working because \@cnumber not defined
    \Author{\@cauthor} % not working because \@cauthor not defined
\end{filecontents}

问题是当我使用变量时,我无法设置块内的\Title和。\Authorfilecontents\@...

使用\hypersetup内部\AtBeginDocument我可以设置属性,请参阅以下代码:

% Set PDF properties using the hyperref package.
% Not used, because it's not working with PDF/A.
\usepackage{hyperref}
\AtBeginDocument{
    \hypersetup{
        pdftitle=Certificate of Calibration No \@cnumber,
        pdfauthor=\@cauthor
    }
}

我也尝试将filecontents块放入其中\AtBeginDocument。但Undefined control sequence如果我这样做,我会收到错误。

我正在使用我的课程作为示例:

\documentclass{pdfatest}

\cnumber{123-45678}
\cauthor{My Name}

\begin{document}
Bla bla ...
\end{document}

有什么想法我可以如何filecontents在我的类定义中使用带有变量的块吗?

答案1

pdfx包应在前言的末尾加载,这可以防止使用\Title时等未定义。\begin{filecontents}...\end{filecontents}

因此加载etoolbox包并将的加载包装pdfx到中\AtEndPreamble

无论如何,宏\@c....都是未扩展的,只有在写入元数据时才会扩展。

\ProvidesClass{pdfatest}[2018/04/12 V0.1 PDF/A Test]
\LoadClass[a4paper,11pt]{article}


\newcommand{\cnumber}[1]{\def\@cnumber{#1}}
\newcommand{\cauthor}[1]{\def\@cauthor{#1}}


% Set PDF/A properties using pdfx and filecontens packages
\RequirePackage{filecontents}

\RequirePackage{etoolbox}

\AtEndPreamble{
  \RequirePackage[a-3b]{pdfx}
}
\begin{filecontents}{\jobname.xmpdata}
  \Title{Certificate of Calibration No \@cnumber} % not working because \@cnumber not defined
  \Author{\@cauthor} % not working because \@cauthor not defined
\end{filecontents}

\endinput

相关内容