xkeyval——从文件读取密钥

xkeyval——从文件读取密钥

我想xkeyval从外部文件读取选项,例如:

\setkeys{my@keys}{\input{conf}}

\edef我尝试了和的几种组合\expandafter,但无济于事。有什么想法吗?

此致,

尼古拉斯

答案1

您不能\edef\input因为它不可扩展。您必须先将文件内容读入临时变量,然后将其传递给\setkeys

这是expl3的实现\setkeysFile。它与标准相同\setkeys,只是第二个参数是一个文件,该文件(应该)包含以逗号分隔的键值对列表。

\RequirePackage{filecontents}
\begin{filecontents*}{conf.tex}
hello = world :D,
goodnews = everyone!,
\end{filecontents*}
\documentclass{article}
\usepackage{xkeyval}
\makeatletter
\define@key{my@keys}{hello}{\def\towhom{#1}}
\define@key{my@keys}{goodnews}{\def\who{#1}}
\makeatother

\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l__nicolas_setkeys_tl
\NewDocumentCommand \setkeysFile { m m }
  {
    \file_get:nnNTF {#2} {} \l__nicolas_setkeys_tl
      { \exp_args:NnV \setkeys {#1} \l__nicolas_setkeys_tl }
      { \__kernel_msg_error:nnn { kernel } { file-not-found } {#2} }
  }
\ExplSyntaxOff

\begin{document}

\setkeysFile{my@keys}{conf}

Hello \towhom

Good news \who

\end{document}

打印结果为:

在此处输入图片描述

相关内容