Spazio sottile insecabile

  • Creatore
    Topic
  • #40147
    Up
    0
    Down
    ::


    Buongiorno a tutti.
    Esiste un modo per creare uno spazio sottile insecabile?

    Grazie
    Tommaso

Visualizzazione 9 filoni di risposte
  • Autore
    Risposte
    • #40148
      lorenzo.pantieri
      Partecipante
        Up
        0
        Down
        ::

        Esiste un modo per creare uno spazio sottile insecabile?

        Sbaglio, o lo spazio prodotto da
        `\,`è insecabile già di suo?

        Ciao,
        L.

      • #40149
        Up
        0
        Down
        ::


        Non lo so 😀
        Per quello lo chiedo. Si comporta come ~ nelle interruzioni di riga?

        Ciao
        Tommaso

      • #40150
        Up
        0
        Down
        ::

        Non lo so 😀
        Per quello lo chiedo. Si comporta come ~ nelle interruzioni di riga?

        È, in linguaggio TeXnico, un \kern, dove TeX non può interrompere una riga.

        ~ invece è una combinazione “\penalty+\hskip”; a una \penalty è possibile l’interruzione di riga, ma siccome il valore assegnato è 10000, nel caso particolare diventa impossibile. Un’interruzione di riga è possibile a un \hskip solo se questo non è preceduto da “discardable items”; ma \penalty10000 è un “discardable item”. 😉

        Ciao
        Enrico

      • #40151
        Up
        0
        Down
        ::


        Dalla risposta, divino che \, produca uno spazio insecabile 😉

        Ciao
        Tommaso

      • #40152
        Up
        0
        Down
        ::

        Dalla risposta, divino che \, produca uno spazio insecabile 😉

        Ciao
        Tommaso

        In alternativa alla divinazione
        `
        \documentclass{article}\begin{document}\tracingall\,\end{document}
        `
        e si studia il log:
        `
        \,->\x@protect \,\protect \,

        \x@protect #1->\ifx \protect \@typeset@protect \else \@x@protect #1\fi
        #1<-\, {\ifx} {true} {\else} {\relax} \, ->\relax \ifmmode \mskip \thinmuskip \else \thinspace \fi
        {\relax}
        {\ifmmode}
        {false}

        \thinspace ->\kern .16667em
        {\kern}
        {\fi}

        `
        Non è il massimo: ci vorrebbere tipo un \tracingnone subito dopo \, e prima di \end{document}.
        Inoltre è sempre meglio inserirlo nel contesto,
        sai mai se uno lo ridefinisce…

      • #40153
        lorenzo.pantieri
        Partecipante
          Up
          0
          Down
          ::

          È, in linguaggio TeXnico, un \kern, dove TeX non può interrompere una riga.

          ~ invece è una combinazione “\penalty+\hskip”; a una \penalty è possibile l’interruzione di riga, ma siccome il valore assegnato è 10000, nel caso particolare diventa impossibile. Un’interruzione di riga è possibile a un \hskip solo se questo non è preceduto da “discardable items”; ma \penalty10000 è un “discardable item”.

          `
          \,->\x@protect \,\protect \,

          \x@protect #1->\ifx \protect \@typeset@protect \else \@x@protect #1\fi
          #1<-\, {\ifx} {true} {\else} {\relax} \, ->\relax \ifmmode \mskip \thinmuskip \else \thinspace \fi
          {\relax}
          {\ifmmode}
          {false}

          \thinspace ->\kern .16667em
          {\kern}
          {\fi}

          `
          Obscurum per obscurius… 😉

          Ciao,
          L.

        • #40154
          Up
          0
          Down
          ::


          Ringrazio tutti, ma non ci capisco un accidente. 😀

          Vedi di ri-formulare il problema con una domanda del tipo sì/no.

          Il carattere ~ produce uno spazio insecabile, che ha delle conseguenze, per esempio, nella divisione delle parole in fin di riga. Vorrei qualcosa che agisca nello stesso modo di ~ , ma che produca uno spazio sottile.

          Dunque:

          il comando \, produce uno spazio sottile insecabile, sì o no?

          Grazie 😉
          Tommaso

        • #40155
          Up
          0
          Down
          ::

          Ringrazio tutti, ma non ci capisco un accidente. 😀

          Vedi di ri-formulare il problema con una domanda del tipo sì/no.

          Il carattere ~ produce uno spazio insecabile, che ha delle conseguenze, per esempio, nella divisione delle parole in fin di riga. Vorrei qualcosa che agisca nello stesso modo di ~ , ma che produca uno spazio sottile.

          Dunque:

          il comando \, produce uno spazio sottile insecabile, sì o no?

          Se devo dire la verità, il neologismo “insecabile” non mi piace affatto. A parte questo, visto che questo è il messaggio numero 6000 ❗ vedo di dilungarmi un pochino.

          Ci sono due comandi primitivi per produrre spazi “orizzontali”: \hskip, che in LaTeX viene chiamato tramite \hspace, e \kern, che non ha un corrispondente LaTeX. I due comandi producono oggetti diversi, sebbene la realizzazione su una riga di stampa sia la stessa, cioè uno spazio vuoto.

          Differenza fondamentale è che lo spazio prodotto da \hskip è (per meglio dire può essere) elastico, quello prodotto da \kern no. Altra differenza è che un \hskip è uno dei posti dove TeX ha facoltà di finire una riga, \kern no. In comune i due tipi di spazio hanno che entrambi spariscono se capitano all’inizio o alla fine di una riga.

          Perché \kern non ha un corrispondente comando LaTeX? Si tratta di una spaziatura che va lasciata all’esperto, un trucco tipografico che non è bene divulgare troppo. 🙂 Nolite iacere margaritas ante porcos 😉 Scherzo: \kern è utile in alcuni casi, si cerchi sul forum dove è usato.

          La definizione di \, è quella fatta vedere da Luigi: a parte alcune faccende con vari “protect” che servono a renderlo robusto, la definizione sostanziale è
          `\relax \ifmmode \mskip \thinmuskip \else \thinspace \fi`
          Il \relax serve per questioni TeXniche irrilevanti con il problema trattato (fidatevi). La parte importante è il condizionale: se si è in modo matematico, viene inserito uno spazio matematico sottile. (Lo spazio matematico, \mskip, è un terzo tipo di spaziatura, ma si può usare solo nelle formule.)

          In modo testo, invece, viene inserito un \kern di un ottavo di quadratone (come si vede, la definizione di \thinspace è \kern .16667em).

          Per la regola citata prima, \, non potrà mai essere usato come punto dove finire una riga di stampa (nemmeno in modo matematico, per chi potesse avere dubbi: le formule possono essere spezzate solo dopo simboli di relazione o di operazione).

          Adesso però voglio una giustificazione del fatto che la seguente citazione

          È, in linguaggio TeXnico, un \kern, dove TeX non può interrompere una riga.

          non sia risolutiva della questione posta. 🙂

          Ciao
          Enrico

        • #40156
          Up
          0
          Down
          ::

          Ringrazio tutti, ma non ci capisco un accidente. 😀

          Buon segno, ma ormai devo rincarare la dose.

          Il carattere ~ produce uno spazio insecabile, che ha delle conseguenze, per esempio, nella divisione delle parole in fin di riga. Vorrei qualcosa che agisca nello stesso modo di ~ , ma che produca uno spazio sottile.

          Se non trovi quello che cerchi,
          puoi sempre provare con una tua macro.
          In questo caso vediamo se esiste qualcosa di simile.

          Oltre a \tracingall, c’è sempre il sorgente da studiare,
          nel ns caso se hai una tl2009, il file è
          tl2009/texmf-dist/tex/latex/base/latex.ltx
          (i numeri a fianco sono i numeri di linea)
          `
          1297 \DeclareRobustCommand{\nobreakspace}{%
          1298 \leavevmode\nobreak\ }
          1299 \catcode `\~=13
          1300 \def~{\nobreakspace{}}
          1301 \expandafter\let\expandafter\@xobeysp\csname nobreakspace \endcsname
          1302 \DeclareRobustCommand{\,}{%
          1303 \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi
          1304 }
          `

          Alla riga 1299
          la sempreverde questione sui caratteri attivi
          http://www.texdev.net/2009/12/09/active-characters-again/
          http://en.wikibooks.org/wiki/TeX/catcode

          Secondo me ora sei in grado di costruirti la macro che vuoi:
          io suggerisco di iniziare con
          \DeclareRobustCommand{\MyNoBreakSpace}{%
          %%completa tu..
          %%…
          %%…e testala, perchè TeX è un leone imbizzarrito, a volte
          }

        • #40157
          Up
          0
          Down
          ::


          Carissimo professore!
          Mi metto immantinente all’opera per darLe la risposta che mi richiede.

          Lusingatissimo di essere il destinatario del suo seimillesimo messaggio nel forum, colgo l’occasione di uscire dal topic per proporre una libagione. Non necessariamente prima della santissima Natività. 😉

          A presto
          Tommaso

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

      Go to top