Risposte nei forum create
-
AutoreRisposte
-
::
Come si fa ad aumentare il massimo numero di parametri per \newcommand? Ho la beffa di avere un comando che necessita di 12 variabili…
Comandi del genere sono ingestibili, si possono capire solo in testi che siano generati automaticamente. È il tuo caso?
Non si può aumentare il massimo numero di parametri: nove sono per decreto knuthiano al quale l’obbedienza dev’essere cieca e assoluta. Trucchi di vario tipo ci sono, ma la prima domanda a cui rispondere è: davvero ti serve un comando con 12 argomenti? Che ci devi fare? La soluzione dipende da questo.
Ciao
Enrico
11 Febbraio 2010 alle 9:26 in risposta a: Inserimento dinamico del percorso del file *.tex nel header #41851::Non si potrebbe usare kpathsea?
Sì e no: mettendo
`\immediate\write18{kpsewhich #1 > temp.ttt}`
la chiamata \filepath{pippo.tex} scriverebbe, nel file temp.ttt, “./pippo.tex”, se pippo.tex è un file nella directory di lavoro. Invece \filepath{article.cls} scriverebbe “/usr/local/texlive/2009/texmf-dist/tex/latex/base/article.cls”Si potrebbe migliorare la macro in modo che scriva anche la directory di lavoro e poi guardi il primo carattere della stringa ottenuta leggendo il file e legga anche la seconda riga se quel primo carattere è “.”
`\catcode`@=11\def\@car#1#2\@nil{#1}
\def\@gobble#1{}\newread\@filepathstream
\def\filepath#1{%
\immediate\write18{kpsewhich #1 > \jobname.ttt}%
\immediate\write18{pwd >> \jobname.ttt}%
\immediate\openin\@filepathstream=\jobname.ttt
\read\@filepathstream to\@tempa
\read\@filepathstream to\@tempb
\immediate\closein\@filepathstream
\@computefilepathname}
\def\@gobblefinalspace#1 \@nil{#1}
\edef\@PAR@{\string\par}
\def\@computefilepathname{%
\edef\@tempa{\detokenize\expandafter{\@tempa}}%
\edef\@tempa{\expandafter\@gobblefinalspace\@tempa\@nil}%
\edef\@tempb{\detokenize\expandafter{\@tempb}}%
\edef\@tempb{\expandafter\@gobblefinalspace\@tempb\@nil}%
\edef\@tempc{\expandafter\@car\@tempa\@nil}%
\if\@tempc.%
\edef\filepathname{\@tempb\expandafter\@gobble\@tempa}%
\else
\ifx\@tempb\@PAR@
\def\filepathname{FILE NOT FOUND}%
\else
\let\filepathname\@tempa
\fi
\fi}
\catcode`@=12\filepath{moddate.tex}
[\filepathname]\filepath{article.cls}
[\filepathname]\filepath{xun.nin}
[\filepathname]\bye
`
In una versione LaTeX si usi \makeatletter e \makeatother, evitando la definizione di \@gobble e di \@car. Le ridefinizioni di \@tempa e di \@tempb servono per buttar via lo spazio che risulta dalla lettura del file: se la prima riga è “./pippo.tex”, per esempio, l’espansione di \filepathnametemp è “./pippo.tex ” (con lo spazio in fondo).Adopero \detokenize per neutralizzare eventuali caratteri “pericolosi”; tanto ci serve solo la stringa. L’ultimo condizionale funziona perché, se il file dato come argomento non esiste, ll file temporaneo avrà una sola riga e \@tempb, inizialmente, ha come espansione “\par”.
Ciao
Enrico
::Ho appena scaricato l’ultima versione di TeXShop.
Schiacciando alt+cmd+i esce una finestra dentro la quale si può scrivere il nome del pacchetto del quale si vuole leggere la documentazione. Non so ce questa funzione sia presente anche nelle precedenti versioni.
È un’alternativa molto utile a texdoc perché non serve aprire il terminale, e di solito si vuole leggere la documentazione di un pacchetto quando l’editor (TeXShop) è aperto.Con Aquamacs Emacs puoi fare così: batti la seguente successione di tasti
Escape X S H E L L
(gli spazi sono solo per dividere); in Emacs-speak, “Meta-x shell”; da’ invio. Si aprirà un nuovo buffer che è una shell, cioè il terminale. 🙂
Molto utile non solo per texdoc; infatti si apre posizionandosi nella directory di lavoro del buffer su cui stavi lavorando e puoi lanciare facilmente compilazioni interattive nel caso quella non interattiva che ottieni con il pulsantino dia errori non facili da individuare.
Ciao
Enrico
::Ho appena installato MacTeX 2009 e non trovo più traccia dell’applicazione getnonfreefonts, utile per istallare alcuni font come l’URW-garamond, usato dal pacchetto mathdesign. Qualcuno mi può aiutare?
Non è più incluso, infatti,
http://tug.org/~kotucha/getnonfreefonts/
Ciao
Enrico
10 Febbraio 2010 alle 22:12 in risposta a: problemi nel compilare file in seguito a nuova installazione #41380::ciao,
mi sa che il problema non era li’! C’era una graffa in piu’ ed ora altri errori. Pero’ mi ricordo che compilava; questo è il codice:
`
\documentclass[11pt,a4paper]{moderncv}
\usepackage[USenglish,italian]{babel}
\moderncvtheme[blue]{classic} % idem
\usepackage[latin1]{inputenc} % serve per non mettere gli accenti a mano….
\hypersetup{bookmarks=false, pdfpagemode=None, pdfstartview=FitH, pdffitwindow=true}
\let\WriteBookmarks\relax
\usepackage[scale=0.8]{geometry}
\recomputelengths% personal data
\firstname{**************}
\familyname{**********}
\title{Curriculum Vit\ae} \\ \small{\today}\begin{document}
\maketitle
\vspace{0.8cm}
……………………………………..
`
gli errori sono:
– there’s no line here to end (nella line \title )
– missing \begin{document}Qualcuno che gentilmente individua il problema? Rimane mistero come mai compilasse prima della reintallazione
\title{Curriculum Vit\ae} \\ {\small\today}}
Manca la graffa di chiusura dell’argomento di \title. Ricordati anche che \small non è un comando con argomenti, ma una dichiarazione.
Ciao
Enrico
10 Febbraio 2010 alle 15:43 in risposta a: Termini inglesi in documento italiano. Al plurale? #41698::Be’, se volessi includere anche questa cosa, sarebbe il massimo, ma non è indispensabile, perché \straniero{file} lo userei spesso, ma \straniero{File} non riesco a immaginarmi un caso in cui potrebbe essere utile. Forse solo all’inizio di una frase, per giustificare la maiuscola, ma in quel caso lo racchiuderei tra caporali, visto che sarebbe una citazione; altrimenti avrebbe un articolo davanti e quindi tornerebbe in minuscolo.
File e cartelle sono usatissimi, nei computer di oggi.
Ciao,
L.In tal caso si potrebbe modificare la definizione precedente di \@straniero:
`\newcommand{\@straniero}[1]{%
\uppercase\expandafter{\expandafter\def\expandafter\next\expandafter
{\detokenize{#1}}}%
\ifcsname f@reign\next\endcsname
\@stranierofmt{#1}%
\else
\global\expandafter\let\csname f@reign\next\endcsname\relax
\emph{\@stranierofmt{#1}}%
\fi}`
Ciao
Enrico
10 Febbraio 2010 alle 15:14 in risposta a: Termini inglesi in documento italiano. Al plurale? #41696::Che cosa vuoi ottenere, di preciso?
Vorrei realizzare una versione definitiva del comando, che «fonda» le caratteristiche delle implementazioni discusse in questo topic e nell’altro. In pratica:
[ul][li] il comando \straniero dovrebbe rendere il suo argomento in corsivo la prima volta che viene chiamato su quello specifico termine e in tondo le volte successive, come nell’implementazione più recente;
[li] la variante con l’asterisco dovrebbe fare la stessa cosa, ma impedendo la cesura del suddetto termine, come nell’implementazione vista nell’altro topic.[/ul]Ovviamente, però, \straniero{File} e \straniero{file} sono considerati diversi; per averli equivalenti il prezzo sale.
🙂 Be’, se volessi includere anche questa cosa, sarebbe il massimo, ma non è indispensabile, perché \straniero{file} lo userei spesso, ma \straniero{File} non riesco a immaginarmi un caso in cui potrebbe essere utile. Forse solo all’inizio di una frase, per giustificare la maiuscola, ma in quel caso lo racchiuderei tra caporali, visto che sarebbe una citazione; altrimenti avrebbe un articolo davanti e quindi tornerebbe in minuscolo.
`\makeatletter
\newcommand{\straniero}{%
\@ifstar{\let\@stranierofmt\mbox\@straniero}
{\let\@stranierofmt\@iden\@straniero}}
\newcommand{\@straniero}[1]{%
\ifcsname f@reign\detokenize{#1}\endcsname
\@stranierofmt{#1}%
\else
\global\expandafter\let\csname f@reign\detokenize{#1}\endcsname\relax
\emph{\@stranierofmt{#1}}%
\fi}`
Se chiami \straniero{pippo}, il comando \@stranierofmt è \@iden, quindi l’espansione di \@stranierofmt{pippo} è “pippo”. Se chiami \straniero*{pippo} hai \mbox{pippo}.Ciao
Enrico
::Grazie per la risposta, ad entrambi.
Un’ulteriore domanda. Nel codice
`
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[R]{\bfseries\nouppercase{\leftmark}}
\fancyfoot[C]{\thepage}
\makeatletter
\renewcommand{\chaptermark}[1]{%
\markboth{\if@mainmatter\thechapter.\ \fi #1}{}}
\makeatletter
\setlength{\headheight}{14pt}
`
non si dovrebbe sostituire il secondo \makeatletter con \makeatother, per invertire il catcode di ‘@’ da 11 a 12?Era per vedere se stavi attento. 🙂
Correggo.
Ciao
Enrico
10 Febbraio 2010 alle 13:13 in risposta a: Termini inglesi in documento italiano. Al plurale? #41694::In definitva, il gioco non vale la candela, secondo me.
A me non dispiace, ma soprattutto ho la sensazione che potrebbe servire per qualcos’altro, in futuro.
Ho cercato di integrare il codice con quello dell’altra discussione:
`\makeatletter
\newcommand{\straniero}[1]{%
\ifcsname f@reign\detokenize{#1}\endcsname
#1%
\else
\global\expandafter\let\csname f@reign\detokenize{#1}\endcsname\relax
\@ifstar{\@stranieros#1}{\@straniero{#1}}%
\fi}\def\@stranieros#1{\foreignlanguage{nohyphenation}{\textit{#1}}}
\def\@straniero{\textit}
\makeatother`
la versione con l’asterisco non funziona, mentre quella normale sembra andare. Purtroppo non so niente di TeX, dovrò decidermi ad approfondire il discorso…Che cosa vuoi ottenere, di preciso?
Ciao
Enrico
10 Febbraio 2010 alle 13:09 in risposta a: Inserimento dinamico del percorso del file *.tex nel header #41849::Buongiorno,
sto cercando di inserire in maniera dinamica e automatica il percorso del file *.tex nell’header del documento, senza doverlo ridigitare nel momento in cui il percorso cambia. Vorrei fosse il sistema durante la compilazione a mettere il percorso corrente.
Per il momento la porzione di codice inserita è la seguente:\pagestyle{fancy}
\lhead{\url{HOME}}dove al posto di HOME vorrei venisse messo un comando tipo \jobname che inserisca autonomamente il percorso del file e non solo il nome.
Qualcuno ha qualche idea?
GrazieGiorgio
`\documentclass[a4paper]{article}
\newread\filepathstream
\def\filepath#1{%
\immediate\write18{echo `pwd`/#1.tex > temp.ttt}%
\immediate\openin\filepathstream=temp.ttt%
\immediate\read\filepathstream to\filepathname
\immediate\closein\filepathstream}\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[R]{\ttfamily\filepathname}\begin{document}
\filepath{\jobname.tex}
abc\end{document}`
Va compilato con l’opzione -shell-escape attiva.Ciao
Enrico
::Buongiorno!
Ho un problema con l’header di una sezione, relativa agli acronimi, inserita nel backmatter. Compare il numero del capitolo precedente, nella testatina. Per quale motivo? Segue un testcase.
`% …`Prova con questo, al posto di quello che sta tra \usepackage{fancyhdr} e \setlength{\headheight{14pt}:
`\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[R]{\bfseries\nouppercase{\leftmark}}
\fancyfoot[C]{\thepage}
\makeatletter
\renewcommand{\chaptermark}[1]{%
\markboth{\if@mainmatter\thechapter.\ \fi #1}{}}
\makeatother
\setlength{\headheight}{14pt}`
Ciao
Enrico
::Grazie, funziona perfettamente.
Mi spieghi come funziona?Volentieri. Vista la domanda, ho cercato in giro e ho trovato una “soluzione” che consisteva nel fare “a occhio” quello che invece si può impostare con precisione; ed ecco la soluzione:
`\newcommand\flag{%
\settowidth{\dimen@}{\@nameuse{label\@enumctr}\hskip\labelsep}%
\makebox[0pt][r]{*\,\kern\dimen@}}`
Occorre sapere che, appena LaTeX incontra il comando \item in un ambiente enumerate, fa scattare il contatore e quindi l’espansione del comando \labelenumi (\labelenumii, \labelenumiii oppure \labelenumiv) è l’etichetta che viene posta davanti all’elemento della lista. Fra l’etichetta e il testo viene posto uno spazio di ampiezza \labelsep.Come fa LaTeX a conoscere quale fra i quattro “\labelenumX” deve usare? A ogni livello di annidamento ne viene usato uno; al momento di \begin{enumerate} viene definito \@enumctr con espansione “enumi”, “enumii”, “enumiii” oppure “enumiv”. Con \@nameuse{label\@enumctr} è come se usassi \labelenumi, se \@enumctr si espande a “enumi”, e lo stesso negli altri casi.
A questo punto si può capire che fa \flag. La prima cosa è impostare \dimen@ all’ampiezza di “\labelenumi” (ma può essere \labelenumii, eccetera, se siamo a un livello di annidamento superiore) seguita da uno spazio \labelsep. Poi il trucco finale: inseriamo una box larga zero con allineamento al bordo destro: quindi il contenuto della box sporgerà sulla sinistra rispetto al punto in cui la box viene composta; il contenuto è proprio il segnale (l’asterisco), seguito da un piccolo spazio di separazione e, infine, uno spazio dell’ampiezza calcolata prima che ci permette di “saltare” l’etichetta.
Ci sono limitazioni: funziona solo se l’etichetta è, come nel caso standard di LaTeX, anche usando il pacchetto “enumerate”. composta a filo della separazione \labelsep. Se dovessi usare enumitem, occorre fare attenzione a come viene posta l’etichetta nello spazio che viene riservato. Seconda limitazione: \flag fa entrare in modo orizzontale, quindi un eventuale \begin{enumerate} che seguisse \item\flag andrebbe alla riga successiva.
Ciao
Enrico
::Ho letto sulla “Breve guida” le note di Enrico sul pacchetto in oggetto e sui suoi fratelli enumitem e paralist che permette di fare diverse belle cose.
Non ho però trovato come si può fare ad evidenziare (per esempio con un simbolo qualsiasi o con un font diverso) le label solo di alcuni item.Un possibile ‘uso che mi viene in mente potrebbe essere quello di evidenziare, in una lista di esercizi, quelli più difficili..
Non c’entra enumerate; da’ un’occhiata a enumitem, in ogni caso. Il codice seguente dovrebbe funzionare con entrambi.
`\makeatletter
\newcommand\flag{%
\settowidth{\dimen@}{\@nameuse{label\@enumctr}\hskip\labelsep}%
\makebox[0pt][r]{*\,\kern\dimen@}}
\makeatother`
Per avere un \item con l’asterisco, scrivi \item\flag:
`\begin{enumerate}
\item $1+1$
\item\flag $1+2$
\end{enumerate}`
Ciao
Enrico
::Mi rivolgo principalmente agli utenti esperti e avanzati 🙂
Uso Windows XP, MiKTex, TeXnicCenter…
1) qual è secondo voi il migliore programma per compilare un file .tex con PDFLatex?
2) E per la fase di stampa?
Conviene tenere lo stesso o due differenti per ciascuna fase?Grazie per i vostri preziosi suggerimenti.
Se uno è esperto e avanzato, per prima cosa butta via Windoze. 😆
Scusa, ma non potevo esimermi. 😉
Ciao
Enrico
-
AutoreRisposte