我正在使用 LaTeX 制作一本歌本。项目还处于早期阶段,歌曲还没有全部选好,但我想在此期间修复它的内部工作原理。
由于(希望)会有很多人参与,并且会包含很多歌曲,所以我想分别保存所有歌曲并 \input 它们。
梦想是有一个文本文件,其中的歌曲如下所示
二手店-macLemore
两个世界,一个家庭-来自 Tarzan
Gagnam Style-Psy
并且我可以循环遍历列表并说(抱歉混淆了语言):
for(line l : index.txt) {
String[] k = l.split('-');
\includesong{k[0]}{k[1]}
}
有什么好方法可以做到这一点吗?
编辑:我找到了一个名为解析线效果相当不错。尤其是与正则表达式结合使用时(为什么互联网上关于 \def\foo#1, #2 的信息这么少?)。
答案1
\documentclass{article}
\newread\sngs
\def\splitdash#1-#2\relax{%
\def\thissong{#1}%
\def\thissource{#2}%
}
\begin{document}
\def\zpar{\par}
\openin\sngs=songs.txt
\loop
\read\sngs to \tmp
\ifx\tmp\zpar\else
\expandafter\splitdash\tmp\relax
\input{\thissong}
\fi
\ifeof\sngs
\else
\repeat
\end{document}
歌曲.txt:
Thrift shop-macLemore
Two worlds, one family-from Tarzan
Gagnam Style-Psy
这将尝试输入三个标题(您可能希望规范化文件名,删除空格或其他内容)
! LaTeX Error: File `Thrift shop.tex' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: tex)
Enter file name:
! LaTeX Error: File `Two worlds, one family.tex' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: tex)
Enter file name:
! LaTeX Error: File `Gagnam Style.tex' not found.