如何动态生成xmpdata文件?

如何动态生成xmpdata文件?

我有一个自定义类文件,其中我定义了一些由用户填充的变量,例如:\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有更好的方法吗?

我不明白给出的答案:https://tex.stackexchange.com/a/349521/24790

答案1

如果您的最终结果是 PDF/X(纸质印刷品)而不是 PDF/A(电子书),那么请查看我在 GitHub 上自己的文档类。本周早些时候就把它放在那里了。它使用了大量修改的代码部分pdfx,但以略有不同的方式执行 XMP。由于我的代码是 LPPL 许可的,因此您可以自己提取所需的任何内容。在所有文件中,您最需要查看的两个是novel-pdfx.stynovel-xmppacket.sty

https://github.com/daniel-j/novel

请注意,我的代码没有提供关键字,只是因为它们在印刷到纸张市场中毫无用处。本来可以添加的。

编辑:当使用我的类编译文档时,除非有请求,否则它不会导出 XMP 文件。这是通过使用xml(not xmp) 作为类选项来执行的。

相关内容