Risposte nei forum create
-
AutoreRisposte
-
::
Grazie mille per i commenti!
Ricordo che avevo iniziato anche io utilizzando imakeidx, ma poi avevo deciso di passare a split-index perché se non ricordo male il numero massimo di indici che è possibile creare con imakeidx si aggira intorno alla decina e io ne avevo bisogno di più…
Detto questo ho provato a compilare il mio file con il “vecchio” latex e (a parte che bisogna commentare i pacchetti appositi per Lua, tipo luacode) non ottengo errori di compilazione ma il problema persiste…
::
Ciao, no le righe magiche non funzionano su texmaker, ma ho trovato il motivo per cui avevo problemi di compilazione: il percorso per compilare Lua era sbagliato… (shame on me…)
Comunque visto che ormai stiamo spaziando su vari argomenti vorrei se suggerisci qualche altro editor… sinceramente basterebbe anche un buon editor di testo e poi passare da terminale.
Molte grazie!
Matteo
::
La miglior soluzione mi sembra passare a luatex, per caso qualcuno saprebbe indicarmi dove posso trovare le indicazioni necessarie per farlo funzionare? Utilizzo TeXlive18 via mactex, e nonostante svarianti tentativi non sono ancora riuscito ad ottenere un file compilato in luatex, ad esempio:
`\RequirePackage{luatex85}
\documentclass[12pt,border=2pt]{standalone}
\usepackage{luacode}
\begin{luacode*}
function trigtable ()
for t=0, 45, 3 do
local x=math.rad(t)
local sf =[[%2d$^{\circ}$ & %1.9f & %1.9f & %1.9f & %1.9f \\]]
tex.print(string.format(sf, t, x, math.sin(x), math.cos(x), math.tan(x)))
end
end
\end{luacode*}\newcommand{\trigtable}{\luadirect{trigtable()}}
\begin{document}
\begin{tabular}{rcccc}
\hline
& $x$ & $\sin(x)$ & $\cos(x)$ & $\tan(x)$ \\
\hline
\trigtable
\hline
\end{tabular}
\end{document}`
non funziona in nessun modo.
Grazie per il supporto!
::
Ho risolto tutto con pythontex, grazie!Sono uno studente di un politecnico, e siccome ho seguito un corso che prevedeva l’utilizzo di python mi torna molto utile utilizzarlo anche in altri contesti… Inoltre è il linguaggio di programmazione con cui mi sono trovato meglio finora, quindi ho preferito continuare ad usarlo piuttosto che imparare un nuovo linguaggio (inoltre non so quanto buone siano le librerie per la numerica e la programmazione scientifica in generale in lua….)
robitex” post=113755
Ciao, vorrei utilizzare il pacchetto python e sul readme ho letto che devo attivare l’opzione shell-escape (oltre ovviamente ad avere python installato). Ho provato a cercare qualche indicazione ma non sono riuscito a capire cosa devo fare (come editor uso texmaker e come compilatore pdflatex), qualcuno avrebbe qualche indicazione? Grazie mille!
Al momento pdflatex è settato su: “/Library/TeX/texbin/pdflatex” -synctex=1 -interaction=nonstopmode %.tex
Ciao. Perché usare Python? La domanda sorge spontanea considerando LuaTeX.
Comunque sia, leggi la documentazione del pacchetto PythonTeX.
Saluti.
R.::
Ciao,
sarebbe perfettissimo!
L’unico problema minimo è che non riesco a compilare via Lua, sapresti magari darmi qualche info (uso TexMaker)? Grazierobitex” post=113501
Ciao a tutti, in alcuni dei miei documenti uso le utilissime linee di codice seguenti: `\makeatletter
\def\set#1#2{\global\@namedef{namespacekey@#1}{#2}}
\def\get#1{%
\@ifundefined{namespacekey@#1}
{%CASO INDEFINITO
~}
{\@nameuse{namespacekey@#1}}%
}
\makeatother
% \set{#1}{#2} \get{#1}: stampa #2`
che avevo ricevuto a suo tempo da un benefattore su questo forum.
In pratica questi comandi mi permettono di associare una stringa ad una “label” da chiamare poi nel documento per ottenere il testo. Tutto funziona a meraviglia quando dichiaro prima il comando
`\set` e poi il `\get` come farebbe qualsiasi persona civile.
Io però avrei bisogno poter stampare con \get anche se il \set si trova solo successivamente, ovviamente non ad una prima compilazione, ma pensavo a qualcosa di simile a come funziona \label… qualche suggerimento? Grazie mille!Ciao.
Si, se il \set capita dopo il \get occorre serializzare i dati in un file esterno ausiliario.
Al momento dell’avvio della compilazione si ricarica quel file definito dalla compilazione precedente.
Sarebbe interessante implementare il tutto via Lua. Puoi passare a LuaLaTeX?
R.::
Meraviglioso grazie mille, se ora volessi far funzionare un comando simile dentro un altro comando, come potrei fare? Io ho provato con`\newcommand{\inizializza}[1]{%
\PreProcessArguments{\COPYinVarName}{%
\MakeCSFromString{0}
\MakeCSFromString{totale#1}%
}%
}`
ma non funziona… (Qui sarebbe per “inizializzare” un valore a zero)
::
Ciao, scusate se chiedo ancora, ma la sintassi per definire `\newcommand*\MakeCSFromSecondFourthAndFifthArgument[5]` e collega, e mi farebbe molto comodo avere anche quello per fare la somma di due “variabili” a cui è già stato assegnato un valore tramite `\COPYinVarName`Molte grazie
letteracdp” post=113219È colpa mia, che ho risposto frettolosamente e — lo ammetto! — senza leggere affatto la tua replica alla prima risposta di @OldClaudio, nella quale delineavi lo scenario di utilizzo che sottostà al tuo problema: non bisognerebbe mai fare così, e mi scuso per averlo fatto. 😳
Le macro [tt]\@nameuse[/tt] e [tt]\@namedef[/tt] vanno bene per essere usate da sole, ma, in generale, non possono essere usate per “fabbricare” nomi di comandi che debbano essere passati come argomenti ad altri comandi. Quello che vuoi fare tu è complicato, e vedo tre modi per farlo, l’ultimo dei quali vira alquanto sul tacón (nel senso @egreg9-iano del termine):
- studiare l’implementazione del pacchetto calculator e implementare il comportamento desiderato direttamente al suo interno, modificandone il codice;
- imparare il LaTeX3 😉 ;
- pre-processare gli argomenti da passare ai comandi del pacchetto calculator mediante i vecchi trucchi di basso livello a base di [tt]\edef[/tt], [tt]\expandafter[/tt], [tt]\noxepand[/tt] e [tt]\unexpanded[/tt].
Vediamo come potrebbe essere realizzato il punto 3, limitandoci a una proof of concept. Il codice seguente definisce tre macro che consentono di richiamare un dato comando, il quale si aspetta che certi suoi argomenti siano dei nomi di comando (più esattamente, delle sequenze di controllo), costruendo tali nomi a partire da altrettante sequenze di caratteri passate in argomenti corrispondenti per posizione. Per esempio, nel codice che segue, le linee
`
\COPYinVarName{357}{dividendo}
\INTEGERDIVISIONwithVarDividendVarQuotientVarRemainder
{dividendo}{12}{quoziente}{resto}
`
generano le due chiamate
`
\COPY{357}{\dividendo}
\INTEGERDIVISION{\dividendo}{12}{\quoziente}{\resto}
`
L’esempio in questione utilizza la primitiva [tt]\unexpanded[/tt], che non fa parte del «TeX di Knuth», sebbene sia disponibile da parecchi anni nella variante di TeX di più comune utilizzo, cioè pdf(e)TeX. In teoria, si potrebbe ottenere un comportamento equipollente anche col puro TeX knuthiano, utilizzando la primitiva [tt]\the[/tt] applicata a un token register: si forniscono due esempi, per il momento commentati, di implementazioni alternative mediante questa tecnica, che potrai sperimentare decommentandole (e commentando, naturalmente, le corrispondenti implementazioni tramite [tt]\unexpanded[/tt]).`
% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly
% declare the paper format.\usepackage[T1]{fontenc} % Not always necessary, but recommended.
% End of standard header. What follows pertains to the problem at hand.\usepackage[italian]{babel}
\usepackage{calculator}\makeatletter
%
% Implementation with e-TeX's “\unexpanded”:
\newcommand*\MakeCSFromSecondArgument[2]{%
\edef\@tempa{%
\unexpanded{#1}%
\expandafter\noexpand \csname #2\endcsname
}%
\@tempa
}
% %
% % “Purely Knuthian” implementation:
% \newcommand*\MakeCSFromSecondArgument[2]{%
% \toks@ {#1}%
% \expandafter\the \expandafter\toks@
% \csname #2\endcsname
% }%
% Implementation with e-TeX's “\unexpanded”:
\newcommand*\MakeCSFromSecondAndThirdArgument[3]{%
\edef\@tempa{%
\unexpanded{#1}%
\expandafter\noexpand \csname #2\endcsname
\expandafter\noexpand \csname #3\endcsname
}%
\@tempa
}
% %
% % “Purely Knuthian” implementation:
% \newcommand*\MakeCSFromSecondAndThirdArgument[3]{%
% \toks@ {#1}%
% \expandafter\the \expandafter\toks@
% \csname #2\expandafter\endcsname
% \csname #3\endcsname
% }%
% Implementation with e-TeX's “\unexpanded”:
\newcommand*\MakeCSFromSecondFourthAndFifthArgument[5]{%
\edef\@tempa{%
\unexpanded{#1}%
{\expandafter\noexpand \csname #2\endcsname}%
\unexpanded{#3}%
\expandafter\noexpand \csname #4\endcsname
\expandafter\noexpand \csname #5\endcsname
}%
\@tempa
}
%
% No “purely Knuthian” version fot this one!\makeatother
\newcommand*{\COPYinVarName}[2]{%
\MakeCSFromSecondArgument{\COPY{#1}}{#2}%
}
\newcommand*{\INTEGERDIVISIONwithVarQuotientVarRemainder}[4]{%
\MakeCSFromSecondAndThirdArgument
{\INTEGERDIVISION{#1}{#2}}%
{#3}{#4}% variable names
}
\newcommand*{\INTEGERDIVISIONwithVarDividendVarQuotientVarRemainder}[4]{%
\MakeCSFromSecondFourthAndFifthArgument
\INTEGERDIVISION
{#1}% variable name
{{#2}}%
{#3}{#4}% variable names
}\begin{document}
\COPYinVarName{33.333}{pippo}
Ora \( \verb|\pippo| = \pippo \).
\COPYinVarName{-12.345}{pippo}
Adesso, per\`{o}, \( \verb|\pippo| = \pippo \).
\INTEGERDIVISIONwithVarQuotientVarRemainder{38}{5}{quoziente}{resto}
Il quoziente di $138$ diviso~$15$ \`{e} $\quoziente$ con resto~$\resto$
perch\'{e}
\[
\quoziente \times 15 + \resto = 138
\]\INTEGERDIVISIONwithVarQuotientVarRemainder{187}{17}{quoziente}{resto}
Il quoziente di $187$ diviso~$17$ \`{e} $\quoziente$ con resto~$\resto$
perch\'{e}
\[
\quoziente \times 17 + \resto = 187
\]\COPYinVarName{357}{dividendo}
\INTEGERDIVISIONwithVarDividendVarQuotientVarRemainder
{dividendo}{12}{quoziente}{resto}Il quoziente di $\dividendo$ diviso~$12$ \`{e} $\quoziente$ con resto~$\resto$
perch\'{e}
\[
\quoziente \times 12 + \resto = \dividendo
\]\end{document}
`Permettetemi di chiudere con una nota mestamente nostalgica per gli arditi [tt]\edef[/tt], le delicate collanine di [tt]\expandafter[/tt], fragili e iridescenti come trine di brina, le espansioni controllate dei [tt]\the[/tt] applicati a un token register, gli ossimorici [tt]\expandafter\noexpand[/tt]… Tutte cose che, con il LaTeX3, sono destinate a scomparire… 😥
Ciao.
—
Gustavo::
Grazie mille, stasera o domani mattina al più presto ci guardo dietro, grazie davveroletteracdp” post=113219È colpa mia, che ho risposto frettolosamente e — lo ammetto! — senza leggere affatto la tua replica alla prima risposta di @OldClaudio, nella quale delineavi lo scenario di utilizzo che sottostà al tuo problema: non bisognerebbe mai fare così, e mi scuso per averlo fatto. 😳
Le macro [tt]\@nameuse[/tt] e [tt]\@namedef[/tt] vanno bene per essere usate da sole, ma, in generale, non possono essere usate per “fabbricare” nomi di comandi che debbano essere passati come argomenti ad altri comandi. Quello che vuoi fare tu è complicato, e vedo tre modi per farlo, l’ultimo dei quali vira alquanto sul tacón (nel senso @egreg9-iano del termine):
- studiare l’implementazione del pacchetto calculator e implementare il comportamento desiderato direttamente al suo interno, modificandone il codice;
- imparare il LaTeX3 😉 ;
- pre-processare gli argomenti da passare ai comandi del pacchetto calculator mediante i vecchi trucchi di basso livello a base di [tt]\edef[/tt], [tt]\expandafter[/tt], [tt]\noxepand[/tt] e [tt]\unexpanded[/tt].
Vediamo come potrebbe essere realizzato il punto 3, limitandoci a una proof of concept. Il codice seguente definisce tre macro che consentono di richiamare un dato comando, il quale si aspetta che certi suoi argomenti siano dei nomi di comando (più esattamente, delle sequenze di controllo), costruendo tali nomi a partire da altrettante sequenze di caratteri passate in argomenti corrispondenti per posizione. Per esempio, nel codice che segue, le linee
`
\COPYinVarName{357}{dividendo}
\INTEGERDIVISIONwithVarDividendVarQuotientVarRemainder
{dividendo}{12}{quoziente}{resto}
`
generano le due chiamate
`
\COPY{357}{\dividendo}
\INTEGERDIVISION{\dividendo}{12}{\quoziente}{\resto}
`
L’esempio in questione utilizza la primitiva [tt]\unexpanded[/tt], che non fa parte del «TeX di Knuth», sebbene sia disponibile da parecchi anni nella variante di TeX di più comune utilizzo, cioè pdf(e)TeX. In teoria, si potrebbe ottenere un comportamento equipollente anche col puro TeX knuthiano, utilizzando la primitiva [tt]\the[/tt] applicata a un token register: si forniscono due esempi, per il momento commentati, di implementazioni alternative mediante questa tecnica, che potrai sperimentare decommentandole (e commentando, naturalmente, le corrispondenti implementazioni tramite [tt]\unexpanded[/tt]).`
% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly
% declare the paper format.\usepackage[T1]{fontenc} % Not always necessary, but recommended.
% End of standard header. What follows pertains to the problem at hand.\usepackage[italian]{babel}
\usepackage{calculator}\makeatletter
%
% Implementation with e-TeX's “\unexpanded”:
\newcommand*\MakeCSFromSecondArgument[2]{%
\edef\@tempa{%
\unexpanded{#1}%
\expandafter\noexpand \csname #2\endcsname
}%
\@tempa
}
% %
% % “Purely Knuthian” implementation:
% \newcommand*\MakeCSFromSecondArgument[2]{%
% \toks@ {#1}%
% \expandafter\the \expandafter\toks@
% \csname #2\endcsname
% }%
% Implementation with e-TeX's “\unexpanded”:
\newcommand*\MakeCSFromSecondAndThirdArgument[3]{%
\edef\@tempa{%
\unexpanded{#1}%
\expandafter\noexpand \csname #2\endcsname
\expandafter\noexpand \csname #3\endcsname
}%
\@tempa
}
% %
% % “Purely Knuthian” implementation:
% \newcommand*\MakeCSFromSecondAndThirdArgument[3]{%
% \toks@ {#1}%
% \expandafter\the \expandafter\toks@
% \csname #2\expandafter\endcsname
% \csname #3\endcsname
% }%
% Implementation with e-TeX's “\unexpanded”:
\newcommand*\MakeCSFromSecondFourthAndFifthArgument[5]{%
\edef\@tempa{%
\unexpanded{#1}%
{\expandafter\noexpand \csname #2\endcsname}%
\unexpanded{#3}%
\expandafter\noexpand \csname #4\endcsname
\expandafter\noexpand \csname #5\endcsname
}%
\@tempa
}
%
% No “purely Knuthian” version fot this one!\makeatother
\newcommand*{\COPYinVarName}[2]{%
\MakeCSFromSecondArgument{\COPY{#1}}{#2}%
}
\newcommand*{\INTEGERDIVISIONwithVarQuotientVarRemainder}[4]{%
\MakeCSFromSecondAndThirdArgument
{\INTEGERDIVISION{#1}{#2}}%
{#3}{#4}% variable names
}
\newcommand*{\INTEGERDIVISIONwithVarDividendVarQuotientVarRemainder}[4]{%
\MakeCSFromSecondFourthAndFifthArgument
\INTEGERDIVISION
{#1}% variable name
{{#2}}%
{#3}{#4}% variable names
}\begin{document}
\COPYinVarName{33.333}{pippo}
Ora \( \verb|\pippo| = \pippo \).
\COPYinVarName{-12.345}{pippo}
Adesso, per\`{o}, \( \verb|\pippo| = \pippo \).
\INTEGERDIVISIONwithVarQuotientVarRemainder{38}{5}{quoziente}{resto}
Il quoziente di $138$ diviso~$15$ \`{e} $\quoziente$ con resto~$\resto$
perch\'{e}
\[
\quoziente \times 15 + \resto = 138
\]\INTEGERDIVISIONwithVarQuotientVarRemainder{187}{17}{quoziente}{resto}
Il quoziente di $187$ diviso~$17$ \`{e} $\quoziente$ con resto~$\resto$
perch\'{e}
\[
\quoziente \times 17 + \resto = 187
\]\COPYinVarName{357}{dividendo}
\INTEGERDIVISIONwithVarDividendVarQuotientVarRemainder
{dividendo}{12}{quoziente}{resto}Il quoziente di $\dividendo$ diviso~$12$ \`{e} $\quoziente$ con resto~$\resto$
perch\'{e}
\[
\quoziente \times 12 + \resto = \dividendo
\]\end{document}
`Permettetemi di chiudere con una nota mestamente nostalgica per gli arditi [tt]\edef[/tt], le delicate collanine di [tt]\expandafter[/tt], fragili e iridescenti come trine di brina, le espansioni controllate dei [tt]\the[/tt] applicati a un token register, gli ossimorici [tt]\expandafter\noexpand[/tt]… Tutte cose che, con il LaTeX3, sono destinate a scomparire… 😥
Ciao.
—
Gustavo::
Non proprio, io vorrei che il risultato fosse:
\comando#partevariabile
dove poi \comando#partevariabile viene considerato un comando valido nel testo…OldClaudio” post=113203Intanto \@nameuse usa la stessa sequenza che ho usato io, quindi se vuoi pupi usare questo`\makeatletter
\@namedef{comandopippo}{\emph{Pippo}}
\newcommand\*comando[1]{\@nameuse{comando#1}}`
Se nel documento .tex scrivi \comando{pippo} nel nel documento composto vien scritto Pippo.Era questo che volevi fare?
::
Grazie!
Potresti fornirmi anche un esempio di caso con parte del nome variabile?Matteo
letteracdp” post=113200Sì, direi che senz’altro ciò di cui sei in cerca è il costrutto [tt]\csname …\endcsname[/tt], il quale permette di costruire un comando at run-time; se si preferisce, è il meccanismo con il quale il TeX realizza l’indirezione nei comandi. Il nucleo del LaTeX rende disponibile la stessa funzione tramite la macro [tt]\@nameuse[/tt].
Esempio minimo compilabile:
`
% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly
% declare the paper format.\usepackage[T1]{fontenc} % Not always necessary, but recommended.
% End of standard header. What follows pertains to the problem at hand.\newcommand*{\comando}[1]{\csname comando#1\endcsname}
% % Definizione alternativa:
% \makeatletter
% \newcommand*\comando[1]{\@nameuse{comando#1}}
% \makeatother\newcommand*{\comandoA}{Pippo}
\newcommand*{\comandoB}{Pluto}
\newcommand*{\comandoC}{Paperino}\begin{document}
\comando{A}, \comando{B} e \comando{C}.
\end{document}
`Se poi vuoi anche definire un comando con (parte de) il nome variabile, devi anche imparare l’uso di [tt]\expandafter[/tt] :smile:, oppure usare [tt]\@namedef[/tt].
Ciao.
—
Gustavo -
AutoreRisposte