- Questo topic ha 12 risposte, 5 partecipanti ed è stato aggiornato l'ultima volta 9 anni, 3 mesi fa da
gamboz.
-
CreatoreTopic
-
4 Giugno 2017 alle 4:31 #110688::
Ciao a tutti,sono nuovo del gruppo e spero di non fare una domanda fuori posto, nel caso mi scuso in partenza.
Come tutti gli utilizzatori latex ho un mio file di definizioni personali.
Ora avrei bisogno di trovare un modo per espandere le definizioni all’interno del file sorgente.Ad esempio, se questa è la definizione:
`\def\tendto#1{\overset{#1 }{\longrightarrow}}`
e il codice sorgente è:
`\[
\tendto{x\to 0}
\]`mi dovrebbe venire espanso come:
\[
\overset{ x\to 0}{\longrightarrow}
\]Qualcuno di voi conosce un metodo, o se il compilatore latex fornisce un codice intermedio con le definizioni sostituite?
Grazie in anticipo per l’aiuto, Andrea.
-
CreatoreTopic
-
AutoreRisposte
-
-
4 Giugno 2017 alle 5:54 #110689::
Benvenuto
una cosa così?
`
\documentclass[10pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\newcommand{\mio}[2]{\genfrac{}{}{0pt}{}{#1}{#2}}
\begin{document}
$\mio{x\to 0}{\longrightarrow}$
\end{document}
`
claudio
-
4 Giugno 2017 alle 6:01 #110690::
Non mi è chiaro quale sia il tuo problema. Ti ho editato un poco il tuo messaggio perché sia visibile il codice e non il suo risultato; ma quello che capisco è che hai definito una macro (con def invece che con \newcommand — quasi sempre pericoloso fare così, perché se non si sa esattamente quello che si sta definendo, si potrebbe inchiodare il sistema TeX); usi questa macro e ottieni esattamente quello che dovresti ottenere.
Le macro servono a quello; do produrre il risultato senza bisogno di scrivere tutta la sequenza di istruzioni native che l’interprete esegue per te, sostituendo in successione le definizioni delle ulteriori macro contenute nella tua definizione originale.Vedo che usi i doppi dollari per le equazioni in display; questo è un altro errore di chi prende codice altrui, magari datato. Per esempio, non è teoricamente sbagliato usare il doppio dollaro se si compila con plain tex; ma oggi, virtualmente, nessuna usa il linguaggio nativo di tex o di plain tex se non per scrivere macro da usare con il markup LaTeX. Io ti ho sostituito i doppi dollari con i comandi equivalenti di LaTeX formati da [tt] \[…\] [/tt]; il primo dei due segni è il comando di apertura di una espressione matematica in display e se viene emesso in mdo matematico viene segnalato un errore; il secondo è il comando di chiusura che può essere usato solo in matematica e se viene emesso in modo testo viene segnalato un errore. I doppi dollari non fanno nulla per verificare di essere usati nel modo di composizione giusta e il loro uso è fortissimamente scoraggiato.
Visto che sei nuovo nel foum, ti suggerisco di scaricare dalla sezione Documentazione di questo sito le varie guide più o meno approfondite, e la guida tematica Il LaTeX Reference Manual commentato perché tu, leggendole, possa conoscere esattamente come si usa il sistema TeX con LaTeX.
Tornando al tuo quesito; se proprio vuoi vedere sviluppate le tue macro in modo matematico, dovresti impostare i parametri \tracingcommands e \tracingmacros, come è descritto nel TeXbook, testo molto difficile per un principiante e di solito disponibile solo in versione cartacea. Viene usato dai programmatori più avanzati quando vogliono controllare le loro macro nei dettagli. Non te lo consiglio assolutamente. Invece il pacchetto trace, più facile da usare ma comunque non adatto a un principiante, permette di eseguire questa tracciatura, ma solo in modo testo.
-
4 Giugno 2017 alle 6:14 #110691::
Ciao e grazie mille per la risposta.in realtà mi serve qualcosa che rimpiazzi la mia definizione con la sua espressione originaria latex in modo che possa essere compilato anche da chi non usa le mie definizioni.
Ad esempio:
`
\[
\mio{x\to 0}{\longrightarrow}
\]`dovrebbe venire sostituito da
`
\[
\overset{x\to 0}{\longrightarrow}
\]
`
in un file intermedio.GRazie ancora Andrea
-
4 Giugno 2017 alle 6:23 #110692::
Ciao OldClaudio e grazie per la risposta.So che sembra assurda la mia richiesta, in effetti le macro servono proprio a non dover riscrivere tutto il codice. Il problema è che il mio testo latex ora deve essere editato attraverso un programma di grafica che usa un sistema WYSIWYG per il testo e le figure ma utilizza un plugin per introdurre le formule in latex.
Ora questo plugin non legge le mie definizioni ma solo i comandi latex nativi. Quindi, dato che le formule sono parecchie, mi occorre trovare un modo per effettuare la sostituzione in automatico. Avevo addirittura pensato di farmi uno script python ma speravo di poter trovare qualcosa già pronto.
Ti ringrazio tantissimo anche per i suggerimenti che mi hai dato, in effetti sono piuttosto vecchio di latex e non sono aggiornatissimo sui nuovi pacchetti che lentamente sto imparando a utilizzare. Ogni suggerimento mi aiuta a migliorare.
Ora proverò a leggere le guide che mi hai suggerito e a utilizzare il pacchetto trace, poi ti faccio sapere.Grazie ancora, Andrea.
-
4 Giugno 2017 alle 7:23 #110693::
Ho capito il problema.
In questo caso trace non ti serve a niente.
che io sapia non esiste nessun comando che ti sostirisca in automatico la tua macro con il suo sviluppo. Purtroppo bisogna fare le sostituzioni a mano, Oppure…Esiste, almeno per le piattaforme Mac, un programmino che si chiama LaTeXit; l’ho descritto molto in breve nella Introduzione all’arte della composizione tipografica con LaTeX. Non so se sia disponibile anche per altre piattaforme, perché, appunto, io uso un Mac. Ha le caratteristiche di un Equation Editor, ma la sua specificità è che salva nel file dove immetti la tua formula anche il codice con cui è scritta, oltre all’immagine della formula composta, cosicché per un eventuale diting, non è necessario ricominciare da zero come in altri Equation Editor. Inoltre contiene due finestre, una con la quale puoi immettere quello che ti serve con dei click di mouse, come in qualunque altro Equation Editor, e l’altro dove puoi scrivere il codice LaTeX come lo vuoi tu.
Se non questo, visto che mi pare che lavori con ubuntu (che è una delle tante incarnazioni di Linux conformi alle direttive del consorzio Debian) sia Debian Linux vero e proprio. Puoi provare con altri Equation Editor che operino sui tuoi sistemi operativi.Tutti gli Equation Editor, che io sappia, non riconoscono macro personali.
Inoltre, almeno per l’esempio che hai indicato, Kile (che non mi pare che sia più i’editor migliore per lavorare con Linux — ampiamente sorpassato dall’editor multipiattaforma TeXstudio, secondo il mio parere personale, ovviamente, quaindi senza alcune valore assoluto) forse è in grado di usare le regular expressions. Sapendole usare, e potendole usare, la sostituizione che vorresti ottenere si più fare attraverso l’editor stesso; non ti dico che sia facile, ma se usi Linux e LaTeX da tempo, non dovrebbe esserti troppo difficile farlo.
-
4 Giugno 2017 alle 7:57 #110694
-
5 Giugno 2017 alle 17:27 #110695::
Ciao,desideravo ringraziarvi per tutti i consigli. Il problema ancora non l’ho risolto, probabilmente opterò per farmi a mano uno script con python che faccia le sostituzioni, però mi avete insegnato un sacco di cose.
TexStudio è davvero molto valido. Devo ancora prenderci la mano ma lo trovo molto più semplice e stabile di kile.Grazie ancora Andrea
-
7 Giugno 2017 alle 4:52 #110696
-
7 Giugno 2017 alle 15:46 #110697::
Ciao Gambozgrazie mille per lo script, penso sia l’unica strada per fare quello che mi occorre. Ho provato a utilizzarlo seguendo le tue istruzioni ma non sono riuscito a farlo andare. Il file si carica ma poi non fa nulla. Purtroppo non conosco lisp per cui non so dove mettere le mani. Cosa sbaglio secondo te?
Ciao e ancora grazie Andrea.
-
8 Giugno 2017 alle 10:15 #110698::
lo esegui su un file tex con la macro definita con \newcommand?
attenzione che non capisce \def ecc. e non capisce \newcommand con argomenti oppure senza una coppia di graffe intorno al nome della macro
forse la versione di emacs?elaboro sulla procedura:
dovresti aprire un tex in emacs (ad es. come questo):
`
\documentclass{article}
\newcommand{\x}{XXX}
\newcommand{\y}{YYY}
\begin{document}
a \x\ b\y c
\end{document}
`
poi digitare M-x load-file
replace-macros.txt
(dovrebbe dirti “Loading replace-macros.txt…done” nel minibuffer)
e ottieni
`
\documentclass{article}
\newcommand{\x}{XXX}
\newcommand{\y}{YYY}
\begin{document}
a XXX\ bYYYc
\end{document}
`
-
9 Giugno 2017 alle 6:29 #110699::
Ciao Gamboz,volevo dirti un super grazie per la macro. Ho seguito le tue istruzioni e funziona alla perfezione. Ora dovrei provare a generalizzarla per includere le definizioni contenenti parametri….dici che è un lavoro molto difficile?
Con python non dovrebbe essere un compito terribile. Hai qualche consiglio?Ancora grazie davvero, non ho parole,
Andrea
-
9 Giugno 2017 alle 7:04 #110700::
se concosci python vai con pythonforse e’ consigliabile partire in piccolo (macro semplici)
per poi crescere (argomenti, argomenti opzionali, commenti nella definizione, ecc)attenzione anche alle “sottostringhe”: \x vs \xx
(nelle espressioni regolari \b, \< e \> sono tuoi amici)la cosa piu’ delicata mi sembra il parsing delle macro
“\def” potrebbe essere un incubo
ma anche cose come la seguente potrebbero essere “divertenti” (scrivo un po’ a caso):
`\newcommand\x[1][2]{$\{ #1 %}
x#2\}$}
`
se poi condividi quello che hai fatto te ne sarei grato 🙂
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.