Risposte nei forum create
-
AutoreRisposte
-
::
moreverb
Gironzolando in internet ho scoperto però che esiste anche il pachetto listings!
Adesso non so con quale sia meglio e + facile lavorare!
Il mio obbiettivo cmq sarebbe appunto per ogni vosa che ho visto in classe con matlab, scriverne il codice e fare si che venga inquadrato e che il quadrato sia centrato nella pagina!
Forse pretendo troppo, ma così graficamente sarebbe + facile (almeno per me) studiare!
Grazie!O listings oppure fancyvrb; con il secondo è abbastanza facile ottenere ciò che vuoi, l’ambiente è già definito.
Ciao
Enrico
::Salve ragazzi!
Ho un piccolo problemino! Devo fare un riassunto dei principali comandi in latex e la mia idea era di svilupparlo come segue:
`
Definizione di una matrice:\\
\begin{center}
\begin{boxedverbatim}>> A=[1 2 3; 4 5 6]
A =
1 2 3
4 5 6\end{boxedverbatim}
\end{center}
`Siccome dovrò mettere molte volte questa struttura, per evitare di scrivere tutte le volte
`
\begin{center}
\begin{boxedverbatim}
` e il suo rispettivo per la chiusura dei vari comandi, pensavo di creare un nuovo ambiente!
Qualcuno di voi mi potrebbe aiutare? Grazie!Quale pacchetto mette a disposizione l’ambiente boxverbatim?
Ciao
Enrico
::Ciao a tutti,
il titolo di una section della mia tesi presenta all’interno un’espressione matematica:
`\section{The Differential Algebra $\leftidx{_n}{D}{_v}$}`.
La compilazione restituisce un errore che determina il blocco della compilazione. Ho provato a cercare sul forum ma non ho trovato nulla di utile (anche se ho un vago ricordo di aver visto un problema simile in qualche discussione 😕 ).Magari dire quale pacchetto dà \leftidx sarebbe meglio; \protect\leftidx dovrebbe bastare.
Ciao
Enrico
26 Maggio 2008 alle 12:00 in risposta a: Domande su: Appunti di programmazione in LaTeX e TeX #24392::Grazie della risposta… come sempre molto chiaro. Un’altra piccola segnalazione: a pagina 121 spiegando il fuzionamento di \@removefromreset arrivi ad un punto dove dici:
In definitiva è come se avessimo dato`\gdef\cl@chapter{%
\@elt{section}\@elt{equation}\@elt{table}\@elt{footnote}}`Ma dato che l’esempio era su footnote non dovrebbe essere `\gdef\cl@chapter{%
\@elt{section}\@elt{equation}\@elt{figure}\@elt{table}}` proprio perché l’espansione di \@elt{footnote} è vuota?Esattamente. Ora correggo, grazie.
Ciao
Enrico
::Caro Enrico,
le cose stanno così: mentre la parte del codice che pensavo fosse più difficile da realizzare è un successo, quella più “banale” mi da i maggiori problemi.
Infatti vorrei formattare con il pacchetto numprint il valore contenuto nel registro fltpoint.
Questo lo faccio normalmente se carico il materiale direttamente nel registro di token, mentre non è possibile se l’append viene svolto con edef.
Dunque se utilizzo edef non posso passargli anche un \numprint{\mynumber}, mentre se utilizzo l’append diretto nel registro funziona il numprint ma il valore del registro diventa l’ultimo:
`%funziona senza numprint
\fpRegSet{myreg}{1000,85}\fpRegGet{myreg}{\mynumber}
\edef\temp{Il numero adesso vale: \mynumber}
\toks255=\expandafter{\temp}
\the\toks255
\fpRegSet{myreg}{8541256321,45}\fpRegGet{myreg}{\mynumber}
\edef\temp{\the\toks255 Mentre ora vale: \mynumber}
\toks255=\expandafter{\temp}
\the\toks255
`
`%funziona con numprint ma i registri mantengono tutti l'ultimo valore
\fpRegSet{myreg}{1000,85}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\mynumber}
\toks255={Il numero adesso vale: \numprint{\temp}}
\the\toks255
\fpRegSet{myreg}{8541256321,45}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\mynumber}
\toks255=\expandafter{\the\toks255 Mentre ora vale: \numprint{\temp}}
\the\toks255
`Credo sia necessario passare al piano B, ovvero l’utilizzo esclusivo dei registri tokens senza utilizzare edef.
Prova a guardare bene: quando esegui la prima assegnazione, il contenuto del registro è “Il numero adesso vale: \numprint{\temp}” che non ti serve a nulla. Non servirebbe a nulla nemmeno scrivere prima \edef\temp{\numprint{\mynumber}} perché di certo \numprint contiene svariate cose non espandibili.
`\def\MessaggioA{Il numero adesso vale: }
\def\MessaggioB{Mentre ora vale: }
\fpRegSet{myreg}{1000,85}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\noexpand\numprint{\mynumber}}
\toks@=\expandafter{\expandafter\MessaggioA\temp\\}
\the\toks@
\fpRegSet{myreg}{8541256321,45}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\noexpand\numprint{\mynumber}}
\toks@=\expandafter\expandafter\expandafter{%
\expandafter\the\expandafter\toks@\expandafter\MessaggioB\temp}
\the\toks@`
Naturalmente la cosa diventa improponibile se ci sono più messaggi di cui tener conto, per via della moltiplicazione degli \expandafter; si dovrebbe andare con l’uso di macro, ma senza sapere dove veramente vuoi arrivare è difficile dire con più precisione. Nota l’uso di un nome simbolico per \toks255 (che ti impone di usare \makeatletter); qui è meglio che con \toks255. In effetti l’uso di \edef può essere migliore:
`\def\MessaggioA{Il numero adesso vale: }
\def\MessaggioB{Mentre ora vale: }
\fpRegSet{myreg}{1000,85}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\noexpand\MessaggioA\noexpand\numprint{\mynumber}}
\toks@=\expandafter{\temp\\}
\the\toks@
\fpRegSet{myreg}{8541256321,45}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\noexpand\MessaggioB\noexpand\numprint{\mynumber}}
\toks@=\expandafter\expandafter\expandafter{%
\expandafter\the\expandafter\toks@\temp}
\the\toks@`
Ciao
Enrico
::A pensarci bene, la soluzione con xspace sembra migliore.
Non necessariamente: come spiega la stessa documentazione di xspace, qualche volta ci possono essere piccoli problemi.
Anzi, la domanda di Stefano mi spinge alla seguente riflessione: perché i comandi come \TeX, \LaTeX, … si comportano proprio così (per quello che riguarda gli spazi seguenti)?
`\documentclass{article}
\usepackage{xspace}
\newcommand{\tex}{\TeX\xspace}
\begin{document}
A volte il nome \tex deve essere seguito da uno spazio (come in questo caso); alte volte, invece, lo spazio non ci va: \tex. Se è necessario violare questa regola (per esempio per scrivere “cose strane''), bastano due graffe: Ars\tex{}nica.
\end{document}`
Ci possono essere effetti collaterali (che magari mi sfuggono)? Non sarebbe più semplice che i comandi predefiniti come \TeX e \LaTeX si comportassero così senza la necessità di caricare il pacchetto xspace? In altre parole, potremmo definire il comportamento predefinito di \TeX e \LaTeX come un bug di LaTeX (corretto da xspace)?L’obbligo di chiudere un comando con qualcosa che non sia uno spazio costringerebbe a contorsioni molto più complicate di quanti problemi risolverebbe. Preferiresti dover scrivere
`\vskip2pt`
e chiudere ogni riga di definizioni con %, anche quelle che terminano con un comando? Io, sinceramente, no. Si può anche sostenere che la scelta di Knuth non sia stata la migliore possibile, tuttavia la questione è spiegata nelle prime pagine del TeXbook e di qualsiasi guida. Andrei molto cauto a usare la parola “bug” parlando di TeX. 🙂Ciao
Enrico
::… speravo “implicitamente” che funzionasse perchè non riesco a far digerire i token giusti al registro in quest’altro caso:
`\fpRegSet{myreg}{1000}
\fpRegGet{myreg}{\mynumber}
\toks255=\expandafter{Il numero adesso vale: \expandafter\space\number\mynumber\\}
\fpRegSet{myreg}{50000}
\fpRegGet{myreg}{\mynumber}
\toks255=\expandafter{\the\toks255 mentre adesso siamo a: \expandafter\space\number\mynumber}
\the\toks255
`
utilizzo il pacchetto fltpoint salvando un valore numerico nel registro denominato myreg, dal quale posso ricavarne il valore depositandolo in un comando (fantasiosamente nominato come \mynumber).
Se compilato il codice produce la stessa situazione precedente, ovverro nel registro viene salvato il token complesso di \mynumber e quindi scaricare i token con \the\toks255 fa apparire solo l’ultimo valore del registro quello attuale.
Come posso fare per inserire invece i token relativi al valore che \mynumber ha in quel momento?Con il codice
`\toks255=\expandafter{Il numero adesso vale: \expandafter\space\number\mynumber\\}`
il primo \expandafter non fa assolutamente nulla, perché cerca di espandere il token “I” che non è espandibile. Perciò dopo quell’istruzione il registro \toks255 contiene esattamente la lista che hai dato tra le graffe. Qui ci vuole \edef:
`\fpRegSet{myreg}{1000}
\fpRegGet{myreg}{\mynumber}
\edef\temp{Il numero adesso vale: \mynumber\\}
\toks255=\expandafter{\temp}
\fpRegSet{myreg}{50000}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\the\toks255 mentre adesso siamo a: \mynumber}
\temp`
Si può fare anche con i registri token, ma occorre inserire in macro quei testi fissi e usare un bel numero di \expandafter.Ps. perchè invece questo funziona?
`\newcommand\posizione{}\renewcommand\posizione{primo}
\toks255=\expandafter{\posizione}
\the\toks255\renewcommand\posizione{ultimo}
\toks255=\expandafter{\the\toks255 \posizione}
\the\toks255`Perché quando scrivi \the\toks255 la lista viene liberata; dopo \toks255=\expandafter{\posizione} contiene “primo”; alla seconda assegnazione contiene “primo\posizione” e quindi quando il registro viene usato con \the la macro \posizione viene espansa e ciò che ottieni in stampa è “primoultimo”.
Ciao
Enrico
::nel caso del notebook il cambio di tastiera si rivela più difficile 😕 ; speravo che ci fossero altre soluzioni come, per esempio, il ri-assegnare di combinazioni. anch’io sono nuova a MacOs (e a Latex), perciò sarei grata di una dritta
http://www.macupdate.com/info.php/id/14495/ukelele
Ciao
Enrico
::Ciao a tutti!
Sto scrivendo la mia tesi di laurea, e ho dei problemi con il link ai riferimenti bibliografici. In pratica, hyperref funziona bene con tabelle, figure, equazioni ecc, ma non crea il link alle voci della bibliografia, costruita con bibtex.Non vedo problemi; forse non hai compilato abbastanza volte. Un esempio costruito con il tuo preambolo fa esattamente ciò che ci si aspetta.
Unica modifica: non ho i pacchetti hep e hepparticles, quindi ho commentato le righe relativa, ma dubito che possano essere i responsabili.
Ciao
Enrico
::Grazie Enrico,
speravo in un tuo aiuto, ma purtroppo se scrivo
`\immediate\write`
anziché
`\expandafter\write`
ottengo un errore
`! Argument of \@refstar has an extra }.
\par
l.131 }`
anche con i file con ref e label scritti a mano e non “automatizzati”Non sapendo come è definito \sols è difficile dire; se si tratta proprio di una “output stream”, \expandafter non serve proprio a nulla. Propendo per una questione di comandi fragili non protetti, ma le informazioni sono insufficienti.
Ciao
Enrico
24 Maggio 2008 alle 12:30 in risposta a: Domande su: Appunti di programmazione in LaTeX e TeX #24390::Ciao ragazzi, un saluto particolare a Enrico a cui è ovviamente rivolto il topic.
Vorrei prima fare un’osservazione: a pag. 43 c’è questo pezzo:
Una specificazione come
`
\vspace{2pc plus 3pt minus 6pt}
`
significa che si desidera uno spazio di 24pt (due righe di stampa corpo 10) che però può essere aumentato fino a 21pt o ridotto fino a 18pt.Ma lo spazio non dovrebbe essere aumentato fino a 27pt?
Errore di stampa, grazie.
a pag. 55 parli del pacchetto ifthen ma sostieni (e mi trovi pienamente d’accordo) che l’annidamento delle condizioni diventa complesso data l’obbligatorietà del codice per l’else. Però tutti i condizionali in stile LaTeX sono della forma del pacchetto ifthen.
Infatti il nucleo di LaTeX usa spessissimo i condizionali primitivi e quelli definiti con \newif.
Io mi sono trovato nella condizione di dover verificare più di una volta se un argomento opzionale era vuoto o meno, quindi ho pensato di costruirmi un comando per non rifare sempre la stessa tiritera. Il comando va definito il stile LaTeX oppure una definizione come la seguente va bene?
`\newcommand{\if@empty}[1]{\def\next{#1}\ifx\next\@empty}`
Questa mi permette (a meno che non ci sia qualche errore che tu vedi e io no) di scrivere:
`\if@empty{#1} qualcosa \else qualcos'altro \fi`
con la clausola \else opzionale.Puoi farlo, ma \if@empty non può essere annidato dentro altri condizionali:
`\ifdim\mialunghezza<6pt
\if@empty{#1}aaa\else bbb\fi
\else
ccc
\fi`
darebbe un errore nel caso \mialunghezza non fosse minore di 6pt. La via di scampo è definire
`\newcommand\testfor@empty[1]{TT\fi\def\next{#1}\ifx\next\@empty}`
usando, al posto di \if@empty, la combinazione
`\if\testfor@empty{#1}\else \fi` A pag. 80 parli di \chardef e dici che il comando \@ne non è espandibile in quanto definito con
`\chardef\@ne=1`
La non espandibilità di \@ne è dettata dal fatto che è definita con \chardef? \`E una caratteristica di \chardef quindi? E poi non dovrebbe essere espandibile e la sua espansione dovrebbe essere proprio “1”? C’è qualcosa che non capito probabilmente…Ogni comando definito con \chardef, \mathchardef, \countdef, \dimendef, \skipdef, \toksdef, \muskipdef, \font (spero di non averne dimenticati) è non espandibile. I comandi definiti con \chardef o \mathchardef possono essere però “espansi” al loro valore numerico con \number, perché le regole sintattiche di TeX permettono di usarli quando viene richiesto un numero.
I comandi definiti con \let ereditano invece l’espandibilità dal token dopo l’uguale:
`\let\NotAnA=A
\let\@xp=\expandafter`
Siccome A non è un token espandibile non lo sarà nemmeno \NotAnA; invece \expandafter è espandibile e quindi lo è anche \@xp.Ciao
Enrico
::Sto scrivendo un pacchetto che mi serva per creare esami, basandomi su alcuni pacchetti esistenti.
Ho vari file (file1, file2, …., file10) ognuno dei quali contiene più istruzioni della forma
`%%% file 1 %%%
\newproblem{
\item \label{qxxxx}
\begin{answer}
\ans0 sbagliata
\ans0 sbagliata
\ans1 \label{axxxx} corretta
\ans0 sbagliata
\end{answer}
\begin{solution} \ref{qxxxx} \ref{axxxx} \end{solution}
}
\newproblem{
….
}`
Il pacchetto si preoccupa poi di scegliere casualmente un problema in ogni file, scambiare le risposte, scambiare l’ordine degli esercizi e creare quindi diverse versioni del compito.È evidente che è necessario un “foglio risposte” e le \label e \ref servono proprio a questo: l’ambiente solution scrive su un file esterno i riferimenti corretti a esercizi e risposte.
Finché scrivo le label e le ref “a mano” non c’è nessun problema, ma io vorrei automatizzare anche questo aspetto utilizzando opportunamente contatori o variabili visto che l’ambiente newproblem “conosce” il nome del file, il numero del problema, il numero della versione: l’idea è quella, ad esempio, di definire
`\newcommand{\pitem}{\item\space\expandafter\label{qf\nome q\thequest e\thevers}} `(dove nome=nome dle file, quest= numero problema, ecc.) e usare \pitem anziché \item.Facendo così le label vengono definite correttamente, ma non così le rispettive \ref.
Per scrivere sul file esterno i riferimenti uso questa sintassi
`\newcommand\scrivisol[1]{\expandafter\write\sols{#1}}
\newenvironment{scrivisolenv}{\collect@body \scrivisol}{\scrivisol{\string\par}}
\renewenvironment{solution@sq}{\scrivisolenv }{\endscrivisolenv}`
(dove l’ambiente solution@sq è quello introdotto da \begin{solution})Penso che i riferimenti non siano corretti per un qualche problema di espansione che non sono riuscito a risolvere.
Qualcuno ha qualche suggerimento da darmi?Vedo qualcosa di sicuramente sbagliato:
`\immediate\write`
non \expandafter\writeCiao
Enrico
::In attesa del megaprof. :D, ho questa soluzione:
`\newcommand\opm{\mathrel{\vcenter{\offinterlineskip
\ialign{\hfil$##$\hfil\cr\oplus\cr\noalign{\vspace{.5pt}}\ominus\cr}}}}`Aggiungerei \scriptstyle prima di ## e sostituirei \mathrel con \mathbin
`\newcommand\opm{\mathbin{\vcenter{\offinterlineskip
\ialign{\hfil$\scriptstyle##$\hfil\cr\oplus\cr
\noalign{\vspace{.5pt}}\ominus\cr}}}}`
Ciao
Enrico
::Ecco qui come si può fare:
`\toks255=\expandafter{\the\toks255\expandafter\space\number\value{index}\\}`Se provo ad eliminare \expandafter\space succede che viene ottenuto il numero corrispondente a \number\value{index} e attaccato al numero di registro, quindi un pasticcio.
Dunque è utile inserire uno \space precedentemente a quello che sarà il valore del contatore.
Tuttavia il seguente codice funziona:
` \newcounter{idx}\setcounter{idx}{1234}
\toks255=\expandafter{\the\toks255\space\number\value{idx}}
\the\toks255`
ovvero, la domanda: perchè è necessario inserire un secondo \expandafter interno?Certo, se non vuoi incrementare il valore del contatore idx. Infatti il registro \toks255 conterrà esattamente
`\number\value{idx}`
Aggiungendo \expandafter invece avresti
`1234`
C’è una bella differenza, non trovi?Ciao
Enrico
-
AutoreRisposte