plain. Comportamento di \noindent con \leftskip e \rightskip

  • Creatore
    Topic
  • #83015
    Up
    0
    Down
    ::


    Salve a tutti. Chiedo un lume su un comportamento di cui non riesco a darmi ragione.

    Nel codice che segue \boxize disegna il contorno della scatola che gli viene passata come parametro, \narrow … \endnarrow compone il testo con una lunghezza di riga minore rispetto al normale, \liney compone un \hbox contornato all’interno dell’ambiente \narrow.

    `\catcode`@=11
    \font\small=cmr8

    \def\boxize#1{\vbox{\hrule\hbox{\vrule\hbox{#1}\vrule}\hrule}}

    \newdimen\narrowgap
    \def\narrow{\begingroup \vskip\baselineskip
    \narrowgap=1in
    \advance\leftskip by \narrowgap\relax
    \advance\rightskip by \narrowgap\relax
    \small}

    \def\endnarrow{\endgroup \vskip\baselineskip}

    \newdimen\lineywidth
    \def\liney#1{\lineywidth=\hsize
    \advance\lineywidth by -\leftskip
    \advance\lineywidth by -\rightskip
    \boxize{\hbox to\lineywidth{#1}}}
    \catcode`@=12

    \input plipsum

    \lipsum 1

    \narrow
    \liney{\hfil ONE\hfil}\par
    \lipsum 2 \par\noindent
    \liney{\hfil TWO\hfil}\par\noindent
    \lipsum 3 \par
    \liney{\hfil THREE\hfil}\par
    \lipsum 4 \par\noindent
    \liney{\hfil FOUR\hfil}\par\noindent
    \lipsum 5 \par
    \liney{\hfil FIVE\hfil}
    \endnarrow
    \lipsum 6
    \bye`

    Orbene, compilando il codice si nota come i \liney preceduti da un semplice \par (o equivalente) vengano composti arretrati rispetto al testo circostante, mentre quelli preceduti da \par\noindent (two e four) risultano composti allineati al corpo di testo.

    Perchè i \liney one three e five sono arretrati? Perchè il \noindent provoca l’assestamento dell’hbox, a differenza del testo normale che ha invece il comportamento che normalmente ci si aspetta?

    Grazie e ciao.

Visualizzazione 1 filone di risposte
  • Autore
    Risposte
    • #83016
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Non sono sicuro al 100%, ma direi che la cosa dipenda dal fatto che il \boxize interno a \liney, metta al sua \hbox in un contesto che è in modo verticale e non c’è niente che prima di \hbox che obblighi il contenuto di \boxize ad essere collocato in modo orizzontale.

        prova a cambaire `\boxize{\hbox to\lineywidth{#1}}}` in `\boxize{\hskip\z@skip\hbox to\lineywidth{#1}}}` e a vedere che cosa succede. Io non ho controllato, ma il lio suggerimento è esemplificativo solo per fa passare in modo orizzontale la maodalità di composizione cosicché la \hbox viene allineata sulla riga. invece che semplicemente impilata nella lista verticale.

      • #83017
        Up
        0
        Down
        ::

        Sam Qasbah” post=82385[…]

        Orbene, compilando il codice si nota come i \liney preceduti da un semplice \par (o equivalente) vengano composti arretrati rispetto al testo circostante, mentre quelli preceduti da \par\noindent (two e four) risultano composti allineati al corpo di testo.

        Perchè i \liney one three e five sono arretrati? Perchè il \noindent provoca l’assestamento dell’hbox, a differenza del testo normale che ha invece il comportamento che normalmente ci si aspetta?

        Perché [tt]\hbox[/tt] e [tt]\vbox[/tt] non fanno entrare TeX in modo orizzontale. Invece [tt]\noindent[/tt] sì.

        Se vuoi che qualcosa sia certamente in modo orizzontale, precedila con [tt]\leavevmode[/tt] se non è un comando orizzontale, come [tt]\hskip[/tt], [tt]\indent[/tt], [tt]\noindent[/tt],[tt]\valign[/tt], [tt]\uhnbox[/tt], [tt]\unhcopy[/tt] e qualche altro.

        Ciao
        Enrico

    Visualizzazione 1 filone di risposte
    • Devi essere connesso per rispondere a questo topic.

    Go to top