Newsgroup: it.comp.software.tex
Titolo: problema con \ifthen

ciao LaTeX-ers,
Sto tentando di personalizzare il comando caption in base allo stile che sto
usando. In particolare vorrei rispettare lo stile LLNCs quando usato ed
adottare un aspetto differente altrimenti.
So che esiste già qualcosa che rimaneggia le caption (caption.sty), ci ho dato
un'occhiata ma non vedo la soluzione al perché la mia macro non funziona.
Ho fatto quanto segue:
\newsavebox{\captionbox}
\newcommand{\wcaption}[2][.73\textwidth]{%
   \newlength{\wcaptionlen}\settowidth{\wcaptionlen}{#2}
   \ifthenelse{#1<\wcaptionlen}{%
      \sbox{\captionbox}{\parbox[t]{#1}{%
         \ifthenelse{\boolean{WS@isllncs}}{%
            \textbf{#2}%
         }{#2}%
      }\smallskip\vskip 0pt}%
   }{\sbox{\captionbox}{%
         \ifthenelse{\boolean{WS@isllncs}}{\textbf{#2}}{#2}%
         \smallskip\vskip 0pt}%
   }
   \caption{\usebox{\captionbox}}
}
\newcommand{\clfigure}[4]{
  \begin{figure}[t]
     \centering
     \includegraphics*[width=#4,keepaspectratio]{#1}
     \wcaption{#2}\label{#3}
  \end{figure}}
il tutto sta in un .sty e WS@isllncs è un'opzione passata ad usepackage.
quando poi lo uso con:
\clfigure{figure/MOAvsCRA-colored.eps}{Base- and Meta-Level Communication Graphs. In Fig.~a) the communication graph of the base-level is mimicked in the meta-level, whereas in Fig.~b) it is reified in the meta-level.}{MOMvsMCRM}{12cm}
in compilazione mi dice:
  <figure/MOAvsCRA-colored.eps>
  ! Missing number, treated as zero.
  <to be read again>
  .
  l.109 ...fied in the meta-level.}{MOMvsMCRM}{12cm}
cos'e` che gli manca?
TIA, Walter
-- 
Walter Cazzola, PhD - DISI, University of Genova          ICQ UIN: 66633601
email: cazzola (at) 
disi.unige.it
 (or remove nospam. from the above address)
· · · ---------------------------- · · · ---------------------------- · · ·

    \ifthenelse{#1<\wcaptionlen}{%
                    ^^^
Inserisci un \the
Inoltre il \newlength deve stare *fuori* dal corpo della macro, o una 
nuova length viene generata ad ogni esecuzione!
-- 
Giuseppe "Oblomov" Bilotta
Axiom I of the Giuseppe Bilotta
theory of IT:
Anything is better than MS

 nuova length viene generata ad ogni esecuzione!
ok, hai ragione, per dovere di completezza ora la macro è:
\newsavebox{\captionbox}
\newlength{\wcaptionlen}
\newcommand{\wcaption}[2][.73\textwidth]{%
  \settowidth{\wcaptionlen}{#2}
    \ifthenelse{#1<\the\wcaptionlen}{%
       \sbox{\captionbox}{\parbox[t]{#1}{%
          \ifthenelse{\boolean{WS@isllncs}}{\textbf{#2}}{#2}}
    }}{\sbox{\captionbox}{\ifthenelse{\boolean{WS@isllncs}}{\textbf{#2}}{#2}}}
  \caption{\usebox{\captionbox}\smallskip\vskip 0pt}
}
altri suggerimenti?


 altri suggerimenti?
Prova a mettere
\DeclareRobustCommand{\wcaption}
dopo la definizone del comando.
Il missing \endgroup puzza molto di comando fragile in argomento 
mobile ... cosa dice il manuale di ifthen circa la robustezza di 
\ifthenelse? In che contesto usi il comando? (Ovvero, cosa c'e' 
5 righe prima e dopo il comando?) Puoi fornire un documento *minimale* 
che presenti l'errore? Qualcosa tipo
\documentclass{article}
\usepackage{ifthen}
<metti qui le suddette definizioni>
\begin{document}
<metti qui il minimo set di istruzioni che causa l'errore>
\end{document}


 cosa dice il manuale di ifthen circa la robustezza di \ifthenelse?
non dice alcunché, tra parentesi che significa che il comando è fragile?
CMQ rileggendo la documentazione ho scoperto l'esistenza di un test per
lunghezze e provandolo, magia, funziona tutto e senza dichiarare il comando
come robusto.
grazie dell'aiuto senza i tuoi consigli non ci sarei arrivato.


 ?
Un comando e' fragile quando non puo' essere usato in determinati 
contesti (principalmente la scrittura su file ausiliari). Questo e' un 
argomento molto delicato che riguarda non solo il LaTeX ma tutti i 
formati TeX, ed e': trovare un modo per scrivere un comando su un file 
ausiliario e rileggerlo. 
LaTeX supplisce con un \DeclareRobustCommand, che sostanzialmente 
cambia \nomecomando in \nomecomando con uno spazio alla fine (spazio 
facente parte integrante del nome del comando. In questo modo 
l'espansione di \nomecomando e' "quasi" se stessa; ma poiche' gli 
spazi vengono ignorati in lettura, si ottiene la robustezza.
Il problema e' talmente serio che l'estensione e-TeX del TeX di Knuth 
fornisce un comando \unexpanded\def che definisce un comando non-
espandibile (e quindi privo dei suddetti problemi).


 > caption su due righe non sono formattate a sinistra, ma centrate.
uhm, direi di no, o meglio sì poss usare quegli stili, però l'if lo avrei
comunque perché mi serve per mantenere lo stile llncs funzionante con il mio
pacchetto, quindi avrò sempre qualcosa del tipo:
  se sto usando llncs allora ...
  else ...
CMQ ora funziona erp io a sbagliare e non usare dei test appositi per
lunghezze.
Grazie ancora
