Usar la tecla ENTER como delimitador en una lista detallada

Usar la tecla ENTER como delimitador en una lista detallada

Fondo: Mi esposa está escribiendo un libro de cocina familiar. Principalmente como ejercicio de aprendizaje para mí, estoy armando código LaTex para el proyecto. Me gustaría hacer que la entrada de datos de la receta sea lo más simple posible, con (casi) todo el código de procesamiento oculto en la parte posterior. Mi primer paso para ingresar los ingredientes de la receta se muestra a continuación. Utilizo un comando \IngredientList que toma un número variable de argumentos. Como puede ver, cada ingrediente "elemento" está delimitado por el carácter [;]. En un mundo ideal, mi esposa podría simplemente escribir los ingredientes y usar la tecla ENTER como delimitador entre los ingredientes. Probé \cr y \newline como delimitador\SplitList sin suerte.

Mi pregunta: ¿Hay alguna manera de configurar la tecla ENTRAR como delimitador entre una lista de longitud variable de elementos de ingredientes de recetas? (También se aceptan otras soluciones).

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

Respuesta1

El manejo de la lista realmente no parece ayudar, el siguiente es más o menos el mismo resultado. Si necesita un diseño particular, la configuración del párrafo se puede ajustar en un entorno local.

ingrese la descripción de la imagen aquí

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

Respuesta2

He dedicado mucho tiempo al formato de recetas. Prefiero el marcado más ligero posible. Soy consciente de los peligros \obeylines(y \everyparde hecho), aunque estos peligros se evitan fácilmente, simplemente no hagas nada con el entorno que los utiliza. Creo que este uso de \obeylineshace que la entrada sea más limpia. Los ingredientes largos siempre se deben tratar con un \hangindentsi se van a envolver. También he utilizado ~para crear saltos de línea más sensatos.

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

Actualizar

El manejo de fracciones me molestó: agregué una definición que permite mantener las fracciones horizontales como están y simplemente agregar el comando para convertirlas en fracciones cortadas. La salida es idéntica.

ejemplo de ingredientes

Respuesta3

Veo que ya hay algunas soluciones, pero en lugar de usar líneas en blanco para delimitar los ingredientes, creo que deberías usar algún carácter porque, de lo contrario, una línea de ingrediente larga o un salto de línea incorrecto causará estragos. A continuación he usado- al comienzo de la línea. Además, utilizandoLátex3expresiones regulares, reemplazo automáticamente una fracción a/bpara \sfrac{a}{b}que la lista de ingredientes

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

produce

ingrese la descripción de la imagen aquí

Por supuesto, puedes combinar mis "fracciones automáticas" con alguna de las otras soluciones para eliminar el -separador.

Aquí está el código completo:

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

información relacionada