从类文件设置 pdfinfo 字段

从类文件设置 pdfinfo 字段

在类文件中,我已经设置(自动设置 PDF 信息字段):

\hypersetup{pdfinfo={Title={\@doctitle}, Author={\@docauthor}, Subject={\@docsubject}, Producer={LaTeX}, Version={\@docversion}, Date={\@docdate}, Institution={\@universityname}}}

但是,当我使用此类文件排版文档(在其他方面都运行良好)并查看 PDF 的文档属性时,我得到了各个字段的文字字符串“doctitle”、“docauthor”等。这表明 LaTeX 命令(在类文件的其他地方定义和使用)没有得到扩展。

我错过了什么?我需要转义 '\' (似乎是转义了 & 符号) 吗?

因此,\\@doctitle,而不是\@doctitle。或者 {} 的内容是否仅被视为文字字符串?如果是这样,我该如何实现我想要做的事情。

答案1

看来,你的类别代码是错误的@。那么 TeX 将看不到该标记\@doctitle,而是标记\@dotittle第一个标记\@被过滤掉(该命令设置了空间因子),字符串doctitle保留下来。

在类文件中,的类别@通常是“字母”,因此@可以在命令名称中使用。也许您已通过 更改了它\makeatother

类别代码检查

@您可以通过以下方式检查类别代码

\showthe\catcode`\@ % or \showthe\catcode64

这会抛出一个类似消息的错误,显示类别代码的数量。字母应该是 11。12 表示其他字符,效果为\makeatother

类别代码值也可以打印在屏幕和日志文件上:

\typeout{* Category code of @ = \the\catcode`\@}

但是,类别代码检查的位置比较棘手。它应该在标记化时\@doctitle不是执行时间。

例子:

<A>\def\macro{<B>\@doctitle...}

\@doctitle在的定义时被标记化\macro。因此为时<B>已晚,应该\macro在文档中稍后的某个地方执行 。

<A>如果宏定义是“顶层”,而不是在宏或钩子内部,那么可能就是正确位置。例如:

<C>\AtBeginDocument{<A>\def\macro{<B>\@doctitle}}

然后<A>就太晚了,因为的宏定义\macro已经被标记为的参数\AtBeginDocument。然后<C>是更好的地方。

相关内容