Re: Subcaption – classe memoir

#65648
OldClaudio
Partecipante
    Up
    0
    Down
    ::


    Normalmente se un pacchetto è stato caricato con \usepackage o \RequirePackage, viene impostata una variabile interna con il nome del pacchetto, se il pacchetto viene caricato per la prima volta; se invece si cerca di ricaricare il pacchetto, la variabile esiste e contiene le informazioni relative al pacchetto, per cui il caricamento viene omesso.

    memoir genera queste variabili per tutti i pacchetti che emula, per cui quei pacchetti non possono venire caricati dall’utente.

    subfig non è né simulato né caricato; come fa subcaption a determinare che non può collaborare in presenza di subfig? Non so rispondere, perché non ho esaminato il codice di subcaption, però è possibile che subcaption, invece di controllare la presenza della famosa variabile interna legata alla caricamento di subfig, variabile che non esiste perché subfig non è né caricato né simulato da memoir, controlli l’esistenza di una particolare macro definita solamente da subfig; è un controllo molto facile da fare; ma è così che si comporta subcaption? Ripeto, non so rispondere, perché non ho esaminato il codice di subcaption.

    Vado allora a vedere che cosa fa subcaption:
    `
    \caption@ifundefined\subfigure{}{%
    \PackageError{subcaption}{%
    This package can't be used in cooperation\MessageBreak
    with the subfigure package}{RTFM}%
    \endinput}
    `

    Allora come si vede all’interno di subcaption.syu, alle prime righe compare quel controllo che verifica se esiste ed è defintia la “control sequence” \subfigure;
    siccome la trova definita, subcaption ne deduce che il pacchetto subfigure è già stato caricato, e senza eseguire altri contorlli, termina l’input del file dopo aver dato il messaggio di errore che vedi sopra e che riporto in pulito:

    This package can’t be used in cooperation
    with the subfigure package

    Subito dopo subcaption esegue un altro controllo:
    `
    \caption@ifundefined\subfloat{}{%
    \PackageError{subcaption}{%
    This package can't be used in cooperation\MessageBreak
    with the subfig package}{RTFM}%
    \endinput}
    `
    e stavolta cita esplicitamente il pacchetto subfig, perché trova che la macro \subfloat è già definita.

    Ora fra i pacchetti emulati non compare né subfig, né subfigure, tuttavia memoir permette di definire dei subfloat mediante il comando \newsubfloat e certamente dispone del comando \subcaption; vi dedica tutto il capitolo 10 intitolato Floats and captions; in particolare è interessante il paragrafo 10.9.

    Quindi se ti interessa avere sottofigure in un ambiente figure, ognuna con la sua didascalia, e poi una didascalia generale relativa all’insieme delle didascalie, allora non hai bisogno di caricare pacchetti perché la funzionalità che ti serve è già contenuta in memoir.

    Go to top