Comment formater les nœuds / structures dans tikz?
J'ai créé le carré (ou matrice) d'Eisenhower suivant inspiré de cette réponse fantastique :
Je voudrais que le mien soit beaucoup plus efficace en termes d'espace: taille de texte / cases à cocher plus petites, bordures plus fines, pas d'espace / marge / gouttière entre les carrés, pas de lignes horizontales dans les carrés, etc. Le
texte à gauche est une bonne approximation du max. le texte de l'élément de la liste de vérification de la taille doit être.
Mais après de nombreux bricolages, je suis toujours incapable de modifier les propriétés suivantes:
- Limites
- Rendre les bordures ultra-minces (1 px suffirait)
- Éléments / boîtes de la liste de contrôle
- Supprimer les lignes horizontales
- Vérifiez
\Boxque chaque élément de la liste de contrôle est plus petit et / ou à l'échelle avec du texte - Rendre les articles plus serrés / plus rapprochés verticalement?
labeltexte- Centré sur le bord gauche / supérieur des carrés individuels
Ci-dessous mon document:
main.tex
\documentclass[english]{book}
\usepackage{amssymb, tikz}
\usetikzlibrary{shapes.multipart, positioning, fit, backgrounds}
...
% \eisenbox: for making each box of an Eisenhower square
\newcommand{\eisenbox}[6][] {
\node [rectangle split,rectangle split parts={#6}, fill=white,
text width=5.25cm,align=left,text=#2,draw,sharp corners,draw=#2,
#1]
(multi-#3)
{\strut$\Box$\nodepart{two}\strut$\Box$\nodepart{three}\strut$\Box$\nodepart{four}\strut$\Box$
\nodepart{five}\strut$\Box$\nodepart{six}\strut$\Box$\nodepart{seven}\strut$\Box$
\nodepart{eight}\strut$\Box$\nodepart{nine}\strut$\Box$\nodepart{ten}\strut$\Box$};
\node[left=1pt of multi-#3.south west,anchor=south west,rotate=90,text=black]
(label-#3) {#5};
\begin{scope}[on background layer]
\node[fit=(multi-#3),fill=#2,sharp corners,
label={[text=#2,anchor=south west,font=\bfseries]above left:#4}] (fit-#3){};
\end{scope}
}
% \eisensquare: creates a fancy Eisenhower square
\newcommand{\eisensquare}[1] {
\eisenbox{black}{tl}{\footnotesize Urgent}{\footnotesize Important}{#1}
\eisenbox[right=0.2cm of multi-tl]{black}{tr}{\footnotesize Not Urgent}{}{#1}
\eisenbox[below=0.2cm of multi-tl]{black}{bl}{}{\footnotesize Not Important}{#1}
\eisenbox[right=0.2cm of multi-bl]{black}{br}{}{}{#1}
}
...
\begin{document}
\frontmatter
\maketitle
...
\mainmatter
...
\subfile{./folder/subfile.tex}
\backmatter
\end{document}
subfile.tex
\documentclass[../main.tex]{subfiles}
\begin{document}
...
\paragraph{Foo}\mbox{}\\
\begin{tikzpicture}[font=\sffamily]
\eisensquare{7}
\end{tikzpicture}
...
\end{document}
Je ne sais pas ce que je fais mal. tikzIgnore / renvoie une erreur chaque fois que je place width, line widthetc. partout dans le \node [options]sein de \eisenbox.
Je suis complètement nouveau dans pgf/ tikz, donc toute idée serait grandement appréciée.
Selon la réponse exemplaire de gernot, je l'ai presque compris. Il ne reste plus qu'à modifier le nombre variable d'items par «quadrant». Normalement, je ne serais jamais aussi particulier, sans le fait que je l'utilise tous les jours pendant très longtemps.
Comment ferait-on pour créer des lignes vides / vides lorsque les lignes restantes> nombre d'éléments?
main.tex
\newcommand\eisenlabel[1]{{\footnotesize\sffamily#1}}
% arguments: 1st is total # lines, 2nd is # items
\newcommand{\eisenbox}[2]{\fbox{%
\begin{tabular}{l}
\multido{}{#1}{%
\makebox[0.44\textwidth][l]{$\square$} %adding \\ here makes errors, but I believe its absence is FUBARing the table
}
\end{tabular}%
}}
% first argument: max lines, then items per quadrant starting with urgent+important
% could do this without 1st arg by determining largest value
% but not familiar enough with this so we'll just supply it manually (for now)
\newcommand{\eisensquare}[5] {%
\fboxrule=0.1ex% <<< adjust line width
\begin{tabular}{@{}r@{\hspace{0.3em}}c@{\hspace{-\fboxrule}}c@{}} % <<< adjust distance between rotated labels and box
& \eisenlabel{urgent} & \eisenlabel{not urgent} \\
\turnbox{90}{\makebox[0pt]{\eisenlabel{important}}}
& \eisenbox{#1}{#2} & \eisenbox{#1}{#3} \\[-\fboxrule]
\turnbox{90}{\makebox[0pt]{\eisenlabel{not important}}}
& \eisenbox{#1}{#4} & \eisenbox{#1}{#5}
\end{tabular}%
}
subfile.tex
\(\eisensquare{5}{3}{4}{5}{3}\)
Réponses
Voici une solution flexibel. Puisque \multidone fonctionne pas bien dans un tabular, j'ai utilisé des commandes encore plus basiques. La commande de niveau supérieur est
\eisensquare{height of single box}{width of single box}{top left}{top right}{bottom left}{bottom right}
heightet widthpeuvent être des dimensions absolues ou des multiples de longueurs comme \baselineskip(hauteur d'une ligne) ou \textwidth.
\documentclass{article}
\usepackage{amssymb,rotating,multido}
% \eisenlabel{width}{label}
\newcommand\eisenlabel[2]{\makebox[#1]{\footnotesize\sffamily#2}}
% \veisenlabel{height}{label}
\newcommand\veisenlabel[2]{\turnbox{90}{\eisenlabel{#1}{#2}}\ }
% \eisenbox{height}{width}{number of items}
\newcommand\eisenbox[3]{\fbox{%
\vbox to #1{%
\multido{}{#3}{\hbox to #2{$\square$\hfill}}%
\vfill
}%
}}
% \eisensquare{height of single box}{width of single box}{top left}{top right}{bottom left}{bottom right}
\newcommand\eisensquare[6]{{%
\fboxrule=0.1ex%
\vbox{%
\hbox{\ \eisenlabel{#2}{urgent}\ \eisenlabel{#2}{not urgent}}%
\hbox{\veisenlabel{#1}{important}\eisenbox{#1}{#2}{#3}\hspace{-\fboxrule}\eisenbox{#1}{#2}{#4}}%
\nointerlineskip
\vspace{-\fboxrule}%
\hbox{\veisenlabel{#1}{not important}\eisenbox{#1}{#2}{#5}\hspace{-\fboxrule}\eisenbox{#1}{#2}{#6}}%
}}}
\begin{document}
\noindent
\eisensquare{5\baselineskip}{0.4\textwidth}{3}{4}{5}{3}
\noindent
\eisensquare{2cm}{5cm}{3}{4}{5}{3}
\end{document}
Tikz est un package merveilleux, mais pour une conception aussi simple, je suggère d'utiliser des tableaux. Il peut être plus évident de savoir où modifier l'apparence.
Je suggère d'utiliser emou excomme unités de longueur, car ils changent avec la taille de la police. Dans le code, j'ai marqué les endroits où ajuster la largeur des boîtes, la largeur de la ligne et la distance des étiquettes verticales.
\documentclass{article}
\usepackage{amssymb,rotating}
\newcommand\eisenlabel[1]{{\footnotesize\sffamily#1}}
\newcommand\eisenline{\makebox[0.44\textwidth][l]{$\square$}}% <<< adjust width of boxes
\newcommand\eisenbox{\fbox{%
\begin{tabular}{l}
\eisenline\\
\eisenline\\
\eisenline\\
\eisenline\\
\eisenline\\
\eisenline\\
\eisenline
\end{tabular}%
}}
\newcommand\eisensquare{{%
\fboxrule=0.1ex% <<< adjust line width
\begin{tabular}{@{}r@{\hspace{0.3em}}c@{\hspace{-\fboxrule}}c@{}} % <<< adjust distance between rotated labels and box
& \eisenlabel{urgent} & \eisenlabel{not urgent} \\
\turnbox{90}{\makebox[0pt]{\eisenlabel{important}}}
& \eisenbox & \eisenbox \\[-\fboxrule]
\turnbox{90}{\makebox[0pt]{\eisenlabel{not important}}}
& \eisenbox & \eisenbox
\end{tabular}%
}}
\begin{document}
\noindent
\eisensquare
\end{document}