Environnements avec un nom étoilé

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Environnements avec un nom étoilé

Messagepar Ophiucus02 » Dimanche 30 Octobre 2016, 22:07

Bonjour,
J'ai un environnement avec une option :
Code: Tout sélectionner
        \newcounter{actcount}
   \newenvironment{activite}[1][]{
      \refstepcounter{actcount}
      \tikzstyle{thmborder}=[draw=violet,fill=violet!10,line width=1pt,rounded corners=5pt]
      \shorthandoff{;}
      \def\FrameCommand{\parchmentframe}
      \def\FirstFrameCommand{\parchmentframetop}
      \def\MidFrameCommand{\parchmentframemiddle}
      \def\LastFrameCommand{\parchmentframebottom}
      \vskip\baselineskip
       \MakeFramed{\FrameRestore}
        \noindent
        \tikz\node[inner sep=1.2ex,draw=violet,fill=violet,anchor=west,overlay,line width=1pt,rounded corners=4pt]at(0em,1em){
            \color{white}{\bf Activité~\theactcount\if\relax\detokenize{#1}\relax\else\space:~#1\fi}
        };
        \par\nobreak
    }{\endMakeFramed}

\begin{activite}...\end{activite} crée un encadré avec titre et compte le nombre de tels environnements.

J'aimerais le compléter en \begin{activite*}...\end{activite} : l'ajout de l'étoile entraînerait alors la suppression du compteur et uniquement la suppression du compteur.

Quelqu'un sait-il comment construire un tel environnement en latex : nom sans étoile on a le compteur et nom avec étoile on n'a pas le compteur ? et tout le reste est sans changement à savoir une option (le titre).

Merci

Cordialement
Ophiucus02
Utilisateur
 
Messages: 2
Inscription: Vendredi 18 Octobre 2013, 16:29
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Environnements avec un nom étoilé

Messagepar balf » Lundi 31 Octobre 2016, 01:41

Vous auriez pu poster un code compilable… J'ai trouvé sur internet la définition des commandes que vous utilisez, du moins je le suppose.
On obtient ce que vous voulez avec xparse et quelques modifications au code.
B. A.

Code: Tout sélectionner
\documentclass[11pt, french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fourier, erewhon}
\usepackage{babel}%
 \usepackage{framed, tikz, pgf}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usetikzlibrary{decorations.pathmorphing,calc}
\pgfmathsetseed{1} % To have predictable results
% Define a background layer, in which the parchment shape is drawn
\pgfdeclarelayer{background}
\pgfsetlayers{background,main}

% define styles for the normal border and the torn border
\tikzset{
  normal border/.style={orange!30!black!10, decorate,
     decoration={random steps, segment length=2.5cm, amplitude=.7mm}},
  torn border/.style={orange!30!black!5, decorate,
     decoration={random steps, segment length=.5cm, amplitude=1.7mm}}}

% Macro to draw the shape behind the text, when it fits completly in the
% page
\def\parchmentframe#1{
\tikz{
  \node[inner sep=2em] (A) {#1};  % Draw the text of the node
  \begin{pgfonlayer}{background}  % Draw the shape behind
  \fill[normal border]
        (A.south east) -- (A.south west) --
        (A.north west) -- (A.north east) -- cycle;
  \end{pgfonlayer}}}

% Macro to draw the shape, when the text will continue in next page
\def\parchmentframetop#1{
\tikz{
  \node[inner sep=2em] (A) {#1};    % Draw the text of the node
  \begin{pgfonlayer}{background}
  \fill[normal border]              % Draw the ``complete shape'' behind
        (A.south east) -- (A.south west) --
        (A.north west) -- (A.north east) -- cycle;
  \fill[torn border]                % Add the torn lower border
        ($(A.south east)-(0,.2)$) -- ($(A.south west)-(0,.2)$) --
        ($(A.south west)+(0,.2)$) -- ($(A.south east)+(0,.2)$) -- cycle;
  \end{pgfonlayer}}}

% Macro to draw the shape, when the text continues from previous page
\def\parchmentframebottom#1{
\tikz{
  \node[inner sep=2em] (A) {#1};   % Draw the text of the node
  \begin{pgfonlayer}{background}
  \fill[normal border]             % Draw the ``complete shape'' behind
        (A.south east) -- (A.south west) --
        (A.north west) -- (A.north east) -- cycle;
  \fill[torn border]               % Add the torn upper border
        ($(A.north east)-(0,.2)$) -- ($(A.north west)-(0,.2)$) --
        ($(A.north west)+(0,.2)$) -- ($(A.north east)+(0,.2)$) -- cycle;
  \end{pgfonlayer}}}

% Macro to draw the shape, when both the text continues from previous page
% and it will continue in next page
\def\parchmentframemiddle#1{
\tikz{
  \node[inner sep=2em] (A) {#1};   % Draw the text of the node
  \begin{pgfonlayer}{background}
  \fill[normal border]             % Draw the ``complete shape'' behind
        (A.south east) -- (A.south west) --
        (A.north west) -- (A.north east) -- cycle;
  \fill[torn border]               % Add the torn lower border
        ($(A.south east)-(0,.2)$) -- ($(A.south west)-(0,.2)$) --
        ($(A.south west)+(0,.2)$) -- ($(A.south east)+(0,.2)$) -- cycle;
  \fill[torn border]               % Add the torn upper border
        ($(A.north east)-(0,.2)$) -- ($(A.north west)-(0,.2)$) --
        ($(A.north west)+(0,.2)$) -- ($(A.north east)+(0,.2)$) -- cycle;
  \end{pgfonlayer}}}
 
\newcounter{actcount}
       \newenvironment{activite}[1][]{
          \refstepcounter{actcount}
          \tikzstyle{thmborder}=[draw=violet,fill=violet!10,line width=1pt,rounded corners=5pt]
          \shorthandoff{;}
          \def\FrameCommand{\parchmentframe}
          \def\FirstFrameCommand{\parchmentframetop}
          \def\MidFrameCommand{\parchmentframemiddle}
          \def\LastFrameCommand{\parchmentframebottom}
          \vskip\baselineskip
           \MakeFramed{\FrameRestore}
            \noindent
            \tikz\node[inner sep=1.2ex,draw=violet,fill=violet,anchor=west,overlay,line width=1pt,rounded corners=4pt]at(0em,1em){
                \color{white}{\bfseries Activité~\theactcount\if\relax\detokenize{#1}\relax\else\space:~#1\fi}
            };
            \par\nobreak
        }{\endMakeFramed}  %
       
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{xparse}   

\DeclareDocumentEnvironment{activite}{s o}{%
          \tikzstyle{thmborder}=[draw=violet,fill=violet!10,line width=1pt,rounded corners=5pt]
          \shorthandoff{;}
          \def\FrameCommand{\parchmentframe}
          \def\FirstFrameCommand{\parchmentframetop}
          \def\MidFrameCommand{\parchmentframemiddle}
          \def\LastFrameCommand{\parchmentframebottom}
          \vskip\baselineskip
           \MakeFramed{\FrameRestore}
            \noindent
            \tikz\node[inner sep=1.2ex,draw=violet,fill=violet,anchor=west,overlay,line width=1pt,rounded corners=4pt]at(0em,1em){
                \color{white}\bfseries{\IfBooleanTF{#1}{Activité}{\refstepcounter{actcount}Activité~\theactcount\negthinspace}
                \IfNoValueF{#2}{:~#2}}%
            };
            \par\nobreak
        }{\endMakeFramed}

\ExplSyntaxOn
\cs_new:cpn {activite*} {\activite*}
\cs_new_eq:cN {endactivite*} \endactivite
\ExplSyntaxOff

\begin{document}

\begin{activite*}[devinette]%
\end{activite*}

\begin{activite}[mots croisés]%
\end{activite}

\begin{activite}%
\end{activite}

\end{document}
Fichiers joints
envtetoile.pdf
(60.67 Kio) Téléchargé 18 fois
balf
Zetta-utilisateur
 
Messages: 3640
Inscription: Mercredi 02 Janvier 2008, 23:18
Statut actuel: Actif et salarié | Maître de conférence

Re: Environnements avec un nom étoilé

Messagepar Ophiucus02 » Lundi 31 Octobre 2016, 09:04

Bonjour,
Merci pour la réponse très rapide.
Oui vous avez raison pour le code mais je voulais surtout apprendre à réaliser des environnements avec étoile en général comme je sais le faire pour des commandes.
Cordialement
Ophiucus02
Utilisateur
 
Messages: 2
Inscription: Vendredi 18 Octobre 2013, 16:29
Statut actuel: Actif et salarié | Enseignant

Re: Environnements avec un nom étoilé

Messagepar un bon petit » Lundi 31 Octobre 2016, 09:35

Ophiucus02 a écrit:Oui vous avez raison pour le code mais je voulais surtout apprendre à réaliser des environnements avec étoile en général comme je sais le faire pour des commandes.

On peut procéder de cette manière, par exemple :

Code: Tout sélectionner
\documentclass{article}
\usepackage[T1]{fontenc}
\newif\ifteststar
\newenvironment{test*}{\teststartrue\debuttest}{\fintest}
\newenvironment{test}{\teststarfalse\debuttest}{\fintest}
\def\debuttest{Un \ifteststar petit \else grand \fi test : <<~}
\def\fintest{~>> fin du test (\ifteststar petit\else grand\fi).}
\begin{document}
\begin{test}foo\end{test}

\begin{test*}bar\end{test*}
\end{document}
un bon petit
Giga-utilisateur
 
Messages: 634
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Ahrefs [Bot], Google Adsense [Bot], Grapeshot [Crawler], Proximic [Spider] et 6 invités