Carta millimetrata lineare, semilogaritmica e log-log

  • Creatore
    Topic
  • #116545
    Up
    0
    Down
    ::


    Cari tutti,

    prima di imbarcarmi in un lavoro che forse hanno già fatto altri, sono qui a chiedervi se conoscete dei pacchetti per creare automaticamente carta millimetrata e/o semilogaritmica. (Ho aggiunto nel titolo anche log-log per completezza, ma in realtà mi servono solo le prime due).

    Per quanto riguarda la carta in scala lineare, la faccenda è piuttosto semplice. Basta qualche riga di Tikz scopiazzata da internet e modificata. Per la semilog la faccenda è più complicata (fattibile ma noiosa). Senza contare che vorrei qualche piccola personalizzazione (i tick che sporgono ecc…). Non riesco a trovare nulla di preconfezionato.
    Se mi confermate che non c’è nulla, comincio a scrivere un pacchetto per produrre questi tipi di quadrettature.

    Per chi è interessato al motivo: devo comprare carta lineare e semilog per il mio corso all’università. Tutti i prof la stampano prendendo file da internet o generati da loro. Però lo fanno con le stampanti laser del dipartimento, ottenendo molto spesso stampe di pessima qualità e, secondo me, anche a un costo non indifferente. Ho quindi contattato una tipografia qua vicino per fare questo lavoro e devo preparare il pdf per la stampa. Non vorrei prenderne uno a caso da internet, soprattutto perché mi piacerebbe personalizzarlo al meglio (per esempio inserendo il logo dell’Università ecc…).

    Grazie mille.
    Ciao ciao.
    Fra

