私は自分が所属している学生の居場所のためにバーメニューを作成しようとしています。現在、私たちはコンピュータサイエンス、数学、物理学を勉強しているので、もちろんバーメニューやドリンクリストを作成するにはラテックスを使用する必要があります。ページの例を以下に示します。
ここで問題となるのは、メニュー作成のプロセスをいかに簡単にするかということです。現在、サイドキャプションを使用できるようにするために、「floatrow」を使用しています。実現したいのは、ドリンクレシピや画像を簡単に書き込む方法です。メニューにはこれらの機能が必要です。
- レシピは左揃えです(画像のように右揃えではありません)。
- 青色の間隔は、各辺に少なくとも 0.5 cm 必要です。
- 赤い間隔はできるだけ大きくする必要があります。
- 緑の間隔は小さくする必要がありますが、ゼロではありません。
- 画像の下のボックスにテキストを書き込む機能。
- 数字は垂直に揃える必要がある
上の画像のように =)\raggedright
テキストの を避けるために MWE を変更しようとすると、すべてのスペースが不一致になります。
floatrow パッケージを使用しましたが、どの回答でもこれを使用する必要はありません。
\documentclass[12pt,a4paper]{article}
\usepackage[landscape,
left=0.1cm,
right=1cm,
top=1cm,
bottom=0cm]{geometry}
\usepackage{microtype,lmodern,fixltx2e} % Småfikser og typografiske forbedringer
\usepackage{amsfonts,mathtools} % Matematikk.
\usepackage[utf8]{inputenc} % Norske symboler æ,ø,å
\usepackage[norsk]{babel} % Norsk innholdsfortegnelse, og overskrifter
\usepackage{caption,subcaption}
\usepackage{floatrow}
\captionsetup[subfigure]{font = large,labelformat=brace,format=hang,justification=rightlast}
\floatsetup[figure]{style=plain}
\floatsetup[subfigure]{heightadjust=all,framearound=all,capbesideposition={left,center},capbesidesep=none}
\newcommand\rightlast{\leftskip0ptplus1fil
\rightskip0ptplus-1fil\parfillskip0ptplus1fil}
\DeclareCaptionJustification{rightlast}{\rightlast}
\begin{document}
\centering
\thisfloatsetup{capposition=beside,capbesideposition={left,center},
capbesidewidth=5cm}
%
\section*{\LARGE $\mathbb{R}$ealfagskjelleren - Barkart - Side 1}
%
\vspace*{0.5cm}
%
\begin{figure}[H]
\ffigbox
{\begin{subfloatrow}
\fcapside[\FBwidth+2cm]{\caption*{%
\textbf{\Large Sure Føtter} \\
Cointreau: 2 cl \\
Jägermeister: 2 cl \\
Lime: 2 cl \\
Coca Cola:\phantom{ 2 cl} \\
\\
Pris: 35 kr}
}{\includegraphics[scale=0.33]{SureFotter.jpg}}
\fcapside[\FBwidth+2cm]{\caption*{%
\textbf{\Large Kvit Russer}\\
Vodka: 2 cl \\
Kahlua/Amarula: 2 cl \\
Fløte: 2 cl \\
\\
Pris: 35 kr}
}{\includegraphics[scale=0.125]{WhiteRussian.jpg}}
\fcapside[\FBwidth+2cm]{\caption*{
\textbf{\Large Crocodile}\\
Lys Rom: 2 cl \\
Midori: 2 cl \\
Lime:\phantom{ 2 cl} \\
Sprite:\phantom{ 2 cl} \\
\\
Pris: 35 kr}
}{\includegraphics[scale=0.33]{Crocodile2.jpg}}
\end{subfloatrow}
\renewlengthtocommand\settowidth\Mylen{100000\subfloatrowsep}\vskip\Mylen
\begin{subfloatrow}
\fcapside[\FBwidth+2cm]{{\caption*{
\textbf{\Large Silver Salute}\\
Vodka: 1 cl \\
Cointreau: 2 cl \\
Blå Bols: 3 cl \\
\\
Pris: 40 kr}
}}{\includegraphics[scale=0.85]{SilverSalute2.jpg}}
\fcapside[\FBwidth+2cm]{\caption*{
\textbf{\Large Majoren}\\
Captain Morgan: 2 cl \\
Jägermeister: 2 cl \\
Ingefærøl:\phantom{ 2 cl} \\
Sitron:\phantom{ 2 cl} \\
\\
Pris: 35 kr}
}{\includegraphics[scale=0.35]{Major3.jpg}}
\fcapside[\FBwidth+2cm]{\caption*{
\textbf{\Large EPIC} \\
Baccardi: 2 cl \\
Blå bols: 1 cl \\
Mickey Finn: 1 cl \\
Passoã: 1 cl \\
Sprite:\phantom{ 2 cl} \\
\\
Pris: 40 kr}
}{\includegraphics[scale=0.15]{EPIC3.jpg}\hspace*{10cm}}%
\end{subfloatrow}}
\end{figure}
\end{document}
前にも言ったように、floatrow パッケージを使用して一貫した間隔を取得する方法がわかりません。ただし、別のパッケージを使用してメニューを簡単に作成し、一貫した間隔を提供できる場合は、賛成です =) floatrow パッケージにはオプションが多すぎます。
使用された画像
答え1
ここに 1 つの可能性があります。画像は特定の場所に配置する必要のあるため、フローティング環境を使用しない方がよいと思います。ボックス (この場合はminipage
s) を使用して情報を配置する別のアプローチを提案します。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[norsk]{babel}
\usepackage[landscape,
left=1.5cm,
right=1cm,
top=3cm,
bottom=0cm]{geometry}
\usepackage{graphicx}
\usepackage{microtype,fixltx2e}
\usepackage{fourier}
\usepackage{tikz}
\usepackage{etoolbox}
\newtoggle{client}
\newsavebox\mybox
\newcommand\tikzmark[1]{%
\tikz[remember picture,overlay] \coordinate (#1);}
\colorlet{framecolor}{cyan!80!black}% color for frames (clients version)
\colorlet{ingrcolor}{orange!80!black}% color for frames around directions (bartenders version)
\setlength\parindent{0pt}
\newlength\framewd
\newlength\frameht
\newlength\legendwd
\newlength\descht
\newlength\imagewd
\newlength\rowsep% vertical spacing between rows
\setlength\framewd{7cm}% width of each frame
\setlength\legendwd{4cm}% with for ingredients
\setlength\imagewd{3cm}% width for image
\setlength\frameht{4.5cm}% height of the frame, without directions
\setlength\descht{1.5cm}% height of box for directions
\newcommand\framecon[5]{%
\begin{minipage}[t][\frameht][t]{\framewd}
\begin{minipage}[c][\frameht][t]{\framewd}
\begin{minipage}[c][\frameht][t]{\legendwd}
\vfill
{\bfseries\Large#1}\par\bigskip
\begin{tabular}{@{}r@{:\ }l@{}}
#2
\multicolumn{2}{c}{} \\
\fritem{Pris}{#3}
\end{tabular}%
\end{minipage}%
\begin{minipage}[c][\frameht][c]{\imagewd}
\vfill
\includegraphics[width=3cm]{#4}
\end{minipage}%
\end{minipage}%
\begin{lrbox}{\mybox}
\begin{minipage}[c][\descht][t]{\dimexpr\framewd-20pt\relax}
#5
\end{minipage}%
\end{lrbox}%
\iftoggle{client}
{}
{\par\bigskip
\tikz[remember picture]
\node[rectangle,draw=ingrcolor,ultra thick,rounded corners,inner sep=8pt]
{\usebox\mybox};%
}%
\par\vskip20pt\mbox{}\hfill\tikzmark{b}%
\end{minipage}%
\iftoggle{client}
{%
\begin{tikzpicture}[remember picture, overlay]
\draw[rounded corners=8pt,line width=1.5pt,draw=framecolor]
(b) -|
([xshift=\the\dimexpr-\framewd-1em\relax,yshift=\the\dimexpr\frameht+\descht\relax]b);
\end{tikzpicture}
}%
{}
}
\newcommand\fritem[2]{#1\\}
\begin{document}
\settoggle{client}{false}% for the bartender
%\settoggle{client}{true}% for the clients
\iftoggle{client}{\setlength\rowsep{6cm}}{\setlength\rowsep{3cm}}
\framecon{Sure Føtter}{%
\fritem{Cointreau}{2 cl}
\fritem{Jägermeister}{2 cl}
\fritem{Lime}{2 cl}
\fritem{Coca Cola}{}}{35kr}{11}{%
Shake vodka og likør med is i en cocktail shaker. -- Si til et højt glas med et par isterninger. -- Fyld op med orange juice.}\hfill
\framecon{Kvit Russer}{%
\fritem{Vodka}{2 cl}
\fritem{Kahlua/Amarula}{2 cl}
\fritem{Fløte}{2 cl}}{35 kr}{12}{%
Alle ingredienser unntatt epleskive ristes godt i en shaker med knust is. -- Siles og serveres i et avkjølt cocktailglass. -- Pyntes med epleskive.}\hfill
\framecon{Crocodile}{%
\fritem{Lys Rom}{2 cl}
\fritem{Midori}{2 cl}
\fritem{Lime}{}
\fritem{Sprite}{}}{35 kr}{13}{%
Shake vodka og likør med is i en cocktail shaker. -- Si til et højt glas med et par isterninger. -- Fyld op med orange juice.}
\vspace{\rowsep}
\framecon{Silver Salute}{%
\fritem{Vodka}{1 cl}
\fritem{Cointreau}{2 cl}
\fritem{Blå Bols}{3 cl}}{40 kr}{21}{%
Alle ingredienser unntatt mørk rom ristes godt i en shaker med knust is. -- Serveres i et avkjølt collinsglass. -- Mørk rom helles forsiktig øverst i glasset. -- Pyntes med limeskive.}\hfill
\framecon{Majoren}{%
\fritem{Vodka}{1 cl}
\fritem{Cointreau}{2 cl}
\fritem{Blå Bols}{3 cl}}{40 kr}{22}{%
Alle ingredienser unntatt mørk rom ristes godt i en shaker med knust is. -- Serveres i et avkjølt collinsglass. -- Mørk rom helles forsiktig øverst i glasset. -- Pyntes med limeskive.}\hfill
\framecon{Epic}{%
\fritem{Baccardi}{2 cl}
\fritem{Blå bols}{1 cl}
\fritem{Mickey Finn}{1 cl}
\fritem{Passoã}{1 cl}
\fritem{Sprite}{}}{40 kr}{23}{%
Alle ingredienser unntatt mørk rom ristes godt i en shaker med knust is. -- Serveres i et avkjølt collinsglass. -- Mørk rom helles forsiktig øverst i glasset. -- Pyntes med limeskive.}
\end{document}
クライアント向けバージョン(準備手順なし):
トグルを false に設定するだけで、バーテンダー向けのバージョン(準備手順付き)が表示されます。
コードの仕組み
メイン コマンド
\framecon
には 5 つの必須引数があります。\framecon{<name>}{<ingredients>}{<price>}{<image-file>}{<prep. directions>}
材料を書き込むために、追加の
\fitem
コマンドが定義されました。\fritem{<ingredient>}{<quantity>}
たとえば、私の例の「EPIC」のエントリは次のようになります。
\framecon{Epic}{% \fritem{Baccardi}{2 cl} \fritem{Blå bols}{1 cl} \fritem{Mickey Finn}{1 cl} \fritem{Passoã}{1 cl} \fritem{Sprite}{}}{40 kr}{23}{% Alle ingredienser unntatt mørk rom ristes godt i en shaker med knust is. -- Serveres i et avkjølt collinsglass. -- Mørk rom helles forsiktig øverst i glasset. -- Pyntes med limeskive.}
client
トグルを に設定するとtrue
、クライアントのバージョンが生成され、 に設定するとfalse
、バーテンダーのバージョンが取得されます。
1 行あたりの画像が 4 枚未満の場合は、\hfill
を挿入して目的の配置を作成できます。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[norsk]{babel}
\usepackage[landscape,
left=1.5cm,
right=1cm,
top=3cm,
bottom=0cm]{geometry}
\usepackage{graphicx}
\usepackage{microtype,fixltx2e}
\usepackage{fourier}
\usepackage{tikz}
\usepackage{etoolbox}
\newtoggle{client}
\newsavebox\mybox
\newcommand\tikzmark[1]{%
\tikz[remember picture,overlay] \coordinate (#1);}
\colorlet{framecolor}{cyan!80!black}% color for frames (clients version)
\colorlet{ingrcolor}{orange!80!black}% color for frames around directions (bartenders version)
\setlength\parindent{0pt}
\newlength\framewd
\newlength\frameht
\newlength\legendwd
\newlength\descht
\newlength\imagewd
\newlength\rowsep% vertical spacing between rows
\setlength\framewd{7cm}% width of each frame
\setlength\legendwd{4cm}% with for ingredients
\setlength\imagewd{3cm}% width for image
\setlength\frameht{4.5cm}% height of the frame, without directions
\setlength\descht{1.5cm}% height of box for directions
\newcommand\framecon[5]{%
\begin{minipage}[t][\frameht][t]{\framewd}
\begin{minipage}[c][\frameht][t]{\framewd}
\begin{minipage}[c][\frameht][t]{\legendwd}
\vfill
{\bfseries\Large#1}\par\bigskip
\begin{tabular}{@{}r@{:\ }l@{}}
#2
\multicolumn{2}{c}{} \\
\fritem{Pris}{#3}
\end{tabular}%
\end{minipage}%
\begin{minipage}[c][\frameht][c]{\imagewd}
\vfill
\includegraphics[width=3cm]{#4}
\end{minipage}%
\end{minipage}%
\begin{lrbox}{\mybox}
\begin{minipage}[c][\descht][t]{\dimexpr\framewd-20pt\relax}
#5
\end{minipage}%
\end{lrbox}%
\iftoggle{client}
{}
{\par\bigskip
\tikz[remember picture]
\node[rectangle,draw=ingrcolor,ultra thick,rounded corners,inner sep=8pt]
{\usebox\mybox};%
}%
\par\vskip20pt\mbox{}\hfill\tikzmark{b}%
\end{minipage}%
\iftoggle{client}
{%
\begin{tikzpicture}[remember picture, overlay]
\draw[rounded corners=8pt,line width=1.5pt,draw=framecolor]
(b) -|
([xshift=\the\dimexpr-\framewd-1em\relax,yshift=\the\dimexpr\frameht+\descht\relax]b);
\end{tikzpicture}
}%
{}
}
\newcommand\fritem[2]{#1\\}
\begin{document}
\settoggle{client}{false}% for the bartender
%\settoggle{client}{true}% for the clients
\iftoggle{client}{\setlength\rowsep{6cm}}{\setlength\rowsep{3cm}}
\hfill\framecon{Sure Føtter}{%
\fritem{Cointreau}{2 cl}
\fritem{Jägermeister}{2 cl}
\fritem{Lime}{2 cl}
\fritem{Coca Cola}{}}{35kr}{11}{%
Shake vodka og likør med is i en cocktail shaker. -- Si til et højt glas med et par isterninger. -- Fyld op med orange juice.}\hfill
\framecon{Kvit Russer}{%
\fritem{Vodka}{2 cl}
\fritem{Kahlua/Amarula}{2 cl}
\fritem{Fløte}{2 cl}}{35 kr}{12}{%
Alle ingredienser unntatt epleskive ristes godt i en shaker med knust is. -- Siles og serveres i et avkjølt cocktailglass. -- Pyntes med epleskive.}\hfill\null
\vspace{\rowsep}
\hfill\framecon{Silver Salute}{%
\fritem{Vodka}{1 cl}
\fritem{Cointreau}{2 cl}
\fritem{Blå Bols}{3 cl}}{40 kr}{21}{%
Alle ingredienser unntatt mørk rom ristes godt i en shaker med knust is. -- Serveres i et avkjølt collinsglass. -- Mørk rom helles forsiktig øverst i glasset. -- Pyntes med limeskive.}\hfill
\framecon{Majoren}{%
\fritem{Vodka}{1 cl}
\fritem{Cointreau}{2 cl}
\fritem{Blå Bols}{3 cl}}{40 kr}{22}{%
Alle ingredienser unntatt mørk rom ristes godt i en shaker med knust is. -- Serveres i et avkjølt collinsglass. -- Mørk rom helles forsiktig øverst i glasset. -- Pyntes med limeskive.}\hfill\null
\end{document}