我想知道是否有任何包/附加组件/程序可以将.txt
文件(或一些简单的文本文件)链接到文档.tex
。
这就是我要找的。我有一个这样的 LaTeX 文档:
\begin{document}
First number: ${REF1}$
Second number: ${REF2}$
\end{document}
还有.txt
这样的文档:
REF1 = 123
REF2 = 221
并且REF#
会自动用数字替换,如果.txt
文件被修改,则会更新。
(注:我正在使用 Texmaker)
答案1
您可以加载该文件并将每一行解释为一个键值对。
\begin{filecontents*}{\jobname.txt}
REF1 = 123
REF2 = 221
\end{filecontents*}
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\loadkeyfile}{m}
{
\tl_gset_from_file:Nnn \g__razero_input_tl
{ \endlinechar=`, }
{ #1 }
\keys_set:nV { razero/keyfile } \g__razero_input_tl
}
\DeclareExpandableDocumentCommand{\usekey}{m}
{
\tl_use:c { g_razero_key_#1_tl }
}
\tl_new:N \g__razero_input_tl
\keys_define:nn { razero/keyfile }
{
unknown .code:n = \tl_new:c { g_razero_key_ \l_keys_key_tl _tl }
\tl_gset:cn { g_razero_key_ \l_keys_key_tl _tl } { #1 }
}
\cs_generate_variant:Nn \keys_set:nn { nV }
\ExplSyntaxOff
\loadkeyfile{\jobname.txt}
\begin{document}
--First number: \usekey{REF1}--
--Second number: \usekey{REF2}--
\end{document}
环境filecontents*
只是为了使示例自成一体。在参数中\loadkeyfile
使用您的文件名。
破折号只是为了表明没有引入不需要的空间。
逐行扫描输入文件的另一种定义。
\begin{filecontents*}{\jobname.txt}
REF1 = 123
REF2 = 221
\end{filecontents*}
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\loadkeyfile}{m}
{
\ior_open:Nn \g__razero_input_stream { #1 }
\ior_map_inline:Nn \g__razero_input_stream
{
\keys_set:nn { razero/keyfile } { ##1 }
}
}
\DeclareExpandableDocumentCommand{\usekey}{m}
{
\tl_use:c { g_razero_key_#1_tl }
}
\ior_new:N \g__razero_input_stream
\keys_define:nn { razero/keyfile }
{
unknown .code:n = \tl_new:c { g_razero_key_ \l_keys_key_tl _tl }
\tl_gset:cn { g_razero_key_ \l_keys_key_tl _tl } { #1 }
}
\ExplSyntaxOff
\loadkeyfile{\jobname.txt}
\begin{document}
--First number: \usekey{REF1}--
--Second number: \usekey{REF2}--
\end{document}