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?

4
  • 3
    I would imagine that a restaurant menu, being columnar in nature, would benefit from the multicol package.
    – Werner
    Commented Dec 13, 2011 at 0:03
  • 3
    Could you post a screenshot of the desired result?
    – cmhughes
    Commented Dec 13, 2011 at 0: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
    Commented Dec 13, 2011 at 0: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
    Commented Dec 13, 2011 at 1:15

5 Answers 5

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

15
  • 18
    Hmm. My menu is to your menu as McDonalds is to Noma. (+1)
    – badroit
    Commented Dec 13, 2011 at 4: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 ? Commented Dec 13, 2011 at 6:48
  • 3
    Amazing code, Gonzalo! :) Commented Dec 13, 2011 at 8:55
  • @Altermundus: what problems do you have downloading the font? The only place I know to get is on CTAN. Commented Dec 13, 2011 at 14:16
  • 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. Commented Apr 22, 2014 at 20:35
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

2
  • 2
    Really nice menu (both the layout and the food). Commented Dec 13, 2011 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: tex.stackexchange.com/a/516042/250119
    – user202729
    Commented Feb 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.)

2
  • 1
    Just stumbled on this tonight. Shockingly impressed.
    – totera
    Commented Sep 1, 2020 at 22:37
  • @totera, well spotted! I wonder if it might (maybe) have been based on this answer. :)
    – badroit
    Commented Dec 19, 2020 at 19:28
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.

1
  • example please?
    – nilon
    Commented Jan 11, 2017 at 15:18
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}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .