È un sacco di tempo che non riesco a scrivere un post. Ma questo non significa che ho smesso di usare LaTeX, anzi. Quindi è meglio che inizi a riportare i miei esperimenti, altrimenti mi dimentico cosa ho fatto.

Vediamo il problema che volevo affrontare: una tabella molto semplice, ma con molti elementi tutti uguali da ripetere, per di più una tabella che uso in vari file con un numero di colonne diverso. Per farla breve, vediamo la figura e il relativo codice:

%% preamble

\usepackage{array}

%% document
\makebox[\textwidth][c]{%
\sffamily
\renewcommand{\arraystretch}{1.2}
\renewcommand{\tabcolsep}{1mm}
\begin{tabular}{|>{\bfseries}l *{8}{|>{\centering}p{3em}} |>{\bfseries\centering\arraybackslash}p{5em}|}\hline
esercizio & \textbf{1} & \textbf{2} & \textbf{3} & \textbf{4} & \textbf{5} & \textbf{6} & \textbf{7} & \textbf{8}  &\textbf{totale}\\\hline
punteggio massimo & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 8 \\\hline
punteggio ottenuto & & & & & & & & & \\\hline
\multicolumn{10}{l}{\sffamily \small Commento di vario tipo.}
\end{tabular}
}

Domanda: come rendere più snello il codice?

Ho individuato due modi, sicuramente ottimizzabili, ma entrambi caratterizzati da un approccio “facile” al problema.

Soluzione con il pacchetto forloop: la documentazione si trova qui, il comando che utilizzo è:

  • \forLoop[ step ]{ start }{ stop }{ counter name }{ code }

Per comodità definisco un opportuno contatore, exnum, che viene incrementato di uno (tramite \stepcounter{exnum}) ad ogni ciclo e del quale scrivo il valore (tramite \arabic{exnum})

%% preamble

\usepackage{array}
\usepackage{forloop}

%% document

\newcounter{exnum} % counter for writing the cell number
\setcounter{exnum}{0}
\newcounter{cellex}
\newcommand{\qnum}{7} % number of questions
\newcommand{\totnumcell}{9} % \qnum + 2

\makebox[\textwidth][c]{%
\sffamily
\begin{tabular}{|>{\bfseries}l *{\qnum}{|>{\centering}p{3em}} |>{\bfseries\centering\arraybackslash}p{5em}|}\hline
esercizio & \forLoop{1}{\qnum}{cellex}{\textbf{\stepcounter{exnum}\arabic{exnum}} & } \textbf{totale}\\\hline
punteggio massimo & \forLoop{1}{\qnum}{cellex}{ 2 & } 14 \\\hline
punteggio ottenuto & \forLoop{1}{\qnum}{cellex}{ & } \\\hline
\multicolumn{\totnumcell}{l}{\sffamily \small Commento di vario tipo.}
\end{tabular}
}

Soluzione con TikZ: ho usato il comando foreach per le iterazioni. Il codice può essere largamente ottimizzato, ma intanto mi è venuto così:

%% preamble

\usepackage{tikz}
\usetikzlibrary{positioning}

%% document

\newcommand{\esmax}{4}

\begin{center}
\begin{tikzpicture}[node distance=0 cm,outer sep = 0pt]
\tikzstyle{title}=[draw, rectangle,  minimum height=1cm, minimum width=4cm, font=\bfseries \sffamily]
\tikzstyle{mycell}=[draw, rectangle,  minimum height=1cm, minimum width=5em]

%% rows title
\node[title] (es)   at (0,0) {esercizio};
\node[title] (pmax) [below= of es] {punteggio massimo};
\node[title] (pti)  [below= of pmax] {punteggio ottenuto};
%% exercise number
\node[mycell,font=\bfseries\sffamily] (n1) [above right= of pmax] {1}; % second cell of the row
\foreach \x [remember=\x as \lastx (initially 1)] in {2,...,\esmax}{
 \node[mycell,font=\bfseries\sffamily] (n\x) [right= of n\lastx] {\x};
   \ifnum \x=\esmax+1
     \node[mycell,font=\bfseries\sffamily] (tot) [right= of n\esmax] {totale};
     \node[mycell,font=\bfseries\sffamily] (ptot) [below= of tot] {4};
     \node[mycell] (last) [below= of ptot] {};
   \fi
} %
%% exercise points and the empty cells below
\node[mycell,font=\sffamily] (p1) [right= of pmax] {1};
\node[mycell] (v1) [below= of p1] {};% second cell of the row
\foreach \x [remember=\x as \lastx (initially 1)] in {2,...,\esmax}{
 \node[mycell,font=\sffamily] (p\x) [right= of p\lastx] {1};
 \node[mycell] (v\x) [below= of p\x] {};
} %
\end{tikzpicture}
\end{center}

e questo è il risultato:

Non sottovalutiamo la soddisfazione che si prova nel regalare un biglietto d’auguri fatto da noi, soprattutto se chi lo riceve capirà, dalla scelta delle immagini e delle frasi, che è stato proprio personalizzato apposta per lui o lei.

Per realizzare questo progetto con LaTeX, ci viene in aiuto il pacchetto gcard. Il suo uso è facilissimo, tutto spiegato nel chiaro manuale.

Diciamo che la parte più importante è la scelta di immagini e font. Questa volta mi sono cimentata con XeLaTeX, proprio per poter spaziare tra i font per le scritte.

I biglietti risultanti devono essere piegati in quattro.

\documentclass[a4paper,11pt]{article}

%% fonts
\usepackage{fontspec}
  \setromanfont{Timeless}
\usepackage{xltxtra}
\usepackage[T1]{pbsi}

%% margins, spacing and page layout
\frenchspacing
\setlength{\parindent}{0pt}

%% packages
\usepackage{graphicx}
\usepackage[table,svgnames]{xcolor}
\usepackage{gcard}
\usepackage{tikz}
   \usetikzlibrary{positioning}
\usepackage[xetex, colorlinks=false]{hyperref}

%%=================
%% BEGINS DOC
%%=================
\begin{document}

\begin{frontcover}
 \includegraphics[width=\panelwidth]{./For_My_Sweet_Love_06.jpg}
\end{frontcover}

