![我可以获得仅包含指定群体诗歌的诗歌列表吗?](https://linux22.com/image/448513/%E6%88%91%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%BE%97%E4%BB%85%E5%8C%85%E5%90%AB%E6%8C%87%E5%AE%9A%E7%BE%A4%E4%BD%93%E8%AF%97%E6%AD%8C%E7%9A%84%E8%AF%97%E6%AD%8C%E5%88%97%E8%A1%A8%E5%90%97%EF%BC%9F.png)
在我正在编撰的诗集中,诗歌没有经过排序(而且由于是按照手写笔记编撰的,所以无法更改)。我想创建几个组,例如战争、爱情、生日、杂项,然后为每个组创建一个诗歌列表。
该包指定了一种向 LoP 添加组的方法,但这似乎主要用于按组排列诗歌的情况。即首先是所有战争诗,然后是所有爱情诗,等等。
那么,有没有办法创建标签然后打印自定义诗歌列表?
下面是 MWE。我没有实现任何分组,老实说,我真的不明白如何使用该包的这一部分。我非常感谢这个论坛的帮助!
已更新!我已将 MWE 更改为我想要实现的样子——也就是说,末尾的“打油诗”和“歌曲”部分现在是手动编写的,但我希望有一种自动实现它们的方法。请原谅重复点的丑陋,我不想通过使用适当的表格或类似的东西来扩大 MWE。
\documentclass[]{article}
\usepackage{poetry}\poemlinenumsfalse
\begin{document}
\poemfirstline{In a cavern} % Tag: Song
\addtolop{Clementine}
\section*{Clementine}\vspace{-0.5cm}
\begin{poem}
In a cavern\\
In a canyon\\-
\end{poem}
\poemfirstline{Imagine there's no heaven} % Tag: Song
\addtolop{Imagine}
\section*{Imagine}\vspace{-0.5cm}
\begin{poem}
Imagine there's no heaven\\
It's easy if you try\\-
\end{poem}
\poemfirstline{There once was a man from Nantucket} % Tag: Limerick
\addtolop{The man from Nantucket}
\section*{The man from Nantucket}\vspace{-0.5cm}
\begin{poem}
There once was a man from Nantucket\\
Who kept all his cash in a bucket\\-
\end{poem}
\poemfirstline{Is this the real life?} % Tag: Song
\addtolop{Bohemian Rhapsody}
\section*{Bohemian Rhapsody}\vspace{-0.5cm}
\begin{poem}
Is this the real live?\\
Is this just fantasy?\\-
\end{poem}
\poemfirstline{There once was a lady from Riga} % Tag: Limerick
\addtolop{The tiger ride}
\section*{The tiger ride}\vspace{-0.5cm}
\begin{poem}
There once was a lady from Riga\\
Who went for a ride on a tiger\\-
\end{poem}
\section*{Index}
\listofpoems
\section*{Limericks}
The man from Nantucket..................1\\
The tiger ride.....................................1
\section*{Songs}
Clementine ...................................1\\
Imagine........................................1\\
Bohemian Rhapsody.......................1
\printiofl
\end{document}
答案1
这是使用 Latex 实现您想法的一种方法。关键是要认识到您所说的“标记“ 是 ”索引“在 Latex 中。实际上,您需要多个索引。让我们逐个主题地进行。
为了对你的诗歌进行分类、提取、管理等,我仍然希望将你重定向到我的第一个答案https://tex.stackexchange.com/a/640414/245790。事实上,你可以让数据库生成所需的代码(参见下面的\newcommand)。
% .. make sure:
% .... do a first compile
% .... run from command line in same directory:
% ...... splitindex <filename_without_extension>
% .... do a second compile
\documentclass[12pt]{article}
\usepackage{verse} % <<< package poetry didn't work well
% --- "tagging", i.e. creating multiple indexes
\usepackage{splitidx}
\makeindex
% --- generic indexes --------------
\newindex[Index of First Lines]{frst}
\newindex[Index of Titles]{ttl}
% --- "tagging" --------------------
\newindex[Index of Songs]{sng}
\newindex[Index of Limericks]{lim}
% --- making editing easier --------
\newcommand\pom[4]{ % title / tag / firstLine / verses
\begin{verse}
\poemtitle{#1}
\sindex[ttl]{#1}
\sindex[#2]{#1}
\sindex[frst]{#3}
#4
\end{verse}
}
% --- content -----------
\begin{document}
% how you would do it manually
\begin{verse}
\poemtitle{Clementine}
\sindex[ttl]{Clementine}
\sindex[sng]{Clementine}
\sindex[frst]{In a canyon}
In a canyon\\
\end{verse}
\pom{Imagine}{sng}{Imagine there's no heaven}{
Imagine there's no heaven\\
It's easy if you try
}
\pom{The man from Nantucket}{lim}{There once was a man from Nantucket}{
There once was a man from Nantucket\\
Who kept all his cash in a bucket
}
\printindex*
\end{document}
代码顶部的注释说明了工作流程您必须遵循:编译、运行 splitindex、再次重新编译。这取代了使用 makeindex(shell 命令)提取和生成所有必需索引文件的常规工作流程。
包裹诗歌不幸的是,这似乎会导致其他软件包出现问题。所以我决定用软件包替换它诗,它为您提供了许多设计和呈现诗歌的选项。请参阅https://mirror.marwan.ma/ctan/macros/latex/contrib/verse/verse.pdf更多细节。
接下来,有几种方法可以创建多个索引。例如,关于 Latex 的 wikibooks 仍然提到 multind,但建议使用更新的包,如 splitidx。请参阅https://mirror.marwan.ma/ctan/macros/latex/contrib/splitindex/splitidx.pdf更多细节。
使用 splitindex,您可以创建 poetry 包提供的条目以及附加的“标签“。要扩展此功能,请在序言中创建一个 \newindex[headline]{tag} 语句,并在有用的诗句中放入 \sindex[tag]{text}。
正如您将在内容部分看到的,创建所需的内容可能很麻烦、无聊且容易出错。作为捷径我定义了自己的新命令 \pom,它接受 4 个参数并将它们放在应在的位置。
在内容部分,我使用“Clementine”来展示你需要创建的内容手动。如果你想这样做的话,这样做是可行的(我缩短了诗句以减少代码大小,将注意力集中在相关部分)。
下一个两个 \pom 语句将扩展为与手动创建的代码完全相同的代码。
记住编辑完成后进行编译、拆分索引并重新编译。
最后 splitindex 的\打印索引* 显示上面的所有索引。默认情况下,即您可以修改两者,它会放置分页符并使用两列布局(这就是为什么 Nantucket 条目有点奇怪)。因此,您会发现“首行索引”、“标题索引”、“歌曲索引”和“打油诗索引”,就像序言中指定的一样。请参阅文档以进一步配置 \printindex。
就是这样。以下是屏幕截图预览前 1 1/4 页。
答案2
在看过诗歌手册后,我同意它可能不支持类别和提取。
然而,这是数据库的典型任务。虽然您可以在 Latex 中引入数据库函数,但在外部数据库(例如 Access)中执行此操作可能更容易。虽然您也可以使用电子表格来执行此操作,但对于较大的数据集,您很快就会想要转向数据库:它们就是为此目的而创建的。
有多种方法可以做到这一点...这里有一个结合 Access 和 Latex 的示例,在单独的工作流程中。
你基本上需要两样东西:
- 一个表格,您可以在其中输入您的诗歌(作为任意长度的文本),以及您喜欢和需要的各种类别和附加内容,例如更多排序标准
- 查询,根据您的搜索条件提取诗歌。
“诗歌”只是 Latex 源中 \poemfirstline 和 \end{poem} 之间的文本片段。
一旦您拥有它,只存储您需要的内容(即诗歌字段)作为 1 个大文本文件,您可以将其 c&p 放入您的文档中或保存它并 \include 它。
以下是一些最基本形式的屏幕截图,可供进一步参考。
因此,您的代码将会折叠成如下所示的形式,假设您的根目录中有一个文件extracted_poems.tex:
\documentclass[]{article}
\usepackage{poetry}\poemlinenumsfalse
\begin{document}
\include{extracted_poems} % create by external DB query
\section*{Index}
\listofpoems
\printiofl
\end{document}