我可以获得仅包含指定群体诗歌的诗歌列表吗?

我可以获得仅包含指定群体诗歌的诗歌列表吗?

在我正在编撰的诗集中,诗歌没有经过排序(而且由于是按照手写笔记编撰的,所以无法更改)。我想创建几个组,例如战争、爱情、生日、杂项,然后为每个组创建一个诗歌列表。

该包指定了一种向 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 它。

以下是一些最基本形式的屏幕截图,可供进一步参考。

表格,保存所有 Latex 编码的诗歌: DB 和一些 Latex 条目

类别“A”的查询示例: 查询类别“A”

结果,以 ASCII 格式导出/存储: 结果:只有“A”诗

因此,您的代码将会折叠成如下所示的形式,假设您的根目录中有一个文件extracted_poems.tex:

\documentclass[]{article}
\usepackage{poetry}\poemlinenumsfalse

\begin{document}
  \include{extracted_poems} % create by external DB query

  \section*{Index}
  \listofpoems

  \printiofl

\end{document}

相关内容