Visualizzazione 14 filoni di risposte
  • Autore
    Risposte
    • #116546
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Pensa che io ho creato un mio pacchetto per i diagrammi lineari e semilogaritmici nei lontani anni ’90. Se ben ricordo anche bilogaritmici. Il tutto fatto con l’ambiente picture di allora, quando non esisteva né pict2e, né alcuna funzionalità di \TeX per eseguire calcoli con numeri fratti, se non passando per i coefficienti delle lunghezze (su cui si basa ancora il pacchetto calc; l’estensione eTeX mette a disposizione dei comandi per eseguire i calcoli nella CPU, ma per i logaritmi siano ancora lontanissimi).

        Oggi c’è il pacchetto xfp che permette di fare i conti con i floating point in notazione decimale; ottimo pacchetto; Se rimettessi le mani sul mio vecchio pacchetto, non escludo che renderei il codice molto più semplice, leggibile e manutenibile.

        Cerco quel vecchio pacchetto che non ho mai reso pubblico; Su CTAN dovrebbe esserci un pacchetto bardiagram che forse non si limita ai soli diagrammi a barre, ma probabilmente è sorpassato.

        D’altra parte pgfplots dovrebbe poter disegnare le carte lineari e logaritmiche che ti servono, pgfplots non è TikZ, anche se i creatori e i curatori sono gli stessi. Pgfplots contiene già una libreria per eseguire i calcoli con i numeri fratti anche in notazione scientifica, basati essenzialmente su interpolazioni molto fini di archi delle curve delle funzioni trascendenti trascendenti con un campionamento molto fitto; i calcoli sono decisamente precisi, anche se, a mio parere, non sono allo stesso livello di quelli che puoi fare con xfp. Leggi la documentazione di pgfplots, perché ne vale decisamente la pena.

        Bisogna che io ripassi quello che ho fatto tanto tempo fa.

      • #116547
        Up
        0
        Down
        ::


        Caro Claudio,

        grazie della risposta.

        Bardiagram non c’è più su CTAN. Ho trovato in ogni caso la sua documentazione e non mi pare permetta di disegnare griglie, almeno non in maniera ovvia.

        Per quanto riguarda il pacchetto personalizzato pensavo anche io di farlo con l’ambiente picture (e ovviamente con le varie estensioni per poter fare calcoli con precisione maggiore rispetto a quella gestita di default da TeX). Fortunatamente però, grazie al tuo suggerimento, ho cercato meglio con i termini “pgfplots” e “log scale” e ho trovato molto più materiale. Penso che quello che ho trovato dovrebbe essere sufficiente per i miei scopi. Quando ho finito riporterò in questa conversazione il codice.

        Quindi non penso mi metterò a fare un pacchetto nuovo, soprattutto alla luce del fatto che ce ne è già una versione pronta, persa nei cassetti come la dimostrazione di Newton!

        Grazie mille!

        Ciao ciao.
        Fra

      • #116548
        Up
        0
        Down
        ::


        Cari tutti,

        alla fine con Tikz e compagnia stavo impazzendo… e ho optato per l’ambiente picture.
        Riporto i codici sotto. Non sono bellissimi… ma funzionano.

        Il primo per la scala lineare, il secondo per la scala semilog. Il secondo permette di scegliere il numero di decadi, da 1 a 4. In realtà si può mettere un intero qualsiasi ma poi le linee diventano troppo fitte. Andrebbero messi degli if.

        Alla fine c’è anche l’inserimento di un’immagine con textpos (il logo dell’università). Commentatelo se non vi serve.

        Spero possano essere utili a qualcuno!

        Ecco anche due esempi in pdf:
        [attachment=2288]lin-lin.pdf[/attachment]
        [attachment=2289]lin-log.pdf[/attachment]

        Ciao ciao.
        Fra

        `
        % !TeX encoding = utf8
        % !TeX program = pdflatex
        % !TeX spellcheck = en_US

        \documentclass[a4paper]{article}
        \usepackage[top=18.42mm,bottom=18.18mm,left=14.8mm,right=14.8mm]{geometry}
        \usepackage{graphicx}
        \usepackage{xfp}
        \usepackage{curve2e}
        \def\width{180}
        \def\height{260}
        \definecolor{gridcolor}{RGB}{250,153,89}
        %\definecolor{gridcolor}{RGB}{0,0,0}

        \usepackage[absolute]{textpos}

        \begin{document}

        \parindent=0pt
        \pagestyle{empty}
        \setlength{\unitlength}{1mm}
        \edef\dec{4}
        \edef\decaux{\fpeval{round({\dec} + 1)}}
        \edef\ystep{\fpeval{{\height} / {\dec}}}
        \edef\ticklength{\fpeval{2}}
        \edef\longwidth{\fpeval{{\width} + 2 * {\ticklength}}}
        \newlength\lwa
        \setlength{\lwa}{0.4mm}
        \newlength\lwb
        \setlength{\lwb}{0.2mm}
        \newlength\lwc
        \setlength{\lwc}{0.1mm}

        \begin{picture}(\width,\height)(0,0)
        \color{gridcolor}
        \squarecap
        % x lines
        \multiput(0,0)(10,0){19}{\linethickness{\lwa}\line(0,1){\height}}
        \multiput(5,0)(10,0){18}{\linethickness{\lwb}\line(0,1){\height}}
        \multiput(0,0)(1,0){181}{\linethickness{\lwc}\line(0,1){\height}}

        % y lines
        \multiput(0,0)(0,10){27}{\linethickness{\lwa}\line(1,0){\width}}
        \multiput(0,5)(0,10){26}{\linethickness{\lwb}\line(1,0){\width}}
        \multiput(0,0)(0,1){261}{\linethickness{\lwc}\line(1,0){\width}}

        \end{picture}

        \begin{textblock*}{15mm}(19.6cm,0.63cm)
        \noindent
        \includegraphics[width=12mm]{unifilogo_black_v.pdf}
        \end{textblock*}

        \end{document}
        `

        `
        % !TeX encoding = utf8
        % !TeX program = pdflatex
        % !TeX spellcheck = en_US

        \documentclass[a4paper]{article}
        \usepackage[top=18.42mm,bottom=18.18mm,left=14.8mm,right=14.8mm]{geometry}
        \usepackage{graphicx}
        \usepackage{xfp}
        \usepackage{curve2e}
        \def\width{180}
        \def\height{260}
        \definecolor{gridcolor}{RGB}{250,153,89}
        %\definecolor{gridcolor}{RGB}{0,0,0}

        \usepackage[absolute]{textpos}

        \begin{document}

        \parindent=0pt
        \pagestyle{empty}
        \setlength{\unitlength}{1mm}
        \edef\dec{4}
        \edef\decaux{\fpeval{round({\dec} + 1)}}
        \edef\ystep{\fpeval{{\height} / {\dec}}}
        \edef\ticklength{\fpeval{2}}
        \edef\longwidth{\fpeval{{\width} + 2 * {\ticklength}}}
        \newlength\lwa
        \setlength{\lwa}{0.4mm}
        \newlength\lwb
        \setlength{\lwb}{0.2mm}
        \newlength\lwc
        \setlength{\lwc}{0.1mm}

        \begin{picture}(\width,\height)(0,0)
        \color{gridcolor}
        % x lines
        \multiput(0,0)(10,0){19}{\linethickness{\lwa}\line(0,1){\height}}
        \multiput(5,0)(10,0){18}{\linethickness{\lwb}\line(0,1){\height}}
        \multiput(0,0)(1,0){181}{\linethickness{\lwc}\line(0,1){\height}}

        % y lines
        \edef\yoffset{\fpeval{0}}
        \multiput(-\ticklength,\yoffset)(0,\ystep){\decaux}{\linethickness{\lwa}\line(1,0){\longwidth}}
        \edef\yoffset{\fpeval{ln(2) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwb}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(3) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwb}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(4) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwb}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(5) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwb}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(6) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwb}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(7) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwb}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(8) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwb}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(9) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwb}\line(1,0){\width}}

        % sub y lines
        \edef\yoffset{\fpeval{ln(1.1) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(1.2) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(1.3) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(1.4) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(1.5) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(1.6) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(1.7) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(1.8) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(1.9) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}

        \edef\yoffset{\fpeval{ln(2.1) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(2.2) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(2.3) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(2.4) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(2.5) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(2.6) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(2.7) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(2.8) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(2.9) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}

        \edef\yoffset{\fpeval{ln(3.2) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(3.4) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(3.6) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(3.8) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}

        \edef\yoffset{\fpeval{ln(4.2) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(4.4) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(4.6) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(4.8) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}

        \edef\yoffset{\fpeval{ln(5.2) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(5.4) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(5.6) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(5.8) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}

        \edef\yoffset{\fpeval{ln(6.2) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(6.4) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(6.6) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}
        \edef\yoffset{\fpeval{ln(6.8) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}

        \edef\yoffset{\fpeval{ln(7.5) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}

        \edef\yoffset{\fpeval{ln(8.5) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}

        \edef\yoffset{\fpeval{ln(9.5) * {\ystep} / ln(10)}}
        \multiput(0,\yoffset)(0,\ystep){\dec}{\linethickness{\lwc}\line(1,0){\width}}

        \end{picture}

        \begin{textblock*}{15mm}(19.6cm,0.63cm)
        \noindent
        \includegraphics[width=12mm]{unifilogo_black_v.pdf}
        \end{textblock*}

        \end{document}
        `

        Attachments:
        You must be logged in to view attached files.
      • #116549
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Mi fa molto piacere che tu abbia usato curve2e (il quale a sua volta carica xfp, quindi a stretto rigore non hai bisogno di ricaricarlo). Certo non ha le funzionalità di TikZ ma è molto più semplice da usare; la documentazione d’uso è di sole 19 pagine contro le centinaia di TikZ 😀 Fa anche molto di meno, ma fa molto per quel giocattolino che è l’ambiente picture.

          Bene, per la semilog il codice è un po’ complesso, ma va bene. Ma…

          ATTENZIONE Mi sono accorto che nella carta semilogaritmica, se giri il foglio in modo che il logo dell’università sia diritto, le decadi vanno da destra a sinistra. Di solito vanno da sinistra a destra.:o

        • #116550
          Up
          0
          Down
          ::


          Ciao Claudio!

          Allora tolgo subito xfp!

          Sì, ammetto che ho un certo amore per l’ambiente picture!

          Per quanto riguarda il verso delle decadi hai ragione… 🙁 grazie mille per averlo notato!
          Dovrei mettere il logo dalla parte opposta, in basso a sinistra, con lettura dal basso verso l’alto, ma quello sarebbe proprio l’origine degli assi nel caso in cui si usi la carta verticalmente. A questo punto forse è meglio metterlo in alto a sinistra, orizzontale… che ne pensi?

          Ciao ciao.
          Fra

        • #116551
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Ma bisognerebbe mettere la carta in landascape (\documentclass[a4paper,landscape]{article}), solo che così gli step e gli incrementi vanno riaggiustati per la nuova disposizione della carta.

            Invece, curve2e in relata non serve; basta caricare al suo posto (risparminando parecchie centinaia di righe di codice in memoria) e caricare espressamente solo xfp e color oppure xcolor. ho anche tlto un apio di specifiche dove \fpeval svolge la funzione del cannone per affrontare la proverbiale zanzara Ho tolto anche la chiamata a quel pacchetto che definisce \textblock; l’ambiente picture provvede da solo con i suoi comandi.

            Piuttosto il codice è quasi illeggibile e se serve solo per creare questi fogli lineari o semilogaritmici, basterebbe semplicemente definire un comando. In questa direzione ti ho riscritto il file per la carta logaritmica, togliendo tutto quello che non serve, salvo (commentato) la chiamata a curve2e; il commento spiega perché. Ovviamante se giri la carta in landscape devi sostituire la definizione di \hlines con un’altra che tenga conto del nuovo roientamento della carta; il bello di LaTeX è che correggendo/modificando una sola macro, risparmi di andare a correggere/modificare le decine di righe che usi per tracciare le linee a distanze logaritmiche`% !TeX encoding = utf8
            % !TeX program = pdflatex
            % !TeX spellcheck = en_US

            % Disegna una carta in cui le ascisse sono lineari e le ordinate sono logaritmiche; la carta messa in posizione portrait va bene, ma il logo dell'università risulta girato di 90 gradi in senso orario
            % Se si gira la carta in posizione landscape, e il logo si legge diritto, le ordinate sono lieari, ma le decadi vanno da destra a sinistra.

            \documentclass[a4paper]{article}
            \usepackage[top=18.42mm,bottom=18.18mm,left=14.8mm,right=14.8mm]{geometry}
            \usepackage{graphicx}
            %\usepackage{curve2e}% carica già xfp.sty, ma per il resto non mi sembra che vanga usato; o meglio, viene usato solo perché carica il pacchetto xcolor — color è sufficiente.
            \usepackage{xfp,color}

            \def\width{180}
            \def\height{260}
            \definecolor{gridcolor}{RGB}{250,153,89}
            %\definecolor{gridcolor}{RGB}{0,0,0}

            \parindent=0pt
            \pagestyle{empty}
            \setlength{\unitlength}{1mm}
            \edef\dec{4}
            \edef\decaux{\numexpr \dec + 1}
            \edef\ystep{\fpeval{\height / \dec}}
            \edef\ticklength{2}
            \edef\longwidth{\fpeval{\width + 2 * \ticklength}}
            \newlength\lwa
            \setlength{\lwa}{0.4mm}
            \newlength\lwb
            \setlength{\lwb}{0.2mm}
            \newlength\lwc
            \setlength{\lwc}{0.1mm}

            \newcommand\hlines[4]{%
            % #1 := \decaux oppure \dec
            % #2 := fattore reale di incremento da una riga alla successiva
            % #3 := spessore delle linee espresso con il valore \lwa, o \lwb o \lwc
            % #4 := lunghezza espressa con \longwidth o \width. Se #4 > \width,
            % automaticamente usa un displacement iniziale pari a -\ticklength
            % \ystep := (già pre-calcolato come altezza della carta divisa per il
            % numero di decadi) altezza di ogni decade, in modo da poter
            % ripetere le stesse line in ogni decade.
            %\edef\yoffset{\fpeval{#2}}
            \expandafter\multiput\expandafter(\ifdim#4pt>\width pt
            -\ticklength \else 0\fi,\fpeval{ln(#2)*\ystep/ln(10)})(0,\ystep){#1}%
            {\linethickness{#3}\line(1,0){#4}}%
            }

            \begin{document}

            \begin{picture}(\width,\height)(0,0)
            \color{gridcolor}

            % linee verticali (a intervalli lineari)
            \multiput(0,0)(10,0){19}{\linethickness{\lwa}\line(0,1){\height}}
            \multiput(5,0)(10,0){18}{\linethickness{\lwb}\line(0,1){\height}}
            \multiput(0,0)(1,0){181}{\linethickness{\lwc}\line(0,1){\height}}

            % linee orizzontai a intervalli logaritmici

            % linee principali, una ogni decade
            \hlines{\decaux}{1}{\lwa}{\longwidth}
            % secondo livello: in ogni decade, una ogni unità
            \hlines{\dec}{2}{\lwb}{\width}
            \hlines{\dec}{3}{\lwb}{\width}
            \hlines{\dec}{4}{\lwb}{\width}
            \hlines{\dec}{5}{\lwb}{\width}
            \hlines{\dec}{6}{\lwb}{\width}
            \hlines{\dec}{7}{\lwb}{\width}
            \hlines{\dec}{8}{\lwb}{\width}
            \hlines{\dec}{9}{\lwb}{\width}
            % terzo livello: una ogni decimo, o due decimi, o …, per ciascuna unità
            \hlines{\dec}{1.1}{\lwc}{\width}
            \hlines{\dec}{1.2}{\lwc}{\width}
            \hlines{\dec}{1.3}{\lwc}{\width}
            \hlines{\dec}{1.4}{\lwc}{\width}
            \hlines{\dec}{1.5}{\lwc}{\width}
            \hlines{\dec}{1.6}{\lwc}{\width}
            \hlines{\dec}{1.7}{\lwc}{\width}
            \hlines{\dec}{1.8}{\lwc}{\width}
            \hlines{\dec}{1.9}{\lwc}{\width}
            \hlines{\dec}{2.1}{\lwc}{\width}
            \hlines{\dec}{2.2}{\lwc}{\width}
            \hlines{\dec}{2.3}{\lwc}{\width}
            \hlines{\dec}{2.4}{\lwc}{\width}
            \hlines{\dec}{2.5}{\lwc}{\width}
            \hlines{\dec}{2.6}{\lwc}{\width}
            \hlines{\dec}{2.7}{\lwc}{\width}
            \hlines{\dec}{2.8}{\lwc}{\width}
            \hlines{\dec}{2.9}{\lwc}{\width}
            \hlines{\dec}{3.2}{\lwc}{\width}
            \hlines{\dec}{3.4}{\lwc}{\width}
            \hlines{\dec}{3.6}{\lwc}{\width}
            \hlines{\dec}{3.8}{\lwc}{\width}
            \hlines{\dec}{4.2}{\lwc}{\width}
            \hlines{\dec}{4.4}{\lwc}{\width}
            \hlines{\dec}{4.6}{\lwc}{\width}
            \hlines{\dec}{4.8}{\lwc}{\width}
            \hlines{\dec}{5.2}{\lwc}{\width}
            \hlines{\dec}{5.4}{\lwc}{\width}
            \hlines{\dec}{5.6}{\lwc}{\width}
            \hlines{\dec}{5.8}{\lwc}{\width}
            \hlines{\dec}{6.2}{\lwc}{\width}
            \hlines{\dec}{6.4}{\lwc}{\width}
            \hlines{\dec}{6.6}{\lwc}{\width}
            \hlines{\dec}{6.8}{\lwc}{\width}
            \hlines{\dec}{7.5}{\lwc}{\width}
            \hlines{\dec}{8.5}{\lwc}{\width}
            \hlines{\dec}{9.5}{\lwc}{\width}

            \put(182,276){\makebox(0,0)[tl]{\includegraphics[angle=-90,width=12mm]{LogoPoliTO-blu}}}
            %\put(182,276){\makebox(0,0)[tl]{\includegraphics[angle=-90,width=12mm]{unifilogo_black_v.pdf}}}
            \end{picture}

            \end{document}`Per il logo ho fatto esperimenti con il logo del mio PoliTO, perché non dispongo del tuo logo di UniFI, ma vi ho lasciata la riga commentata, ma con i comandi di picture.

            Il “bello” (di fa per dire) dell’uso di un comando per tracciare le linee è che i suoi argomenti sono ben visibili e si vede subito per quale riga sono usati.

            Infatti eccoti la carta millimetrata in landscape`% !TeX encoding = utf8
            % !TeX program = pdflatex
            % !TeX spellcheck = en_US

            % Disegna una carta in cui le ordinate sono lineari e le ascisse sono logaritmiche;
            % la carta è disegnata in landscape, per cui non ci sono problemi in merito al fatto
            % che le scale, anche quella logaritmica, vadano da sinistra a destra

            \documentclass[a4paper,landscape]{article}
            \usepackage[a4paper,landscape,top=15mm,bottom=15mm,left=18.5mm,right=18.5mm]{geometry}
            \usepackage{graphicx}
            %\usepackage{curve2e}% carica già xfp.sty, ma per il resto non mi sembra che vanga usato; o meglio, viene usato solo perché carica il pacchetto xcolor — color è sufficiente.
            \usepackage{xfp,color}

            \def\width{260}
            \def\height{180}
            \definecolor{gridcolor}{RGB}{250,153,89}
            %\definecolor{gridcolor}{RGB}{0,0,0}

            \parindent=0pt
            \pagestyle{empty}
            \setlength{\unitlength}{1mm}
            \edef\dec{4}
            \edef\decaux{\numexpr \dec + 1}
            \edef\xstep{\fpeval{\width / \dec}}
            \edef\ystep{\fpeval{\height / \dec}}
            \edef\ticklength{2}
            \edef\longwidth{\fpeval{\width + 2 * \ticklength}}
            \edef\longheight{\fpeval{\height + 2* \ticklength}}
            \newlength\lwa
            \setlength{\lwa}{1pt}%{0.4mm}
            \newlength\lwb
            \setlength{\lwb}{0.7pt}%{0.2mm}
            \newlength\lwc
            \setlength{\lwc}{0.5pt}%{0.1mm}

            \newcommand\hlines[4]{%
            % #1 := \decaux oppure \dec
            % #2 := fattore reale di incremento da una riga alla successiva
            % #3 := spessore delle linee espresso con il valore \lwa, o \lwb o \lwc
            % #4 := lunghezza espressa con \longwidth o \width. Se #4 > \width,
            % automaticamente usa un displacement iniziale pari a -\ticklength
            % \ystep := (già pre-calcolato come altezza della carta divisa per il
            % numero di decadi) altezza di ogni decade, in modo da poter
            % ripetere le stesse linee in ogni decade.
            %\edef\yoffset{\fpeval{#2}}
            \expandafter\multiput\expandafter(\ifdim#4pt>\width pt
            -\ticklength \else 0\fi,\fpeval{ln(#2)*\ystep/ln(10)})(0,\ystep){#1}%
            {\linethickness{#3}\line(1,0){#4}}%
            }

            \newcommand\vlines[4]{%
            % #1 := \decaux oppure \dec
            % #2 := fattore reale di incremento da una riga alla successiva
            % #3 := spessore delle linee espresso con il valore \lwa, o \lwb o \lwc
            % #4 := lunghezza espressa con \longheight o \height. Se #4 > \height,
            % automaticamente usa un displacement iniziale pari a -\ticklength
            % \xstep := (già pre-calcolato come larghezza della carta divisa per il
            % numero di decadi) altezza di ogni decade, in modo da poter
            % ripetere le stesse linee in ogni decade.
            \edef\xoffset{\ifdim#4pt > \height pt -\ticklength \else 0\fi}
            \multiput(\fpeval{ln(#2) * \xstep / ln(10)},\xoffset)(\xstep,0){#1}%
            {\linethickness{#3}\line(0,1){#4}}%
            }

            \begin{document}\errorcontextlines=100
            \centering

            \begin{picture}(\width,\height)(0,0)
            \color{gridcolor}

            % linee orizzontali (a intervalli lineari in verticale}
            \multiput(0,0)(0,10){19}{\linethickness{\lwa}\line(1,0){\width}}
            \multiput(0,5)(0,10){18}{\linethickness{\lwb}\line(1,0){\width}}
            \multiput(0,0)(0,1){180}{\linethickness{\lwc}\line(1,0){\width}}

            % linee verticali a intervalli logaritmici in orizzontale
            % linee principali, una ogni decade

            \vlines{\decaux}{1}{\lwa}{\longheight}
            % secondo livello: in ogni decade, una ogni unità
            \vlines{\dec}{2}{\lwb}{\height}
            \vlines{\dec}{3}{\lwb}{\height}
            \vlines{\dec}{4}{\lwb}{\height}
            \vlines{\dec}{5}{\lwb}{\height}
            \vlines{\dec}{6}{\lwb}{\height}
            \vlines{\dec}{7}{\lwb}{\height}
            \vlines{\dec}{8}{\lwb}{\height}
            \vlines{\dec}{9}{\lwb}{\height}
            % terzo livello: una ogni decimo, o due decimi, o …, per ciascuna unità
            \vlines{\dec}{1.1}{\lwc}{\height}
            \vlines{\dec}{1.2}{\lwc}{\height}
            \vlines{\dec}{1.3}{\lwc}{\height}
            \vlines{\dec}{1.4}{\lwc}{\height}
            \vlines{\dec}{1.5}{\lwc}{\height}
            \vlines{\dec}{1.6}{\lwc}{\height}
            \vlines{\dec}{1.7}{\lwc}{\height}
            \vlines{\dec}{1.8}{\lwc}{\height}
            \vlines{\dec}{1.9}{\lwc}{\height}
            \vlines{\dec}{2.1}{\lwc}{\height}
            \vlines{\dec}{2.2}{\lwc}{\height}
            \vlines{\dec}{2.3}{\lwc}{\height}
            \vlines{\dec}{2.4}{\lwc}{\height}
            \vlines{\dec}{2.5}{\lwc}{\height}
            \vlines{\dec}{2.6}{\lwc}{\height}
            \vlines{\dec}{2.7}{\lwc}{\height}
            \vlines{\dec}{2.8}{\lwc}{\height}
            \vlines{\dec}{2.9}{\lwc}{\height}
            \vlines{\dec}{3.2}{\lwc}{\height}
            \vlines{\dec}{3.4}{\lwc}{\height}
            \vlines{\dec}{3.6}{\lwc}{\height}
            \vlines{\dec}{3.8}{\lwc}{\height}
            \vlines{\dec}{4.2}{\lwc}{\height}
            \vlines{\dec}{4.4}{\lwc}{\height}
            \vlines{\dec}{4.6}{\lwc}{\height}
            \vlines{\dec}{4.8}{\lwc}{\height}
            \vlines{\dec}{5.2}{\lwc}{\height}
            \vlines{\dec}{5.4}{\lwc}{\height}
            \vlines{\dec}{5.6}{\lwc}{\height}
            \vlines{\dec}{5.8}{\lwc}{\height}
            \vlines{\dec}{6.2}{\lwc}{\height}
            \vlines{\dec}{6.4}{\lwc}{\height}
            \vlines{\dec}{6.6}{\lwc}{\height}
            \vlines{\dec}{6.8}{\lwc}{\height}
            \vlines{\dec}{7.5}{\lwc}{\height}
            \vlines{\dec}{8.5}{\lwc}{\height}
            \vlines{\dec}{9.5}{\lwc}{\height}

            \put(-16,193){\makebox(0,0)[tl]{\includegraphics[width=25mm]{LogoPoliTO-blu}}}
            %\put(182,276){\makebox(0,0)[tl]{\includegraphics[angle=-90,width=12mm]{unifilogo_black_v.pdf}}}

            \end{picture}

            \end{document}`Siccome ci sono definite sia le righe “logaritmiche” verticali sia quelle orizzontali, non ci vuole molto a trasformare questo file per generare anche i fogli bilogaritmici.

          • #116552
            Up
            0
            Down
            ::


            Grazie mille Claudio, veramente.
            Mi studio il codice!

            Ciao ciao.
            Fra

          • #116553
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Ne ho pronto un altro più compatto; te lo invio domani.
              Claudio

            • #116554
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::


                Ho pensato che tutte quelle righe di codice necessarie per tracciare una linea alla volta con ascisse logaritmiche si può semplificare; questa soluzione fa riferimento ad un ciclo while come si fa in tutti i linguaggi di programmazione. Con il sistema TeX a livello utente il nucleo di LaTeX non offre niente. Il pacchetto etoolbox fornisce il comando \csuse che fa cose egregie per usare comandi interni al nucleo di LaTeX e anche altri comandi, ma mi sembra eccessivo caricare tutto quel pacchetto, per una cosa che per le carte logaritmiche mi sembra eccessivo; tanto vale definirsene una copia molto più modesta, per usare il comando \@whilenum interno al nucleo di LaTeX. La sintassi del comando è la seguente:

                \@whilenum\do{,comandi>}

                dove è una condizione numerica da verificare per terminare il ciclo; uno dei due comparandi deve essere contenuto in un registro numerico di tipo count (TeX) e non di tipo counter (LaTeX); invece deve essere l’insieme delle operazioni da eseguire ripetitivamente, compresa, alla fine una istruzione per alterare il valore del contatore. Insomma normali operazioni che si fanno con qualunque linguaggio di programmazione. L’artificio che ci occorre è collegare il contatore con la parte intera o con la parte fratta delle coordinate per le quali tracciare le linee verticali della carta semilogaritmica in formato landscape; Ecco il codice`% !TeX encoding = utf8
                % !TeX program = pdflatex
                % !TeX spellcheck = en_US

                % Disegna una carta in cui le ordinate sono lineari e le scisse sono logaritmiche; la carta è disegnata in landscape, così non ci sono problemi in merito alla direzione in cui crescono le scale.

                \documentclass[a4paper,landscape]{article}
                \usepackage[a4paper,landscape,top=15mm,bottom=15mm,left=18.5mm,right=18.5mm]{geometry}
                \usepackage{graphicx}
                %\usepackage{curve2e}% carica già xfp.sty, ma per il resto non mi sembra che vanga usato; o meglio, viene usato solo perché carica il pacchetto xcolor — color è sufficiente.
                \usepackage{xfp,color}

                \def\width{260}
                \def\height{180}
                \definecolor{gridcolor}{RGB}{250,153,89}
                %\definecolor{gridcolor}{RGB}{0,0,0}

                \parindent=0pt
                \pagestyle{empty}
                \setlength{\unitlength}{1mm}
                \edef\dec{4}
                \edef\decaux{\numexpr \dec + 1}
                \edef\xstep{\fpeval{\width / \dec}}
                \edef\ystep{\fpeval{\height / \dec}}
                \edef\ticklength{2}
                \edef\longwidth{\fpeval{\width + 2 * \ticklength}}
                \edef\longheight{\fpeval{\height + 2* \ticklength}}
                \newlength\lwa
                \setlength{\lwa}{1pt}%{0.4mm}
                \newlength\lwb
                \setlength{\lwb}{0.7pt}%{0.2mm}
                \newlength\lwc
                \setlength{\lwc}{0.5pt}%{0.1mm}

                % Macro per usare una macro col sulo suo nome, senza il backslash
                % Accetta stringhe senza backslash formate da caratteri qualunque
                \newcommand\csuse[1]{\csname#1\endcsname}

                \newcommand\hlines[4]{%
                % #1 := \decaux oppure \dec
                % #2 := fattore reale di incremento da una riga alla successiva
                % #3 := spessore delle linee espresso con il valore \lwa, o \lwb o \lwc
                % #4 := lunghezza espressa con \longwidth o \width. Se #4 > \width,
                % automaticamente usa un displacement iniziale pari a -\ticklength
                % \ystep := (già pre-calcolato come altezza della carta divisa per il
                % numero di decadi) altezza di ogni decade, in modo da poter
                % ripetere le stesse linee in ogni decade.
                %\edef\yoffset{\fpeval{#2}}
                \expandafter\multiput\expandafter(\ifdim#4pt>\width pt
                -\ticklength \else 0\fi,\fpeval{ln(#2)*\ystep/ln(10)})(0,\ystep){#1}%
                {\linethickness{#3}\line(1,0){#4}}%
                }

                \newcommand\vlines[4]{%
                % #1 := \decaux oppure \dec
                % #2 := fattore reale di incremento da una riga alla successiva
                % #3 := spessore delle linee espresso con il valore \lwa, o \lwb o \lwc
                % #4 := lunghezza espressa con \longheight o \height. Se #4 > \height,
                % automaticamente usa un displacement iniziale pari a -\ticklength
                % \xstep := (già pre-calcolato come larghezza della carta divisa per il
                % numero di decadi) altezza di ogni decade, in modo da poter
                % ripetere le stesse linee in ogni decade.
                \edef\xoffset{\ifdim#4pt > \height pt -\ticklength \else 0\fi}
                \multiput(\fpeval{ln(#2) * \xstep / ln(10)},\xoffset)(\xstep,0){#1}%
                {\linethickness{#3}\line(0,1){#4}}%
                }

                \begin{document}\errorcontextlines=100
                \centering

                \begin{picture}(\width,\height)(0,0)
                \color{gridcolor}

                % linee orizzontali (a intervalli lineari in verticale}
                \multiput(0,0)(0,10){19}{\linethickness{\lwa}\line(1,0){\width}}
                \multiput(0,5)(0,10){18}{\linethickness{\lwb}\line(1,0){\width}}
                \multiput(0,0)(0,1){180}{\linethickness{\lwc}\line(1,0){\width}}

                % Nel codice che segue si usa \csname @wilenum\encsname perché \@whilenum
                % contiene la chiocciola; si potrebbe usare \makeatletter …\makeatother;
                % il risultato sarebbe lo stesso, la coppia delle dichiarazioni sul codice
                % di categoria merita di essere usato quando di segni @ ce ne sono tanti.

                % linee verticali a intervalli logaritmici in orizzontale

                % linee principali, una ogni decade + una in fondo
                \vlines{\decaux}{1}{\lwa}{\longheight}
                % secondo livello: in ogni decade, una ogni unità
                \countdef\J=2560 \countdef\K=2562
                \J=2
                \csuse{@whilenum} \J<10\do{%
                \vlines{\dec}{\J}{\lwb}{\height}%
                \advance\J by 1}
                % terzo livello: una ogni decimo, o due decimi, o …, per ciascuna unità
                \J=1\K=1
                \csuse{@whilenum}\K<3\do{{% secondo while dentro un gruppo
                \csuse{@whilenum} \J<10\do{%
                \edef\XX{\fpeval{\K+\J/10}}%
                \vlines{\dec}{\XX}{\lwb}{\height}%
                \advance\J by 1}}\advance\K by 1}
                %
                \J=2\K=3
                \csuse{@whilenum}\K<7\do{{% secondo while dentro un gruppo
                \csuse{@whilenum} \J<10\do{%
                \edef\XX{\fpeval{\K+\J/10}}%
                \vlines{\dec}{\XX}{\lwb}{\height}%
                \advance\J by 2}}\advance\K by 1}
                %
                \J=7
                \csuse{@whilenum} \J<10\do{%
                \vlines{\dec}{\fpeval{\J+0.5}}{\lwb}{\height}%
                \advance\J by 1}

                % Per mettere il logo dell'ateneo o qualunque altro logo la cui immagine
                % sia più larga che alta. In ogni caso per ogni logo l'impostazione
                % width=25mm può essere adattata a ogni particolare logo.
                % Le coordinate specificate con \put sono riferite all'origine della
                % carta graduata (nell'angolo inferiore sinistro) e mettono in posizione l'angolo superiore sinistro dell'immagine del logo.

                \put(-16,193){\makebox(0,0)[tl]{\includegraphics[width=25mm]{LogoPoliTO-blu}}}% Politecnico di Torino
                %\put(-16,193){\makebox(0,0)[tl]{\includegraphics[width=12mm]{unifilogo_black_v.pdf}}}% Università di Firenze

                \end{picture}

                \end{document}`Naturalmente sarebbe possibile rendere ancora più semplice il codice definendo, invece di \csuse, il comando \WhileNum così:`\newcommand\WhileNum{\csname @whilenum\endcsname` e usare questo al posto della stringa [tt]\csuse{@whilenum}[/tt] in tute lerighe dove questo compare. Per questo piccolofile della carta semilogaritmica sare bbe più comodo, ma in un file più grande e con usi diversificati di comandi interni il più semplice comando [tt]\csuse[/tt] è più versatile.

                Si nota che ci sono quattro distinti blocchi: il primo e il quarto hanno un solo contatore da gestire; il secondo e il terzo hanno due cicli while con il secondo annidato nel primo e richiede di essere racchiuso in un gruppo di due gaffe [tt]{…}[/tt] altrimenti succedono pasticci con i codici interni dei cicli while.

                Non dico che questa nuova versione sia più facile da capire rispetto alla precedente, ma certamante c’è molto meno da scrivere; se poi si volessero definire due nuovi comandi che ricevono diversi parametri (inizio e fine del ciclo, e gli altri parametri necessari per tracciare le linee) per eseguire correttamente o un singolo ciclo while o i due cicli annidati, il codice del corpo dell’ambiente picture si potrebbe semplificare ulteriormente. Usando le funzionalità del pacchetto xparse sarebbe perfino possibile definire un solo comando con diversi argomenti facoltativi che gestisce da solo sia il singolo ciclo che i due cicli annidati. Andando più a fondo con il linguaggio L3 probabilmente si riuscirebbe a comporre tutta la carta con un solo comando che gestisce l’intera lista delle coordinate; non ci ho provato, ma non escludo che si possa fare.

                Direi che questo esercizio di carta semilogaritmica è una buona palestra per esercitare la fantasia creativa e per imparare ad usare i codici interni di LaTeX in modo avanzato.

              • #116555
                Up
                0
                Down
                ::


                Sì, indubbiamente mi servirà più tempo per studiare quest’ultimo codice!
                Molto bello l’uso dei cicli. All’inizio avevo pensato a usarli… ma ho rinunciato quasi subito! 😀

                Grazie mille!
                Ciao ciao.
                Fra

              • #116556
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Be’, visto che è divertente cimentarsi ocn queste cose ecco il codice per generare qualunque tipo di carta “millimetrata” lin-lin, log-lin, lin-log e log-log.
                  Riustilizzo i codici leggermente adattati e, più importante, corretti, in modo che professori e studenti possao stamparsi le carte di cui hanno bisogno. Qui c’è il codice adeguatamente commentato:`% !TeX encoding = utf8
                  % !TeX program = pdflatex

                  % Disegna in formato A4 landscape (base 297mm; altezza 210mm) quattro
                  % tipi di carte “millimetrate con scale lineari e/o logaritmiche:
                  % lin-lin, log-lin, lin-log e log-log.
                  % Il tutto si affida al comando \carta che accetta due argomenti
                  % facoltativi, il primo relativo alle ascisse e il secondo alle ordinate;
                  % entrambi sono numeri interi non negativi e rappresentano il numero di
                  % decadi contenute lungo l'asse delle ascisse e delle ordinate. Se uno
                  % o entrambi i numeri sono nulli (zero, 0) la graduazione è lineare e non
                  % logaritmica; gli usi possibili sono i seguenti (N e M sono un numeri
                  % positivi):
                  % \carta equivalente a \carta[0] e a \carta[0][0]: carta lin-lin
                  % \carta[N] equivalente a \carta[N][0]: carta log-lin
                  % \carta[0][N]: carta lin-log
                  % \carta[N][M]: cara log-log
                  % Siccome le dimensioni del grigliato sono di 260mm di base e 180mm
                  % di altezza, non bisogna usare per N e M numeri troppo grandi,
                  % orientativamente non maggiori di 5 (che forse è già troppo), perché
                  % altrimenti le linee della graduazione logaritmica diventano troppo
                  % fitte, fino a fondersi assieme, nonostante le linee più sottili siano
                  % di circa 0,15mm.Non ci sono problemi con le scale lineari perché con
                  % la carta millimetrata le righe distano comunque 1mm l'una dall'altra.
                  % Questo file permette di disegnare i quattro tipi di file colorati
                  % del solito rosso-giallino; il file è modificabile, nel senso che si
                  % può definire un altro colore a piacere.
                  % si potrebbe anche modificare per comporre carte più grandi da stampare,
                  % per esempio, su fogli A3.
                  % Certamente si deve cambiare il logo dell'università se lo si vuole
                  % inserire, o si deve commentare la riga che include il logo se non si
                  % vuole inserire neiente; Il nome di questo logo è solo d'esempio
                  % ed è di fantasia; difficilmente si dispone di questo particolare logo,
                  % che non corrisponde a nessun logo ufficiale.
                  %
                  % Si ritiene che questo file possa essere utile ai docenti e agli studenti
                  % che devono disegnare a mano diagrammi lineari 0 semi- o bi-logaritmici
                  % e possono evitare di comprare le carte già predisposte per questi scopi.
                  %
                  % Dopo \begin{document} ci sono quattro esempi d'uso.
                  %
                  %
                  \documentclass{article}
                  \usepackage[a4paper,landscape]{geometry}
                  \geometry{top=15mm,bottom=15mm,left=18.5mm,right=18.5mm}
                  \usepackage{pict2e,graphicx,xfp,color,xparse}

                  \definecolor{gridcolor}{RGB}{250,153,89}
                  %\definecolor{gridcolor}{RGB}{0,0,0}
                  % Macro di servizio
                  % Macro per usare una macro col solo suo nome, senza il backslash
                  % Accetta stringhe senza backslash formate da caratteri qualunque
                  \newcommand\csuse[1]{\csname#1\endcsname}
                  %
                  \newcommand\WhileDoOne[4][1]{%
                  % Ciclo while singolo o interno
                  % #1 := incremento da un ciclo all'altro (facoltativo: default 1)
                  % #2 := valore iniziale
                  % #3 := valore finale
                  % #4 := operazioni cicliche
                  {\countdef\J=2560 \J=#2\relax
                  \csuse{@whilenum}\J<#3\do{#4\advance\J by #1}}% } \newcommand\WhileDoTwo[4][1]{% % Ciclo esterno di due cicli % #1 := incremento da un ciclo all'altro (facoltativo: default 1) % #2 := valore iniziale % #3 := valore finale % #4 := operazioni cicliche {\countdef\K=2562 \K=#2\relax \csuse{@whilenum}\K<#3\do{#4\advance\K by#1}}% } % \newcommand\hlines[4]{% % #1 := \decyy oppure \decy % #2 := fattore reale di incremento da una riga alla successiva % #3 := spessore delle linee espresso con il valore \lwa, o \lwb o \lwc % #4 := lunghezza espressa con \longwidth o \xlength. Se #4 > \xlength,
                  % automaticamente usa un displacement iniziale pari a -\ticklength
                  % \ystep := (già pre-calcolato come altezza della carta divisa per il
                  % numero di decadi) altezza di ogni decade, in modo da poter
                  % ripetere le stesse linee in ogni decade.
                  \edef\xoffset{\fpeval{\ifdim#4pt > \xlength pt -\ticklength \else 0\fi}}
                  \expandafter\multiput\expandafter(\ifdim#4pt>\xlength pt
                  -\ticklength \else 0\fi,\fpeval{ln(#2)*\ystep/ln(10)})(0,\ystep){#1}%
                  {\linethickness{#3}\line(1,0){#4}}%
                  }
                  %
                  \newcommand\vlines[4]{%
                  % #1 := \decxx oppure \decx
                  % #2 := fattore reale di incremento da una riga alla successiva
                  % #3 := spessore delle linee espresso con il valore \lwa, o \lwb o \lwc
                  % #4 := lunghezza espressa con \longheight o \ylength. Se #4 > \ylength,
                  % automaticamente usa un displacement iniziale pari a -\ticklength
                  % \xstep := (già pre-calcolato come larghezza della carta divisa per il
                  % numero di decadi) larghezza di ogni decade, in modo da poter
                  % ripetere le stesse linee in ogni decade.
                  \edef\yoffset{\ifdim#4pt > \ylength pt -\ticklength \else 0\fi}
                  \multiput(\fpeval{ln(#2) * \xstep / ln(10)},\yoffset)(\xstep,0){#1}%
                  {\linethickness{#3}\line(0,1){#4}}%
                  }
                  %
                  % Il comando \carta accetta dino a dueargomenti facoltativi
                  % che descrivono il tipo di carta: lineare, semilologaritmica, e
                  % bilogaritmica che si vuole creare; se non ne vine specifica nessuno
                  % o si specificano due argomenti nulli (\carta[0][0]), viene tracciato
                  % una carta bilineare. Se il primo è positivo e il secondo manca o è
                  % nullo, si traccia una carta semilogaritmca con le ascisse logaritmiche;
                  % se il primo è nullo e il secondo è positivo si traccia una carta
                  % semilogaritmicoa con le ordinate logaritmiche; se entrambi sono
                  % positivi si traccia una carta bilogaritmica, dove il primo numero
                  % indica le decadi in orizzontale e il secondo le decadi in verticale e,
                  % quando il numero vale zero, la scala è lineare.
                  % In ogni caso le lunghezze delle linee orizzontali e verticali sono
                  % rispettivamente \xlength e \ylength, uguali alle dimensioni orizzontali
                  % e verticali della carta.
                  % Le linee hanno tre possibili spessori; 1pt(circa un terzo di millimetro)
                  % quelle più spesse, e le altre due in progressione geometrica di (circa)
                  % 1/\sqrt{2} come prescrivono le norme UNI per le varie gerarchie di
                  % linee.
                  % Per la carta (bi)lineare si riempie solo il reticolo di linee ugualmente
                  % spaziate dove quelle che marcano i centimetri sono di 1pt, quelle che
                  % marcano i 5mm sono spesse 0.7mm e quelle che marcano gli altri
                  % millimetri sono spesse 0.5mm. Questo vale anche per le carte
                  % semilogaritmiche per la scala lineare.
                  % Per le scale logaritmiche la linea che delimita la decade oltre ad
                  % essere prolungata fuori della carta di \ticklength sia sotto sia sopra,
                  % la linea è spessa 1pt. Lo spessore di 0.7pt viene usato per i valori
                  % “interi” della graduazione, e lo spessore di 0.5pt viene usato per le
                  % altre linee.
                  % Per le scale logaritmiche è necessario specificare quante decadi si
                  % vogliono lungo l'asse orizzontale e per le bilogaritmiche quante se ne
                  % vogliono lungo l'asse verticale.
                  % Siccome le dimensioni di 260mm per 180mm sono in rapporto 13/9
                  % nella scala bilogaritmica le decadi non possono mai avere le stesse
                  % dimensioni, e sono, quindi, sempre dei rettangoli per poter ottenere
                  % dei quadrati con numeri di decadi adeguati bisognerebbe che le
                  % dimensioni della carta graduata fossero multipli di 12 o di 6, per
                  % esempio; 4 decadi in orizzontale e tre in verticale darebbero al
                  % massimo 240mm per 180mm. La possibilità di comporre una carta
                  % bilogaritmica con decadi delle stesse dimensioni in orizzontale e in
                  % verticale non è stata affrontata.
                  %
                  \NewDocumentCommand{\carta}{% Descrittori degli argomenti
                  O{0} % specifica quante decadi in orizzontale; può valere 0 e la scala
                  % % orizzontale diventa lineare; default 0.
                  O{0} % specifica quante decadi in verticale; può valere 0 e la scala
                  % % verticale diventa lineare; default 0.
                  }{\newpage
                  % Impostazioni tipografiche
                  \parindent=0pt
                  \pagestyle{empty}%
                  \setlength{\unitlength}{1mm}%
                  \color{gridcolor}%
                  % Impostazioni generali della carta in landscape
                  % I numeri sottintendono l'unità di misura \unitlength=1mm
                  \def\xlength{260}% Non è prudente definire \width e \height che sono
                  \def\ylength{180}% specifiche del nucleo di LaTeX
                  %% temporanemente le rendo uguali a \width e \heigth ma dopo i test
                  %% elimino queste equivalenze
                  %\let\width\xlength \let\height\ylength
                  \def\ticklength{2}% sporgenza delle linee verticali sopra e sotto il bordo
                  % Le linee sporgenti si usano solo per le scale logaritmiche
                  \edef\longwidth{\fpeval{\xlength+2*\ticklength}}
                  \edef\longheight{\fpeval{\ylength+2*\ticklength}}
                  \unless\ifcsname lwa\endcsname\newlength\lwa\fi
                  \setlength{\lwa}{1pt}% Originariamente{0.4mm}; 1pt=0.35mm
                  \unless\ifcsname lwb\endcsname\newlength\lwb\fi
                  \setlength{\lwb}{0.7pt}% Originariamente{0.2mm}; 0.7pt=0,25mm
                  \unless\ifcsname lwc\endcsname\newlength\lwc\fi
                  \setlength{\lwc}{0.5pt}% Originariamente{0.1mm};0.5pt=0.18mm
                  \begin{picture}(\xlength,\ylength)
                  \edef\decx{#1}\edef\decy{#2}%
                  \ifnum#1=0\relax
                  % traccia le linee verticali sulle ascisse lineari
                  \multiput(0,0)(10,0){27}{\linethickness{\lwa}\line(0,1){\ylength}}
                  \multiput(5,0)(10,0){26}{\linethickness{\lwb}\line(0,1){\ylength}}
                  \multiput(0,0)(1,0){260}{\linethickness{\lwc}\line(0,1){\ylength}}
                  \else
                  % traccia le linee verticali sulle ascisse logaritmiche
                  \edef\decxx{\fpeval{\decx + 1}}%
                  \edef\xstep{\fpeval{\xlength / \decx}}
                  % linee principali, una ogni decade + una in fondo
                  \vlines{\decxx}{1}{\lwa}{\longheight}
                  % secondo livello: in ogni decade, una ogni unità
                  \WhileDoOne{2}{10}{\vlines{\decx}{\J}{\lwb}{\ylength}}
                  % terzo livello: una ogni 1/10, o 2/10, o 5/10, per ciascuna decade
                  \WhileDoTwo{1}{3}{% una ogni 1/10
                  \WhileDoOne{1}{10}{\vlines{\decx}{(\K+\J/10)}{\lwc}{\ylength}}}%
                  %
                  \WhileDoTwo{3}{7}{% una ogni 2/10
                  \WhileDoOne[2]{2}{10}{\vlines{\decx}{(\K+\J/10)}{\lwc}{\ylength}}}%
                  %
                  \WhileDoOne{7}{10}{%una ogni 5/10
                  \vlines{\decx}{(\J+0.5)}{\lwc}{\ylength}}%
                  % fine delle linee verticali
                  \fi
                  \ifnum#2=0\relax
                  % traccia le linee orizzontali sulle ordinate lineari
                  \multiput(0,0)(0,10){19}{\linethickness{\lwa}\line(1,0){\xlength}}
                  \multiput(0,5)(0,10){18}{\linethickness{\lwb}\line(1,0){\xlength}}
                  \multiput(0,0)(0,1){180}{\linethickness{\lwc}\line(1,0){\xlength}}
                  \else
                  % traccia le linee orizzontali sulle ordinate logaritmiche
                  \edef\decyy{\numexpr \decy +1}%
                  \edef\ystep{\fpeval{\ylength / \decy}}
                  % linee principali, una ogni decade + una in fondo
                  \hlines{\decyy}{1}{\lwa}{\longwidth}
                  %
                  % secondo livello: in ogni decade, una ogni unità
                  \WhileDoOne{2}{10}{\hlines{\decy}{\J}{\lwb}{\xlength}}
                  % terzo livello: una ogni 1/10, o 2/10, o 5/10, per ciascuna decade
                  \WhileDoTwo{1}{3}{% una ogni 1/10
                  \WhileDoOne{1}{10}{\hlines{\decy}{(\K+\J/10)}{\lwc}{\xlength}}}%
                  %
                  \WhileDoTwo{3}{7}{% una ogni 2/10
                  \WhileDoOne[2]{2}{10}{\hlines{\decy}{(\K+\J/10)}{\lwc}{\xlength}}}%
                  %
                  \WhileDoOne{7}{10}{% una ogni 5/10
                  \hlines{\decy}{(\J+0.5)}{\lwc}{\xlength}}%
                  % Fine delle linee orizzontali
                  \fi
                  % Per mettere il logo dell'ateneo o qualunque altro logo la cui immagine
                  % sia più larga che alta. In ogni caso per ogni logo l'impostazione
                  % width=25mm può essere adattata a ogni particolare logo.
                  % Le coordinate specificate con \put sono riferite all'origine della
                  % carta graduata (nell'angolo inferiore sinistro) e mettono in posizione
                  % l'angolo superiore sinistro dell'immagine del logo.
                  %
                  \put(-16,193){\makebox(0,0)[tl]{\includegraphics[width=25mm]{TITlogoCropped}}}
                  %\put(-16,193){\makebox(0,0)[tl]{\includegraphics[width=12mm]{unifilogo_black_v.pdf}}}
                  \end{picture}}
                  % —————————– FINE PREAMBOLO ——————————————————–

                  \begin{document}\errorcontextlines=100
                  \carta
                  \carta[3]
                  \carta[0][2]
                  \carta[4][3]
                  \end{document}
                  `
                  [attachment=2294]CartaLandscapeLSBConXparse.pdf[/attachment]

                  Attachments:
                  You must be logged in to view attached files.
                • #116557
                  Up
                  0
                  Down
                  ::


                  Mi sono accorto che nel caso della carta semilog non c’è il problema di definire come terminano le linee dato che ci sono i tick che sporgono.
                  Invece, nel caso della carta lineare, se non uso il pacchetto curve2e oppure pict2e per dare il comando \squarecap, ai quattro angoli le linee principali si incontrano in modo da formare delle rientranze bianche quadrate (non so se mi sono spiegato…). In ogni caso basta usare il mio codice per la carta lineare e commentare la riga \squarecap.

                  Per non caricare il pacchetto curve2e o pict2e mi sembrava sufficiente arretrare la x del punto di partenza delle linee orizzontali nel multiput (normalmente messa a zero) e aumentare la lunghezza delle linee orizzontali. In particolare ho provato a mettere un offset negativo pari alla metà dello spessore delle linee e aumentare la lunghezza delle linee di una quantità pari al loro spessore. Ma non funziona!
                  Ho ottenuto un buon risultato con fattori pari a 1/6 e 1/3 (ovviamente il fattore due torna per motivi di simmetria). Non capisco perché questi valori “strani”. Inoltre non ottengo comunque la “perfezione”. Se apro il file con Adobe vedo comunque una righetta bianca. Cosa che non succede con curve2e e \squarecap. Probabilmente non mi è chiaro cosa avviene con la terminazione di default che se ho capito bene è \buttcap.

                  Comunque poco male, era solo una curiosità! Carico pict2e o curve2e e il problema è risolto.

                  Ciao ciao.
                  Fra

                • #116558
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    Bravo Francesco; hai perfettamente ragione. Nel mio ultimo codice, quello per i quattro tipi di carta basta aggiungere \squarecap subito prima di \line nella riga 177 e nella riga 201.

                    Ti ringrazio, perché mi sono domandato tante volte a che cosa servisse \squarecap; sapevo esattamente che cosa faceva ,ma onestamente mi sono sempre domandato quando mai fosse necessario o utile usarlo. Ora con il tuo occhio sensibilissimo, me l’hai fatto scoprire. Pensavo che qualche utilità si sarebbe potuta avere con righe molto spesse, non con righe spesse 1pt, che di default si incrociano, effettivamente con \buttcap. Ammetto di aver usato una volta o due \roundcap, ma \squarecap mai.

                    Se il contorno della carta, lineare (o anche logaritmica) fosse disegnato con polygon invece che con rette, il problema non si presenterebbe, ma diventerebbe decisamente più complicato il tutto; \squarecap è la soluzione.

                    Grazie mille
                    Claudio

                    PS: Credevo di averlo spiegato in una delle varie guide che cosa succede con \buttcap, \squarecap e \roundcap, oltre con \miterjoint, \roundjoint e \beveljonit. In effetti l’ho scritto in una guida di una serie che non vedrà mai la luce, perché i membri del piccolo comitato LaTeX Collection Documentation Team si è arenato.

                  • #116559
                    Up
                    0
                    Down
                    ::

                    PS: Credevo di averlo spiegato in una delle varie guide che cosa succede con \buttcap, \squarecap e \roundcap, oltre con \miterjoint, \roundjoint e \beveljonit. In effetti l’ho scritto in una guida di una serie che non vedrà mai la luce, perché i membri del piccolo comitato LaTeX Collection Documentation Team si è arenato.

                    Peccato!

                    Alla fine sono riuscito a risolvere anche senza caricare curve2e o pict2e. È sufficiente disegnare il rettangolo esterno con framebox con un opportuno offset oppure tracciare le linee del bordo con un offset e una lunghezza diversa in base alla larghezza della linea, come avevo tentato in un precedente post:

                    Ho ottenuto un buon risultato con fattori pari a 1/6 e 1/3

                    In questo modo mi sono accorto che quando si usa xfp (e immagino anche altri pacchetti analoghi) su quantità che hanno delle dimensioni, i calcoli vengono effettuati sul valore numerico dopo la conversione in pt. Pertanto alla fine devo ritrasformare il valore ottenuto in mm o in generale nell’unità di misura che mi interessa, moltiplicando per il fattore di conversione. Questo spiega perché nel mio precedente post non riuscivo a ottenere il risultato voluto!

                    Ciao ciao.
                    Fra

                  • #116560
                    OldClaudio
                    Partecipante
                      Up
                      0
                      Down
                      ::


                      Ma se i calcoli li fai sui valori delle coordinate, non ti devi preoccupare, perché sono solo i coefficienti di \unitlength.

                      Altrimenti, sì devi trasformare i valori numerici in pt ma non è una cosa particolarmente difficile quando hai i valori 72,27 (che indica i punti al pollice) e 25,4 (che indica i millimetri al pollice); poi, ovviamente puoi calcolarti una volta per tutte i due rapporti 72,27/25,4 = 2.845275590551181 (che indica i punti al millimetro, e il suo reciproco 0.351459803514598 (che indica i millimetri al punto) con cui puoi fare tutte le conversioni che credi.

                      Con i comandi di etex, in particolare \dimexpr una volta avevo creato una macro per trafermare quanlunque grandezza espressa con la sua unità di misura, per trasformarla nella misura eseguita con qualunque altra unità dimisura. funzionava benissimo ma erano solo due righe di codice che quando mi occorrono faccio prima ad ricrearle, piuttosto che andarle a cercare nell’ormai dimenticato file iniziale.

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

                  Go to top