循环遍历 .txt 文件的各行以生成命名法

循环遍历 .txt 文件的各行以生成命名法

我是宏领域的新手,但我需要定义一个命令,该命令获取 .txt 文件的内容并使用它来添加命名条目。我的 .txt 文件如下所示:

hPSCs: Human pluripotent stem cells
CMs: Cardiomyocytes
hPSC-CMs: hPSC-derived cardiomyocytes

我希望我的命令基本上执行以下操作:

\nomenclature{hPSCs}{Human pluripotent stem cells}
\nomenclature{CMs}{Cardiomyocytes}
\nomenclature{hPSC-CMs}{hPSC-derived cardiomyocytes}

对于 .txt 文件的所有行。换句话说,我想要:

  • 打开 .txt 文件
  • 读取 .txt 文件的每一行。然后:
    • 将文本以分隔符(本例中为“:”)拆分为两部分。我们分别1称之为2
    • 使用这两个部分来构建添加命名法条目。因此它将是\nomenclature{1}{2}

用任何编程语言来做这件事都不费时间,但我真的不知道在 Latex 中从哪里开始。如果你能帮助我,我将不胜感激。

答案1

这是一个稍微简单一点的解决方案,使用基本的 TeX\read命令。文件应该为nominal.txt

\documentclass{article}

\usepackage{nomencl}
\makenomenclature
% Check that we don't use existing commands
\newcommand*\mytextfile{}
\newread\mytextfile
\newcommand*\donomencl{}
\def\donomencl#1:#2\par{\nomenclature{#1}{#2}}
\newcommand*\lastreadline{\par}

\begin{document}
% \nomenclature{hPSCs}{Human pluripotent stem cells}
% \nomenclature{CMs}{Cardiomyocytes}
% \nomenclature{hPSC-CMs}{hPSC-derived cardiomyocytes}

\openin\mytextfile=nomencl.txt
\loop\unless\ifeof\mytextfile %
  \read\mytextfile to \nomenline
  \ifx\nomenline\lastreadline
  \else \expandafter\donomencl \nomenline\par
  \fi
\repeat
\closein\mytextfile

Some text 

\printnomenclature 

\end{document}

答案2

在这里,我重新定义\nomenclature只是为了显示(反标记)正在调用的内容。但是,该方法读取文件,按行用:分隔符进行解析,并\nomenclature使用行的两个部分的数据构造调用。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{readarray}
%\usepackage{listofitems}% IS LOADED BY readarray
\begin{filecontents*}[overwrite]{nom.txt}
hPSCs: Human pluripotent stem cells
CMs: Cardiomyocytes
hPSC-CMs: hPSC-derived cardiomyocytes
\end{filecontents*}
\usepackage{nomencl}
\makenomenclature
\begin{document}
\readarraysepchar{\\}
\readdef{nom.txt}\nomdata
\setsepchar{\\/:}
\ignoreemptyitems
\readlist*\nomlist{\nomdata}
\def\tmp{}
\foreachitem\z\in\nomlist[]{%
  \itemtomacro\nomlist[\zcnt,1]\theacr
  \itemtomacro\nomlist[\zcnt,2]\thedescr
  \def\tmp{\expandafter\nomenclature\expandafter{\theacr}}%
  \expandafter\tmp\expandafter{\thedescr}%
}

Testing nomenclature

\printnomenclature
\end{document}

在此处输入图片描述

相关内容