Boucle sur une variable répétée

22 views
Skip to first unread message

Astor

unread,
Feb 26, 2021, 12:15:57 PMFeb 26
to
Bonjour à tous,
Je souhaite réaliser un template LaTeX pour réaliser les articles d'une revue scientifique. Mon problème, c'est que le nombre d'auteurs n'est évidemment pas fixe, et que la charte graphique de la revue fonctionne sur cette présentation :
---------------------------------------------------------------
TITRE EN FRANÇAIS
Titre en anglais (italique)

\vfill

Auteur 1
Univ et labo 1
Adresse email
...
Auteur N
Univ et labo
Adresse email
-----------------------------------------------------------------
Je souhaiterais dès lors créer des macros sur ces modèles :
\newcommand{\titre}[2]{
\textsc{\LARGE #1}
\emph{\large #2}
}
\necommand{\auteur}[3}{
{\footnotesize\setlength{\parindent}{1.5em}
\noindent #1

#2

#3}
}

Et donc, pour créer la page de titre, il faudrait que je puisse boucler sur les contenus de chaque \auteur. Mais je ne sais pas comment faire.
Comme je suis une bille en TeX (et que chaque fois que j'essaie de me plonger dans ce code, je conclus que je serai toujours une bille en TeX), j'essaie de rester sur du LaTeX pur (ou presque)... Y a-t-il une possibilité de trouver quelque chose comme :
\foreach{\author}
qui permettrait d'afficher le résultat de la macro dans une titlepage ?
Ou ma manière de voir les choses est-elle complètement farfelue et hors de propos ?
Toute information pour m'orienter vers la bonne manière de faire est évidemment bienvenue. Merci à tous,

Astor

Est-il

GL

unread,
Feb 27, 2021, 4:03:03 AMFeb 27
to
Ce n'est pas très clair, car on ne sait pas comment se présente votre
liste d'auteurs. Si vous voulez appeler la commande \auteur sur
plusieurs éléments dans une liste, il y a la boucle \@for du noyau
latex, ou la commande \docsvlist du package etoolbox.

Voici un petit exemple pour pdfTeX pour fixer les idées :

% -----------------------------------------------------
\documentclass{article}
\usepackage [T1]{fontenc}
\usepackage {etoolbox}

\begin{document}

{

\newcommand\auteur[3]{\begin{tabular}{ll}Auteur:&#1\\Univ:&#2\\mail:&#3\end{tabular}\par}

\renewcommand\do [1]{\auteur #1}

\docsvlist {%
{{Auteur 1}{Univ et labo 1}{e-mail 1}}%
,{{Auteur 2}{Univ et labo 2}{e-mail 2}}%
,{{Auteur 3}{Univ et labo 3}{e-mail 3}}%
}

}

\end{document}
% ----------------------------------------------------

Evidemment, il y a plein de façons de faire, cela dépendra
essentiellement de comment se présente votre liste d'auteurs initiale.

Cordialement.

--
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus

Bernard Jacquemin

unread,
Mar 1, 2021, 5:28:30 AMMar 1
to
Bonjour,
Et merci pour cette réponse.
Effectivement, mes excuses si je ne suis pas clair.
Dans le code LaTeX que je voudrais mettre en place, pour la page de titre qui m'intéresse, j'aurais quelque chose comme :

\documentclass{scrartcl}
\usepackage{polyglossia}
\setdefaultlanguage{french}
\usepackage{fontspec}
\usepackage{monarticle} %%% ici, l'appel du template que je souhaite utiliser pour mes articles, définissant notamment \auteur et \titre
\titre{Titre en français}{Title in English}
\auteur{auteur1}{institution1}{email1}
\auteur{auteur2}{institution2}{email2}
...
\auteur{auteurN}{institutionN}{emailN}
\begin{document}
\maketitle
Le texte de l'article
\end{document}

Et donc je souhaiterais pouvoir empiler en bas de page de titre les auteurs (qui peuvent être 1 ou 10 selon les cas) et leur affiliation. J'ai supposé qu'il était possible de faire une boucle sur la variable \auteur, qui permette de récupérer les contenus, et de les insérer dans une boîte qui serait plaquée en bas de page de titre.
Donc dans le fichier monarticle.sty, un mécanisme qui boucle sur la variable auteur, et récupère les différents contenus pour les afficher successivement dans une boîte placée sous les titres fr et en, avec un \vfill entre les titres et la boîte des auteurs.
De nouveau, mon approche n'est peut-être pas la bonne. J'essaie de construire un template qui permettrait de répondre à la demande du comité de rédaction de la revue...
J'espère avoir été plus clair. Merci en tout cas pour les informations fournies dans la réponse, qui m'apprennent beaucoup !

Cordialement,

Astor

Bernard Jacquemin

unread,
Mar 10, 2021, 12:34:17 PMMar 10
to
Bonjour à tous,
Finalement, j'ai revu ma manière de procéder. Plus de boucle, mais une concaténation récursive dans une variable contenant tous les auteurs. Voilà comment ça fonctionne :

\newcommand{\VARauteurs}{} %% ma variable contenant tous les auteurs
\newcommand{\auteur}[3]{% la macro qui peut être appelée plusieurs fois dans le document, une fois pour chaque auteur
\ifx\VARauteurs\empty
\def\VARauteurs{\footnotesize\sffamily\setlength{\parindent}{1.5em}}% pour la mise en forme particulière des informations d'auteur
\else
\expandafter\def\expandafter\VARauteurs\expandafter{\VARauteurs \par\medskip\noindent #1\par\smallskip\emph{#2}\par#3}%
\fi
}

Ce n'est peut-être pas la meilleure manière de procéder, ni la plus élégante, mais ça fonctionne et ça produit le résultat que je voulais.
À noter que j'ai essayé de procéder de manière « moins TeX et plus LaTeX », en utilisant une commande \g@addto@macro (du package etoolbox) à la place de la redéfinition de \VARauteurs. Mais je ne suis jamais parvenir à faire fonctionner cette macro... Il doit y avoir quelque chose qui m'échappe, mais j'ai reproduit les exemples trouvés sur le web, et j'ai systématiquement une erreur m'indiquant que \g n'est pas reconnu, et un PDF qui contient "addtomacro". Mais le principal, c'est que ça marche...
Merci encore à tous pour tout ce travail que vous faites sur la durée dans ce groupe.

Astor
Reply all
Reply to author
Forward
0 new messages