TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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 Document Class or Package?

share|improve this question
I would imagine that a restaurant menu, being columnar in nature, would benefit from the multicol package. – Werner Dec 13 '11 at 0:03
Could you post a screenshot of the desired result? – cmhughes Dec 13 '11 at 0:16
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 0:20
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 1:15
up vote 92 down vote accepted

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.



% The page frame
\node at (0.5\paperwidth,0) {\wb{80}{34}{E}\rule[60pt]{.2\textwidth}{0.4pt}%
  \makebox[.6\textwidth]{\ \fontsize{24}{29}\selectfont\scshape La Abuela }}%
\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}} ;

% colorize text

% a tabular* for each food group

% to format each entry
  \sffamily#1 & #2}

% to format each subentry
  \hspace*{1em}\footnotesize #1}



\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} \\


\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} \\


\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} \\


And here's the result:

enter image description here

share|improve this answer
Hmm. My menu is to your menu as McDonalds is to Noma. (+1) – badroit Dec 13 '11 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 ? – Alain Matthes Dec 13 '11 at 6:48
+1 for the background package ! – Alain Matthes Dec 13 '11 at 6:51
Amazing code, Gonzalo! :) – Paulo Cereda Dec 13 '11 at 8:55
@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

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

\fontencoding{U}\fontfamily{zorna}\selectfont  #1}}

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
\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
% some colors


\newcommand*\Entry[2]{\zapff #1 &  \zapff #2}
% \MyCadre{#1 font  size ornement }
%         {#2 integer largeur = #2 * font size}
%         {#3 integer hauteur = #3 * font size}
\newcommand*\MyCadre[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);

  \center \fontsize{10}{10}\selectfont \zorna{y}


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

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


\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 €}\\


\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 €}\\


\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 €}\\


\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 €}\\


enter image description here

share|improve this answer
Really nice menu (both the layout and the food). – Gonzalo Medina Dec 13 '11 at 19:25
Fantastic! :) – Paulo Cereda Dec 14 '11 at 1:01

...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:



\title{Evening Menu} 
\address{Torquay}{Devon, England}
\extrainfo{Opening Hours: 07:00--00:00}
\quote{``If you don't like duck... then you're rather stuck!''}

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

\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

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

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.)

share|improve this answer
+1 I had exactly the same thought. Not to mention a great menu. – Alan Munn Dec 13 '11 at 1:49
...and very reasonably priced I thought! – badroit Dec 13 '11 at 1:56
Great idea! And you also made me smile with the Fawlty Towers reference. ¿Qué? :) – Paulo Cereda Dec 13 '11 at 8:58

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.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.