71

I'd like to typeset a restaurant menu. What would be a good document class or package to use? I'm hoping for an answer similar to this thread: Survey or questionnaire document class or package?

  • 3
    I would imagine that a restaurant menu, being columnar in nature, would benefit from the multicol package. – Werner Dec 13 '11 at 00:03
  • 3
    Could you post a screenshot of the desired result? – cmhughes Dec 13 '11 at 00:16
  • 2
    Welcome to TeX.sx! Generally, this might actually be a task for which LaTeX will work, but might not be the best choice. LaTeX's strength is typesetting paragraphs (and formulas). LaTeX makes a lot of choices for you because it knows what's good for something like a scientific paper. In a restaurant menu, on the other hand, you'll probably determine pretty precisely what goes on which page etc. Nonetheless, you'll hopefully get some good recommendations here because after all, typesetting a menu in LaTeX will be fun :) – doncherry Dec 13 '11 at 00:20
  • 1
    It's unlikely that anyone has made a class already. A lot depends on how often the items will change, but I would probably use just article class plus the following packages: titlesec, (to make logical divisions of the menu) enumitem (to make lists of items), geometry (for page layout). There's lots of semantics to a menu, so LaTeX is actually quite well suited, since you could define markup for all of the logical parts of the menu for consistency (e.g. dish name, description, price etc.) I would also use XeLaTeX or LuaLaTeX to get access to a wider array of fonts. – Alan Munn Dec 13 '11 at 01:15

5 Answers5

101

I don't think there is a predefined class for menus, but you can create you own format using any of the existing document classes; after all, the menu is a unique feature that identifies a restaurant.

Just as an idea (which admits many improvements), in the following example I used the web-O-mints fonts and the background package to create a frame that will be placed in all the pages of the menu. A simple tabular* environment was used to format each food group.

\documentclass[12pt]{article}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[textwidth=12cm,centering]{geometry}
\usepackage[x11names]{xcolor}
\usepackage{background}

