Verwenden des pgfforPakets

Verwenden des pgfforPakets

Ich muss Eintrittskarten für ein Theater ausdrucken. Der Sitzplan des Theaters sieht wie folgt aus:

Blöcke (A rechts, A links, B rechts, B links usw. bis H)

Zeilen (Block A könnte Zeilen von 1 bis 15 haben, Block B von 1 bis 20 usw.: Sie sind nicht alle gleich nummeriert)

Sitz (Block A, rechte Reihe 1 könnte die Sitze 1 bis 4 haben, Block A, rechte Reihe 2 die Sitze 1 bis 22 usw.: auch hier gilt, dass die Anzahl nicht überall gleich ist)

Ich bin mir der Existenz von For-Schleifen in Latex bewusst und habe sie bereits erfolgreich verwendet. Ich habe jedoch das Problem, der Schleife mitzuteilen, dass sie bei Block A in Zeile 15 anhalten muss, bei Block B jedoch bis Zeile 20 weitermachen muss usw. Dasselbe gilt für die Sitze (wenn ich das Problem für die Zeilen löse, kann ich es auch für die Sitze lösen).

Ich habe überlegt, die Angaben zur Anzahl der Zeilen pro Block und zur Anzahl der Sitzplätze pro Zeile in eine Tabelle zu schreiben, weiß dann aber nicht, wie ich die for-Schleife dazu bringe, die Tabelle zu lesen. Oder ist das for in diesem Fall vielleicht nicht richtig? Vielleicht wäre ein while ... do passender? Aber dann weiß ich nicht, wie ich das in Latex umsetzen soll.

Antwort1

Verwenden des pgfforPakets

Eine Möglichkeit:

\documentclass{article}
\usepackage{pgffor}

\begin{document}

\foreach \block/\rows in {
    A right/{4,22,31},
    A left/{4,5},
    B right/{10,4,3,4,5},
    } {
    \foreach \seats [count=\row] in \rows {
        \foreach \seat in {1, ..., \seats} {
            
            Block: \block\  Row: \row, Seat:\seat
        }
    }
}
\end{document}

Jeder Block wird mithilfe eines Blocknamens und einer Liste der Zeilengrößen definiert.

Antwort2

Da der OP keinen Hinweis darauf gab, dass die Sitznummer einer Reihe mit etwas anderem als beginnen könnte 1, habe ich das angenommen, aber es könnte sich entsprechend ändern. Syntax:

\printtickets{<section name> : <row 1 seats>, <row 2 seats>,.../ ...}

Das MWE:

\documentclass[12pt]{article}
\usepackage{listofitems,pgffor,stackengine}
\usepackage[margin=.5cm]{geometry}
\newcommand\printtickets[1]{\noindent%
  \setsepchar[@]{/@:@,}%
  \readlist*\seatcount{#1}%
  \foreachitem\x\in\seatcount[]{%
    \foreach\y in {1,...,{\listlen\seatcount[\xcnt,2]}}{%
      \foreach\z in {1,...,{\seatcount[\xcnt,2,\y]}}{%
        \addstackgap[1pt]{\fbox{\makebox[1in]{%
          \Longstack{Block~\seatcount[\xcnt,1] Row~\y{} Seat~\z}}}}\kern3pt\allowbreak%
      }%
    }%
  }%
}
\begin{document}
\sloppy
\printtickets{
  A right : 3,5,7     / 
  A left  : 3,5,6     /
  B right : 4,5,6,9,11/
  B left  : 4,5,6,9,11
}
\end{document}

Bildbeschreibung hier eingeben

Antwort3

etwas wie das

Bildbeschreibung hier eingeben

\documentclass{article}

\makeatletter

\def\seats#1#2#3#4{%
\edef\minrow{\beforedash#2-\relax}%
\edef\maxrow{\afterdash#2-#2-\relax}%
\tickets{#1}\minrow\maxrow{#3}{#4}%
}
\def\beforedash#1-#2\relax{#1}
\def\afterdash#1-#2-#3\relax{#2}
\def\tickets#1#2#3#4#5{%
\count@#4 %
\loop
Block: #1, Row: \number#2, Seat: \the\count@\par
\ifnum\count@<#5 %
\advance\count@ 1 %
\repeat
\ifnum#2=#3 %
 \expandafter\@gobble
\else
  \expandafter\@firstofone
\fi
{\tickets{#1}{\numexpr#2+1\relax}{#3}{#4}{#5}}}

\begin{document}

%     block    row   low high      
\seats{A Left} {2-6} {1}  {10}
\seats{A Left} {1}   {2}  {8}
\seats{B Right}{1-8} {1}  {12}
\seats{B Right} {9}  {10}  {12}
\seats{B Right} {10} {10}  {12}


\end{document}

verwandte Informationen