Risposte nei forum create
-
AutoreRisposte
-
::
MngSpaghetti” post=80226Salve a tutti,
[…]
il file bibtex questo`\documentclass{article}
\usepakage{filecontents}
\begin{filecontents*}{bibliograph}@ARTICLE{art:rif.1,
AUTHOR = Claudio Ciavatta, Luciano Cavani,
TITLE = Problematiche per l’inserimento dei biostimolanti nella
legislazione dei fertilizzanti
JOURNAL = Fertilitas Agrorum,
YEAR = 2006,
NUMBER = 1,
PAGES = 11-17,
}`
[…]Se qualcuno ti ha detto che il file bibliografico si fa così, negagli il saluto. 🙂
Devi semplicemente scrivere un file testo di nome [tt]bibliograph.bib[/tt] che contenga semplicemente
`@ARTICLE{art:rif.1,
AUTHOR = Claudio Ciavatta, Luciano Cavani,
TITLE = Problematiche per l’inserimento dei biostimolanti nella
legislazione dei fertilizzanti
JOURNAL = Fertilitas Agrorum,
YEAR = 2006,
NUMBER = 1,
PAGES = 11-17,
}`
e le altre fonti bibliografiche.Ciao
Enrico
::ivan” post=80218Perché non si può usare semplicemente #2 al posto di \l_tmpa_tl?
Ciao
Ivanp.s. sarebbe molto utile avere un commento di questo codice 😉
Sarà anche semplice (e la struttura in effetti lo è e si capisce), ma la sintassi
per me non è per niente semplice. Mi pare un’altra lingua 🙄edit
Vedo che il filone è seguito 🙂
Giro la richiesta anche a Enrico. Qualche delucidazione
(passo passo) al codice sarebbe utilissima 😀`\ExplSyntaxOn`
Ci liberiamo dei problemi di spazi spuri (e abilitiamo l’uso delle macro di LaTeX3)
`\NewDocumentCommand{\numx}{ O{} m o }`
Il comando [tt]\numx[/tt] ha un argomento facoltativo (valore normale vuoto), uno obbligatorio e un altro facoltativo (senza valore normale)
` {
\IfValueTF{#3}`
Se l’argomento facoltativo [tt]#3[/tt] è espresso, [tt]\IfValueTF{#3}[/tt] risulta vero e si segue il ramo “vero”:
` {
\SI[#1]{#2}{#3}
}`
in cui si chiama il comando [tt]\SI[/tt] con gli argomenti indicati. Altrimenti si segue il ramo “falso:
` {
\num[#1]{#2}
}`
in cui si chiama [tt]\num[/tt]
` }
\ExplSyntaxOff`
Fine della definizione e uscita dall’ambiente speciale.Vediamo il secondo codice.
`\ExplSyntaxOn
\NewDocumentCommand{\numx}{ O{} m o }
{`
Tutto come prima. Ma ora, per nessun motivo particolare uso [tt]\IfNoValueTF[/tt] che fa la stessa cosa dell’altro, ma con “vero” e “falso” rovesciati.
` \IfNoValueTF{#3}
{ \robitex_numx:nx { #1 } { #2 } }
{ \robitex_numx:nxn { #1 } { #2 } { #3 } }
}`
Nei due casi chiamo due macro diverse.
`\cs_new_protected:Npn \robitex_numx:nn { \num[#1]{#2} }
\cs_new_protected:Npn \robitex_numx:nnn { \SI[#1]{#2}{#3} }`
Le due macro sono definite in modo facile: chiamano [tt]\num[/tt] e [tt]\SI[/tt]. Ma si può notare che i suffissi che specificano gli argomenti sono diversi. Infatti le prossime due righe chiariscono:
`\cs_generate_variant:Nn \robitex_numx:nn { nx }
\cs_generate_variant:Nn \robitex_numx:nnn { nx }`
La prima genera la macro [tt]\robitex_numx:nx[/tt] in cui il secondo argomento viene espanso completamente prima di essere passato a [tt]\robitex_numx:nn[tt]. Dunque
`\robitex_numx:nx{}{ }`
equivale a chiamare
`\robitex_numx:nn{}{ }` In LaTeX (quasi) standard questo sarebbe qualcosa come:
`\def\robitex@numx#1#2{…}
\def\robitex@numx@expandsecond#1#2{%
\begingroup\edef\x{\endgroup
\unexpanded{\robitex@numx{#1}}{#2}}\x}`
Senza usare [tt]\unexpanded[/tt] sarebbe
`\def\robitex@numx@expandsecond#1#2{%
\toks@={\robitex@numx{#1}}%
\begingroup\edef\x{\endgroup
\the\toks@{#2}}\x}`Direi che l’astrazione di [tt]\cs_generate_variant:Nn[/tt] è un po’ più comoda. 🙂
Ciao
Enrico
::robitex” post=80214Ciao,
guardate come è semplice in LaTeX3 definire un comando con un primo argomento opzionale, un secondo argomento obbligatorio ed un terzo argomento ancora opzionale.`\NewDocumentCommand { \numx } { o m o }
{
\tl_set:Nx \l_tmpa_tl { #2 }
\IfValueTF { #3 }
{
\IfValueTF { #1 }
{
\SI[#1]{ \tl_use:N \l_tmpa_tl }{ #3 }
}
{
\SI{ \tl_use:N \l_tmpa_tl }{ #3 }
}
}
{
\IfValueTF { #1 }
{
\num[#1]{ \tl_use:N \l_tmpa_tl }
}
{
\num{ \tl_use:N \l_tmpa_tl }
}
}
}`Lo scopo è quello di riunire in un unico comando \num e \SI entrambe del pacchetto siunitx.
Posso quindi scrivere:
`un numero \numx{120.12}
un numero con opzioni \numx[round-precision=2]{120.123}
un numero con unità di misura \numx{12.23}[\percent]
un numero con unità di misura ed opzioni \numx[round-precision=3]{12.123}[\percent]
`Ciao.
R.Può essere ancora più semplice. Non vedo la necessità di espandere il secondo argomento, ma si può discuterne.
`\ExplSyntaxOn
\NewDocumentCommand{\numx}{ O{} m o }
{
\IfValueTF{#3}
{
\SI[#1]{#2}{#3}
}
{
\num[#1]{#2}
}
}
\ExplSyntaxOff`
Se proprio vuoi l’espansione completa del secondo argomento, meglio fare così:
`\ExplSyntaxOn
\NewDocumentCommand{\numx}{ O{} m o }
{
\IfNoValueTF{#3}
{ \robitex_numx:nx { #1 } { #2 } }
{ \robitex_numx:nxn { #1 } { #2 } { #3 } }
}
\cs_new_protected:Npn \robitex_numx:nn { \num[#1]{#2} }
\cs_new_protected:Npn \robitex_numx:nnn { \SI[#1]{#2}{#3} }
\cs_generate_variant:Nn \robitex_numx:nn { nx }
\cs_generate_variant:Nn \robitex_numx:nnn { nx }
\ExplSyntaxOff`Ciao
Enrico
27 Novembre 2012 alle 8:16 in risposta a: [L3] Chiave con valore di default di un’altra chiave #80971::robitex” post=80210
[quote=”robitex” post=80202]Ciao,
nel seguente codice LaTeX3 definisco due chiavi, la prima chiamata ‘name’ e la seconda chiamata ‘secname’ (secondo nome).
L’effetto che vorrei ottenere è che se non specifico un valore per la chiave secname, questa assuma il valore della chiave ‘name’.
`
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}\usepackage{expl3}
\usepackage{xparse}\ExplSyntaxOn
\keys_define:nn { gdsfamily }
{
name .tl_set:N = \g_gds_name_tl,
name .default:n = Paperino,secname .tl_set:N = \g_gds_secname_tl,
secname .default:V = \g_gds_name_tl % non funziona con .default:n si
}\keys_set:nn { gdsfamily } { name }
\keys_set:nn { gdsfamily } { secname }\NewDocumentCommand { \name } { }
{
\tl_use:N \g_gds_name_tl
}\NewDocumentCommand { \secname } { }
{
\tl_use:N \g_gds_secname_tl
}
\ExplSyntaxOff\begin{document}
Il nome è il seguente: \name{} \secname.
\end{document}`
Il codice non funziona, ma se cambio la funzione da .default:V a .default:n funziona, come mai?
Grazie R.Con [tt].default:V= \g_gds_name_tl[/tt] imposti il valore di default al valore attuale della variabile che, naturalmente è vuoto perché [tt]name[/tt] non è ancora stata impostata, ma solo definita. Se usi [tt].default:n[/tt] come valore viene presa la variabile [tt]\g_gds_name_tl[/tt]. Se infatti provi senza impostare un valore per [tt]name[/tt] avrai un valore vuoto.
Devi definire la chiave in modo diverso:
`\keys_define:nn { gdsfamily }
{
secname .code:n =
\tl_if_empty:nTF { #1 }
{ \tl_gset:NV \g_gds_secname_tl \g_gds_name_tl }
{ \tl_gset:Nn \g_gds_secname_tl { #1 } }
}`
Tiratina d’orecchie quotidiana. 🙂 Le variabili globali vanno sempre usate globalmente. Quindi [tt]_gset[/tt], non [tt]_set[/tt].Ciao
EnricoQuesta volta la tiratina d’orecchie, una volta tanto, posso fartela io! 🙂
Infatti ho modificato la definizione delle chiavi con la tua proposta:
`\keys_define:nn { gdsfamily }
{
name .tl_gset:N = \g_gds_name_tl,
name .default:n = Paperino,secname .code:n =
\tl_if_empty:nTF { #1 }
{\tl_gset:NV \g_gds_secname_tl \g_gds_name_tl}
{\tl_gset:Nn \g_gds_secname_tl { #1 } },
}
\keys_set:nn { gdsfamily } { name }
\keys_set:nn { gdsfamily } { secname }`Tutto bene, un codice pulito e semplice: quando assegno la chiave ‘secname’ senza valore essa imposterà la sua corrispondente variabile a quello della variabile in cui è salvato il valore della chiave ‘name’, mentre se passo un valore questo diverrà quello salvato.
Se però chiamo assegno solamente la chiave ‘name’ la chiave ‘secname’ non prenderà il nuovo valore se non verrà espressa:
Con questi comandi infatti
`\NewDocumentCommand { \name } { m }
{
\keys_set:nn { gdsfamily } { name = #1 }
\tl_use:N \g_gds_name_tl
}\NewDocumentCommand { \secname } { }
{
\tl_use:N \g_gds_secname_tl
}`
e questo codice utente:
`Il nome è il seguente: \name{Pluto} \secname.`
Ottengo (ovviamente) non: “Il nome è il seguente: Pluto Pluto.” ma “Il nome è il seguente: Pluto Paperino.”L’importante è che LaTeX3 sia in grado di creare un ambiente di programmazione pulito.
Illustro adesso un codice che funziona (considera che ho le orecchie già abbastanza tirate…).
Assegno i valori di default con .default:n:
`\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}\usepackage{expl3}
\usepackage{xparse}\ExplSyntaxOn
\keys_define:nn { gdsfamily }
{
name .tl_gset:N = \g_gds_name_tl,
name .default:n = Paperino,secname .tl_gset:N = \g_gds_secname_tl,
secname .default:n = \g_gds_name_tl,
}\keys_set:nn { gdsfamily } { name , secname }
\NewDocumentCommand { \setnames } { m }
{
\keys_set:nn { gdsfamily } { #1 }
}\NewDocumentCommand { \getname } { m }
{
\tl_use:c { g_gds_#1_tl }
}
\ExplSyntaxOff\begin{document}
Se non si impostano le chiavi esse prendono il valore di default: Il nome è il seguente: \getname{name}, il secondo nome è \getname{secname}.\setnames{ name = Pluto }
Adesso, il nome è \getname{name}, e la chiave dovrebbe essere con lo stesso valore che è appunto: \getname{secname}.
\setnames{secname = Mitico Pippo}
Dopo aver assegnato anche la chiave del secondo nome lo stampiamo: \getname{secname} (il nome principale è rimasto a \getname{name}).\setnames{name = Topolino}
Se a questo punto modifichiamo anche il primo nome avremo: nome = \getname{name}, secondo nome = \getname{secname}.
\end{document}
`Alla prossima3.
Ciao e grazie.
R.[/quote]
Se non imposti il valore di una chiave, non riceverà mai un valore. Se vuoi che, di default, la tua chiave [tt]secname[/tt] abbia come valore il contenuto della variabile [tt]\g_gds_name_tl[/tt] allora usa [tt].default:n=\g_gds_name_tl[/tt] e, come hai fatto nell’ultimo codice, imposta entrambe per avere un valore iniziale.Ciao
Enrico
::nazgul17″ post=80207Ciao a tutti, volevo richiedere un aiuto relativamente al pacchetto frontespizio di Enrico Gregorio.
Con le recenti riforme universitarie, sono state “cancellate” le entità “facoltà” dall’Italia. Non è un problema per il pacchetto frontespizio: basta non mettercele. Stamattina, però, in segreteria mi hanno detto che la tesi non dovrebbe recare neanche la scritta relativa al dipartimento di afferenza.
Ora: se non metto nessuno tra facoltà e dipartimento ottengo un errore di compilazione:
`marco@marco-laptop:~/Scrivania/tesi/thesis$ pdflatex thesis-frn.tex
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
restricted \write18 enabled.
entering extended mode
(./thesis-frn.tex
LaTeX2e <2011/06/27>
Babeland hyphenation patterns for english, dumylang, nohyphenation, ge
rman-x-2012-05-30, ngerman-x-2012-05-30, afrikaans, ancientgreek, ibycus, arabi
c, armenian, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danis
h, dutch, ukenglish, usenglishmax, esperanto, estonian, ethiopic, farsi, finnis
h, french, friulan, galician, german, ngerman, swissgerman, monogreek, greek, h
ungarian, icelandic, assamese, bengali, gujarati, hindi, kannada, malayalam, ma
rathi, oriya, panjabi, tamil, telugu, indonesian, interlingua, irish, italian,
kurmanji, latin, latvian, lithuanian, mongolian, mongolianlmc, bokmal, nynorsk,
polish, portuguese, romanian, romansh, russian, sanskrit, serbian, serbianc, s
lovak, slovenian, spanish, swedish, turkish, turkmen, ukrainian, uppersorbian,
welsh, loaded.
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2012/texmf-dist/tex/latex/geometry/geometry.sty
(/usr/local/texlive/2012/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/local/texlive/2012/texmf-dist/tex/generic/oberdiek/ifpdf.sty)
(/usr/local/texlive/2012/texmf-dist/tex/generic/oberdiek/ifvtex.sty)
(/usr/local/texlive/2012/texmf-dist/tex/generic/ifxetex/ifxetex.sty))
(./frontespizio.sty
(/usr/local/texlive/2012/texmf-dist/tex/latex/tools/afterpage.sty)
(/usr/local/texlive/2012/texmf-dist/tex/latex/graphics/graphicx.sty
(/usr/local/texlive/2012/texmf-dist/tex/latex/graphics/graphics.sty
(/usr/local/texlive/2012/texmf-dist/tex/latex/graphics/trig.sty)
(/usr/local/texlive/2012/texmf-dist/tex/latex/latexconfig/graphics.cfg)
(/usr/local/texlive/2012/texmf-dist/tex/latex/pdftex-def/pdftex.def
(/usr/local/texlive/2012/texmf-dist/tex/generic/oberdiek/infwarerr.sty)
(/usr/local/texlive/2012/texmf-dist/tex/generic/oberdiek/ltxcmds.sty))))
(/usr/local/texlive/2012/texmf-dist/tex/latex/eso-pic/eso-pic.sty
(/usr/local/texlive/2012/texmf-dist/tex/generic/oberdiek/atbegshi.sty)
(/usr/local/texlive/2012/texmf-dist/tex/latex/xcolor/xcolor.sty
(/usr/local/texlive/2012/texmf-dist/tex/latex/latexconfig/color.cfg))))
No auxiliary output files.No file thesis-frn.aux.
*geometry* driver: auto-detecting
*geometry* detected driver: pdftex
(/usr/local/texlive/2012/texmf-dist/tex/context/base/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
) (/usr/local/texlive/2012/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
(/usr/local/texlive/2012/texmf-dist/tex/generic/oberdiek/ifluatex.sty))
(/usr/local/texlive/2012/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
(/usr/local/texlive/2012/texmf-dist/tex/latex/oberdiek/grfext.sty
(/usr/local/texlive/2012/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty))
(/usr/local/texlive/2012/texmf-dist/tex/latex/oberdiek/kvoptions.sty
(/usr/local/texlive/2012/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
(/usr/local/texlive/2012/texmf-dist/tex/generic/oberdiek/etexcmds.sty)))
(/usr/local/texlive/2012/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))
! Undefined control sequence.
\front@thefacoldip l.15 \preparefrontpage
?
`Il mio codice, ridotto all’osso, è questo:
`\documentclass[11pt,a4paper]{book}
\usepackage{frontespizio}
\begin{document}\enlargethispage{-5cm}
\begin{frontespizio}
\Universita{Verona}
\Corso[Laurea]{Ingegneria e Scienze Informatiche}
\Titoletto{Tesi di laurea Magistrale}
\Titolo {\Large{Titolo bello lungo ed appariscente}}
\Candidato[vrXXXXXX]{Nome Cognome}
\Relatore{Nome Cognome}
\Correlatore{Nome Cognome}
\Annoaccademico{2011-2012}
\end{frontespizio}\end{document}`
La domanda è: l’errore è voluto in quanto si vuole che una tra facoltà e dipartimento sia inclusa? Oppure sono io che non ho capito che il problema è un altro e magari è anche banale?
Aggiungi
`\Divisione{\mbox{}}`
E togli [tt]\Large[/tt] dal titolo. Altrimenti non ti laurei. 😉Ciao
Enrico
26 Novembre 2012 alle 17:51 in risposta a: [L3] Chiave con valore di default di un’altra chiave #80969::robitex” post=80202Ciao,
nel seguente codice LaTeX3 definisco due chiavi, la prima chiamata ‘name’ e la seconda chiamata ‘secname’ (secondo nome).
L’effetto che vorrei ottenere è che se non specifico un valore per la chiave secname, questa assuma il valore della chiave ‘name’.
`
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}\usepackage{expl3}
\usepackage{xparse}\ExplSyntaxOn
\keys_define:nn { gdsfamily }
{
name .tl_set:N = \g_gds_name_tl,
name .default:n = Paperino,secname .tl_set:N = \g_gds_secname_tl,
secname .default:V = \g_gds_name_tl % non funziona con .default:n si
}\keys_set:nn { gdsfamily } { name }
\keys_set:nn { gdsfamily } { secname }\NewDocumentCommand { \name } { }
{
\tl_use:N \g_gds_name_tl
}\NewDocumentCommand { \secname } { }
{
\tl_use:N \g_gds_secname_tl
}
\ExplSyntaxOff\begin{document}
Il nome è il seguente: \name{} \secname.
\end{document}`
Il codice non funziona, ma se cambio la funzione da .default:V a .default:n funziona, come mai?
Grazie R.Con [tt].default:V= \g_gds_name_tl[/tt] imposti il valore di default al valore attuale della variabile che, naturalmente è vuoto perché [tt]name[/tt] non è ancora stata impostata, ma solo definita. Se usi [tt].default:n[/tt] come valore viene presa la variabile [tt]\g_gds_name_tl[/tt]. Se infatti provi senza impostare un valore per [tt]name[/tt] avrai un valore vuoto.
Devi definire la chiave in modo diverso:
`\keys_define:nn { gdsfamily }
{
secname .code:n =
\tl_if_empty:nTF { #1 }
{ \tl_gset:NV \g_gds_secname_tl \g_gds_name_tl }
{ \tl_gset:Nn \g_gds_secname_tl { #1 } }
}`
Tiratina d’orecchie quotidiana. 🙂 Le variabili globali vanno sempre usate globalmente. Quindi [tt]_gset[/tt], non [tt]_set[/tt].Ciao
Enrico
26 Novembre 2012 alle 17:32 in risposta a: listoftables rimando nel PDF al titolo e non al fondo #80966::grenet” post=80200Salve forum.
Ho i seguenti comandi in frontmatter`\tableofcontents %Table of contents
\listoftables
\phantomsection
\addcontentsline{toc}{chapter}{Elenco delle tabelle}
\listoffigures
\phantomsection
\addcontentsline{toc}{chapter}{Elenco delle figure}`Indice perfetto, con numeri di pagina corretti… Ma se seguo nel PDF il collegamento all’elenco delle tabelle (o delle figure), finisco alla fine dell’elenco, ossia in pagina pari, anziché “sul titolo” come per un qualsiasi chapter.
Credo di aver letto che ci sia da attivare un pacchetto per risolvere la cosa, ma francamente non riesco a trovarlo… Mi date una mano?
Grazie mille.Stai inserendo i collegamenti alla fine degli elenchi. Vanno messi all’inizio.
`\tableofcontents %Table of contents
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{Elenco delle tabelle}
\listoftables
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{Elenco delle figure}
\listoffigures`
Ma perché fare tanta fatica?
`\documentclass[…]{…}
…
\usepackage[nottoc]{tocbibind}
…
\begin{document}
\frontmatter
\tableofcontents
\listoftables
\listoffigures
…`Ciao
Enrico
::vbruno1″ post=80198Salve a tutti,
sto scrivendo una relazione solo che non riesco a far comparire a piè pagina il numero di pagine in questo formato:
numero pagina corrente di numero totale pagine documento
ad esempio 3 di 5Ci sono riuscito solo che spunta una riga in alto non desiderata, con il codice seguente:
`\documentclass[a4paper,12pt]{article}
\usepackage{geometry}
\usepackage[italian]{babel}
\addto{\captionsitalian}{%
\renewcommand*{\refname}{\mdseries \large Bibliografia}}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[Lenny]{fncychap}
%\usepackage{fullpage}
\usepackage{times}
\usepackage{lastpage}
\usepackage{fancyhdr}
\usepackage{floatflt}
\usepackage{setspace}
\usepackage{graphicx}
\usepackage{hyperref}\hypersetup{
colorlinks=true,
% linkcolor=black,
citecolor=green,
linkcolor=blue,
}\pagestyle{fancy}
\fancyhf{}
\fancyfoot[r]{\thepage\ di {\hypersetup{linkcolor=black}\pageref{LastPage}}}\begin{document}
….
….`
Sarà quella dell’intestazione capitolo ma a me in questo caso non serve.
Grazie per l’aiuto.
`\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt} % toglie la riga in alto
\fancyhf{}
\fancyfoot[r]{\thepage\ di {\hypersetup{linkcolor=black}\pageref{LastPage}}}`
Se non ti serve il link all’ultima pagina, puoi semplicemente scrivere l’ultima riga come
`\fancyfoot[r]{\thepage\ di \pageref*{LastPage}}`
La variante * di [tt]\pageref[/tt] non crea un hyperlink.Invece di [tt]\usepackage{times}[/tt] ti consiglio [tt]\usepackage{mathptmx}[/tt] o, ancora meglio se hai una distribuzione TeX aggiornata,
`\usepackage{newtxtext,newtxmath}`
Ciao
EnricoPS: Hai qualcosa a che fare con Jean Valjean?
::franen” post=80187
Cercavo una funzione del genere nella documentazione interface3 e non ero accorto della funzione alternativa \clist_map_inline:nn.
Ma se non esistesse si potrebbe sempre(?) creare con [tt]\cs_generate_variant:Nn[/tt]. O no?
Più o meno sì. Ma [tt]\clist_map_inline:nn[/tt] e [tt]\tl_map_inline:nn[/tt] sono certamente predefinite perché è normale pensare di dover elaborare liste date come argomenti [tt]n[/tt]. Questo non avrebbe senso per [tt]\seq_map_inline:Nn[/tt] e [tt]\prop_map_inline:Nn[/tt], ovviamente.
Ciao
Enrico
::robitex” post=80178[…]
mentre la funzione di servizio verrebbe modificata molto poco in questa:
`\cs_new:Nn \gds_savein_fpval:n
{
\clist_set:Nn \l_tmpa_clist { #1 }
\clist_map_inline:Nn \l_tmpa_clist
{
\prop_gput:Nnx \g_gds_salval_prop { ##1 }
{
\fp_use:c { g_gds_##1_fp }
}
}
}`Più semplice:
`\cs_new:Nn \gds_savein_fpval:n
{
\clist_map_inline:nn { #1 }
{
\prop_gput:Nnx \g_gds_salval_prop { ##1 }
{
\fp_use:c { g_gds_##1_fp }
}
}
}`
Ciao
Enrico
25 Novembre 2012 alle 12:48 in risposta a: Rapidità di esecuzione dello scalamento di una lunghezza #80691::OldClaudio” post=80172Per quel che riguarda i tempi di esecuzione di \dimexpr non sono certo che siano maggiori di quelli dei comandi tradizionali, in quanto sono direttamente programmati nell’eseguibile come operazioni di long integer, almeno la moltiplicazione.
Prova. 🙂
1. Contenuto di [tt]testdim.tex[/tt]
`\dimen0=1cm
\def\a{\dimen2=1.5\dimen0 }
%\def\a{\dimen2=\dimen0 \multiply \dimen2 by 3 \divide\dimen2 by 2 }
%\def\a{\dimen2=\dimexpr\dimen0 * 3/2\relax}
\def\b{\a\a\a\a\a\a\a\a\a\a}
\def\c{\b\b\b\b\b\b\b\b\b\b}
\def\d{\c\c\c\c\c\c\c\c\c\c}
\def\e{\d\d\d\d\d\d\d\d\d\d}
\def\f{\e\e\e\e\e\e\e\e\e\e}
\def\g{\f\f\f\f\f\f\f\f\f\f}
\def\h{\g\g\g\g\g\g\g\g\g\g}\h
\bye`Risultato:
`$ \time testdim.tex
testdim.tex: No such file or directory
0.00 real 0.00 user 0.00 sys
[eg-macmini:~/provaccia] enricomb% \time pdftex testdim.tex
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
restricted \write18 enabled.
entering extended mode
(./testdim.tex )
No pages of output.
Transcript written on testdim.log.
11.59 real 10.66 user 0.09 sys`2. Contenuto di [tt]testdim.tex[/tt]
`\dimen0=1cm
%\def\a{\dimen2=1.5\dimen0 }
\def\a{\dimen2=\dimen0 \multiply \dimen2 by 3 \divide\dimen2 by 2 }
%\def\a{\dimen2=\dimexpr\dimen0 * 3/2\relax}
\def\b{\a\a\a\a\a\a\a\a\a\a}
\def\c{\b\b\b\b\b\b\b\b\b\b}
\def\d{\c\c\c\c\c\c\c\c\c\c}
\def\e{\d\d\d\d\d\d\d\d\d\d}
\def\f{\e\e\e\e\e\e\e\e\e\e}
\def\g{\f\f\f\f\f\f\f\f\f\f}
\def\h{\g\g\g\g\g\g\g\g\g\g}\h
\bye`Risultato:
`$ \time pdftex testdim.tex
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
restricted \write18 enabled.
entering extended mode
(./testdim.tex )
No pages of output.
Transcript written on testdim.log.
16.28 real 15.48 user 0.11 sys`3. Contenuto di [tt]testdim.tex[/tt]
`\dimen0=1cm
%\def\a{\dimen2=1.5\dimen0 }
%\def\a{\dimen2=\dimen0 \multiply \dimen2 by 3 \divide\dimen2 by 2 }
\def\a{\dimen2=\dimexpr\dimen0 * 3/2\relax}
\def\b{\a\a\a\a\a\a\a\a\a\a}
\def\c{\b\b\b\b\b\b\b\b\b\b}
\def\d{\c\c\c\c\c\c\c\c\c\c}
\def\e{\d\d\d\d\d\d\d\d\d\d}
\def\f{\e\e\e\e\e\e\e\e\e\e}
\def\g{\f\f\f\f\f\f\f\f\f\f}
\def\h{\g\g\g\g\g\g\g\g\g\g}\h
\bye`Risultato:
`$ \time pdftex testdim.tex
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
restricted \write18 enabled.
entering extended mode
(./testdim.tex )
No pages of output.
Transcript written on testdim.log.
16.83 real 15.62 user 0.12 sys`
Ciao
Enrico
25 Novembre 2012 alle 9:52 in risposta a: Rapidità di esecuzione dello scalamento di una lunghezza #80689::Liverpool” post=80170
Temo che non sia proprio vero. L’esecuzione di
`\dimen2=\dimexpr\dimen0*3/2\relax`
richiede essenzialmente lo stesso tempo di
`\dimen2=\dimen0 \multiply\dimen2 by 3 \divide\dimen2 by 2`Però sul manuale di [tt]etex[/tt] c’è scritto
manuale di etexLe operazioni aritmetiche sono eseguite individualmente, tranne le operazioni di ‘scalamento’ (una moltiplicazione seguita immediatamente da una divisione) che sono eseguite come un’operazione combinata con un prodotto a 64 bit come valore intermedio
Questa frase sembra voler dire che mentre nella successione [tt]multiply+divide[/tt] le operazioni sono:
a) carico il numero
b) eseguo la moltiplicazione
c) scarico il numero
d) carico il numero
e) eseguo la divisione
f) scarico il numerocon le istruzioni di [tt]etex[/tt] le operazioni sono:
a) carico il numero
b) eseguo la moltiplicazione
c) eseguo la divisione sul numero in registro
d) scarico il numeroquindi si dovrebbe risparmiare un carico+scarico, se ho capito bene. Forse tu dici che alla fine si tratta di tempi infinitesimi?
Quel poco che si guadagna da un’assegnazione in meno si perde con l’uso di [tt]\dimexpr[/tt] che è più lento della manipolazione diretta dei registri.
Ciao
Enrico
25 Novembre 2012 alle 9:11 in risposta a: Rapidità di esecuzione dello scalamento di una lunghezza #80687::OldClaudio” post=80166
Ciao e bentornato
Grazie epr il bentornato; certo sono tornato un poco sul forum e lo faccio quando riesco a trovere una free WiFi. In realtà sono a circa 17 000 km di distanza nello stato di Vittoria, in Australia:smile:
Tornado al tuo problema Lo scalamanto di una lunghezza andrebbe fatto nel modo migliore sia per precisione, sia per velocità ricorrendo alle estensioni di eTeX che da diversi anni sono incorporate dentro ogni motore di composizione moderno, pdftex, xetex,luatex e forse anche altri. Questi sono i nomi dei veri programmi di composizione che insieme al file di formato latex.ltx formano pdflatex, xelatex, lualatex.
Allora per scalare di un fattore 0.25 ovvero 1/4 hai queste possibilità:`\dimen0= \dimexpr \dimen0 * 0.25pt / 1pt \relax`oppure` \dimen0 = \dimexpr \dimen0 * 1pt / 4pt \relax`
I due \relax sono facoltativi se non ci sono ambiguità con quel che segue; le dimensioni in puti tipografic possono venire rappresentate come multipli di \p@.
Il bello della \dimexpr è che la prima moltiplicazione viene eseguita in un registro da 64 bit (invece della lunghezza normale di 32 bit), quidi senza troncamenti né overflow. La divisione viene eseguite con il numeratore intero a doppia precisione e arrotondato, non troncato come succede con \divide. Sono due operazioni eseguite direttamente nei registri della CPU, quindi richiedono il minimo tempo macchina possibile. Il manuale di eTeX raccomanda di eseguire le operazioni di scalamento in questo modo. texdoc etex è illuminante a questo proposito.
Ciao
ClaudioTemo che non sia proprio vero. L’esecuzione di
`\dimen2=\dimexpr\dimen0*3/2\relax`
richiede essenzialmente lo stesso tempo di
`\dimen2=\dimen0 \multiply\dimen2 by 3 \divide\dimen2 by 2`La sintassi che proponi
`\dimexpr \dimen0 * 0.25pt / 1pt \relax`
è scorretta. Se infatti provi questa sessione interattiva
`$ pdftex
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
restricted \write18 enabled.
**\relax
entering extended mode*\dimen0=1cm
*\dimen0=\dimexpr \dimen0 * 0.25pt / 1pt \relax
*\showthe\dimen0
> 0.0pt.
<*> \showthe\dimen0?
*\bye
[1{/usr/local/texlive/2012/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
Output written on texput.pdf (1 page, 11260 bytes).
Transcript written on texput.log.`
scopri che \dimexpr finisce con lo 0 e troverai “.25pt / 1pt” nel PDF finale.Ciao
Enrico
::Driven” post=80145Grazie marco…
Tale Font non ha un equivalente in Excel giusto?
Quindi se devo fare una tabella in quell’ambiente e poi importarla come immagine (visto che non conosco altro modo per fare tabelle complesse con Latex) avrà sicuramente un font differente?
Ciao
Che c’entra Excel con i font? Usa semplicemente quelli di sistema. Installa tra i font di sistema i Latin Modern in formato OpenType e sei a posto.
Ciao
Enrico
24 Novembre 2012 alle 10:48 in risposta a: Bibliografia: autori multipli con nome cognome invertiti #80920 -
AutoreRisposte