\newcommand*\wb[3]{%
  {\fontsize{#1}{#2}\usefont{U}{webo}{xl}{n}#3}}

% The page frame
\SetBgColor{Goldenrod3}
\SetBgAngle{0}
\SetBgScale{1}
\SetBgOpacity{1}
\SetBgContents{%
\begin{tikzpicture}
\node at (0.5\paperwidth,0) {\wb{80}{34}{E}\rule[60pt]{.2\textwidth}{0.4pt}%
  \raisebox{55pt}{%
  \makebox[.6\textwidth]{\ \fontsize{24}{29}\selectfont\scshape La Abuela }}%
  \rule[60pt]{.2\textwidth}{0.4pt}\wb{80}{34}{F}};
\node at (2,-0.5\textheight) {\rule{0.4pt}{.8\textheight}};
\node at (19.5,-0.5\textheight) {\rule{0.4pt}{.8\textheight}};
\node at (0.5\paperwidth,-\textheight) {\wb{80}{34}{G}\rule[-10pt]{\textwidth}{0.4pt}\wb{80}{34}{H}} ;
\end{tikzpicture}%
}

% colorize text
\newcommand*\ColText[1]{\textcolor{Goldenrod3}{#1}}

% a tabular* for each food group
\newenvironment{Group}[1]
  {\noindent\begin{tabular*}{\textwidth}{@{}p{.8\linewidth}@{\extracolsep{\fill}}r@{}}
    {\fontsize{24}{29}\selectfont\ColText{#1}}\\[0.8em]}
  {\end{tabular*}}

% to format each entry
\newcommand*\Entry[2]{%
  \sffamily#1 & #2}

% to format each subentry
\newcommand*\Expl[1]{%
  \hspace*{1em}\footnotesize #1}

\pagestyle{empty}

\begin{document}

\begin{Group}{Entradas}
\Entry{Calamares de campo}{9.00} \\
\Expl{Aros muy finos de cebolla y pimiento verde, a nuestro estilo} \\
\Entry{Berenjenas a la cordobesa}{9.95} \\
\Expl{Finas lonchas de berenjenas rebozadas a la cordobesa acompañadas de salsa de miel} \\
\Entry{Huevos estrellados con chistorra}{10.50} \\
\Entry{Cecina de León}{10.70} \\
\Expl{Lonchas muy finas con aceite virgen extra y pimienta recién molida} \\
\end{Group}

\vfill

\begin{Group}{Ensaladas}
\Entry{Ensalada <<La Abuela>>}{9.20} \\ 
\Expl{Piña, manzana y pimiento rojo, con pollo recién asado y una sabrosa y ligera mayonesa} \\
\Entry{Ensalada mediterránea}{8.90} \\ 
\Expl{Lechuga, tomate, cebolla, atún, huevo duro. espárragos y aceitunas} \\ 
\Entry{Salpicón de pollo}{9.50} \\ 
\Expl{Pollo en tiras recién asado con manzana sobre lechuga en juliana, zanahoria rallada y rodajas de tomate, aliñado con una sorprendente y suave salsa de mostaza y yogurt} \\
\Entry{Ensalada de cabra}{10.70} \\ 
\Expl{Queso de cabra templado con mermelada de tomate sobre una variedad de lechugas frescas} \\
\end{Group}

\vfill

\begin{Group}{Carnes}
\Entry{Carpaccio de buey}{13.50} \\
\Expl{Acompañado de lascas de parmesano y rucuta} \\
\Entry{Parrillada ibérica}{16.70} \\
\Expl{Pluma, presa y secreto} \\
\Entry{Patatas con guarnición para acompañar}{3.75} \\
\Expl{Fritas caseras} \\
\Entry{Patatas con guarnición para acompañar}{3.50} \\
\Expl{Patatas paja} \\
\end{Group}

\end{document}

And here's the result:

enter image description here

Moriambar
  • 11,466
Gonzalo Medina
  • 505,128
  • 18
    Hmm. My menu is to your menu as McDonalds is to Noma. (+1) – badroit Dec 13 '11 at 04:26
  • I've a problem to get the web-O-mints fonts. I can't download the font. Is there another place to get it ? – Alain Matthes Dec 13 '11 at 06:48
  • 3
    Amazing code, Gonzalo! :) – Paulo Cereda Dec 13 '11 at 08:55
  • @Altermundus: what problems do you have downloading the font? The only place I know to get is on CTAN. – Gonzalo Medina Dec 13 '11 at 14:16
  • @GonzaloMedina I try to download the font from the site : http://www.galapagosdesign.com/original/webomints.htm with no success but I realized that the package on CTAN contained the font. No problem now and good work with this nice menu. – Alain Matthes Dec 13 '11 at 14:43
  • @Altermundus: I'm glad to hear that now the problem is solved. Thank you for your kind words. – Gonzalo Medina Dec 13 '11 at 14:57
  • I'm not that familiar with webomints. Perhaps some of the psvectorian ornaments could also add some variation. Great, clean menu! – Werner Dec 13 '11 at 18:23
  • @Werner: I didn't know those ornaments; they look great! Thanks for the link and for your kind words. – Gonzalo Medina Dec 13 '11 at 19:57
  • Looks great! However the PDF looks really bad and "pixely" when zoomed in, also its very hard to modify the page size because everything else then falls out of place. Any way to get this done with vector fonts and graphics instead of pixel fonts? – Konrad Höffner Apr 22 '14 at 20:29
  • 2
    @kirdie Thnaks for your kind words. I guess I can improve the answer to fix the issue with page sizes, if I have the time :) I can also add a version with vector decorations. In a few days I'll make the edit. – Gonzalo Medina Apr 22 '14 at 20:35
  • @Gonzalo Medina This would be very much appreciated! – Konrad Höffner Apr 23 '14 at 10:26
  • @GonzaloMedina Fortunately, the quality issue did not occur in print where it was sharp as can be (at least the normal font but for the headings it wasnt very visible because of the yellowish paper) despite the bad quality of the on screen pdf (with several readers). Why is there this mismatch between screen and laser print quality (never had this before)? – Konrad Höffner Apr 28 '14 at 09:38
  • This snippet doesn't even build. It would be appreciable if people would post something correct.. – Pa_ Jan 09 '17 at 23:02
  • latexmk gives "Argument of \Entry has an extra }", when trying to build this menu. Would appreciate any assistance. Many thanks! – hd1 Nov 10 '19 at 23:12
  • I don't get the same result.... the victorian ornaments are missing!! Any clues? – Tolaso Feb 29 '20 at 13:48
44

It's impossible not to give a menu of a restaurant in Paris but I need to justify a new version for a menu. I like the menu of Gonzalo, so I try to create a variant but with tikz and tabular (I do not know yet background).

I keep some part of the tabular (great idea here) and I use a macro to build a box around the menu. The macro is named \MyCadre first argument =size of the ornement font here Orna 4 at 60 pt, then two integers. The width and the height of the cadre are multiple of first argument.

The cadre is placed at current page.center and I use a node to place the menu at the center.

zorna.sty is to use orna 4 font. Orna 4
web-O-mintsis fine but I would like another example. You can find useful tools font casseaux.

%Filename: zorna.sty 
%Created by: TTF2TEX.perl, Sam  5 jui 2010 22:40:14 CEST

\NeedsTeXFormat{LaTeX2e}%}
\ProvidesPackage{zorna}%
%
\newcommand*{\zorna}[1]{{%
\fontencoding{U}\fontfamily{zorna}\selectfont  #1}}
\endinput

The main font for menu is Zapfinobut you can change it

The main code is compiled with xelatex. Real menu from "la Tour d'Argent" (PARIS) with real prices !

%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode
\documentclass{scrartcl}
\usepackage[utf8x]{inputenc} 
\usepackage[dvipsnames]{xcolor}
\usepackage[textwidth=14cm,centering]{geometry}
\usepackage{tikz,fullpage}
\usepackage{fontspec}   
\setmainfont{Zapfino}
\usepackage{zorna} %http://www.urbanfonts.com/dingbats/Orna_4.htm 
% and http://jacques-andre.fr/fontex/casseaux.pdf 
\font\zapf ="Zapfino"  at 14pt 
\font\zapff="Zapfino"  at 8pt
\usepackage[french]{babel}  
% some colors
\definecolor{fondpaille}{cmyk}{0,0,0.1,0}
\newcommand*\ColText[1]{\textcolor{Maroon}{#1}}

\newenvironment{Group}[1]{%
\noindent
\begin{tabular*}{\textwidth}{@{}p{.9\linewidth}@{\extracolsep{\fill}}r@{}}{\zapf\ColText{#1}}\\[0.8em]}
{\end{tabular*}}

\newcommand*\Entry[2]{\zapff #1 &  \zapff #2}
\thispagestyle{empty}
% \MyCadre{#1 font  size ornement }
%         {#2 integer largeur = #2 * font size}
%         {#3 integer hauteur = #3 * font size}
\newcommand*\MyCadre[3] {%
  \newcommand{\sfc}{#1} 
  \newcommand{\wdc}{#2}
  \newcommand{\htc}{#3}
  \node at (.5*\sfc pt,.5*\sfc pt)  {%
                \fontsize{\sfc}{\sfc}\selectfont \zorna{c}};  
  \node at ({(\wdc-0.5)*\sfc pt},.5*\sfc pt) {%
                \fontsize{\sfc}{\sfc}\selectfont \zorna{d}};
  \node at (.5*\sfc pt,{(\htc-0.5)*\sfc pt}) {%
                \fontsize{\sfc}{\sfc}\selectfont \zorna{a}};  
  \node at ({(\wdc-0.5)*\sfc pt},{(\htc-0.5)*\sfc pt}){%
                \fontsize{\sfc}{\sfc}\selectfont \zorna{b}};
  \draw[line width=2pt,color=Maroon]%
   (0,0) rectangle coordinate (thecenter) (\wdc*\sfc pt,\htc*\sfc pt);
  }%

\newcommand{\Tiret}{%
 \par\medskip
  \center \fontsize{10}{10}\selectfont \zorna{y}
\medskip}

\begin{document} 
\pagecolor{fondpaille}
\color{Maroon}            

\begin{tikzpicture} [remember picture, overlay] % center the box in the page
\node at (current page.center){%
\begin{tikzpicture}
\MyCadre{60}{8}{12}%

\node[text width=13cm] at (thecenter){% 
        \begin{center}
                 LA TOUR D'ARGENT\\ PARIS  %http://www.latourdargent.com/
        \end{center}

\vspace{1cm}

\begin{Group}{Entr\'ees}
\Entry{ Bouquet de l\'egumes, sauce comme une \og C\'esar\fg}         {69 €}\\
\Entry{ Saint-Jacques en tartare, betteraves multicolores}            {71 €}\\
\Entry{ Quenelles de brochet \og Andr\'e Terrail\fg}                  {49 €}\\
\Entry{ Palette de choux aux grains de caviar}                       {135 €}\\
\Entry{ Caviar \og Imp\'erial de Sologne\fg, blinis et condiments}   {210 €}\\
\end{Group}

\Tiret

\begin{Group}{Poissons}
\Entry{ Tron\c on de sole \og des Tournelles\fg }                     {81 €}\\
\Entry{ Saint-Jacques dor\'ees, poireaux au jus de coques}            {82 €}\\
\Entry{ Queue de lotte piqu\'ee \`a la truffe et l\'egumes racines}   {84 €}\\
\end{Group}

\Tiret   

\begin{Group}{Canetons}
\Entry{ Caneton Marco Polo sabl\'e au poivre de Sichuan}             {140 €}\\
\Entry{ Caneton \og Tour d'Argent\fg, pommes souffl\'ees}            {140 €}\\
\Entry{ Caneton \`a l'orange, carotte aux agrumes et pain d'\'epices}{140 €}\\
\end{Group}

\Tiret 

\begin{Group}{Desserts}
\Entry{ Variation chocolat orange, cr\'emeux pain d'\'epices}         {24 €}\\
\Entry{ Biscuit marmelade citron, glace thym citron}                  {24 €}\\
\Entry{ Duo poire r\'eglisse, sorbet poire}                           {24 €}\\
\end{Group}};
\end{tikzpicture}
}; 
\end{tikzpicture}  

\end{document}

enter image description here

Moriambar
  • 11,466
Alain Matthes
  • 95,075
  • 2
    Really nice menu (both the layout and the food). – Gonzalo Medina Dec 13 '11 at 19:25
  • 1
    Note that in order to use this answer, it's not sufficient to just copy paste the .sty file, you also need to figure out how the ttftotex program work (I don't know French) and use it to install the font. Alternatively, if you have XeLaTeX/LuaLaTeX you can use fontspec: https://tex.stackexchange.com/a/516042/250119 – user202729 Feb 24 '24 at 15:13
37

...just thinking that Menus and Resumés are similar in format, and templates for the latter are two-a-penny.

For example, with a little lateral thinking, you could try using moderncv. Using a pruned version of the template in the package, you could do something like:

\documentclass[11pt,a4paper]{moderncv}

\moderncvtheme[orange]{casual}                  
\usepackage[utf8]{inputenc}                

\firstname{Fawlty}
\familyname{Towers}
\title{Evening Menu} 
\address{Torquay}{Devon, England}
\phone{555-9000}
\extrainfo{Opening Hours: 07:00--00:00}
\photo[64pt]{picture}
\quote{``If you don't like duck... then you're rather stuck!''}
\begin{document}
\maketitle

\section{To Start}
\cventry{\textsterling7.50}{Waldorf Salad}{A salad of unknown composition}{}{}{}  % arguments 3 to 6 can be left empty

\section{Mains}
\cventry{\textsterling9.50}{Duck a l'Orange}{Duck with orange}{}{}{} % arguments 3 to 6 can be left empty
\cventry{\textsterling9.50}{Duck with Cherries}{Duck with cherries}{}{}{} % arguments 3 to 6 can be left empty
\cventry{\textsterling9.50}{Duck Surprise}{Duck without orange or cherries}{}{}{} % arguments 3 to 6 can be left empty

\section{Desserts}
\cventry{\textsterling5.50}{Bombe Surprise}{Does not contain duck}{}{}{} % arguments 3 to 6 can be left empty
\end{document}

enter image description here

...anyways, variations on a theme... you get the idea.

Of course, any TeX geek will spot it a mile away. (And will be suitably impressed.)

badroit
  • 7,557
4

You could use beamerposter package. A menu can be thought of as a small poster, can't it? Then, in each block you can use two columns one for the dishes list and one for the prices.

This package will provide you with great flexibility.

Dror
  • 22,613
0

I took Gonzalo Medina's answer, obtained a version that would compile, and put it here, the LaTeX used to build it is below:

\documentclass[12pt]{article}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ulem}
\usepackage[textwidth=12cm,centering]{geometry}
\usepackage[x11names]{xcolor}
\usepackage{background}

\newcommand*\wb[3]{%
  {\fontsize{#1}{#2}\usefont{U}{webo}{xl}{n}#3}}

% The page frame
\SetBgColor{Goldenrod3}
\SetBgAngle{0}
\SetBgScale{1}
\SetBgOpacity{1}
\SetBgContents{%
\begin{tikzpicture}
\node at (0.5\paperwidth,0) {\wb{80}{34}{A}\rule[60pt]{.2\textwidth}{0.4pt}%
  \raisebox{55pt}{%
  \makebox[.6\textwidth]{\ \fontsize{24}{29}\selectfont\scshape Thanksgving, 2019}}%
  \rule[60pt]{.2\textwidth}{0.4pt}\wb{80}{34}{R}};
\node at (2,-0.5\textheight) {\rule{0.4pt}{.8\textheight}};
\node at (19.5,-0.5\textheight) {\rule{0.4pt}{.8\textheight}};
\node at (0.5\paperwidth,-\textheight) {\wb{80}{34}{H}\rule[-10pt]{\textwidth}{0.4pt}\wb{80}{34}{M}} ;
\end{tikzpicture}%
}

% colorize text
\newcommand*\ColText[1]{\textcolor{Goldenrod3}{#1}}

\pagestyle{empty}

\begin{document}

\huge{Thanksgiving Menu}
\begin{center}
    \large{\uline{Chile-and-Citrus–Rubbed Chicken with Potatoes}} \\
\hspace*{1em}\footnotesize{Ingredients: chicken, Kosher salt, coriander seeds, fennel seeds, orange, lemon, olive oil, red pepper flakes, smoked paprika, dry white wine, tomato paste, crushed garlic cloves, potatos, parsley} \\
    \large{\uline{Roasted and Marinated Root Vegetables}} \\
\hspace*{1em}\footnotesize{Ingredients: beets, sweet potatoes, turnips, bran oil, grapeseed oil, olive oil, kosher salt, sugar, honey, black pepper, thyme, rosemary, orange, lemon, vinegar, olive oil, red chile flakes} \\
    \large{\uline{Mashed Cauliflower}} \\
\hspace*{1em}\footnotesize{Ingredients: riced white cauliflower, butter, water, kosher salt} 
    \large{\uline{Farmhouse Herbed Stuffing}} \\
\hspace*{1em}\footnotesize{Ingredients: Unsalted butter, onion, celery, bread stuffing cubes, parsely, celery salt, sage, rosemary, thyme, salt, black pepper, turkey stock} \\
    \large{\uline{Haricots Verts with Herb Butter}} \\
\hspace*{1em}\footnotesize{Ingredients: Unsalted butter, shallots, parsely, tarragon, lemon zest, lemon juice, haricots verts} \\
    \large{\uline{Autumn Kale Salad}} \\
\hspace*{1em}\footnotesize{Ingredients: Garlic, Olive Oil, seedless Squash, Kosher salt, black pepper, apple cider vinegar, lemon juice, honey, cayenne pepper, hot paprika, lacinato kale, golden raisins, hazelnuts, almonds, parmesan cheese} \\
    \large{\uline{Cranberry and Tart-Cherry Compote}} \\
\hspace*{1em}\footnotesize{Ingredients: Lime, Cranberry juice cocktail, cranberries, cherries, cinammon, allspice, currant jelly, kosher salt} \\
    \large{\uline{Thanksgiving Sangria}} \\
\hspace*{1em}\footnotesize{Ingredients: Pomegranate Juice, cinammon, allspice, ginger, red wine, pear, pomegranate seeds, spiced rum, pear cider, apple sparkling cider} \\
    \large{\uline{Salted Caramel Apple Pie}} \\
\hspace*{1em}\footnotesize{Ingredients: Flour, Flaky Butter pie dough, Baking Apples, Granulated Sugar, Lemon Juice, Unsalted Butter, heavy cream, Demerara sugar, Angostura bitters, nutmeg, allspice, cinnamon, kosher salt, black pepper, sea salt, egg} \\
    \large{\uline{Cranberry Walnut Tart}} \\
\hspace*{1em}\footnotesize{Ingredients: Sweet pastry dough, eggs, dark brown sugar, light corn syrup, unsalted butter, salt, vanilla, cranberries, walnuts} \\
    \large{\uline{Honey Cornbread Muffins}} \\
\hspace*{1em}\footnotesize{Ingredients: Yellow Cornmeal, all-purpose flour, baking powder, granulated sugar, salt, whole milk, eggs, butter, honey} \\
\end{center}

\end{document}
hd1
  • 105