Verwenden der Eingabetaste als Trennzeichen in einer Aufzählung

Verwenden der Eingabetaste als Trennzeichen in einer Aufzählung

Hintergrund: Meine Frau schreibt ein Familienkochbuch. Hauptsächlich als Lernübung für mich stelle ich LaTex-Code für das Projekt zusammen. Ich möchte die Eingabe der Rezeptdaten so einfach wie möglich gestalten, wobei (fast) der gesamte Verarbeitungscode im Backend versteckt sein soll. Mein erster Versuch zur Eingabe der Rezeptzutaten ist unten dargestellt. Ich verwende einen \IngredientList-Befehl, der eine variable Anzahl von Argumenten annimmt. Wie Sie sehen, wird jedes Zutatenelement durch das Zeichen [;] abgegrenzt. In einer idealen Welt könnte meine Frau einfach die Zutaten eingeben und die Eingabetaste als Trennzeichen zwischen den Zutatenelementen verwenden. Ich habe \cr und \newline als \SplitList-Trennzeichen ohne Erfolg ausprobiert.

Meine Frage: Gibt es eine Möglichkeit, die Eingabetaste als Trennzeichen zwischen einer Liste mit Rezeptzutaten variabler Länge festzulegen? (Andere Lösungen sind ebenfalls willkommen.)

\documentclass[11pt]{book}

\usepackage{enumitem, xfrac, xparse}                                 