\begin{backcover}
\centering
\includegraphics[width=1cm]{../Logo/logo_ttpl_small.png} {\small\href{https://teatimeandlayout.wordpress.com}{ teatimeandlayout.wordpress.com}}

\vspace*{1cm}
{\footnotesize Immagine da \href{http://www.dragonartz.net/}{DragonArtz Design} (CC NC SA 3.0)}
\end{backcover}

\begin{insideright}
\centering
\Huge \color{HotPink}
\textbsi{%
Con affetto,\\
da me \\
a te}
\end{insideright}

\end{document}

\documentclass[a4paper,11pt,landscape]{article}

%% fonts
\usepackage{xltxtra}
  \setromanfont{Timeless}
  \setsansfont{Segoe Print}
\usepackage[T1]{pbsi}

%% margins, spacing and page layout
\frenchspacing
\setlength{\parindent}{0pt}

%% packages
\usepackage{graphicx}
\usepackage[table,svgnames]{xcolor}
\usepackage{gcard}
\usepackage{tikz}
   \usetikzlibrary{positioning}
\usepackage[xetex, colorlinks=false]{hyperref}

%%=================
%% BEGINS DOC
%%=================
\begin{document}

\begin{frontcover}
 \includegraphics[width=\panelwidth]{./rosa_san_valentino.jpg}

%  \setlength{\unitlength}{5mm} %solution with the picture environment
%  \begin{picture}(0,0)
%   \put(10,19){\color{white} \huge \textsf{With Love}}
%  \end{picture}

 \begin{tikzpicture}[remember picture,overlay] %solution with TikZ
  \node[font=\huge,white] at (current page.center) [xshift=6cm,yshift=.1cm] {\textsf{With Love}};
 \end{tikzpicture}
\end{frontcover}

\begin{backcover}
\centering
\small
\includegraphics[width=1cm]{../Logo/logo_ttpl_small.png} \href{https://teatimeandlayout.wordpress.com}{teatimeandlayout.wordpress.com}

\vspace*{1cm}
Foto da \url{http://www.flickr.com/photos/noelzialee/390297217/#/} (CC BY 2.0)
\end{backcover}

\begin{insideright}
\centering
\Huge \color{red!70!pink}
\textbsi{%
Con affetto,\\
da me \\
a te}
\end{insideright}

\end{document}

Bisogna dire che in LaTeX le tabelle sono un argomento che può creare qualche grattacapo, per fortuna la rete pullula di guide. Personalmente tra tutte ho sempre avuto come riferimenti essenziali questi due link:

Ultimamente, con mia grande gioia, c’è una corrente di pensiero che non si tira indietro davanti ad abbellimenti consistenti, nemmeno delle tabelle: uno degli esempi che più mi ha colpito si trova qui, e fa uso di TikZ.

Veniamo al dunque della presentazione.

Il risultato finale è visibile nel file pdf che potete scaricare qui.

Le soluzioni che ho adottato, modificando il tema di default (\usetheme{default}), sono le seguenti:

  • ho scelto un colore per gli elementi che fanno parte della struttura (titoli, titoletti, pallini delle liste, ecc.) per non dover agire su ognuno singolarmente: \usecolortheme[named=RoyalBlue]{structure}
  • ho aggiunto una sfumatura verticale al background con \setbeamertemplate{background canvas}[vertical shading][top=RoyalBlue!25,middle=white,midpoint=0.85]: si possono scegliere i colori in alto, in mezzo e sul fondo della slide, oltre al punto preciso in cui i colori iniziano a degradare uno nell’altro
  • ho eliminato i simboli per la navigazione tra le slide (quelli in basso a destra) con \setbeamertemplate{navigation symbols}{}
  • ho centrato i titoli dei frame con \setbeamertemplate{frametitle}[default][center]
  • ho scelto dei cerchietti come simboli per gli item delle liste con \setbeamertemplate{itemize items}[circle]
  • ho personalizzato i blocchi di testo (blocks) con angoli arrotondati e colore chiaro di fondo tramite:
    \setbeamertemplate{blocks}[rounded][shadow=true]
    \setbeamercolor{block body}{bg=RoyalBlue!15}
    \setbeamercolor{block title}{bg=RoyalBlue!15}

In particolare per modificare la didascalia delle figure, in modo da non avere la scritta "figura n", ho definito un mio template no label (non ho usato tanta scienza, ho copiato il codice di Beamer e tolto le parti che definivano la didascalia, quindi non sono proprio sicura della pulizia stilistica di quanto ho fatto):

\defbeamertemplate{caption}{nolabel}
{%
  \raggedright
  \insertcaption\par
}
\setbeamertemplate{caption}[nolabel]

Per le figure a tutta pagina: ho creato un nuovo ambiente (\begin{pictureframe}{percorso_della_figura} … \end{pictureframe}) per definire i frame in cui inserire le immagini a pieno schermo.
In esso ho ridefinito l’immagine di sfondo, specificandone altezza e larghezza (\paperheight e \paperwidth) e tramite TikZ ho messo il titolo del frame in un nodo rettangolare con i bordi arrotondati (rectangle, rounded corners), con colore semitrasparente (fill=RoyalBlue, fill opacity=0.5), ma con colore del titolo opaco (text opacity=1, mentre il colore era già stato definito indipendentemente da TikZ con \setbeamercolor{frametitle}{fg=White}).
Infine ho tolto il logo dal frame, in modo che non interferisse con l’immagine: \logo{}

Potete vedere l’intero codice qua sotto (purtroppo wordpress non mi consente di caricare un file .tex):


% Rosandra.tex - a Beamer theme
% Copyright (C) 2010 by Cristina Sambo - https://teatimeandlayout.wordpress.com

% This work may be distributed and/or modified:
% - under the conditions of the LaTeX Project Public License version 1.3c or later, available at http://www.latex-project.org/lppl/
% - under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version; see <http://www.gnu.org/licenses/>

% This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

\documentclass[xcolor=svgnames]{beamer}

%% encoding and language options
\usepackage[italian]{babel}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}

%% packages
\usepackage{lmodern}
\usepackage{tikz}
  \usetikzlibrary{calc,backgrounds,positioning,shadows,fadings}

%%%%%%%%
%% THEME CUSTOMIZATIONS
%%%%%%%%

% choosing a color for all structure elements
\usecolortheme[named=RoyalBlue]{structure} 

\usetheme{default}

% adding a vertical shading to the background
\setbeamertemplate{background canvas}[vertical shading][top=RoyalBlue!25,middle=white,midpoint=0.85]

% eliminating symbols in the right corner of the slides  
\setbeamertemplate{navigation symbols}{}
% centering titles of each frame 
\setbeamertemplate{frametitle}[default][center]

% customizing lists
\setbeamertemplate{itemize items}[circle]

% customizing blocks
\setbeamertemplate{blocks}[rounded][shadow=true]
\setbeamercolor{block body}{bg=RoyalBlue!15}
\setbeamercolor{block title}{bg=RoyalBlue!15}

% inserting a logo
\logo{\includegraphics[height=.2\textheight]{path_of_your_logo_image}}

% creating an environment with full-page images: usage \begin{pictureframe}{path_of_picture} ... \end{pictureframe}
\newenvironment{pictureframe}[1]{%
 % setting the image as a full-page background image 
 \setbeamertemplate{background canvas}{%
  \includegraphics[width=\paperwidth,height=\paperheight]{#1}}
 % setting the color of the frame title 
 \setbeamercolor{frametitle}{fg=White}
 % customizing the appearance of the title 
 \setbeamertemplate{frametitle}{
  \begin{tikzpicture}[%
   % defining the style for the node: a rectangle with rounded corners, filled with semi-transparent color, with opaque text for the title 
   blur/.style={rectangle,rounded corners,align=center,fill=RoyalBlue,fill opacity=0.5,text opacity=1,minimum size=.1\textheight,text width=\textwidth}]
   \node[blur] {\insertframetitle};
  \end{tikzpicture}}
 % no logo on full-page images
 \logo{}
 \begin{frame}}%
{\end{frame}}


% defining a new template for caption without label in front of description
\defbeamertemplate{caption}{nolabel}
{%
  \raggedright
  \insertcaption\par
}

\setbeamertemplate{caption}[nolabel]

% elements for the title page 
\title{Presentazione con Beamer}
\author{CriS}
\date{https://teatimeandlayout.wordpress.com}

%==========
% DOCUMENT 
%==========
\begin{document}

\begin{frame}
  \titlepage
\end{frame}

\begin{frame}
\frametitle{Outline}
  \tableofcontents
  % You might wish to add the option [pausesections]
\end{frame}

%%-----------------------
\section{Comandi di base}

\begin{frame}[fragile]
\frametitle{Comandi nel preambolo}
Per creare una presentazione:
 \begin{verbatim}
  \documentclass{beamer}

  \mode<presentation>
 \end{verbatim} 
\end{frame}

\begin{frame}[fragile]
\frametitle{Creare i frame}
 \begin{verbatim}
   \begin{frame}
   \frametitle{Titolo del frame}
   \framesubtitle{Eventuale sottotitolo}
   ...
   contenuto del frame
   ... 
   \end{frame}
 \end{verbatim}
\end{frame}

\begin{frame}[fragile]
\frametitle{Strutturare i frame}
\framesubtitle{Con i block}
 \begin{verbatim}
 \begin{block}{Titoletto del Block}
 contenuto del block
 \end{block}
 \end{verbatim} 

\begin{center}
che ha come risultato:
\end{center}

 \begin{block}{Titoletto del Block}
  contenuto del block
 \end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Strutturare i frame}
\framesubtitle{Dividendo in colonne}
\begin{verbatim}
\begin{columns}
\column{.5\textwidth}
contenuto prima colonna                
\column{.5\textwidth}
contenuto seconda colonna
\end{columns}
\end{verbatim} 

\begin{center}
che ha come risultato:
\end{center}

\begin{columns}
\column{.5\textwidth}
contenuto prima colonna
\column{.5\textwidth}
contenuto seconda colonna
\end{columns} 

\end{frame}

\begin{frame}[fragile]
\frametitle{Creare elenchi}
 \begin{columns}
  \column{0.5\textwidth}
  Elenchi puntati:
\begin{verbatim}
 \begin{itemize}
  \item primo punto 
  \item secondo punto
 \end{itemize}
\end{verbatim} 

 \begin{itemize}
  \item  primo punto 
  \item secondo punto
 \end{itemize}
\column{0.5\textwidth}
 Elenchi numerati:
\begin{verbatim}
 \begin{enumerate}
  \item primo punto 
  \item secondo punto
 \end{enumerate}
\end{verbatim} 

 \begin{enumerate}
  \item  primo punto 
  \item secondo punto
 \end{enumerate}
\end{columns}
\end{frame}

%%-----------------------
\section{Immagini}

\begin{frame}[fragile]
\frametitle{Includere figure}
Si pu\`o usare \texttt{includegraphics} caricando il pacchetto \texttt{graphicx}:

\begin{small}
\begin{verbatim}
\begin{figure}
\includegraphics[width=.3\textwidth,height=.3\textheight]%
  {images/logo_ttpl}
\caption{Didascalia della figura}
\end{figure}
\end{verbatim} 
\end{small}

\begin{figure}
\includegraphics[width=.3\textwidth,height=.3\textheight]{images/logo_ttpl}
\caption{Didascalia della figura}
\end{figure}
\end{frame}

\begin{frame}[fragile]
\frametitle{Immagini a pagina intera}

Uso il seguente comando personalizzato:

\begin{block}{}
\begin{verbatim}
\begin{pictureframe}{path_of_picture}
 ... 
\end{pictureframe}
\end{verbatim} 
\end{block}

\bigskip
\alert{\textit{Nota:}} vedere il codice nel preambolo.

\end{frame}

\begin{pictureframe}{ortensia}
 \frametitle{Figura a pagina intera} 
\end{pictureframe}


%%-----------------------
\section{Comandi avanzati}

\begin{frame}[fragile]
\frametitle{Riportare del codice}
Si usa l'ambiente \alert{\texttt{verbatim}} 

\verb|\begin{verbatim}...codice...\end{verbatim}| 

aggiungendo l'opzione \alert{\texttt{fragile}} al frame:

 \begin{verbatim}
  \begin{frame}[fragile]
  \frametitle{Titolo}
   ambiente verbatim
  \end{frame} 
 \end{verbatim}
\end{frame}


\begin{frame}
\frametitle{Mostrare il testo in sequenza}
\begin{itemize}
\item<1-> primo elemento
\item<2-> secondo elemento
\item<3-> terzo elemento
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{Aggiungere tabelle}
\begin{center}
\begin{tabular}{l|cccc}
x & A & B & C & D \\\hline
E & 1 & 2 & 3 & 4 \\
F & 3 & 4 & 5 & 6 \pause\\
G & 5 & 6 & 7 & 8
\end{tabular}
\end{center}
\end{frame}

\end{document}


Mi è sempre piaciuto il pacchetto Beamer, anche perché appena è uscito è stato subito corredato da un corposo manuale, dotato di esempi ed istruzioni dettagliate, a quei tempi una vera rarità.

Quindi appena mi è stato chiesto aiuto per una presentazione, ho subito pensato a Beamer, anche se ero un po’ arrugginita sui comandi da usare. Ma mi è stato detto: "Non ti preoccupare, voglio qualcosa di semplice, vanno benissimo gli stili predefiniti". Ok.

Naturalmente non si può impedire alle persone di girare per internet e vedere i nuovi trend sulle presentazioni, soprattutto quando una si auto-definisce grande appassionata di design, quindi non so perché mai mi sono sorpresa quando mi è stato detto: "Senti, ho visto la presentazione di Simone, non la trovi molto carina?" Sì, lo è.

Immagini a tutta pagina, titoli in box semitrasparenti, molto web 2.0.

Rispondo: "Sì, beh, immagino che potrei utilizzare … ", "Oh, grazie mille, sarebbe bellissimo, ma non ti disturbo, vero?". Devo ammettere che non mi disturba, anzi, ormai avevo comunque iniziato a pensarci, e quindi eccoci qua.

Come si può vedere, le caratteristiche principali della personalizzazione, che chiamerò Rosandra, sono:

  • estrema semplicità, cioè non è un tema con effetti scenici travolgenti
  • sfondo con una tenue sfumatura che accompagna i titoli dei frame
  • frame con figure a piena pagina con il titolo su un rettangolo semitrasparente
  • figure piccole con didascalia senza la dicitura: figura n

Innanzitutto voglio snocciolare la documentazione che ho consultato, per non dimenticarmi tutti i link preziosi per elaborare la presentazione:

Bene, adesso prendo fiato e nel prossimo post vedremo il codice.

Nell’esempio di lista con i pifont una limitazione che si può trovare è che i numeri cerchiati arrivano solo fino a 10.

Ho pertanto cercato un modo per ovviare a questo inconveniente tramite TikZ.

Ho creato un nodo circolare, entro cui racchiudere il contatore degli item, e per fare in modo che tutti i cerchietti avessero la stessa dimensione, ho messo il contatore in un makebox.

%% in preamble:

\usepackage{enumitem}
\usepackage{tikz}
  \usetikzlibrary{positioning}

%% in document:
\newcommand{\circleditem}[1]{\tikz[baseline=-0.4em] \draw node[draw,circle,inner sep=0,align=center] {\scriptsize \makebox[3mm]{#1}};} % makebox used to have all circles of the same size

\begin{enumerate}[label=\protect\circleditem{\theenumi}]
 \item Gennaio
 \item Febbraio
 \item Marzo
 \item Aprile
 \item Maggio
 \item Giugno
 \item Luglio
 \item Agosto
 \item Settembre
 \item Ottobre
 \item Novembre
 \item Dicembre
 \item e poi si ricomincia con Gennaio
\end{enumerate}
Lista con numeri cerchiati.

Lista con numeri cerchiati.

A questo punto ci si può far prendere dall’entusiasmo, colorando i cerchietti con i numeri in bianco.

%% in preamble:

\usepackage{enumitem}
\usepackage{tikz}
  \usetikzlibrary{positioning}
\usepackage[svgnames]{xcolor}

%% in document:
\newcommand{\circledcoloreditem}[1]{\tikz[baseline=(current bounding box.south east)] \draw node[fill=ForestGreen,text=White,circle,inner sep=0pt] {\bfseries \sffamily \scriptsize \makebox[3mm]{#1}};} % makebox used to have all circles of the same size

\begin{enumerate}[label=\protect\circledcoloreditem{\theenumi}]
 \item Gennaio
 \item Febbraio
 \item Marzo
 \item Aprile
 \item Maggio
 \item Giugno
 \item Luglio
 \item Agosto
 \item Settembre
 \item Ottobre
 \item Novembre
 \item Dicembre
 \item e poi si ricomincia con Gennaio
\end{enumerate}
Lista con pallini colorati e testo in bianco.

Lista con pallini colorati e testo in bianco.

Continuo l’argomento elenchi e introduco alcune personalizzazioni decisamente decorative.

Già di default, cioè senza usare alcun pacchetto in particolare, si può usare un simbolo diverso per ogni elemento di una lista, semplicemente mettendo il simbolo tra parentesi quadre accanto al comando \item.

%% in preamble:

\usepackage{pifont} % for dingbats

%% in document:

\begin{itemize}
 \item[\ding{46}] Lorem ipsum
 \item dolor sit amet
 \item[$\Rightarrow$] consectetur adipiscing elit
 \item[$\diamond$] Fusce ornare turpis
 \item[\ding{227}] nec lorem ultrices
\end{itemize}

Esempio con un simbolo diverso davanti ad ogni elemento della lista.

Esempio con un simbolo diverso davanti ad ogni elemento della lista.

Si possono anche sostituire i simboli con immagini. In tal caso bisogna aggiungere \protect (per le motivazioni intrinseche vedere su UK TeX FAQ) davanti al comando per includere le immagini.

%% in preamble:

\usepackage{enumitem}
\usepackage{graphicx}

%% in document:

%I create a box with the image resized to fit well into the list
\newsavebox{\myimg}
\savebox{\myimg}[0.5cm][c]{\includegraphics[width=0.5cm]{path_of_image}}

\begin{itemize}[label=\protect\usebox{\myimg}]
 \item Lorem ipsum
 \item dolor sit amet
 \item consectetur adipiscing elit
 \item Fusce ornare turpis
 \item nec lorem ultrices
\end{itemize}

Esempio con immagini davanti ad ogni elemento della lista.

Esempio con immagini davanti ad ogni elemento della lista.

Come personalizzazione estrema, si possono creare i propri simboli, per esempio con Tikz. In tal caso, tramite l’opzione baseline si aggiusta la posizione delle figure rispetto al testo.

%% in preamble:

\usepackage{enumitem}
\usepackage{graphicx}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
  \usetikzlibrary{shadings}

%% in document:

\newcommand{\myitem}{\tikz[baseline=-.3em] \shade[ball color=LimeGreen] circle (.2em);} %with option to adjust the baseline of the picture

\begin{itemize}[label=\protect\myitem]
 \item tea time
 \item and
 \item page layout
\end{itemize}

Esempio di simboli personalizzati con TikZ.

Esempio di simboli personalizzati con TikZ.

Se c’è un pacchetto immancabile nei miei preamboli, questo è enumitem. È corredato da un manuale molto chiaro, al quale vi rimando per tutte le possibili opzioni a disposizione.

Le personalizzazioni possono essere fatte sia nel preambolo tramite \setenumerate[livello della lista]{opzione 1, opzione 2}, e analogamente per \setitemize e \setdescription, sia racchiuse tra parentesi quadre attaccate a \begin{enumerate} o \begin{itemize} o \begin{description}.

Personalmente ho trovato molto utile il suo impiego nei seguenti casi:

  • per modificare l’indentazione delle liste, in particolare portandole allo stesso livello del testo normale, con leftmargin=*
  • per modificare la separazione tra gli elementi (item) di una lista , con itemsep
  • per modificare le etichette (label) davanti ad ogni item
  • per ridurre lo spazio tra il testo e le liste con topsep

Vediamo innanzitutto un esempio cumulativo di tutte queste feature.

%% in preamble:

\usepackage{enumitem}
\usepackage{pifont} % for dingbats symbols

%% in document:

Esempio di liste numerate e non, senza alcuna modifica tramite \textsf{enumitem}. Aggiungo del testo senza senso per apprezzare anche la differenza tra le indentazioni.

% default style for lists
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce ornare turpis nec lorem ultrices ultrices. Nulla a leo ac risus molestie malesuada. In cursus erat porttitor nunc tincidunt vestibulum.

\begin{enumerate}
 \item Di che colore era il cavallo bianco di Napoleone?
   \begin{enumerate}
    \item Marrone
    \item Nero
    \item Bianco
   \end{enumerate}
 
 \item Quanti erano i sette nani?
   \begin{itemize}
    \item Sette
    \item Ottolo
    \item $n+1$
   \end{itemize}
\end{enumerate}

Esempio di liste innestate con le personalizzazioni attuate tramite il pacchetto \textsf{enumitem}.

% customization with enumitem package
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce ornare turpis nec lorem ultrices ultrices. Nulla a leo ac risus molestie malesuada. In cursus erat porttitor nunc tincidunt vestibulum.

{ % curly brackets to restrict the customization to a part of the text, the other way is to put options in square brackets near the environment
\setenumerate[1]{label=\textbf{\arabic*.}, leftmargin=*, topsep=0mm}
\setenumerate[2]{label=\textbf{(\alph*)}, itemsep=1cm}
\setitemize[1]{label=\ding{111}}

\begin{enumerate}
 \item Di che colore era il cavallo bianco di Napoleone?
   \begin{enumerate}
    \item Marrone
    \item Nero
    \item Bianco
   \end{enumerate}
 
 \item Quanti erano i sette nani?
   \begin{itemize}
    \item Sette
    \item Ottolo
    \item $n+1$
   \end{itemize}
\end{enumerate}}
Esempio di personalizzazione di liste innestate.

Esempio di personalizzazione di liste innestate.

Si possono usare i pifont anche per creare liste numerate, grazie all’interazione tra il contatore \value* e il comando start.

%% in preamble:

\usepackage{enumitem}
\usepackage{pifont}

%% in document:

\begin{enumerate}[label=\ding{\value*},start=192]
 \item Dotto
 \item Mammolo
 \item Pisolo
 \item Gongolo
 \item Eolo
 \item Brontolo
 \item Cucciolo
\end{enumerate}
Pifont con lista numerata.

Pifont con lista numerata.

Anche le liste di tipo description possono essere personalizzate a piacere, come vi mostro in questo esempio (un po’ estremo), in cui ho usato una diversa famiglia di font per le descrizioni (comando: \fontfamily{antt}\fontseries{bc}\selectfont).

%% in preamble:

\usepackage{enumitem}
\usepackage[svgnames]{xcolor}

%% in document:

% example using Antykwa Torunska font family for descriptions
\begin{description}[font=\fontfamily{antt}\fontseries{bc}\selectfont \color{MediumOrchid}]
 \item[Lorem ipsum:] dolor sit amet, consectetur adipiscing elit. 
 \item[Fusce ornare:] turpis nec lorem ultrices ultrices. 
 \item[Nulla a leo:] ac risus molestie malesuada. 
 \item[In cursus:] erat porttitor nunc tincidunt vestibulum.
 \end{description}
Description con personalizzazione del testo.

Description con personalizzazione del testo.

Recentemente mi è stato chiesto se potevo fare qualcosa per creare un ambiente dove inserire citazioni di brani di testo che fossero indentati rispetto al testo principale. “Ci sarebbe quotation …” azzardo io, “No, non mi piace, e non capisco come si differenzia da quote“.

Vabbè, non sarò io che mi tiro indietro di fronte ad una personalizzazione! 🙂

Dunque, la richiesta è facilmente realizzabile senza andare ad intervenire sulla struttura:

%%% an alternative to quotation environment
\usepackage{pifont}
\newenvironment{theysaid}{\medskip \begin{center} \begin{minipage}[c]{0.9\textwidth}\ding{125}\itshape}%
 {\ding{126} \end{minipage} \end{center}\medskip}
  • ho imposto una spaziatura prima e dopo la citazione tramite medskip
  • ho simulato la presenza di margini a destra e sinistra creando una minipage con una larghezza inferiore a quella del testo e centrandola rispetto alla pagina
  • come tocco di ridondanza tipografica ho inserito delle virgolettone in apertura e chiusura scegliendole tra i pifont (codice \ding{numero_corrispondente})
  • eventualmente si può aggiungere uno stile al testo, tipo itshape

e come risultato si ha quanto riportato in figura.

Ambiente per le citazioni personalizzato.

Ambiente personalizzato per le citazioni.

Alla fine mi è stato domandato: “Ma se avessi avuto un articolo di 400 pagine tutto con quotation?” In tal caso invece di newenvironment avrei usato renewenvironment, per ridefinire l’ambiente preesistente.

Ci sono altre soluzioni con TikZ che ho trovato cercando nella rete.

Una viene dal forum di PGF-TikZ su Nabble, la si può trovare sotto la discussione: Calendar utility function: Improvement request. Questa soluzione implica stampare un mese per pagina. Il risultato del codice è riportato sotto.

%%in preamble:
%
\usepackage{tikz}
   \usetikzlibrary{calendar,shadows,patterns}
%%in document:
%
\tikzstyle{every shadow}=[opacity=.4,shadow xshift=2pt,shadow yshift=-2pt,fill=black!60]
\tikzstyle{caption}=[drop shadow,rounded corners=5pt,inner sep=4pt,draw=black!50,fill=black!5]
\tikzstyle{plot legend}=[
   rounded corners=2.5pt,inner xsep=3pt,inner ysep=2pt,
   draw=black!50,fill=white,
   font=\footnotesize,cells={anchor=center},
   nodes={inner sep=2pt,text depth=0.15em,rounded corners=0pt,right}]

\begin{tikzpicture}

\newlength{\daywidth}
\newlength{\dayheight}
\setlength{\daywidth}{3.5cm}
\setlength{\dayheight}{2.5cm}

\newcount\monthsheetdate
\newcount\monthsheetweekday

\pgfcalendardatetojulian{2009-02-01}{\monthsheetdate}
\pgfcalendarjuliantoweekday{\the\monthsheetdate}{\monthsheetweekday}
\advance\monthsheetdate by -\the\monthsheetweekday
\pgfcalendarjuliantodate{\the\monthsheetdate}{\myyear}{\mymonth}{\myday}
\edef\monthsheetbegin{\myyear-\mymonth-\myday}

\pgfcalendardatetojulian{2009-02-last}{\monthsheetdate}
\pgfcalendarjuliantoweekday{\the\monthsheetdate}{\monthsheetweekday}
\advance\monthsheetdate by -\the\monthsheetweekday
\advance\monthsheetdate by 6
\pgfcalendarjuliantodate{\the\monthsheetdate}{\myyear}{\mymonth}{\myday}
\edef\monthsheetend{\myyear-\mymonth-\myday}

\calendar[
    dates=\monthsheetbegin{} to \monthsheetend{},
    execute before day scope={%
      % month caption:
      \ifdate{equals=2009-02-01}{%
        \path (3.5\daywidth,0)
          node[above=1.8cm,
               every month,
               font=\Huge\bf,
               caption,
               inner sep=.5em]
            {\tikzmonthtext{} \tikzyeartext}
        ;
      }{}
      % week day captions:
      \ifdate{at most=\monthsheetbegin+6}{
        \path (\pgfcalendarcurrentweekday\daywidth,0)
          node[xshift=.5\daywidth,
               font=\LARGE\bf,
               above=1ex,
               anchor=base] {%
            \pgfcalendarweekdayshortname{\pgfcalendarcurrentweekday}%
          };
      }{}
    },
    execute at begin day scope={%
      \pgftransformxshift{\pgfcalendarcurrentweekday\daywidth}%
    },
    execute after day scope={%
      \ifdate{Sunday}{%
        \pgftransformyshift{-\dayheight}%
      }{}%
    },
%    week list,
%    day xshift=\daywidth,
%    day yshift=\dayheight,
    day bg/.style=,
    every day text/.style={font=\Large\bf},
    day code={%
      \node[anchor=north west,
            draw,
            minimum width=\daywidth,
            minimum height=\dayheight,
            day bg]{};%
      \node[anchor=north west,
            every day text,
            inner sep=7pt]{\tikzdaytext};%
    },
  every month/.append style={anchor=base}
%    month label above centered
  ]
  if (Sunday) [red]
  if (weekend) [day bg/.append style={fill=black!10}]
  if (at most=2009-02-01+-1,at least=2009-02-last+1)
    [%day bg/.append style={pattern=north east lines,pattern color=black!50},
     day bg/.append style={fill=black!25},
     every day text/.append style={font=\large}]
;
\end{tikzpicture}
Calendario dal forum su Nabble di PGF.

Calendario dal forum su Nabble di PGF.

Un’altra soluzione di calendario, di formato ridotto, è quella che ho trovato su fr.comp.text.tex nella discussione: PGF Calendar, problème de positionnement.

Il codice completo è riportato di seguito.

\documentclass{minimal}

\setlength{\paperwidth}{8cm}
\setlength{\paperheight}{8cm}

\usepackage{calc}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{calendar}

\setlength{\hoffset}{-1in}
\setlength{\voffset}{-1in}
\setlength\textwidth{\paperwidth}
\setlength\textheight{\paperheight}

% Let's get started
\begin{document}

% A counter
\newcount\MyDate

% Loop on the months
\foreach \month in
{01,02,03,04,05,06,07,08,09,10,11,12}
{%
\begin{tikzpicture}%
\calendar (cal) [
dates=2009-\month-01 to 2009-\month-last,
week list,
month label above centered,
% Shift month a little to let space for the day names
every month/.append style={yshift=.5cm},
day xshift=1cm,
day yshift=1cm,
execute at begin day scope={\ifdate{at most=\month-07}{%
% Get the current date (between 1 and 7)
\MyDate=\pgfcalendarcurrentday%
% Move it between 0 and 6
\advance\MyDate by -1\relax
% If the date is > to the weekday, then shift by twice the height of a cell
% Otherwise, only by the heigth of a cell
% Print the day name (they are all on the same line)
\ifnum \MyDate>\pgfcalendarcurrentweekday %
\node[yshift=2cm] {\pgfcalendarweekdayshortname
{\pgfcalendarcurrentweekday}}%
\else%
\node[yshift=1cm] {\pgfcalendarweekdayshortname
{\pgfcalendarcurrentweekday}}%
\fi}
{%
% For days after the seventh, do nothing
};}];\end{tikzpicture}\newpage}

\end{document}

Una delle pagine generate dal codice è riportata in figura.

Calendario dal forum fr.comp.text.tex.

Calendario dal forum fr.comp.text.tex.

Infine ecco un’idea per creare un calendario-agenda mensile con i giorni uno sotto l’altro, trovata su it.comp.software.tex sotto la discussione
Calendario usando pgf/TikZ. Riporto di seguito il codice e l’immagine ottenuta.

\documentclass[a4paper,12pt]{article}
\usepackage{tikz}
\usetikzlibrary{calendar}
\pagestyle{empty}

\begin{document}

\begin{tikzpicture}
\calendar
        [dates=2009-07-01 to 2009-07-last,
        day list downward,
        month label left,
        day code={\node[name=\pgfcalendarsuggestedname,
        every day]{\pgfcalendarweekdayshortname{\pgfcalendarcurrentweekday}\
\tikzdaytext};},
        every month/.append style={anchor=base east,xshift=-2em}];
\end{tikzpicture}

\end{document}
Calendario dal forum it.comp.software.tex.

Calendario dal forum it.comp.software.tex.

What’s new

My logo (yes, I’ve got it) :-)

Ho un logo tutto mio (anche grazie a OpenClipArt)

Post Archives

Categories

Enter your email address to follow this blog and receive notifications of new posts by email.