Aiuto creare ambiente teoremi personalizzati

  • Creatore
    Topic
  • #66670
    Up
    0
    Down
    ::


    Ciao a tutti, leggendo nel forum ho trovato l’indicazione del pacchetto mdframed, così ho cercato la documentazione e ho visto un sacco di esempi molto belli.

    In particolare qui ho visto l’esempio a pagina 4 che mi è piaciuto un sacco.

    Però non ci ho capito niente, c’è il codice ma mi riesce difficile comprendere come l’hanno fatto… Ecco il codice dell’esempio.

    `
    \makeatletter
    \newcounter{theo}[section]
    \newcommand*\newmdframedtitleenv[1]{%
    \@afterindentfalse
    {\parindent \z@
    \setlength{\parfillskip}{\z@ plus 1fil}%
    \mdraggedtitle\nobreak%
    \makebox[\linewidth][l]{%
    \hspace*{-1\mdf@innerleftmargin@length}%
    \rlap{\color{white}%
    \hspace*{-1\mdf@middlelinewidth@length}%
    \rule[\mdf@middlelinewidth@length]%
    {\dimexpr\linewidth+1\mdf@innerleftmargin@length%
    +\mdf@innerrightmargin@length
    +2\mdf@middlelinewidth@length\relax}%
    {\dimexpr\ht\strutbox+.3333em\relax}%
    }%
    \rlap{\color{blue!20}%
    \rule{\dimexpr\linewidth+\mdf@innerleftmargin@length%
    +\mdf@innerrightmargin@length\relax}%
    {\mdf@middlelinewidth@length}}%
    \hspace*{-1\mdf@middlelinewidth@length}%
    \tikz[remember picture,baseline]%
    \node[,draw = none, text = black,fill = blue!20,]%
    {\mdf@frametitlefont\strut Theorem~\thetheo#1};\relax%
    }%
    \par\kern.5\baselineskip}%
    \@afterheading}
    \newenvironment{theo}[1][]{%
    \let\mdframedtitleenv\newmdframedtitleenv%
    \stepcounter{theo}%
    \ifstrempty{#1}%
    {\mdfsetup{frametitle={\strut}}}%
    {\mdfsetup{frametitle={:~#1}}}%
    \begin{mdframed}[innertopmargin=0pt,linecolor=blue!20,%
    linewidth=2pt,topline=false,]%
    }{\end{mdframed}}
    `

    Prima domanda: ora per il teorema funziona, volevo creare tutta una serie di riquadrini per teoremi, lemmi, corollari e definizioni sulla falsa riga di quello. Qualcuno mi aiuta a capire come funziona e cosa modificare per creare gli altri ambienti?

    Seconda domanda: compilando mi da un Overfull \hbox proprio dove inserisco l’ambiente.

    Terza ed ultima domanda: come mi conviene numerare gli ambienti per una tesi? Tutti sequenziali oppure indipendentemente tutti gli ambienti? Io sarei per la numerazione sequenziale…

    Grazie in anticipo!

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #66671
      Up
      0
      Down
      ::


      Aggiungo che vorrei mettere tutto in un file separato da caricare nel main.tex per evitare file troppo grossi e incasinati…

      (come avrete capito sono molto scarso con LaTeX…)

    • #66672
      Up
      0
      Down
      ::


      Prova questo:
      `\documentclass{article}

      \usepackage{mdframed,lipsum,tikz}

      \makeatletter
      \def\@declenv#1{%
      \newenvironment{#1}[1][]{%
      \expandafter\let\expandafter\mdframedtitleenv\csname theorem@#1@titleenv\endcsname
      \stepcounter{#1}%
      \ifstrempty{##1}%
      {\mdfsetup{frametitle={\strut}}}%
      {\mdfsetup{frametitle={:~##1}}}%
      \begin{mdframed}[innertopmargin=0pt,linecolor=blue!20,%
      linewidth=2pt,topline=false,]%
      }{\end{mdframed}}}
      \def\@decltitleenv#1#2{%
      \csdef{theorem@#1@titleenv}##1{%
      \@afterindentfalse
      {\parindent \z@
      \setlength{\parfillskip}{\z@ plus 1fil}%
      \mdraggedtitle\nobreak
      \makebox[\linewidth][l]{%
      \hspace*{-1\mdf@innerleftmargin@length}%
      \rlap{\color{white}%
      \hspace*{-1\mdf@middlelinewidth@length}%
      \rule[\mdf@middlelinewidth@length]%
      {\dimexpr\linewidth+1\mdf@innerleftmargin@length
      +\mdf@innerrightmargin@length
      +2\mdf@middlelinewidth@length\relax}%
      {\dimexpr\ht\strutbox+.3333em\relax}}%
      \rlap{\color{blue!20}%
      \rule{\dimexpr\linewidth+\mdf@innerleftmargin@length%
      +\mdf@innerrightmargin@length\relax}%
      {\mdf@middlelinewidth@length}}%
      \hspace*{-1\mdf@middlelinewidth@length}%
      \tikz[remember picture,baseline]%
      \node[,draw = none, text = black,fill = blue!20,]%
      {\mdf@frametitlefont\strut #2~\@nameuse{the#1}##1};\relax
      }%
      \par\kern.5\baselineskip}%
      \@afterheading}}
      \newcommand\mdfnewtheorem[2]{%
      \newcounter{#1}[section]%
      \@declenv{#1}%
      \@decltitleenv{#1}{#2}}
      \makeatother

      \mdfnewtheorem{teorema}{Teorema}
      \mdfnewtheorem{definizione}{Definizione}

      \begin{document}
      \begin{teorema}[di pitagora]
      \lipsum[3]
      \end{teorema}
      \begin{teorema}
      \lipsum[2]
      \end{teorema}
      \begin{definizione}[di insieme]
      \lipsum[4]
      \end{definizione}
      \begin{definizione}
      \lipsum[6]
      \end{definizione}
      \end{document}
      `

      È fatto un po’ di fretta e magari non è flessibilissimo, ma sembra funzionare.

      Ciao,
      Antonio

      PS: metti il codice nei tag [`[`, non con lo spoiler! 🙂

    • #66673
      Up
      0
      Down
      ::


      Grazie, sistemato nel code invece dello spoiler.

      Però così serve a creare i due ambienti come fotocopie di un solo ambiente. Invece a me sarebbe piaciuto cambiare il colore a seconda dell’ambiente… I lemmi di un colore, i teoremi di un altro… Però in effetti non so se potrebbe essere una buona idea, pensandoci un po’ forse renderebbe troppo pesante la lettura… Che ne pensate?

    • #66674
      Up
      0
      Down
      ::


      Per il fatto dei colori, dipende chi è il tuo lettore, soprattutto quanti anni ha. 🙂 Per materiale universitario eviterei certamente, ma per dispense scolastiche perché no? Basta che i colori siano tenui e tutto stia in armonia. Ma altri possono argomentarti con forza certamente maggiore della mia.

      Ho dato una sistemata al codice:
      `\documentclass{article}

      \usepackage{mdframed,lipsum,tikz}

      \makeatletter
      % #1: il nome dell'ambiente (es: teorema)
      % #2: il colore (es: blue!20)
      % #3: il titolo del teorema (es: di Pitagora)
      \newenvironment{mdfthm}[3]{%
      \expandafter\let\expandafter\mdframedtitleenv\csname @mdfthm@titenv@#1\endcsname
      \stepcounter{#1}%
      \ifstrempty{#3}%
      {\mdfsetup{frametitle={\strut}}}%
      {\mdfsetup{frametitle={:~#3}}}%
      \begin{mdframed}[innertopmargin=0pt,linecolor=#2,%
      linewidth=2pt,topline=false,]%
      }{\end{mdframed}}

      % Argomenti:
      % #1: il nome dell'ambiente (es: teorema)
      % #2: il titolo dell'ambiente (es: Teorema)
      % #3: il colore (es: blue!20)
      % #4: il titolo del teorema (es: di Pitagora)
      \newcommand{\@mdfthm@titenv}[4]{%
      \@afterindentfalse
      {\parindent \z@
      \setlength{\parfillskip}{\z@ plus 1fil}%
      \mdraggedtitle\nobreak
      \makebox[\linewidth][l]{%
      \hspace*{-1\mdf@innerleftmargin@length}%
      \rlap{\color{white}%
      \hspace*{-1\mdf@middlelinewidth@length}%
      \rule[\mdf@middlelinewidth@length]%
      {\dimexpr\linewidth+1\mdf@innerleftmargin@length
      +\mdf@innerrightmargin@length
      +2\mdf@middlelinewidth@length\relax}%
      {\dimexpr\ht\strutbox+.3333em\relax}}%
      \rlap{\color{#3}%
      \rule{\dimexpr\linewidth+\mdf@innerleftmargin@length%
      +\mdf@innerrightmargin@length\relax}%
      {\mdf@middlelinewidth@length}}%
      \hspace*{-1\mdf@middlelinewidth@length}%
      \tikz[remember picture,baseline]%
      \node[draw = none, text = black, fill = #3]%
      {\mdf@frametitlefont\strut #2~\@nameuse{the#1}#4};\relax}%
      \par\kern.5\baselineskip}%
      \@afterheading}

      % Argomenti:
      % #1: il nome dell'ambiente (es: teorema)
      % #2: il titolo dell'ambiente (es: Teorema)
      % #3: il colore (es: blue!20)
      \newcommand\mdfnewtheorem[3]{%
      \newcounter{#1}[section]%
      \newenvironment{#1}[1][]{%
      \begin{mdfthm}{#1}{#3}{##1}}{\end{mdfthm}}%
      \@namedef{@mdfthm@titenv@#1}{%
      \@mdfthm@titenv{#1}{#2}{#3}}}
      \makeatother

      \mdfnewtheorem{teorema}{Teorema}{blue!20}
      \mdfnewtheorem{definizione}{Definizione}{green!20}

      \begin{document}
      \begin{teorema}[di pitagora]
      \lipsum[3]
      \end{teorema}
      \begin{teorema}
      \lipsum[2]
      \end{teorema}
      \begin{definizione}[di insieme]
      \lipsum[4]
      \end{definizione}
      \begin{definizione}
      \lipsum[6]
      \end{definizione}
      \end{document}`

      Noto però che c’è un’imperfezione sul lato superiore del disegno, e c’è anche nel codice originario (non ce l’ho messa io!). Servirebbe un esperto di TikZ per capirne il perché.

      Ciao,
      Antonio

    • #66675
      Up
      0
      Down
      ::

      antonio.macrì” post=65678Per il fatto dei colori, dipende chi è il tuo lettore, soprattutto quanti anni ha. 🙂 Per materiale universitario eviterei certamente, ma per dispense scolastiche perché no? Basta che i colori siano tenui e tutto stia in armonia. Ma altri possono argomentarti con forza certamente maggiore della mia.

      Grazie della risposta. No lo dovrei usare per una tesi specialistica. A questo punto ci penserò un po’…

      L’idea mi era venuta vedendo un libro che sta scrivendo il mio relatore in cui aveva riquadrato in modo simile le parti riguardanti gli assiomi.

      Dici che per una tesi è un po’ eccessivo? Tieni conto che probabilmente (come il 99,99% delle tesi e forse anche qualcosa in più) a leggerla saremo io, il mio relatore e il controrelatore… E magari qualche ragazzo che studia e può averne bisogno per le parti introduttive da integrare con gli appunti che ha preso a lezione… Difficilmente il pubblico sarà più ampio

    • #66676
      Up
      0
      Down
      ::

      SIGI” post=65679

      Per il fatto dei colori, dipende chi è il tuo lettore, soprattutto quanti anni ha. 🙂 Per materiale universitario eviterei certamente, ma per dispense scolastiche perché no? Basta che i colori siano tenui e tutto stia in armonia. Ma altri possono argomentarti con forza certamente maggiore della mia.

      Grazie della risposta. No lo dovrei usare per una tesi specialistica. A questo punto ci penserò un po’…

      L’idea mi era venuta vedendo un libro che sta scrivendo il mio relatore in cui aveva riquadrato in modo simile le parti riguardanti gli assiomi.

      Dici che per una tesi è un po’ eccessivo? Tieni conto che probabilmente (come il 99,99% delle tesi e forse anche qualcosa in più) a leggerla saremo io, il mio relatore e il controrelatore… E magari qualche ragazzo che studia e può averne bisogno per le parti introduttive da integrare con gli appunti che ha preso a lezione… Difficilmente il pubblico sarà più ampio

      In una tesi effettivamente avere i teoremi e lemmi colorati credo sia eccessivo (opinione personale e come tale discutibilissima :smile:): per la presentazione invece è un’ottima idea! I colori, infatti aiutano molto (sempre opinione personale :smile:).

      Ciao
      Claudio

Visualizzazione 5 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top