2

I start using database in Latex. Therefore on one hand, I have my .tex database where elements are classified by columns separated by comma. On the other hand I have my document calling elements from the database using \DTLforeach*[\DTLisieq{.... My issue is to call elements fulfilling two conditions (one in the 3rd column and one in the 4th column) : I succeed to do it for one but not for two.

This is my code for one condition, how can I modified it ? So far, it will give me the antiphon and the psalm number for the "Vepres I" (in my exemple, there is only one "Vepres I", but if I change it to "Vigiles", it no longer works).

    \documentclass[a4paper,12pt]{report}
    
    %Packages
    \usepackage[latin1]{inputenc} %
    \usepackage[T1]{fontenc}
    \usepackage[french]{babel} %
    \usepackage{xspace} %pour utiliser un espace si nécessaire
    \usepackage{datatool} %pour utiliser une base de donnée    
    
    \newcommand\AntiennePsaume[4]{
        \DTLloaddb{#1}{#2}%
        \DTLforeach*[\DTLisieq{\office}{#4}]%
            {#1}%
            {\jour=Jour,\office=Office,\antnum=No,\referenceno=Ref,\antienne=Antienne,\psaume=Psaume}%
            {Ant. \antnum \xspace : \antienne \xspace%
            (ref. \referenceno )\par % 
            Psaume \psaume\par % write the psalm number
            %\input{\psaume}\par % call the psalm that is in a .tex file.
            }%
    }

    \begin{document}    
    \AntiennePsaume{A}{antiphonaire3.tex}{Noel}{Vepres I}\par
    \end{document}

And this is the database named "antiphonaire3.tex"

Semaine,Jour,Office,No,Ref,Antienne,Psaume,Mode
Octave de Noel,Noel,Vepres I,1,H010,"Il est glorifié le Roi de la Paix et toute la terre contemple son Visage, alléluia, alléluia !",112,III
Octave de Noel,Noel,Vepres I,4,H015,"Quand le soleil se lèvera dans le ciel, vous verrez le Roi des rois, qui procède du Père tel l'Époux qui s'avance vers la chambre nuptiale, alléluia, alléluia, alléluia !",Cant Marie,II
Octave de Noel,Noel,Vigiles,0,H 020,"Voici que le Christ es né pour nous : venez L'adorer !",94,I
Octave de Noel,Noel,Vigiles,1,H 031,"Le Seigneur M'a dit : « Tu es mon Fils, Moi aujourd'hui, Je T'ai engendré », alléluia, alléluia ! Le Fils Unique, vivant dans le sein du Père, naît aujourd'hui de la Vierge Marie.",2,I
Octave de Noel,Sainte Famille,Vigiles,1,H 051,"Voici Joseph, l'époux de Marie.",18, III

I hope it is clear enough. Thanks for your help.

1
  • 1
    You may want to clean up the database to remove the accented characters to simplify the example. Also, [french] is to be preferred in babel. Apr 7 at 14:08
2

I perform the \DTLforeach* on one column and do an \ifx test on the other column. Perhaps such an approach might suffice.

    \documentclass[a4paper,12pt]{report}

\begin{filecontents*}[overwrite]{antiphonaire3.tex}
Semaine,Jour,Office,No,Ref,Antienne,Psaume,Mode
Octave de Noel,Noel,Vepres I,1,H010,"Il est glorifié le Roi de la Paix et toute la terre contemple son Visage, alléluia, alléluia !",112,III
Octave de Noel,Noel,Vepres I,4,H015,"Quand le soleil se lèvera dans le ciel, vous verrez le Roi des rois, qui procède du Père tel l'Époux qui s'avance vers la chambre nuptiale, alléluia, alléluia, alléluia !",Cant Marie,II
Octave de Noel,Noel,Vigiles,0,H 020,"Voici que le Christ es né pour nous : venez L'adorer !",94,I
Octave de Noel,Noel,Vigiles,1,H 031,"Le Seigneur M'a dit : « Tu es mon Fils, Moi aujourd'hui, Je T'ai engendré », alléluia, alléluia ! Le Fils Unique, vivant dans le sein du Père, naît aujourd'hui de la Vierge Marie.",2,I
Octave de Noel,Sainte Famille,Vigiles,1,H 051,"Voici Joseph, l'époux de Marie.",18, III
\end{filecontents*}
    
    %Packages
%    \usepackage[latin1]{inputenc} %
    \usepackage[T1]{fontenc}
    \usepackage[francais]{babel} %
    \usepackage{xspace} %pour utiliser un espace si nécessaire
    \usepackage{datatool} %pour utiliser une base de donnée    
    
    \newcommand\AntiennePsaume[5]{
        \DTLloaddb{#1}{#2}%
        \DTLforeach*[\DTLisieq{\office}{#4}]%
            {#1}%
            {\jour=Jour,\office=Office,\antnum=No,\referenceno=Ref,\antienne=Antienne,\psaume=Psaume}%
            {\def\tmp{#5}\ifx\tmp\antnum
            Ant. \antnum \xspace : \antienne \xspace%
            (ref. \referenceno )\par % 
            Psaume \psaume\par\medskip % write the psalm number
            %\input{\psaume}\par % call the psalm that is in a .tex file.
            \fi}%
    }

    \begin{document}   
    All Vepres, 4 \par\medskip
    \AntiennePsaume{A}{antiphonaire3.tex}{Noel}{Vepres I}{4}\par

    \vspace{25pt}
    All Vigiles, 1 \par\medskip
    \AntiennePsaume{B}{antiphonaire3.tex}{Noel}{Vigiles}{1}\par
    \end{document}

enter image description here

4
  • thanks a lot for your answer, it helps a lot my breviary project. In order to understand well, basically to check the second condition, we define a temporary item #5 and with \ifx we verify if \tmp = \antnum (in our exemple), isn't it ?
    – JBOP
    Apr 7 at 14:21
  • 1
    @JBOP That is correct. The actual sub-database "A" or "B" may contain more items, but we screen out the undesirables based on an \ifx comparison to #5. Apr 7 at 14:24
  • can we add other \ifx if we want to refine again on an 3rd column ?
    – JBOP
    Apr 7 at 14:26
  • 1
    @JBOP Yes, as long as you properly account for all the \else and \fi syntax. Apr 7 at 14:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.