Geometria di pagina con memoir

  • Creatore
    Topic
  • #66872
    Up
    0
    Down
    ::


    Sto cercando di emulare \areaset in memoir, ma ho un problema con le dimensioni orizzontali.

    Da quello che ho capito, in teoria dovrebbe essere \spinemargin=1in+\oddsidemargin, ma in pratica non è così.

    Innanzitutto, i parametri orizzontali che ho sono:

    • B margine di rilegatura
    • X larghezza della gabbia del testo.

    Le specifiche richiedono che lo spazio bianco orizzontale, escluso il margine di rilegatura, (cioè \paperwidth-\textwidth-B) vada distribuito per un terzo dal lato interno e due terzi in quello esterno.

    Ho scritto molto semplicemente così:
    `\setbinding{\B}
    \setlrmargins{*}{*}{2}`
    e tutto funziona, almeno in teoria: cioè finché non chiamo \checkandfixthelayout, il quale tronca la parte decimale (in punti) di \oddsidemargin e \evensidemargin. Dopo un po’ di indagini ho scoperto che il problema è che \fixthelayout fa
    `\@settopoint\textwidth
    \@settopoint\oddsidemargin
    \@settopoint\evensidemargin`

    Perché? Che significa?

    Se mi prendo la licenza di impedirglielo scrivendo:
    `
    \let\@settopoint\@gobble
    \checkandfixthelayout[fixed] % specifico fixed`
    (non dentro un gruppo), i valori di \oddsidemargin e \evensidemargin non sono più troncati (e quindi \spinemargin=\oddsidemargin+1in), ma la gabbia continua a non coincidere con quella di \areaset.

    Meglio: le due gabbie hanno stessa altezza e stessa larghezza, coincide anche la posizione verticale delle gabbie nella pagina (a parte qualche errore di troncamento o simili), ma continuano a essere visivamente sfasate in orizzontale. Comincio a non raccapezzarmi più. Come bisogna procedere? Voglio usare per quanto possibile i comandi di memoir, solo come ultima spiaggia imposto tutto a mano.
    😕

    Riporto un esempio compilabile:
    `\newlength{\B}
    \setlength{\B}{0mm} % messo a zero: il problema non dovrebbe essere nel binding
    \newlength{\X}
    \setlength{\X}{288pt}
    \newlength{\Y}
    \setlength{\Y}{555pt}

    \ifcase0
    \documentclass[headinclude,footinclude,10pt,a5paper]{scrbook}
    \usepackage[pass]{geometry}
    \or
    \documentclass[10pt,a5paper]{memoir}

    \makeatletter
    \newlength{\cth@tempdim}
    \def\areaset[#1]#2#3{
    % \headheight, \headsep e \footskip sono esattamente quelli delle classi KOMA
    \headheight=15\p@
    \advance\headheight by \f@size\p@
    \advance\headheight by -10\p@
    \headsep=1.5\baselineskip
    \footskip=3.5\baselineskip
    \cth@tempdim=#3
    \advance\cth@tempdim by -\headheight
    \advance\cth@tempdim by -\headsep
    \advance\cth@tempdim by -\footskip
    \settypeblocksize{\cth@tempdim}{#2}{*}

    \setbinding{#1}
    \setlrmargins{*}{*}{2}

    \cth@tempdim=\paperheight
    \advance\cth@tempdim by -#3
    \divide\cth@tempdim by 3
    \advance\cth@tempdim\headheight
    \advance\cth@tempdim\headsep
    \setulmargins{\cth@tempdim}{*}{*}

    \setheadfoot{\headheight}{\footskip}
    \setheaderspaces{*}{\headsep}{*}

    % tralascio le impostazioni per le note a margine

    \checkandfixthelayout[fixed]
    \typeout{\the\dimexpr\spinemargin-\oddsidemargin-1in}
    }
    \makeatother
    \fi

    \areaset[\B]{\X}{\Y}

    \def\print#1{
    \ttfamily\string#1 &
    \ifx#1\undefined\else\the#1\fi\\
    }

    \usepackage[T1]{fontenc}

    \begin{document}
    \begin{tabular}{ll}
    \print\paperwidth
    \print\textwidth
    \print\oddsidemargin
    \print\evensidemargin
    \hline
    \print\stockwidth
    \print\trimedge
    \print\spinemargin
    \print\foremargin
    \end{tabular}
    \end{document}`

    Grazie,
    Antonio

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #66873
      Up
      0
      Down
      ::


      Io vedo solo un minimo sfasamento, dovuto al fatto che con KoMaScript viene \oddsidemargin=-27.90305pt, mentre con memoir risulta \oddsidemargin=-27pt (poco meno di un punto). Sinceramente non me ne preoccuperei.

      In effetti trovo che il metodo di \areaset sia il meno intuitivo esistente al mondo.

      Ciao
      Enrico

    • #66874
      Up
      0
      Down
      ::

      egreg9″ post=65825Io vedo solo un minimo sfasamento, dovuto al fatto che con KoMaScript viene \oddsidemargin=-27.90305pt, mentre con memoir risulta \oddsidemargin=-27pt (poco meno di un punto). Sinceramente non me ne preoccuperei.

      Dici? Io ero partito proprio paranoico: all’inizio avevo scomodato ImageMagik per confrontare il pdf generato usando il pacchetto classicthesis originale col pdf ottenuto dalla classe che sto ricavando. Ma se tu mi tranquillizzi, non mi preoccupo più di tanto.

      Mi spiegheresti perché si usa \@settopoint? Non ho trovato praticamente niente in giro per la rete.

      In effetti trovo che il metodo di \areaset sia il meno intuitivo esistente al mondo.

      Perché? A me l’interfaccia sembra abbastanza semplice, anzi \areaset è pure troppo semplice. Magari potevano essere forniti più comandi per impostare i parametri a gruppi, un po’ come si fa con memoir.

      Grazie,
      Antonio

    • #66875
      Up
      0
      Down
      ::

      antonio.macrì” post=65835

      Io vedo solo un minimo sfasamento, dovuto al fatto che con KoMaScript viene \oddsidemargin=-27.90305pt, mentre con memoir risulta \oddsidemargin=-27pt (poco meno di un punto). Sinceramente non me ne preoccuperei.

      Dici? Io ero partito proprio paranoico: all’inizio avevo scomodato ImageMagik per confrontare il pdf generato usando il pacchetto classicthesis originale col pdf ottenuto dalla classe che sto ricavando. Ma se tu mi tranquillizzi, non mi preoccupo più di tanto.

      Mi spiegheresti perché si usa \@settopoint? Non ho trovato praticamente niente in giro per la rete.

      Perché a Peter Wilson piace di più che le misure siano in “punti interi”. 🙂

      antonio.macrì

      In effetti trovo che il metodo di \areaset sia il meno intuitivo esistente al mondo.

      Perché? A me l’interfaccia sembra abbastanza semplice, anzi \areaset è pure troppo semplice. Magari potevano essere forniti più comandi per impostare i parametri a gruppi, un po’ come si fa con memoir.

      Ognuno ha le sue preferenze. Preferisco geometry, se ti devo dire la verità: areaset si basa su un unico modello che non sempre è il migliore.

      Ciao
      Enrico

    • #66876
      Up
      0
      Down
      ::


      Mi sono appena accorto che la differenza era (abbastanza) visibile solo per una mia svista: a causa di \parindent diverso tra le classi KOMA e memoir.

      In effetti la differenza è impercettibile, frazioni di millimetro. Va benissimo così. 🙂

      (Andrebbe \noindent prima di \begin{tabular}.)

    • #66877
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Antonio, ricordati sempre che 1pt è appena un briciolo di più di un terzo di millimetro; visibile ad occhio nudo, ma quando parli di geometria di pagina la cosa è del tutto impercettibile.

      • #66878
        Up
        0
        Down
        ::

        OldClaudio” post=65848Antonio, ricordati sempre che 1pt è appena un briciolo di più di un terzo di millimetro; visibile ad occhio nudo, ma quando parli di geometria di pagina la cosa è del tutto impercettibile.

        Hai ragione. Lì la differenza era di circa 0,9pt, meno di un terzo di millimetro, ma temevo ci potesse essere qualche effetto collaterale, qualche implicazione nascosta, perché ancora visivamente la differenza sembrava più grande del dovuto. Poi mi sono accorto del diverso rientro di paragrafo… 🙂

        Ciao e grazie,
        Antonio

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

    Go to top