Aiuto definizione nuovo comando

  • Creatore
    Topic
  • #113689
    Up
    0
    Down
    ::


    Ciao!
    Sto usando il pacchetto marginnote e ho pensato di effettuare qualche semplice personalizzazione per iniziare e vedere cosa succede. Sono alle prime armi, però ho letto da qualche parte qualcosa di basilare sulla programmazione TeX e ho creato il comando \note
    `
    \newcommand\note[1]{
    \ifodd\value{page}\marginnote{> #1}\else\marginnote{#1 <}\fi } ` e ho dato in pasto a pdfLaTeX questo sorgente ` \documentclass[a4paper,11pt]{article} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{kantlipsum} \usepackage{marginnote} \newcommand\note[1]{ % questo è il comando preoccupante \ifodd\value{page}\marginnote{> #1}\else\marginnote{#1 <}\fi } \usepackage{pgffor} % mi serve per il commando \foreach \begin{document} \foreach \i in {1,...,164} {\note{\i}\kant[\i]} \end{document} ` Così facendo a pagina 32, per esempio, la prima nota margine è diversa dalle altre della stessa pagina. Come mai? Come si può risolvere? Grazie.

Visualizzazione 2 filoni di risposte
  • Autore
    Risposte
    • #113690
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        È una cosa poco nota, ma le note marginali sono trattate quasi come gli oggetti flottanti.
        Vengono elaborate per ciascun capoverso e messe in standby in memorie a parte come gli oggetti flottanti. Quando il capoverso viene composto lo viene nella bozza non impaginata (galleu proof) della scatola 255 riservata a questo scopo. Verrà poi prelevato da li in toto o in parte quald la routine di uscita assemblerà il contenuto dlella galley proof con gli oggetti che possono o devono stare nela pagina, le note a pi`re di pagina, gli oggetti flottanti, le note marginali, eccetera.
        MA noel momento in cui il capoverso viene impaginato nella galley proof, il numero di pagina coorisponde a quello della prossima pagina che verrà estratta dalla galley proof, ma non è detto che l’intero capoverso venga estratto completamente, mentre e possibile che durante questa estrazione debba essere eseguito un salto pagina che quindi porta la parte a cui la nota marginale è collegata potrebbe andare a finire nella pagina ancora successiva, quindi con la formattazione dellapagina precedente.

        Per fare le cose per bene sarebbe necessario creare insieme ad ogni nota marginale un label con il quale si possa, in una seconda passata verificare il vero numero di pagina dove la nota marginale è andata a finire per davvero. La cosa è fattibile, ma non è per niente semplice.
        Poi ispirarti a come il controllo della parità della pagina è eseguito nella classe memoir, ma ripeto che non è per niente facile.

      • #113691
        Up
        0
        Down
        ::


        Lo so che \marginpar crea oggetti flottanti. Però la documentazione di marginnote dice che \marginnote crea note non flottanti (cert bisogna compilare due volte…).
        Aspetto, magari qualcuno ha altri suggerimenti…

      • #113692
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          E vero che la documentazione di marginnote non usa floata di nessun genere, ma dice anche che talvolta la parità della pagina reale non è individuata in modo corretto. (fine dell’abstract). Poi elenca i problemi che marginnote incontra e talvolta indica come risolverli.

          Purtroppo l’autore Marcus Kohm non documenta bene il suo codice (spesso contorto secondo il mio senso di contorsione, che non necessariamente è codniviso da altri) quindi il suo codice è difficile da interpretare. Ci ho provato e ho rinunciato.

          Dice di seguire un metodo tipo quello di usare un \label, ma dal codice che sono riuscito ad interpretare egli non usa davvero il comando \label, o meglio dice di usare lo stesso meccanismo, ma di usare un altro prefisso. Il risultato è che non capisco che cosa faccia con questo suo particolare label. Non lo vedo mai usato nemmeno colo suo nuovo prefisso. Sarò io che non sono capace di leggere il suo codice, ma questo è il risultato.

          Il caso della nota 96 nella pagina 32 dimostra, secondo me chiaramente, che il metodo di Kohm non funziona bene, perché lo stile di quella nota è quello della pagina precedente, e non quello della pagina corrente. La spiegazione che ti ho dato nel primo messaggio si applica perfettamente.

          Ora, siccome è difficilissimo modificare un codice che non si capisce, se vuoi puoi provarti a cimentarti con la definizione di una nuova macro, che devi inventarti, che sappia estrarre il numero di pagina da trarre da un label con etichetta creata apposta; per esempio definendo un nuovo contatore notamarginale e specificando, ogni volta che scrivi una nota margnale con un comando del tipi \LaMiaNotaMarginale che scriva un label del tipo \label{nota:\thenotamarginale} dopo aver incrementato il contatore di una unità. Prima di procedere oltre deve ricavare, se esiste, il contenuto del newlabel che abbia quell’etichetta; se non lo trova, vuol dire che è la rpima volta che si usa il comando. Ma se esiste il new label scritto solo al momento dello ship-out della pagina vera, esso contiene il riferimento della pagina vera, non solo quello del numero della nota, che non usa per altri scopi. Allora diventa facile verificare la parità del numero voro e procedere coerentmente a seocnda di questa parità.
          In teoria il codice di Kohm dovrebbe fare queste coe più altre, tipo quella di scrivere la nota marginale come argomento di una macro \vadjust, ma se non usi queste note marginali in posizioni strane la tua \LaMiaNotaMarginale può tranquillamente usare \amrginpar senza fare altre acrobazie.

          Non è facile, perché si tratta di codice delicato; probabilmente devi usare le macro con argomenti delimitati da definire con comandi di basso livelllo; ma si può fare. Io l’ho fatto in circostanze diverse dalle tue, am ci sono riuscito; tu devi adattare l’idea che ti ho descritto al tuo uso personale di queste note marginali.

          D’altro canto non mi stupirei se il tuo problema,che sembra sia stato adombrato anche da Markus Kohm, di note marginali emesse fra due capoversi potrebbe sparire se ridefinissi i comando\note in questo modo` \newcommand\note[1]{ % questo è il comando preoccupante
          \leavevmode\hphantom{A}\relax
          \ifodd\value{page}\marginnote{> #1}\else\marginnote{#1 <}\fi }`Io l'ho provato e l'impaginazione è leggerissimamente cambiata per cui non c'è più nessuna nota che capti ad inizio pagina. \leavevmode permette da passare dal modo verticale a quello orizzontale; \hphantom{A} permette di inserire un oggetto orizzontale nascondendolo e imponendogli una larghezza nulla; in questo modo la \nota produce i suoi effetti da dentro un capoverso e a me risultano tutte le note con il formato previsto per le pagine pari e per quelle dispari (ho anche imposto l'opzione twoside alla classe). Tuttavia, siccome con il ciclo for che prevede 164 capoversi non succede mai che un capoverso cominci nella prima riga di una pagina non posso essere sicuro che quello che ho fatto sia davvero efficace

      Visualizzazione 2 filoni di risposte
      • Devi essere connesso per rispondere a questo topic.

      Go to top