![xkeyval——从文件读取密钥](https://linux22.com/image/477789/xkeyval%E2%80%94%E2%80%94%E4%BB%8E%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E5%AF%86%E9%92%A5.png)
我想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}
打印结果为: