将食谱(rezkonv、mealmaster)转换为 LaTeX 代码

将食谱(rezkonv、mealmaster)转换为 LaTeX 代码

为了更好地组织我的食谱,我希望将它们存储在数据库中,而不是到处散落着大量的书。有许多程序可以通过为 mealmaster 和/或 rezkonv 格式提供 GUI 来实现这一点(后者在德国非常流行,两种格式非常相似)。但是,在某些时候,我想根据这些食谱创建小书,例如作为送给朋友的礼物。这个问题针对的是如何以自动化的方式正确地做到这一点。

作为第一步,我想讨论一下以下哪个选项是最合理的。

  1. 使用 LaTeX 解析完整的 rezkonv“数据库”(单个文件中包含许多配方)
  2. 使用 LaTeX 一次解析一个 rezkonv 配方(每个配方是一个文件)
  3. 使用外部工具(例如用 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(例如使用cygwinon 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}

enter image description here

您当然可以将shell变量映射到其他 LaTeX 结构,例如在专用的配方类中!

相关内容