Risposte nei forum create
-
AutoreRisposte
-
::
Ciao,
potresti cavartela anche con l’ambiente Verbatim del pacchetto fancyvrb. In questo caso dovresti formattare le righe con spazi bianchi in modo che il testo risultii verticalmente allineato.
Ma esistono tanti altri modi.
Dipende molto dalla quantità di questi dati che non dichiari (per es. superano la pagina?).
Bisognerebbe anche decidere dove mettere questi dati, per esempio in un appendice apposita.
La soluzione più evoluta consiste nel preprocessare i dati salvati in un database…
R.
3 Giugno 2013 alle 11:16 in risposta a: Tikz – poligono con all’interno testo, in posizione precisa #86311::teomat” post=85767Grazie mille!
Allora: sì, sto creando la copertina come una pagina unica, poi intendo includerla con \includepdf.
Il tuo codice funziona, però, magari per incapacità, creo i singoli elementi come tante ‘disegni’ e quindi avrei bisogno di poter collocare il risultato del tuo codice in un punto preciso della pagina
Grazie ancora!
A presto,
MatteoConsulta il mio blog, in particolare il post sul collage di precisione.
Aggiungo il link:
R.
3 Giugno 2013 alle 9:59 in risposta a: Tikz – poligono con all’interno testo, in posizione precisa #86308::
Oppure anche:`
\documentclass{standalone}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}% l'unità è il cm
% primo elemento: il segnalibro
\filldraw (0,0) — (0,6) — (2,6) — (2,0) — (1,1) — cycle;% testo
\begin{scope}[white]
\node[scale=3] at (1,5) {01};
\draw[line width=1pt] (0.2,4.4)–(1.8,4.4);
\node[scale=2.5] at (1,3.8) {20};
\node[scale=2.5] at (1,3) {13};
\end{scope}
\end{tikzpicture}
\end{document}`
…
3 Giugno 2013 alle 9:55 in risposta a: Tikz – poligono con all’interno testo, in posizione precisa #86307::
Ecco una base di codice:
`\documentclass{standalone}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}% l'unità è il cm
% primo elemento: il segnalibro
\filldraw (0,0) — (0,6) — (2,6) — (2,0) — (1,1) — cycle;% testo
\node[scale=3,white] at (1,5) {01};
\draw[white,line width=1pt] (0.2,4.4)–(1.8,4.4);
\node[scale=2.5,white] at (1,3.8) {20};
\node[scale=2.5,white] at (1,3) {13};%resto del disegno
\end{tikzpicture}
\end{document}`Puoi fare un unico disegno grande come la pagina di copertina per esempio.
R.
3 Giugno 2013 alle 9:42 in risposta a: Tikz – poligono con all’interno testo, in posizione precisa #86306::teomat” post=85763Buongiorno,
sono alle prese con una copertina e, nello specifico, vorrei creare con LaTeX una copertina esistente prodotta con programmi di grafica vettoriale.Non riesco ad allegare una immagina, ma provo a descrivere ciò che mi servirebbe:
-un poligono composto da un rettangolo con la base maggiore in verticale, alla cui base inferiore ci siano due triangoli rettangoli con le ipotenuse che si affrotano. (insomma: un segnalibro)
-all’interno del poligono dovrei inserire dei numeri con un determinato font; tra due gruppi di caratteri, una linea
-colore di riempimento nero, testo in biancoInsomma, una cosa del genere (limitatamente al segnalibro in alto a sinistra)
Tutto questo vorrei poterlo inserire in una posizione ben precisa della pagina.
Qualcuno mi potrebbe essere d’aiuto?
Il manuale di Tikz non è di molto aiuto per chi è alle prime armi con questo pacchetto….Grazie in anticipo!
A presto,
MatteoNon è difficile, il segnalibro ha solo 5 oggetti.
Ti chiedo: stai preparando la copertina come un pdf che contiene solo quella pagina?
R.
::Liverpool” post=85666
perdonami ma dove devo inserire quel codice?
Potresti provare in quest’altro modo: sostituisci tutto quello che viene dopo out con questo codice di Mathematica:
`$file = OpenWrite[“C:\\grafico.txt”];
Export[$file, out[[1 ;; s]], “Table”];
For[i = 2, i <= s, i++, WriteString[$file, "\n\n"] Export[$file, out[[1 + (i - 1)*s ;; i*s]], "Table"]] Close[$file];` Aggiornato anche il post dal quale hai copiato il codice. Grazie per la segnalazione.Ciao
Già. Meglio prevenire che curare … 😉
R.
::
Ecco qua:
`– convert numeric data
— eseguire con lua o con texlua— restituisce i numeri sulla riga
local function split(l)
local t = {}
for w in string.gmatch(l, “[^%s]+”) do
local m = tonumber(w)
if m then — dato numerico
t[#t+1] = {real = m}
else — dato non numerico
t[#t+1] = {text = w}
end
end
return t
end— carica i dati in una tabella
local function loadLines(filename)
local t = {}
for line in io.lines(filename) do
local n = split(line)
if #n > 0 then — mantenere!!! linee vuote
t[#t+1] = n
else
t[#t+1] = {}
end
end
t.dimension = #t
return t
end— traduce la tabella in terne di numeri
local function parse(t)
for x, row in ipairs(t) do
if #row > 3 then — calcolo della terna su due righe
local newrow = {}
local start = 2
if row[1].text then
newrow[#newrow + 1] = row[1].text
start = start + 1
end
for i=start,#row do
local k = 1
if row.real and row[i-1].real then
local m = row.real
if m == 10 then
newrow[#newrow+1] =
{real = row[i-1].real*10^t[x-1][k].real}
k = k + 1
else
newrow[#newrow+1] = {real = m}
end
else
newrow[#newrow+1] = {text = row.text}
end
end
t[x-1] = nil
t[x] = newrow
end
end
end— aggiustare i formati delle colonne qui
local format = {“%0.6f”, “%0.8f”, “%0.8E”}— salva i dati
local function save(t)
— tabs separator formatting string
— reforming the table
reform = {}
for i=1, t.dimension do
if t then
if #t == 0 then — empty line
reform[#reform + 1] = “”
else
line = {}
for pos=1,3 do
if t[pos].real then
line[#line+1] = string.format(format[pos],t[pos].real)
else
line[#line+1] = t[pos].text
end
end
reform[#reform + 1] = table.concat(line, “\t”)
end
end
end
file = io.open(“dataReformat.txt”,”w”)
file:write(table.concat(reform, “\n”))
file:close()
end— execution
filename = “data.txt”
rows = loadLines(filename)
parse(rows)
save(rows)`Probabile che ripensando all’algoritmo si trovi una soluzione più elegante, ma questa ha il pregio di funzionare (almeno spero) e di gestire il formato d’ingresso per tutte e tre le colonne.
Ed ora buona notte!
R.
::Marco87″ post=85661Ciao Roberto,
nel cercare di risolvere il problema che ho esposto in questa discussione, ma da un altro punto di vista (nel caso che l’errore commesso da [tt]pgfplots[/tt] non sia correggibile), ho riformulato la superficie che voglio rappresentare direttamente in Mathematica. Il problema è che ora necessito di avere dei “nan” (not a number) e, già che salta fuori questa entità, aggiungo che potrebbe capitare di avere degli “inf” (infinite). Pertanto potrei avere un file txt in uscita da Mathematica di questo tipo:
`-0.0028 -0.00995556 nan
-0.0028 -0.00954921 nan
-0.0028 -0.00914286 nan
-0.0028 -0.00873651 nan
-6
-0.0028 -0.00833016 -1.16846 10
-6
-0.0028 -0.00792381 -7.77324 10
-0.0028 -0.00751746 -0.0000140478
-0.0028 -0.00711111 -0.0000199921
-0.0028 -0.00670476 -0.0000256062
[…]`
Credi che sia possibile con una piccola modifica dello script far rimanere quei “nan” (o anche “inf”)? Credo che dopo questo lo script non avrà bisogno di alcun’altra modifica.In ogni caso, grazie di tutto e buona serata,
Marco.Ciao,
la modifica che chiedi non è immediata perché lo script è scritto nell’ipotesi che i dati sia tuttu numerici.
Se avrò tempo cercherò una soluzione.
Il punto di partenza è senza dubbio la funzione tonumber() che restituisce nil se l’argomento stringa non rappresenta un numero.
R.
::
Nuova versione che mantiene le righe vuote dell’originale.
`– convert numeric data
— eseguire con lua o con texlua— restituisce i numeri sulla riga
local function split(l)
t = {}
for w in string.gmatch(l, “[^%s]+”) do
t[#t+1] = tonumber(w)
end
return t
end— carica i dati in una tabella
local function loadLines(filename)
local t = {}
for line in io.lines(filename) do
local n = split(line)
if #n > 0 then — mantengo linee vuote
t[#t+1] = n
else
t[#t+1] = {}
end
end
t.dimension = #t
return t
end— traduce la tabella in terne di numeri
local function parse(t)
for x, row in ipairs(t) do
if #row > 3 then — calcolo della terna su due righe
newrow = {}
for i=2,#row do
k = 1
if row == 10 then
newrow[#newrow+1] = row[i-1]*10^t[x-1][k]
k = k + 1
else
newrow[#newrow+1] = row[i-1]
end
end
t[x-1] = nil
t[x] = newrow
end
end
end— salva i dati
local function save(t, frmt1, frmt2, frmt3)
— tabs separator formatting string
f = string.format(“%s\t%s\t%s”, frmt1, frmt2, frmt3)
— reforming the table
reform = {}
for i=1, t.dimension do
if t then
if #t == 0 then
reform[#reform + 1] = “”
else
local line = string.format(f, t[1], t[2], t[3])
reform[#reform + 1] = line
end
end
end
file = io.open(“dataReformat.txt”,”w”)
file:write(table.concat(reform, “\n”))
file:close()
end— execution
filename = “data.txt”
rows = loadLines(filename)
parse(rows)
save(rows, “%0.6f”, “%0.8f”, “%0.8E”)
`
Visto come sono veloci questi script?
R.
::Marco87″ post=85655Ciao Roberto,
grazie alle tue indicazioni sono riuscito a far eseguire il tuo script. Direi che la notazione ora è perfetta. Rimane un piccolo dettaglio. Nel file di partenza, ogni tanto c’è una riga vuota. In effetti non vedo grossi problemi anche senza quelle righe, se non che nel grafico i punti finali risultano uniti a quelli iniziali. Non sono certo che sia dovuto all’assenza di quelle righe bianche, anche se il formato che viene presentato nella documentazione di [tt]pgfplots[/tt] le ha. Sarebbe difficile aggiungere questa caratteristica allo script?
Grazie,
Marco.Lo script elimina automaticamente tutte le linne vuote: a che servono? Non capisco.
Se invece servono allora si deve modificare lo script.
R.
::
No, TeX non c’entra.
Per eseguire il codice Lua devi creare uno script, ovvero un file di testo come dicevi tu, meglio con estensione .lua.
Sistema in una stessa cartella lo script ed il file con i dati numerici il cui nome deve corrispondere a quello previsto nello script.
Poi apri una finestra di console (in Windows cmd, insomma la vecchia finestra nera del DOS), ti sposti nella cartella con il comando cd (change directory) e poi dai il comando:
`$ texlua nomedelloscript.lua`
Ti comparirà nella stessa cartella il file di output pronto da dare in pasto a pgfplots (e qui puoi modificare il codice per uscire con i numeri con il formato che desideri con la funzione save()).
Mi raccomando controlla la correttezza del risultato.Infine, texlua: è un interprete Lua presente nelle moderne distro TeX come TeX Live e che ti suggerisco di usare perché così ti eviti di istallare Lua sul PC.
R.
::
Ecco qui il listato in Lua che elabora il file data.txt dove sistemerai i numeri e crea il file dataReformat.txt.
Puoi regolare a piacere il formato decimale, o scientifico dando alla funzione save() le stringhe di formattazione.
Verifica la correttezza dell’output!!!!
`– convert numeric data
— eseguire con lua o con texlua— restituisce i numeri sulla riga
local function split(l)
t = {}
for w in string.gmatch(l, “[^%s]+”) do
t[#t+1] = tonumber(w)
end
return t
end— carica i dati in una tabella
local function loadLines(filename)
local t = {}
for line in io.lines(filename) do
local n = split(line)
if #n > 0 then — elimino linee vuote
t[#t+1] = n
end
end
t.dimension = #t
return t
end— traduce la tabella in terne di numeri
local function parse(t)
for x, row in ipairs(t) do
if #row > 3 then — calcolo della terna su due righe
newrow = {}
for i=2,#row do
k = 1
if row == 10 then
newrow[#newrow+1] = row[i-1]*10^t[x-1][k]
k = k + 1
else
newrow[#newrow+1] = row[i-1]
end
end
t[x-1] = nil
t[x] = newrow
end
end
end— salva i dati
local function save(t, frmt1, frmt2, frmt3)
— tabs separator formatting string
f = string.format(“%s\t%s\t%s”, frmt1, frmt2, frmt3)
— reforming the table
reform = {}
for i=1, t.dimension do
if t then
local line = string.format(f, t[1], t[2], t[3])
reform[#reform + 1] = line
end
end
file = io.open(“dataReformat.txt”,”w”)
file:write(table.concat(reform, “\n”))
file:close()
end— execution
filename = “data.txt”
rows = loadLines(filename)
parse(rows)
save(rows, “%0.6f”, “%0.8f”, “%0.8E”)
`Se ci sono problemi sono qui.
R.
-
AutoreRisposte