\NewDocumentCommand \IngredientList { >{\SplitList{;}} m }   
 {
\begin{description} [noitemsep,leftmargin=!,labelindent=8pt,itemindent=-15pt]
  \ProcessList{#1}{\ProcessIngredients}
\end{description}
 }
\newcommand\ProcessIngredients[1]{\item #1}

\begin{document}

\IngredientList{
4 ounces unsalted butter, room temperature      ;
2 large eggs, room temperature         ;
1 cup granulated sugar         ;
1 tsp. vanilla extract        ;
1 Tbsp. instant espresso powder        ;
\sfrac{1}{2} cup cocoa powder, sifted if necessary        ;
1\sfrac{1}{2} cups flour       ;
\sfrac{1}{2} cup almond flour  ;
1 tsp. baking soda      ;
\sfrac{1}{2} tsp. salt  ;
1 cup toasted hazelnuts, roughly chopped (or pistachios or almonds)      ;
3 ounces bittersweet chocolate, coarsely chopped    
}
\end{document}

Antwort1

Die Listenbehandlung scheint nicht wirklich zu helfen, das Folgende ist mehr oder weniger die gleiche Ausgabe. Wenn Sie ein bestimmtes Layout benötigen, können die Absatzeinstellungen in einer lokalen Umgebung angepasst werden.

Bildbeschreibung hier eingeben

\documentclass[11pt]{book}

\usepackage{xfrac}
\newcommand\f[2]{\sfrac{#1}{#2}}
\begin{document}

4 ounces unsalted butter, room temperature

2 large eggs, room temperature

1 cup granulated sugar

1 tsp. vanilla extract

1 Tbsp. instant espresso powder

\f12 cup cocoa powder, sifted if necessary

1\f12 cups flour

\f12 cup almond flour

1 tsp. baking soda

\f12 tsp. salt

1 cup toasted hazelnuts, roughly chopped (or pistachios or almonds)

3 ounces bittersweet chocolate, coarsely chopped    


\end{document}

Antwort2

Ich habe viel Zeit mit der Formatierung von Rezepten verbracht. Ich bevorzuge die leichteste mögliche Auszeichnung. Ich bin mir der Gefahren von \obeylines(und \everyparim Übrigen) bewusst, obwohl diese Gefahren leicht vermieden werden können – tun Sie einfach nichts mit der Umgebung, die sie verwendet. Ich denke, diese Verwendung von \obeylinesmacht die Eingabe sauberer. Lange Zutaten sollten immer mit einem versehen werden, \hangindentwenn sie umbrochen werden. Ich habe auch verwendet, ~um für sinnvollere Zeilenumbrüche zu sorgen.

\documentclass{book}

%% Narrow measure to show wrapped lines
\usepackage[textwidth=2.5in]{geometry}
\usepackage{xfrac}

\newenvironment{ingredients}{%
    \begingroup
        \frenchspacing %% no extra space after periods
        \parindent0pt
        \obeylines
        \everypar={\hangindent1.25em} %% long lines should hang
        \raggedright %% no need for justified text for ingredients
}{%
    \endgroup
}

%% Transfrom horizontal fractions to slashed with
%% minimal markup. Not perfect but handles 99% of instances.
\def\fr#1/#2 {\sfrac{#1}{#2} }

\begin{document}

\begin{ingredients}
4 ounces unsalted butter, room~temperature     
2 large eggs, room temperature         
1 cup granulated sugar         
1 tsp. vanilla extract        
1 Tbsp. instant espresso powder        
\fr1/2 cup cocoa powder, sifted if necessary        
1\fr1/2 cups flour       
\fr1/2 cup almond flour  
1 tsp. baking soda      
\fr1/2 tsp. salt  
1 cup toasted hazelnuts, roughly chopped (or pistachios or almonds)      
3 ounces bittersweet chocolate, coarsely~chopped %% note ~
\end{ingredients}

\end{document}

Aktualisieren

Die Handhabung von Brüchen hat mich gestört - ich habe eine Definition hinzugefügt, die es erlaubt, horizontale Brüche so zu belassen, wie sie sind, und einfach den Befehl hinzuzufügen, um sie in Brüche mit Schrägstrich umzuwandeln. Die Ausgabe ist identisch.

Zutaten Beispiel

Antwort3

Ich sehe, dass es bereits einige Lösungen gibt, aber anstatt Leerzeilen zur Abgrenzung von Zutaten zu verwenden, sollten Sie meiner Meinung nach ein Zeichen verwenden, da sonst eine lange Zutatenzeile oder ein falscher Zeilenumbruch Chaos verursachen. Unten habe ich -am Anfang der Zeile verwendet. Darüber hinaus kann manLaTeX3reguläre Ausdrücke, ersetze ich automatisch einen Bruch a/bdurch, \sfrac{a}{b}so dass die Zutatenliste

\IngredientList{
- 4 ounces unsalted butter, room temperature
- 2 large eggs, room temperature
- 1 cup granulated sugar
- 1 tsp. vanilla extract
- 1 Tbsp. instant espresso powder
- 1/2 cup cocoa powder, sifted if necessary
- 1 1/2 cups flour
- 1/2 cup almond flour
- 1 tsp. baking soda
- 1/2 tsp. salt
- 1 cup toasted hazelnuts, roughly chopped (or pistachios or almonds)
- 3 ounces bittersweet chocolate, coarsely chopped
}

produziert

Bildbeschreibung hier eingeben

Natürlich könntest du meine "automatischen Brüche" mit einer der anderen Lösungen kombinieren, um das -Trennzeichen zu entfernen.

Hier ist der vollständige Code:

\documentclass[11pt]{book}

\usepackage{enumitem, xfrac, xparse}

\ExplSyntaxOn
\cs_generate_variant:Nn \regex_split:nnN { nVN }
\tl_new:N \l_ingredient_tl
\seq_new:N \l_ingredients_seq
\NewDocumentCommand \IngredientList { m }
{
  % first replace fractions
  \tl_set:Nn \l_ingredient_tl  {#1}
  \regex_replace_all:nnN { \b(\d+)/(\d+) } {\c{sfrac}\cB{\1\cE}\cB{\2\cE}} \l_ingredient_tl
  % clear the ingredients sequence and split #1 on integers and/or \sfrac
  \seq_clear:N \l_ingredients_seq
  \regex_split:nVN { -\s } \l_ingredient_tl \l_ingredients_seq
  % remove the first (empty) item from the sequence
  \seq_pop_left:NN \l_ingredients_seq \l_ingredient_tl
  % now run through the list and print the ingredients inside a description environment
    \begin{description} [noitemsep,leftmargin=!,labelindent=8pt,itemindent=-15pt]
      \item \seq_use:Nn \l_ingredients_seq {\item }
    \end{description}
}
\ExplSyntaxOff

\begin{document}

\IngredientList{
- 4 ounces unsalted butter, room temperature
- 2 large eggs, room temperature
- 1 cup granulated sugar
- 1 tsp. vanilla extract
- 1 Tbsp. instant espresso powder
- 1/2 cup cocoa powder, sifted if necessary
- 1 1/2 cups flour
- 1/2 cup almond flour
- 1 tsp. baking soda
- 1/2 tsp. salt
- 1 cup toasted hazelnuts, roughly chopped (or pistachios or almonds)
- 3 ounces bittersweet chocolate, coarsely chopped
}
\end{document}

verwandte Informationen