我想创建一个编号(或项目符号)列表,但希望列表中的项目数可变。我希望从外部文件读取变量。例如,第一次会有 4 个项目,下一次会有 6 个项目,等等。我的测试用例是编写一系列步骤(即列表中的项目)的程序来实现特定目标。这可以仅使用 LaTeX 命令来完成吗?
答案1
该版本具有expl3
一些功能,可以按稍后显示的序列存储各个行。
首先使用\ReadFromFile{filename}{listname}
wherelistname
基本上可以是任何单词。这会将各行读入expl3
\seq
变量中。
稍后,在或环境\DisplayList{listname}
中使用。借助包,可以轻松更改项目标签。enumerate
itemize
enumitem
如果需要的话,存储允许稍后重新显示。
\documentclass{article}
\usepackage{enumitem}
\usepackage{xparse}
\ExplSyntaxOn
\ior_new:N \l_t_king_file
\cs_new:Nn \t_king_readfromfile:nn {%
\seq_gput_right:cn {g_#1_t_king_item_seq} {#2}
}
\NewDocumentCommand{\ReadFromFile}{mm}{%
\seq_if_exist:cTF {g_#2_t_king_item_seq }
{
\seq_gclear:c {g_#2_t_king_item_seq}
}{%
\seq_gclear_new:c {g_#2_t_king_item_seq}
}
% Open the file from arg #1
\ior_open:Nn \l_t_king_file {#1}
% Read its content to the #2 - named variable
\ior_map_inline:Nn \l_t_king_file {\t_king_readfromfile:nn {#2} {##1}}
% Close the file
\ior_close:N \l_t_king_file
}
\NewDocumentCommand{\DisplayList}{m}{%
\seq_map_inline:cn {g_#1_t_king_item_seq} {\item ##1}
}
\ExplSyntaxOff
\begin{document}
\ReadFromFile{shortitems.txt}{myfirstlist}
\begin{enumerate}[label={\Roman*)}]
\DisplayList{myfirstlist}
\end{enumerate}
\ReadFromFile{longerlist.txt}{myotherlist}
\begin{enumerate}[label={\Alph*)}]
\DisplayList{myotherlist}
\end{enumerate}
Redisplay with usual numbers:
\begin{enumerate}
\DisplayList{myotherlist}
\end{enumerate}
\end{document}
文件shortitems.txt
和longerlist.txt
包含以下行
开启PDU
寻找就绪指示灯
或者
开启PDU
寻找就绪指示灯
混合饮料
提供饮料
享用饮品