tcolorbox: comment faire une variante du mylib

Aug 16 2020

Cette question :

Comment reproduire cette boîte dans tcolorbox

a une réponse claire. Je voulais faire une variante similaire avec deux petits changements:

-au lieu de LIB, utilisez REMARKS (ok, c'est trivial)

-formater le texte en puces (itemize environnement)

\newtcbox{\myremarks}{enhanced,nobeforeafter,tcbox raise base,boxrule=0.4pt,top=0mm,bottom=0mm,
  right=0mm,left=4mm,arc=1pt,boxsep=2pt,before upper={\vphantom{dlg}},
  colframe=green!50!black,coltext=green!25!black,colback=green!10!white,
  overlay={\begin{tcbclipinterior}\fill[green!75!blue!50!white] (frame.south west)
    rectangle node[text=white,font=\sffamily\bfseries\tiny,rotate=90] {REMARKS} ([xshift=4mm]frame.north west);\end{tcbclipinterior}}}


\NewDocumentCommand\remarks{m} 
{\myremarks{\begin{itemize} #1\end{itemize}}}

échouera sur ceci:

\remarks
{
\item Perfect relationships of $r=\pm1$ do not exist in the real world.
\item Correlation does not imply causation
}

ne parvient pas à noter un élément manquant, il y a donc une sorte de problème d'analyse en cours.

Il est probable que la manière idéale de le faire serait de modifier directement la newtcbox afin qu'elle formate le texte dans la taille d'élément, mais je ne sais même pas par où commencer.

Réponses

2 muzimuzhiZ Aug 17 2020 at 05:05

Essaye ça:

  • L'option varwidth upper=\linewidthest utilisée (avec le varwidthpaquet chargé) pour permettre \myremarksde composer son argument en mode paragraphe, ce qui est requis par l' itemizeenvironnement. C'est équivalent à \myremarks{\begin{varwidth}{\linewidth} ...\end{varwidth}}.
  • Étant donné que le texte pivoté REMARKSest supérieur à la hauteur minimale de \myremarks, l'option height from=1.2cm to \maxdimenest utilisée pour définir une hauteur minimale.
  • Les options de nœud pos=1, anchor=south eastsont ajoutées pour attacher le texte REMARKSen haut, plutôt que centré verticalement.
  • enumitemles options noitemsep, leftmargin=5mmsont pour ajuster les espaces de itemize.
\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{skins}

\usepackage{enumitem}
\usepackage{varwidth}
\usepackage{xparse}

\newtcbox{\myremarks}{
  enhanced,nobeforeafter,tcbox raise base,
  boxrule=0.4pt,top=0mm,bottom=0mm,
  right=0mm,left=4mm,arc=1pt,boxsep=2pt,
  before upper={\vphantom{dlg}},
  colframe=green!50!black,coltext=green!25!black,colback=green!10!white,
  overlay={
    \begin{tcbclipinterior}
      \fill[green!75!blue!50!white] 
        (frame.south west) rectangle 
          node[text=white,font=\sffamily\bfseries\tiny,rotate=90, pos=1, anchor=south east] {REMARKS}
        ([xshift=4mm]frame.north west);
    \end{tcbclipinterior}
  },
  % equivalent to surround the cmd arg in "varwidth" env
  varwidth upper=\linewidth,
  % set minimum height for complete output of rotated "REMARKS"
  height from=1.2cm to \maxdimen,
}

\NewDocumentCommand\remarks{m}{%
  \myremarks{%
    \begin{itemize}[noitemsep, leftmargin=5mm]
      #1%
    \end{itemize}
  }%
}

\begin{document}
\remarks{
  \item abc
}

\remarks{
  \item abc
  \item def
  \item ghi
}
\end{document}