我有一个自定义类文件,其中我定义了一些由用户填充的变量,例如:\author
,\title
...
我想生成一个.xmpdata
文件来获取这些信息。
对于这些,我有以下类文件:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{foo}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass[a4paper]{article}
\RequirePackage{luatextra}
\RequirePackage[pdftex]{pdflscape}
\RequirePackage[a-3u]{pdfx}
\RequirePackage[usenames,dvipsnames,svgnames]{xcolor}
\RequirePackage{etoolbox}
\begin{filecontents}{\jobname.xmpdata}
\Keywords{\@keywords}
\Title{\@title}
\Author{\@author}
\Org{\@org}
\end{filecontents}
\AtEndPreamble{%
\makeatletter
\hypersetup{
unicode = true,
final = true,
colorlinks = true,
urlcolor = blue,
citecolor = blue,
linkcolor = MidnightBlue,
unicode = true,
linktoc = section,
pdflang = fr-FR
}
\makeatother
}{}
\def\date#1{\def\@date{#1}}
\let\@date\@empty
\def\author#1{\def\@author{#1}}
\let\@author\@empty
\def\org#1{\def\@org{#1}}
\let\@org\@empty
\def\title#1{\def\@title{#1}}
\let\@title\@empty
\def\keywords#1{\def\@keywords{#1}}
\let\@keywords\@empty
使用这个主要的 tex 文件来测试它:
% !TeX encoding = utf8
% !TeX spellcheck = fr_FR
\documentclass{foo}
\author{foo}
\title{bar}
\keywords{baz}
\org{foz}
\begin{document}
it is a MWE
\end{document}
我在这里lualatex
用作引擎,并且.xmpdata
创建了文件但变量没有扩展:
cat bar.xmpdata
%% LaTeX2e file `bar.xmpdata'
%% generated by the `filecontents' environment
%% from source `bar' on 2017/02/23.
%%
\Keywords{\@keywords}
\Title{\@title}
\Author{\@author}
\Org{\@org}
预期文件:
\Title{bar}
\Author{foo}
\Keywords{baz}
\Publisher{foz}
也许\directlua
有更好的方法吗?
答案1
如果您的最终结果是 PDF/X(纸质印刷品)而不是 PDF/A(电子书),那么请查看我在 GitHub 上自己的文档类。本周早些时候就把它放在那里了。它使用了大量修改的代码部分pdfx
,但以略有不同的方式执行 XMP。由于我的代码是 LPPL 许可的,因此您可以自己提取所需的任何内容。在所有文件中,您最需要查看的两个是novel-pdfx.sty
和novel-xmppacket.sty
。
https://github.com/daniel-j/novel
请注意,我的代码没有提供关键字,只是因为它们在印刷到纸张市场中毫无用处。本来可以添加的。
编辑:当使用我的类编译文档时,除非有请求,否则它不会导出 XMP 文件。这是通过使用xml
(not xmp) 作为类选项来执行的。