我想提供以下课程:
\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
和。\Author
filecontents
\@...
使用\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