\DTLforeach 中的多个条件

\DTLforeach 中的多个条件

我开始在 Latex 中使用数据库。因此,一方面,我有 .tex 数据库,其中元素按逗号分隔的列进行分类。另一方面,我有使用从数据库调用元素的文档\DTLforeach*[\DTLisieq{...。我的问题是调用满足两个条件的元素(一个在第 3 列,一个在第 4 列):我成功地对一个元素执行了此操作,但对两个元素执行不成功。

这是我针对一种情况编写的代码,我该如何修改它?到目前为止,它会为我提供“Vepres I”的对句和诗篇编号(在我的例子中,只有一个“Vepres I”,但如果我将其更改为“Vigiles”,它就不再起作用了)。

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

这是名为“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

我希望这足够清楚。谢谢你的帮助。

答案1

\DTLforeach*我在一列上执行,\ifx在另一列上进行测试。也许这种方法就足够了。

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

在此处输入图片描述

答案2

根据,你应该能够做类似的事情:

\DTLforeach*[\DTLisieq{\office}{#4} \AND \DTLisieq{\antnum}{#5}]%
  ...

至少在我的使用案例中,这似乎是有效的。

相关内容