Testo “Multicolor”

  • Creatore
    Topic
  • #117041
    Up
    0
    Down
    ::


    Buongiorno a tutti! È la prima volta che scrivo su questo forum quindi spero di non aver sbagliato sezione o modalità.
    Il mio problema è il seguente: vorrei scrivere un testo in Latex in modo che una lettera sia Bianca, una verde, una rossa, una bianca, una verde, una rossa ecc… (So che sembra una cosa un po’ strana ma il motivo è valido…). L’unico modo che mi è venuto in mente è quello di usare textcolor su ogni lettera ma è umanamente impossibile; inoltre ho provato a cercare sulla guida ma non ho visto nulla. Sapere per caso se c’è un comando o qualcosa per fare ciò?

    Grazie mille!

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #117042
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Benvenuto nel forum.

        Certo è molto faticoso specificare \textcolor per ogni lettera, anche se il motivo è valido.

        a) Spero che tu scriva queste lettere su uno sfondo adeguatamente colorato, altrimenti le lettere baianche non si vedono; quindi lo sfondo può essere nero o con qualche colore diverso dal rosso e dal verde, sufficientemente scuro da fare contrasto. Se non fosse così, il tuo problema si complicherebbe moltissimo, perché dovresti comunque tracciare il contienro della tua lettera; mi pare che esista un pacchetto che fa questa cosa, ma anche l’uso di questo pacchetto complicherebbe ulteriormente il tuo problema.

        b) Puoi ridurre di tre volte il tuo problema se ti definisci una macro come questa`
        \newcommand\tricolore[3]{\textcolor{green}#1\textcolor{white}{#2}\textcolor{red}{#3}}`da usare così`\tricolore ITA\tricolore LIA` senza graffe; se devi scrivere una parola che non ha un numero di lettere multiplo di tre, le lettere mancanti le sostiuisci conun gruppo vuoto[tt]{}[/tt]; per esempio per scrivere “oldClaudio” useresti [tt]\tricolore Old\tricolore Cla\tricolore udi\tricolore o{}{}[/tt].

        c) Forse si potrebbe andare su un’unica macro che sfrutti \detokenize e \scantokens, ma qui andiamo nel difficile.

        d) Pensaci bene: se devi scrivere poche parole, anche riducendo per tre la fatica, può andare,ma se devi scrivere un’intera frase esamina bene se i validi motivi sono davvero validi. Ricorda che LaTeX è un programma di composizione tipografica, non un programma di disegno per costruire manifesti, reclame, depliant propagandistici e simili cose; magari ci si riesce anche, ma con grandissima fatica, perché non è la sua ragion d’essere.

      • #117043
        Up
        0
        Down
        ::


        Grazie mille per la risposta!
        Il motivo è che devo fare una presentazione di matematica in Spagna, a degli spagnoli, ma in italiano, quindi avevo pensato di scrivere le proposizioni sia in spagnolo che in italiano e colorarle in giallo e rosso per le spagnole ed in un bianco, rosso e verde per quelle in italiano (lo sfondo pensavo di metterlo grigio, ma farò delle prove). Quindi in effetti mi servirebbe scrivere tanto…
        Chiaramente non è una cosa assolutamente necessaria ma mi sembrava molto simpatica, quindi se è troppo complicata da fare pazienza

      • #117044
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Dipende da quale classe usi per la presentazione, tuttavia da qualche parte, malamente nascosto in un pacchetto il cui nome non c’entra niente, ci sono le “icone” con tutte le bandiere. Quindi il tuo problema si risolverebbe in modo semplicissimo se usassi le bandierine già disponibili. Se non riesci a trovare il pacchetto misterioso (onestamente dovrei cercare per alcune ore per dirti il suo nome), con le bandiere italiana e spagnola, la soluzione con l’ambiente picture e il pacchetto color, è semplice; puoi anche comporti le bandiere separatamente usando la classe standalone, e salvando il risultato di ciascuna bandiera con il nome giusto, tipo bandiera-it.pdf e bandiera-es.pdf, in modo che importi l’uno o l’altro disegno in corrispondenza del blocco dove scrivi l’enunciato nella lingua corrispondente. A me sembrerebbe ancora meglio; anche perché se usi l’ambiente picture (o, se preferisci TikZ) il risultato è vettoriale e sei sicuro che puoi ingrandire o ridurre il disegno senza perdere nessuna qualità; col bianco della bandiera italiana sarebbe utile il contorno sottile disegnato in nero. Conla bandiera spagnola non sarebbe necessario, ma per omogeneità lo metterei anche in quella; inoltre non hai bisogno dello sfodo grigio o colorato.

        • #117045
          robitex
          Amministratore del forum
            Up
            0
            Down
            ::

            Stenus” post=117466Buongiorno a tutti! È la prima volta che scrivo su questo forum quindi spero di non aver sbagliato sezione o modalità.
            Il mio problema è il seguente: vorrei scrivere un testo in Latex in modo che una lettera sia Bianca, una verde, una rossa, una bianca, una verde, una rossa ecc… (So che sembra una cosa un po’ strana ma il motivo è valido…). L’unico modo che mi è venuto in mente è quello di usare textcolor su ogni lettera ma è umanamente impossibile; inoltre ho provato a cercare sulla guida ma non ho visto nulla. Sapere per caso se c’è un comando o qualcosa per fare ciò?

            Grazie mille!

            Ciao e benvenuto Stenus.

            Un testo simile è abbastanza illeggibile… comunque…

            Perché non usare LuaLaTeX?
            In Lua non è difficile scrivere una funzione che prenda un carattere alla volta e lo inserisca nell’opportuno comando.

            Ecco il codice:
            `% !TeX program = LuaLaTeX

            \documentclass{article}
            \usepackage{xcolor}

            \newcommand{\colorize}[1]{\directlua{
            local col = {[[white!90!black]], [[green]], [[red]]}
            local f = 0
            local function colorize(s)
            local t = {}
            local ch = string.char
            local bs = ch(92)
            local perc = ch(37)
            local fmt = bs..[[textcolor{]]..perc..[[s}{]]..perc..[[s}]]
            local i = 0
            for c in string.utfcharacters(s) do
            i = i + 1
            if c == [[ ]] then
            t = c
            else
            f = f + 1
            if f == 4 then
            f = 1
            end
            t = string.format(fmt, col[f], c)
            end
            end
            return t
            end
            local t = colorize([=[#1]=])
            tex.sprint(table.concat(t))
            }}

            \newcommand{\mymacro}{pippo}

            \begin{document}
            ljkdlkjd
            \colorize{dckjhqkjdshjh kjh jkdjk è 1212 \mymacro{} hsdkjh}
            dòlkdlòkd
            \end{document}`

            Come puoi vedere funziona con le lettere accentate e anche con macro semplici.
            Infatti gli argomenti passati a \directlua vengono prima espansi.
            Certamente non funziona se il testo contiene macro che non espandono semplicemente in un testo, per esempio non funziona se inserisco \LaTeX.

            Alla prossima.
            R.

          • #117046
            Up
            0
            Down
            ::


            OldClaudio grazie mille per il suggerimento, se non riesco con le lettere lo farò con le bandierine!
            Robitek grazie anche a te, ma non ho mai sentito parlare di LuaLaTex… come si utilizza ?

          • #117047
            robitex
            Amministratore del forum
              Up
              0
              Down
              ::

              Stenus” post=117477OldClaudio grazie mille per il suggerimento, se non riesco con le lettere lo farò con le bandierine!
              Robitek grazie anche a te, ma non ho mai sentito parlare di LuaLaTex… come si utilizza ?

              Compili con il programma lualatex anziché pdflatex.

              Le uniche modifiche al sorgente LaTeX sono 3:
              1 codificare il sorgente in utf-8 (e probabilmente è già così in per la maggioranza degli utenti);
              2 eliminare il caricamento del pacchetto inputenc;
              3 caricare fontspec per regolare i font

              quindi:
              `
              \documentclass{quello che vuoi}
              \usepackage[italian]{babel}
              \usepackage{fontspec}
              …ecc
              `
              Saluti.
              R.

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

          Go to top