为了更好地组织我的食谱,我希望将它们存储在数据库中,而不是到处散落着大量的书。有许多程序可以通过为 mealmaster 和/或 rezkonv 格式提供 GUI 来实现这一点(后者在德国非常流行,两种格式非常相似)。但是,在某些时候,我想根据这些食谱创建小书,例如作为送给朋友的礼物。这个问题针对的是如何以自动化的方式正确地做到这一点。
作为第一步,我想讨论一下以下哪个选项是最合理的。
- 使用 LaTeX 解析完整的 rezkonv“数据库”(单个文件中包含许多配方)
- 使用 LaTeX 一次解析一个 rezkonv 配方(每个配方是一个文件)
- 使用外部工具(例如用 Python 编写)创建合适的 LaTeX 文件,然后可以通过包含生成的文件进行进一步处理。
对我来说,最简单的方法是选择选项 (2)。一本书不太可能包含超过 150 种 (?) 食谱,我认为如果每个食谱都在一个文件中,处理这些食谱会更容易 (例如,添加和删除食谱要容易得多)。
因此我们假设以下结构:
- main.tex 包含创建食谱所需的一切
- recipe1.rk 包含一个食谱
- recipe2.rk 包含另一个食谱
不,问题是如何正确解析这些文件并允许在 LaTeX 代码中进行“后处理”(例如,重新排列内容、将读取的数据转换为表格、应用“样式”等)。理想情况下,人们能够解析数据,根据特定文件格式(rezkonv)的标识符提取数据,最后根据需要重新排列/“打印”/突出显示数据,可能通过在配方中添加原始文件格式不支持的更多内容(例如,引用其他匹配良好的配方)。当然,添加照片等应该是可能的(简单地解析文件并将它们用作单个页面不是一个选项,需要更“高级”的方法)。
可能的实现可能是这样的:
...
\readrecipe{recipe1.rk}
\setstyle{soups}
\setheading{Grandma's uber-soup}
\printkey{ingredients,recipe1.rk}
% preparation time not mentioned in recipe, but we would like to have it anyway
\subsection*{Preparation}
lorem ipsum
\printkey{instructions,recipe1.rk}
...
\subsection*{Best matches}
\ref{recipe:mostdeliciousbread}
...
\readrecipe{recipe2.rk}
\setstyle{salads}
...
而风格可能是这样的(Yiannis Lazarides 的帖子):精美的章节标题
到目前为止,我还没有用 LaTeX 进行过很多低级编程。这就是为什么我可能会选择选项 3。但是,我相信 LaTeX 也应该能够做到这一点。其他人可能也对此感兴趣。因此,我想寻求有关如何实现这一点的提示,或者获得(最佳情况下)可以扩展的概念验证代码。我愿意为好的答案花费一大笔赏金。
(首选 pdflatex 解决方案)
编辑:哦,好吧..这是一个例子:
========== 'Kalorio V4.03' (reg.) nach REZKONV
Titel: (2) Pellkartoffeln mit Kräuterquark und Schinken
Kategorien: Gemüse
Menge: 4 Personen
Zutaten:
1 kg Festkochende Kartoffeln
1/2 Bund Schnittlauch
1/2 Bund Glatte Petersilie
Etwas Frisches Basilikum zur Deko
1 Rote (ungarische) Spitzpaprika
1 Grüne (ungarische) Spitzpaprika
250 Gramm Quark mit 20% Fett
250 Gramm Quark mit 40% Fett
2 Schalotten
1 Essl. Kümmel
150 Gramm Saure Sahne (oder süfle Sahne)
Salz, Pfeffer
1 Prise Muskat
8 Scheiben Schinken, gekocht oder geräuchert
4 Tomaten
1 Stück Gurke
======================QUELLE======================
Christian Schill
Zubereitung:
Die Kartoffeln waschen und in der Schale in reichlich Wasser (1%
Salz) mit dem Kümmel ca. 20 Minuten garen.
[left out some text here]
Kartoffeln abgieflen, schälen und mit dem Kräuterquark und dem
Schinken anrichten.
Zubereitung: etwa 30 Minuten.
:Stichworte : Kartoffeln
:Stichworte : Gemüse
:Fingerprint : 30950473,-1032086772,Kalorio
=====
答案1
好的,这是今天有趣项目的成果:
rz2tex file
以下脚本的调用bash
(例如使用cygwin
on Windows
)
#!/bin/bash
#
rzfile="$1"
typeset -i start
typeset -i ende
#
rztitel=`grep -e 'Titel:' "$rzfile" | cut -d':' -f2 | sed -e 's/^ *//'`
rzkat=`grep -e 'Kategorien:' "$rzfile" | cut -d':' -f2 | sed -e 's/^ *//'`
rzmenge=`grep -e 'Menge:' "$rzfile" | cut -d':' -f2 | sed -e 's/^ *//'`
rzstichwort=` grep -e ':Stichwort' "$rzfile" | cut -d':' -f3 | sed -e 's/^ *//' | tr '\n' ',' | sed -e 's/,$//' -e 's/,/, /'`
start=`grep -ne 'Zutaten:' "$rzfile" | cut -d':' -f1`
ende=`grep -ne '==QUELLE==' "$rzfile" | cut -d':' -f1`
((ende++))
rzquelle=`sed -ne "$ende p" "$rzfile" | sed -e 's/^ *//'`
#
((start++))
((ende--))
((ende--))
sed -ne "$start,$ende p" "$rzfile" | sed -e '/^\s*$/d' >zutaten.txt
start=`grep -ne 'Zubereitung:' "$rzfile" | head -n 1 | cut -d':' -f1`
ende=`grep -ne ':Stichworte' "$rzfile" | head -n 1 | cut -d':' -f1`
((start++))
((ende--))
sed -ne "$start,$ende p" "$rzfile" >zubereitung.txt
#
exec 1> rezept.tex
echo "\documentclass[fontsize=9pt,DIV=12]{scrartcl}"
echo "\usepackage[utf8x]{inputenc}"
echo "\usepackage{multicol}"
echo "\setlength{\parindent}{0pt}"
echo "\begin{document}"
echo "\section*{$rztitel}"
echo "Kategorien: $rzkat\\\\"
echo "Menge: $rzmenge\\\\"
echo "\subsection*{Zutaten:}"
echo "\begin{multicols}{2}"
echo "\begin{itemize}"
while read line
do
rzvalue=`echo $line | cut -d ' ' -f1`
rzunit=`echo $line | cut -d ' ' -f2`
rzzutat=`echo $line | cut -d ' ' -f3-`
echo "\item $rzvalue $rzunit $rzzutat"
done < zutaten.txt
echo "\end{itemize}"
echo "\end{multicols}"
echo "\subsection*{Zubereitung:}"
cat zubereitung.txt
echo "\subsection*{Stichworte: $rzstichwort}"
echo "\subsection*{Quelle: $rzquelle}"
echo "\end{document}"
产生此tex
来源:
\documentclass[fontsize=9pt,DIV=12]{scrartcl}
\usepackage[utf8x]{inputenc}
\usepackage{multicol}
\setlength{\parindent}{0pt}
\begin{document}
\section*{(2) Pellkartoffeln mit Kräuterquark und Schinken}
Kategorien: Gemüse\\
Menge: 4 Personen\\
\subsection*{Zutaten:}
\begin{multicols}{2}
\begin{itemize}
\item 1 kg Festkochende Kartoffeln
\item 1/2 Bund Schnittlauch
\item 1/2 Bund Glatte Petersilie
\item Etwas Frisches Basilikum zur Deko
\item 1 Rote (ungarische) Spitzpaprika
\item 1 Grüne (ungarische) Spitzpaprika
\item 250 Gramm Quark mit 20% Fett
\item 250 Gramm Quark mit 40% Fett
\item 2 Schalotten
\item 1 Essl. Kümmel
\item 150 Gramm Saure Sahne (oder süße Sahne)
\item Salz, Pfeffer
\item 1 Prise Muskat
\item 8 Scheiben Schinken, gekocht oder geräuchert
\item 4 Tomaten
\item 1 Stück Gurke
\end{itemize}
\end{multicols}
\subsection*{Zubereitung:}
Die Kartoffeln waschen und in der Schale in reichlich Wasser (1%
Salz) mit dem Kümmel ca. 20 Minuten garen.
[left out some text here]
Kartoffeln abgießen, schälen und mit dem Kräuterquark und dem
Schinken anrichten.
Zubereitung: etwa 30 Minuten.
\subsection*{Stichworte: Kartoffeln, Gemüse}
\subsection*{Quelle: Christian Schill}
\end{document}
您当然可以将shell
变量映射到其他 LaTeX 结构,例如在专用的配方类中!