3

I'm creating a cook book using paracol (cf this question).

I'm facing another problem when defining personal environments with the markdown package. Here is a MWE that works and which performs as I want.

\documentclass{article}

\usepackage[footnotes,definitionLists,hashEnumerators,smartEllipses,tightLists=false,hybrid]{markdown}

\usepackage{paracol}
\setcolumnwidth{3cm, 7cm}
\setlength{\columnsep}{3em}


\newenvironment{recipe}[1]{%
    \section{#1}
    \begin{paracol}{2}
}{%
    \end{paracol}
}


\newenvironment{ingredients}{%
    \subsection{Ingrédients}
}{%
}

\newenvironment{preparation}{%
    \switchcolumn
    \subsection{Préparation}
}{%
}

\begin{document}

\begin{recipe}{Lipsum bis}

\begin{ingredients}
\begin{markdown}

#### Pâte

- 150 g de farine normale (type 55)
- 450 g de farine de seigle
- 400 g de miel
- 125 g de lait
- 3 gros \oe{}ufs (150 g d'\oe{}uf)
- 250 g de sucre
- 40 g de levure chimique
- 125 g de crème fraîche
- 125 g de fécule de pomme de terre

#### Epices

- 3 gr de gingembre
- 8 gr de cannelle
- 1 gr de muscade
- Sel

\end{markdown}
\end{ingredients}


\begin{preparation}
\begin{markdown}

#### Pâte

#. Faites chauffer le miel et le sucre 70 dC.
#. Rajouter le lait, la crème, \oe{}ufs,
#. Rajouter les farines, flocons
#. Mettre ensuite épices et poudre à lever
#. La pâte doit être très molle, la mettre au frigidaire 4 à 5 heures, ou mieux toute la nuit au réfrigérateur.
#. La sortir au fur et à mesure que l'on en a besoin, elle peut rester 4 à 5 jours au réfrigérateur sans y toucher, conservation du pain d'épice cuit dans une boîte hermétique jusqu'à 1 mois.
#. Ne pas étendre la pâte trop fine 4 à 5 mm, ne pas mettre trop de farine pour que la pâte après cuisson ne soit trop dure.
#. Faire cuire à 200dC pendant 5 à 10 mn, puis les sortir du four.

#### Glaçage

#. Si on veut les glacer, mettre 1/4 d'eau par rapport au sucre glace, c'est-à-dire 100 g de sucre glace avec 25 g d'eau ou du jus de fruit (à l'orange,...) et remettre au four 30 secondes (compter 30 sinon ça fait des bulles et ce n'est pas beau).
#. Si on veut dessiner dessus après glaçage, mettre autant de sucre que de chocolat en poudre (faire consistance pâte à dentifrice), ou sinon tout simplement faire fondre que du chocolat noir au bain-marie (c'est ce que fait Monsieur Sbaï) et c'est tout pour la pâte.
#. Pour faire des dessins dessus, couper une feuille sulfu en triangle et l'enrouler pour que cela fasse un cornet, mettre la préparation au chocolat dedans, couper le bout pas trop gros, pour que le chocolat sorte,  et appuyer tout en haut du cornet pas au centre pour que l'on puisse écrire avec. On peut faire pareil pour écrire sur un gâteau.

\end{markdown}
\end{preparation}

\end{recipe}

\end{document}

And here is the same with the markdown environments inside my own ingredientsand preparation environments.

\documentclass{article}

\usepackage[footnotes,definitionLists,hashEnumerators,smartEllipses,tightLists=false,hybrid]{markdown}

\usepackage{paracol}
\setcolumnwidth{3cm, 7cm}
\setlength{\columnsep}{3em}


\newenvironment{recipe}[1]{%
    \section{#1}
    \begin{paracol}{2}
}{%
    \end{paracol}
}


\newenvironment{ingredients}{%
    \subsection{Ingrédients}
    \begin{markdown}
}{%
    \end{markdown}
}

\newenvironment{preparation}{%
    \switchcolumn
    \subsection{Préparation}
    \begin{markdown}
}{%
    \end{markdown}
}

\begin{document}

\begin{recipe}{Lipsum bis}

\begin{ingredients}

#### Pâte

- 150 g de farine normale (type 55)
- 450 g de farine de seigle
- 400 g de miel
- 125 g de lait
- 3 gros \oe{}ufs (150 g d'\oe{}uf)
- 250 g de sucre
- 40 g de levure chimique
- 125 g de crème fraîche
- 125 g de fécule de pomme de terre

#### Epices

- 3 gr de gingembre
- 8 gr de cannelle
- 1 gr de muscade
- Sel

\end{ingredients}


\begin{preparation}

#### Pâte

#. Faites chauffer le miel et le sucre 70 dC.
#. Rajouter le lait, la crème, \oe{}ufs,
#. Rajouter les farines, flocons
#. Mettre ensuite épices et poudre à lever
#. La pâte doit être très molle, la mettre au frigidaire 4 à 5 heures, ou mieux toute la nuit au réfrigérateur.
#. La sortir au fur et à mesure que l'on en a besoin, elle peut rester 4 à 5 jours au réfrigérateur sans y toucher, conservation du pain d'épice cuit dans une boîte hermétique jusqu'à 1 mois.
#. Ne pas étendre la pâte trop fine 4 à 5 mm, ne pas mettre trop de farine pour que la pâte après cuisson ne soit trop dure.
#. Faire cuire à 200dC pendant 5 à 10 mn, puis les sortir du four.

#### Glaçage

#. Si on veut les glacer, mettre 1/4 d'eau par rapport au sucre glace, c'est-à-dire 100 g de sucre glace avec 25 g d'eau ou du jus de fruit (à l'orange,...) et remettre au four 30 secondes (compter 30 sinon ça fait des bulles et ce n'est pas beau).
#. Si on veut dessiner dessus après glaçage, mettre autant de sucre que de chocolat en poudre (faire consistance pâte à dentifrice), ou sinon tout simplement faire fondre que du chocolat noir au bain-marie (c'est ce que fait Monsieur Sbaï) et c'est tout pour la pâte.
#. Pour faire des dessins dessus, couper une feuille sulfu en triangle et l'enrouler pour que cela fasse un cornet, mettre la préparation au chocolat dedans, couper le bout pas trop gros, pour que le chocolat sorte,  et appuyer tout en haut du cornet pas au centre pour que l'on puisse écrire avec. On peut faire pareil pour écrire sur un gâteau.

\end{preparation}

\end{recipe}

\end{document}

This thows me an error which looks like

Runaway argument?
! File ended while scanning use of ^^M.
<inserted text> 
                \par 

I can not understand this error. By the way, I had a similar error when I did not use markdown and I put \switchcolumn at the end of ingredients.

Last, in case some of you faced the same problem, how to resume the enumerate list after #### Glaçage such that the user do not enter \begin{enumerate}[resume]?

2
  • You can't define an environment in terms of markdown directly, because \begin{markdown} needs to see an explicit \end{markdown} to know where it ends.
    – egreg
    Mar 20, 2020 at 15:09
  • markdown will be a verbatim-like environment that changes catcodes and so can not be directly used inside an environment definition. Mar 20, 2020 at 15:10

1 Answer 1

3

The way markdown defines its environments disallows using them for defining new environments.

However, one can extend the package so as to be able to define new markdown-like environments.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}

\usepackage[
  footnotes,
  definitionLists,
  hashEnumerators,
  smartEllipses,
  tightLists=false,
  hybrid
]{markdown}

\usepackage{paracol}
\setcolumnwidth{3cm, 7cm}
\setlength{\columnsep}{3em}

\newenvironment{recipe}[1]{%
    \section{#1}
    \begin{paracol}{2}
}{%
    \end{paracol}
}

\makeatletter
\begingroup
  \catcode`\|=0\catcode`\<=1\catcode`\>=2%
  \catcode`\\=12|catcode`|{=12|catcode`|}=12%
  |gdef|markdownReadAndConvert@#1#2<%
    |markdownReadAndConvert<\end{#1#2}>%
                           <|end<#1#2>>>%
|endgroup

\newenvironment{ingredients}{%
    \subsection{Ingrédients}%
    \markdownReadAndConvert@{ingredients}{}%
}{%
    \relax
}

\newenvironment{preparation}{%
    \switchcolumn
    \subsection{Préparation}
    \markdownReadAndConvert@{preparation}{}%
}{%
    \relax
}

\makeatother

\begin{document}

\begin{recipe}{Lipsum bis}

\begin{ingredients}

#### Pâte

- 150 g de farine normale (type 55)
- 450 g de farine de seigle
- 400 g de miel
- 125 g de lait
- 3 gros \oe{}ufs (150 g d'\oe{}uf)
- 250 g de sucre
- 40 g de levure chimique
- 125 g de crème fraîche
- 125 g de fécule de pomme de terre

#### Epices

- 3 gr de gingembre
- 8 gr de cannelle
- 1 gr de muscade
- Sel

\end{ingredients}


\begin{preparation}

#### Pâte

#. Faites chauffer le miel et le sucre 70 dC.
#. Rajouter le lait, la crème, \oe{}ufs,
#. Rajouter les farines, flocons
#. Mettre ensuite épices et poudre à lever
#. La pâte doit être très molle, la mettre au frigidaire 4 à 5 heures, ou mieux toute la nuit au réfrigérateur.
#. La sortir au fur et à mesure que l'on en a besoin, elle peut rester 4 à 5 jours au réfrigérateur sans y toucher, conservation du pain d'épice cuit dans une boîte hermétique jusqu'à 1 mois.
#. Ne pas étendre la pâte trop fine 4 à 5 mm, ne pas mettre trop de farine pour que la pâte après cuisson ne soit trop dure.
#. Faire cuire à 200dC pendant 5 à 10 mn, puis les sortir du four.

#### Glaçage

#. Si on veut les glacer, mettre 1/4 d'eau par rapport au sucre glace, c'est-à-dire 100 g de sucre glace avec 25 g d'eau ou du jus de fruit (à l'orange,...) et remettre au four 30 secondes (compter 30 sinon ça fait des bulles et ce n'est pas beau).
#. Si on veut dessiner dessus après glaçage, mettre autant de sucre que de chocolat en poudre (faire consistance pâte à dentifrice), ou sinon tout simplement faire fondre que du chocolat noir au bain-marie (c'est ce que fait Monsieur Sbaï) et c'est tout pour la pâte.
#. Pour faire des dessins dessus, couper une feuille sulfu en triangle et l'enrouler pour que cela fasse un cornet, mettre la préparation au chocolat dedans, couper le bout pas trop gros, pour que le chocolat sorte,  et appuyer tout en haut du cornet pas au centre pour que l'on puisse écrire avec. On peut faire pareil pour écrire sur un gâteau.

\end{preparation}

\end{recipe}

\end{document}

enter image description here

An abstraction of the above. I defined ingredients* similarly markdown* for the sake of the example, you can simply say

\newmarkdownenvironment{ingredients}{%
    \subsection{Ingrédients}%
}{}

and use \begin{ingredients} and \end{ingredients}.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}

\usepackage[
  footnotes,
  definitionLists,
  hashEnumerators,
  smartEllipses,
  tightLists=false,
  hybrid
]{markdown}

\usepackage{paracol}
\setcolumnwidth{3cm, 7cm}
\setlength{\columnsep}{3em}

%%% Extend markdown
\makeatletter
\begingroup
  \catcode`\|=0\catcode`\<=1\catcode`\>=2%
  \catcode`\\=12|catcode`|{=12|catcode`|}=12%
  |gdef|markdownReadAndConvert@#1#2<%
    |markdownReadAndConvert<\end{#1#2}>%
                           <|end<#1#2>>>%
|endgroup

\newcommand{\newmarkdownenvironment}{%
  \@ifstar\newmarkdown@senv\newmarkdown@env
}
\newcommand{\newmarkdown@env}[3]{%
  \newenvironment{#1}{#2\markdownReadAndConvert@{#1}{}}{#3}%
}
\newcommand{\newmarkdown@senv}[3]{%
  \newenvironment{#1*}[1]{#2\markdownSetup{##1}\markdownReadAndConvert@{#1}{*}}{#3}%
}
\makeatother

\newenvironment{recipe}[1]{%
    \section{#1}
    \begin{paracol}{2}
}{%
    \end{paracol}
}

\newmarkdownenvironment*{ingredients}{%
    \subsection{Ingrédients}%
}{}

\newmarkdownenvironment{preparation}{%
    \switchcolumn
    \subsection{Préparation}
}{}

\makeatother

\begin{document}

\begin{recipe}{Lipsum bis}

\begin{ingredients*}{}

#### Pâte

- 150 g de farine normale (type 55)
- 450 g de farine de seigle
- 400 g de miel
- 125 g de lait
- 3 gros \oe{}ufs (150 g d'\oe{}uf)
- 250 g de sucre
- 40 g de levure chimique
- 125 g de crème fraîche
- 125 g de fécule de pomme de terre

#### Epices

- 3 gr de gingembre
- 8 gr de cannelle
- 1 gr de muscade
- Sel

\end{ingredients*}


\begin{preparation}

#### Pâte

#. Faites chauffer le miel et le sucre 70 dC.
#. Rajouter le lait, la crème, \oe{}ufs,
#. Rajouter les farines, flocons
#. Mettre ensuite épices et poudre à lever
#. La pâte doit être très molle, la mettre au frigidaire 4 à 5 heures, ou mieux toute la nuit au réfrigérateur.
#. La sortir au fur et à mesure que l'on en a besoin, elle peut rester 4 à 5 jours au réfrigérateur sans y toucher, conservation du pain d'épice cuit dans une boîte hermétique jusqu'à 1 mois.
#. Ne pas étendre la pâte trop fine 4 à 5 mm, ne pas mettre trop de farine pour que la pâte après cuisson ne soit trop dure.
#. Faire cuire à 200dC pendant 5 à 10 mn, puis les sortir du four.

#### Glaçage

#. Si on veut les glacer, mettre 1/4 d'eau par rapport au sucre glace, c'est-à-dire 100 g de sucre glace avec 25 g d'eau ou du jus de fruit (à l'orange,...) et remettre au four 30 secondes (compter 30 sinon ça fait des bulles et ce n'est pas beau).
#. Si on veut dessiner dessus après glaçage, mettre autant de sucre que de chocolat en poudre (faire consistance pâte à dentifrice), ou sinon tout simplement faire fondre que du chocolat noir au bain-marie (c'est ce que fait Monsieur Sbaï) et c'est tout pour la pâte.
#. Pour faire des dessins dessus, couper une feuille sulfu en triangle et l'enrouler pour que cela fasse un cornet, mettre la préparation au chocolat dedans, couper le bout pas trop gros, pour que le chocolat sorte,  et appuyer tout en haut du cornet pas au centre pour que l'on puisse écrire avec. On peut faire pareil pour écrire sur un gâteau.

\end{preparation}

\end{recipe}

\end{document}
2
  • Wow ! That is great (but that's quite pure Tex and I did not catch everything. Two additional questions, if that's ok: 1. I did not succeed in making the whole recipe inside a markdownenvironment. Is there a reason ? 2. I can not set begining of paracolat the begining of ingredients and set its end at the end of preparation. Is the reason similar to markdown ? Mar 20, 2020 at 19:36
  • Humm. It seems I can put the entire recipe in markdown env as long as I do not indent anywhere. Strange, isn't it ? This answers to question 1. Mar 20, 2020 at 19:53

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .