我想读取外部文件一行,并将每行作为一个项目插入。由于维度相关错误,我未能做到这一点。如何解决?
\documentclass{article}
\def\trimtok i{}
\def\trimmer#1{\expandafter\trimtok #1}
\newread\reader
\immediate\write18{tlmgr list --only-installed > installed-packages.txt}
\begin{document}
\makeatletter
\begin{enumerate}
\openin\reader=installed-packages.txt\relax
\loop
\read\reader to \data
\unless\ifeof\reader
\item \trimmer{\data}
\repeat
\closein\reader
\end{enumerate}
\makeatother
\end{document}
答案1
您创建的文本文件包含 TeX 命令,这些命令出现在某些软件包的描述中。因此,您需要在某处进行去标记化。如果您在读取后执行此操作,TeX 将在控制序列后插入空格。因此,我会将其读取为字符串,然后i
在整理宏中将和行尾作为“其他”字符处理:
\documentclass{article}
\usepackage[T1]{fontenc}
\begingroup
\catcode`\^^M=12\relax%
\expandafter\gdef\expandafter\trimtok\detokenize{i}#1^^M{#1}%
\gdef\trimmer#1{\expandafter\trimtok #1}%
\endgroup
\newread\reader
\immediate\write18{tlmgr list --only-installed > installed-packages.txt}
\begin{document}
\makeatletter
\begin{enumerate}
\openin\reader=installed-packages.txt\relax
\loop
\readline\reader to \data
\unless\ifeof\reader
\item \trimmer{\data}
\repeat
\closein\reader
\end{enumerate}
\makeatother
\end{document}
您得到的实际错误与第一个“有问题”的行有关
i addlines: A user-friendly wrapper around \enlargethispage.
尝试\enlargethispage
在没有合适参数的情况下执行!