Misurare la lunghezza di una stringa

  • Creatore
    Topic
  • #91547
    Up
    0
    Down
    ::


    Ciao a tutti,

    mi piacerebbe sapere se è possibile, in qualche modo, far misurare la lunghezza di una certa stringa e farsi restituire il suo valore. Se questo è possibile, sarebbe anche possibile calcolare qualcosa come quello che segue?

    lunghezzaTotale mod lunghezzaColonna

    Grazie mille e buona giornata,
    Marco.

    P.S. Quello che desidero è una misura della lunghezza, non quanti caratteri compongono la stringa.

Visualizzazione 11 filoni di risposte
  • Autore
    Risposte
    • #91548
      Up
      0
      Down
      ::

      Marco87″ post=91091Ciao a tutti,

      mi piacerebbe sapere se è possibile, in qualche modo, far misurare la lunghezza di una certa stringa e farsi restituire il suo valore. Se questo è possibile, sarebbe anche possibile calcolare qualcosa come quello che segue?

      lunghezzaTotale mod lunghezzaColonna

      Grazie mille e buona giornata,
      Marco.

      P.S. Quello che desidero è una misura della lunghezza, non quanti caratteri compongono la stringa.

      Se non si va a capo: http://tex.stackexchange.com/q/58283/13304

      Ciao
      Claudio

    • #91549
      Up
      0
      Down
      ::


      Su TeX.SE avevo trovato questa soluzione

      egregUse the calc package:
      `\parbox{\widthof{my text}}{…}`

      ma in realtà io nel PDF vedo [tt]my text[/tt] al posto di [tt]\widthof{my text}[/tt], non la larghezza della stringa 😕

    • #91550
      Up
      0
      Down
      ::

      Elrond” post=91093Su TeX.SE avevo trovato questa soluzione

      Use the calc package:
      `\parbox{\widthof{my text}}{…}`

      ma in realtà io nel PDF vedo [tt]my text[/tt] al posto di [tt]\widthof{my text}[/tt], non la larghezza della stringa 😕

      Hai caricato il pacchetto [tt]calc[/tt] nel preambolo? [tt]\widthof[/tt] viene definito da quel pacchetto ed è equivalente a
      `
      \setbox0=\hbox{my text} \wd0
      `

    • #91551
      Up
      0
      Down
      ::


      Ciao,

      ringrazio molto tutti. Per il momento propendo per la soluzione che m’ha indicato cfiandra (la soluzione che usa [tt]\parbox{\widthof{my text}}{…}[/tt] non mi è affatto chiara. Ho provato a usarla ma in fase di compilazione mi viene segnalato un errore). La soluzione da cui ho tratto spunto è questa:
      `\documentclass{article}
      \usepackage{tikz}

      \begin{document}

      \newsavebox{\ftbox}
      \savebox{\ftbox}{\Huge QWERTY}
      \pgfmathparse{width(“\usebox\ftbox”)} \pgfmathresult

      \end{document} `
      A questo punto si può usare [tt]\pgfmathresult[/tt] (che fornisce la lunghezza in pt) ad esempio così:
      `\hspace{\pgfmathresult pt}`
      L’unico limite che vedo è quello che ha detto cfiandra, ossia che funziona fino a quando la stringa sta in una singola riga. Se c’è una soluzione meno limitata che conoscete, sono molto interessato a conoscerla.

      Intanto grazie mille e buona serata,
      Marco.

    • #91552
      Up
      0
      Down
      ::

      skevin93″ post=91100

      Su TeX.SE avevo trovato questa soluzione
      [quote=egreg]Use the calc package:
      `\parbox{\widthof{my text}}{…}`

      ma in realtà io nel PDF vedo [tt]my text[/tt] al posto di [tt]\widthof{my text}[/tt], non la larghezza della stringa 😕

      Hai caricato il pacchetto [tt]calc[/tt] nel preambolo? [tt]\widthof[/tt] viene definito da quel pacchetto ed è equivalente a
      `
      \setbox0=\hbox{my text} \wd0
      `[/quote]
      Se non l’avessi fatto avrei ricevuto un errore di comando inesistente, non credi? A te funziona?

      Edit: in compenso mi funzionano le soluzioni suggerite da Martin Scharrer:

      Martin Scharrer
      `\settowidth{\somelength}{}
      \settodepth{\somelength}{
      }
      \settoheight{\somelength}{
      }`

      e funziona anche per stringhe multiriga

    • #91553
      Up
      0
      Down
      ::



      @Elrond
      Si mi funziona. Se do il comando
      `
      \parbox{\withof{my text}}{testo di prova}
      `
      la stringa “testo di prova” viene spezzata proprio alla lunghezza di “my text”.

      PS: Ovviamente ho caricato il pacchetto [tt]calc[/tt] nel premabolo :D.

    • #91554
      Up
      0
      Down
      ::

      skevin93″ post=91103 @Elrond Si mi funziona. Se do il comando
      `
      \parbox{\withof{my text}}{testo di prova}
      `
      la stringa “testo di prova” viene spezzata proprio alla lunghezza di “my text”.

      PS: Ovviamente ho caricato il pacchetto [tt]calc[/tt] nel premabolo :D.

      Ok, allora ho frainteso l’uso di [tt]\widthof[/tt]: mi aspettavo che stampasse a schermo il valore della lunghezza, invece la memorizza e basta

    • #91555
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Ragazzi, c’è bisogno di andare a vedere che cosa dicono su stackexchange, quando basta usare i comandi nativi di LaTeX che Martin Scharrer ha solamente ricordato?

        Non c’era bisogno di ricorrere alla sua autorità in merito, anche se fa bene a ricordare che esistono quei comandi; Il mi limito a dira che qui nella sezione Documentazione del forum ciè una guidina tematica, piccola piccola, ma dotata di un indice analitico con tutti i comandi del LaTeX nativo, intitolata Il LaTeX Reference Manual commentato, dove quei comandi sono descritti.

        Non sono il primo a lamentarsi che le guide non vengono lette. In questo caso dovrebbe lamentarsi in prima persona Leslie Lamport, il papà di LaTeX.

      • #91556
        Up
        0
        Down
        ::


        Ciao a tutti,

        vi ringrazio davvero molto per il vostro contributo alla risposta. Mi sembra che la cosa migliore sia usare un comando nativo di LaTeX. Però, se compilo questo codice:
        `\documentclass{memoir}

        \begin{document}

        \settowidth{\misura}{Testo}

        \end{document}`
        ottengo questo errore:

        ! Undefined control sequence.
        \misura

        l.5 \settowidth{\misura}{Testo}

        The control sequence at the end of the top line
        of your error message was never \def’ed. If you have
        misspelled it (e.g., `\hobx’), type `I’ and the correct
        spelling (e.g., `I\hbox’). Otherwise just continue,
        and I’ll forget about whatever was undefined.

        ! Missing number, treated as zero.

        \setbox
        l.5 \settowidth{\misura}{Testo}

        A number should have been here; I inserted `0′.
        (If you can’t figure out why I needed to see a number,
        look up `weird error’ in the index to The TeXbook.)

        ! Illegal unit of measure (pt inserted).

        \setbox
        l.5 \settowidth{\misura}{Testo}

        Dimensions can be in units of em, ex, in, pt, pc,
        cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one!
        I’ll assume that you meant to say pt, for printer’s points.
        To recover gracefully from this error, it’s best to
        delete the erroneous units; e.g., type `2′ to delete
        two letters. (See Chapter 27 of The TeXbook.)

        Perché succede questo? Succede anche a voi?

        Grazie mille e buona giornata,
        Marco.

      • #91557
        Up
        0
        Down
        ::

        Marco87″ post=91120Ciao a tutti,

        vi ringrazio davvero molto per il vostro contributo alla risposta. Mi sembra che la cosa migliore sia usare un comando nativo di LaTeX. Però, se compilo questo codice:
        `\documentclass{memoir}

        \begin{document}

        \settowidth{\misura}{Testo}

        \end{document}`
        ottengo questo errore:

        ! Undefined control sequence.
        \misura

        l.5 \settowidth{\misura}{Testo}

        The control sequence at the end of the top line
        of your error message was never \def’ed. If you have
        misspelled it (e.g., `\hobx’), type `I’ and the correct
        spelling (e.g., `I\hbox’). Otherwise just continue,
        and I’ll forget about whatever was undefined.

        ! Missing number, treated as zero.

        \setbox
        l.5 \settowidth{\misura}{Testo}

        A number should have been here; I inserted `0′.
        (If you can’t figure out why I needed to see a number,
        look up `weird error’ in the index to The TeXbook.)

        ! Illegal unit of measure (pt inserted).

        \setbox
        l.5 \settowidth{\misura}{Testo}

        Dimensions can be in units of em, ex, in, pt, pc,
        cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one!
        I’ll assume that you meant to say pt, for printer’s points.
        To recover gracefully from this error, it’s best to
        delete the erroneous units; e.g., type `2′ to delete
        two letters. (See Chapter 27 of The TeXbook.)

        Perché succede questo? Succede anche a voi?

        Grazie mille e buona giornata,
        Marco.

        Diciamo che servono 3 passaggi: definizione, calcolo e stampa. Nel tuo codice c’è solo il calcolo. Prova con:
        `
        \documentclass{memoir}
        \usepackage{calc}
        \newlength{\misura}% definizione
        \begin{document}

        \settowidth{\misura}{Testo}% calcolo
        \the\misura% stampa

        \end{document}
        `
        Ciao
        Claudio

      • #91558
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Certo che succede a tutti; se leggi il messaggio d’errore c’è scritto

          ! Undefined control sequence.
          \misura

          l.5 \settowidth{\misura}{Testo}

          e che cosa vuol dire? che \misura non è definita; quindi devi specificare nel preambolo [tt]\newlength{\misura}[/tt].

          Fa sempre parte delle serie leggere la documentazione; nella guida tematica Il LaTeX Reference Manual commentato c’è scritto testualmente

          \newlength{⟨comando⟩} definisce una nuova lunghezza identificata con ⟨comando⟩;
          […]
          \settowidth, \settoheight e \settodepth seguono la sintassi seguente:
          \settowidth{⟨comando⟩}{⟨testo⟩}
          \settoheight{⟨comando⟩}{⟨testo⟩}
          \settodepth{⟨comando⟩}{⟨testo⟩}
          Ognuna di queste istruzioni assegna al registro-lunghezza ⟨comando⟩ rispettivamente la larghezza, l’altezza o la profondità della stringa che costituisce il ⟨testo⟩.

          alle pagine 67 e 68.

        • #91559
          Up
          0
          Down
          ::


          Ciao Claudio,

          naturalmente hai ragione.

          Grazie mille e buona giornata,
          Marco.

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

      Go to top