Risposte nei forum create
-
AutoreRisposte
-
::
1. La codifica con cui è salvato il file deve coincidere con quella che specifichi a inputenc.
2. La scelta migliore è usare la codifica uft8.
3. Non puoi cambiare in utf8 la codifica a inputenc senza che anche il file sia in utf8.
4. Devi prima convertire il file in utf8 e poi dire a inputenc che il file si trova in utf8.
5. Per convertire il file in utf8 puoi usare Notepad++, dato che sei sotto Windows: dal menu Formato->Converti in UTF8 senza BOM.Edit: 6. Dopo aver convertito il tuo file in utf8 (per esempio con Notepad++), devi impostare anche il tuo editor (TeXstudio) affinché tutte le volte successive lo salvi ancora in utf8.
Per prima cosa fatti una copia di backup del file, perché non è detto che vada tutto a buon fine! 😉
Ciao,
Antonio
::
[tt]\spacedlowsmallcaps[/tt] è un comando definito da classicthesis e ridefinito da arsclassica, non esiste in book. Probabilmente hai mischiato i due modelli TesiClassica (che usa classicthesis) e TesiModerna (basata su book).Se usi TesiModerna, allora dovrebbe funzionare sostituendo
`\pagenumbering{roman}
\cleardoublepage
\pdfbookmark{\contentsname}{tableofcontents}
\setcounter{tocdepth}{2}
\tableofcontents
\markboth{\spacedlowsmallcaps{\contentsname}}{\spacedlowsmallcaps{\contentsname}} `
con
`\frontmatter
\cleardoublepage
\phantomsection
\pdfbookmark{\contentsname}{tableofcontents}
\setcounter{tocdepth}{2} % lo metterei nel preambolo
\markboth{\MakeTextUppercase{\contentsname}}{\MakeTextUppercase{\contentsname}}
\tableofcontents`Ti faccio notare che è meglio usare [tt]\frontmatter[/tt] piuttosto che [tt]\pagenumbering{roman}[/tt] (così come [tt]\mainmatter[/tt] invece di [tt]\pagenumbering{arabic}[/tt]).
Ciao,
Antonio
::
Sono perfettamente d’accordo.Ho creato un pacchettino ucmonthname che mi tengo nella cartella corrente (sembra funzionare sia con babel che con polyglossia). Purtroppo l’idea di inserirlo in anthosthesis per ora decade: non mi piace mettere patch.
`%% ucmonthname.sty
\ProvidesPackage{ucmonthname}
\RequirePackage{datetime}
\RequirePackage{etoolbox}\DeclareRobustCommand*\patchmonthname[1]{%
\if@dt@multilingual
\ifcsname monthname\languagename\endcsname
\ifcsname p@monthname\languagename\endcsname\else
\begingroup
\letcs{\x}{\string\monthname\languagename}%
\@patchmonthname
\global\cslet{p@monthname\languagename}{\x}%
\endgroup
\fi
\fi
\fi}\begingroup
\@makeother\#
\gdef\@patchmonthname{%
\patchcmd\x{\the\@orgargctr}{#1}\relax\relax
\patchcmd\x{\the\@orgargctr}{#1}\relax\relax
\patchcmd\x{\@orgargctr=#1\relax}{}\relax\relax
\patchcmd\x{\@orgargctr}{#1\relax}\relax\relax}
\endgroup\DeclareRobustCommand*\Monthname[1]{%
\begingroup
\edef\x{\endgroup\noexpand\MakeTextUppercase
\csname p@monthname\languagename\endcsname[#1]}%
\x}\apptocmd\select@language{\patchmonthname{#1}}{}{%
\errmessage{Cannot patch \string\select@language}}`Approfondirò la questione di [tt]\patchcmd[/tt] e #.
Grazie mille Enrico!
::
Fantastico Enrico! 🙂Volendo anche gli apici posso modificare così?
`\makeatletter
\mathcode`_=\string”8000
\catcode`_=\active
\def_{\@ifnextchar[\ItOrUp@sb@mathrm\sb}
\def\ItOrUp@sb@mathrm[#1]{\sb\mathrm{#1}}
\@makeother\_\mathcode`^=\string”8000
\catcode`^=\active
\def^{\@ifnextchar[\ItOrUp@sp@mathrm\sp}
\def\ItOrUp@sp@mathrm[#1]{\sp\mathrm{#1}}
\@makeother\^
\makeatother`Sono andato a braccio, ma sembra funzionare.
Grazie!
::
Alla fine l’errore era dovuto a un’incompatibilità già nota tra lipsum e babel quando si specifica spanish come ultima opzione. (Scrivo qui come promemoria per me stesso che spanish ridefinisce [tt]\@roman[/tt] per forzare i numeri romani in maiuscolo: si può ovviare con [tt]\def\@roman{\romannumeral}[/tt].)`\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[spanish,french,english,german,italian]{babel}
\usepackage{lipsum,textcase}\title{Nomi dei mesi in maiuscolo}
\author{}\usepackage{datetime}
\usepackage{etoolbox}\makeatletter
\DeclareRobustCommand*\patchmonthname[1]{%
\if@dt@multilingual
\begingroup
\expandafter\ifx\csname monthname\languagename\endcsname\relax
\typeout{No original \string\monthname\languagename}%
\endgroup
\else
\expandafter\ifx\csname p@monthname\languagename\endcsname\relax
\endgroup
\typeout{Patching \string\monthname\languagename}%
\@patchmonthname
\typeout{Patched \string\monthname\languagename}%
\else
\typeout{Already patched \string\monthname\languagename}%
\endgroup
\fi
\fi
\fi}\def\@patchmonthname{%
% Uso \x per fare prima a scrivere
\expandafter\let\expandafter\x\csname\string\monthname\languagename\endcsname
\@@patchmonthname
\expandafter\let\csname p@monthname\languagename\endcsname\x}\begingroup
\@makeother\#
\gdef\@@patchmonthname{%
% Senza bisogno di generare errore se il patching fallisce:
% se il problema esiste si ripresenterà durante l'espansione
\patchcmd\x{\the\@orgargctr}{#1}\relax\relax
\patchcmd\x{\the\@orgargctr}{#1}\relax\relax
\patchcmd\x{\@orgargctr=#1\relax}{}\relax\relax
\patchcmd\x{\@orgargctr}{#1\relax}\relax\relax}
\endgroup\DeclareRobustCommand*\Monthname[1]{%
\edef\x{%
% Non dovrebbero esserci problemi
\csname p@monthname\languagename\endcsname[#1]}%
\expandafter\MakeTextUppercase\x}\patchmonthname{english}
\apptocmd\select@language{\patchmonthname{#1}}{}{%
\errmessage{Cannot patch \string\select@language}}
\makeatother\setlipsumdefault{66}
\begin{document}
\maketitle
\section{È possibile?}
\Monthname{1} 2012. \lipsum
\begin{otherlanguage}{french}
\Monthname{2} 2012. \lipsum
\end{otherlanguage}
\begin{otherlanguage}{italian}
\Monthname{3} 2012. \lipsum
\end{otherlanguage}
\begin{otherlanguage}{spanish}
\Monthname{4} 2012. \lipsum
\end{otherlanguage}
\begin{otherlanguage}{german}
\Monthname{5} 2012. \lipsum
\end{otherlanguage}
\begin{otherlanguage}{english}
\Monthname{6} 2012. \lipsum
\end{otherlanguage}
\begin{otherlanguage}{spanish}
\Monthname{7} 2012. \lipsum
\end{otherlanguage}
\end{document}`Chiedo:
- C’è qualche grave falla in questo codice?
- Non sono riuscito a incorporare [tt]\@@patchmonthname[/tt] dentro [tt]\@patchmonthname[/tt]: ho dovuto definirlo a parte dopo aver posto [tt]\@makeother\#[/tt]. Perché? Se provo a incorporarlo, scrivendo “#1” nel secondo o terzo argomento di [tt]\patchcmd[/tt], il compilatore giustamente si lamenta che [tt]\@patchmonthname[/tt] non ha argomenti (cioè non può risolvere quel “#1”); se invece scrivo “##1”, rimangono entrambi i ##, anziché venire dimezzati. Mi sfugge qualcosa? Per essere più precisi, non funziona questo:
`\def\@patchmonthname{%
% Uso \x per fare prima a scrivere
\expandafter\let\expandafter\x\csname\string\monthname\languagename\endcsname
\patchcmd\x{\the\@orgargctr}{##1}\relax\relax
\patchcmd\x{\the\@orgargctr}{##1}\relax\relax
\patchcmd\x{\@orgargctr=##1\relax}{}\relax\relax
\patchcmd\x{\@orgargctr}{##1\relax}\relax\relax}
\expandafter\let\csname p@monthname\languagename\endcsname\x}`
A [tt]\patchcmd[/tt] viene passato “##1”, invece di “#1”. Perché?
Grazie,
Antonio
::francesco.biccari” post=69519[…] Mi rispose Enrico ma ora non riesco a trovare la conversazione […]
Credo fosse questa.
PS: forse qualcuno storcerà il naso, ma qualche volta ho pensato di usare una notazione di questo tipo:
`x^{i} % apice corsivo
x^ % apice dritto
x_{i} % pedice corsivo
x_ % pedice dritto`Intuitivamente, le parentesi quadre sono “più dritte” di quelle graffe. Perdonate l’analogia… 🙂
In ogni caso non credo che possano sorgere problemi di ambiguità. Per come stanno le cose di norma, [tt]x_[/tt] metterebbe a pedice solo la parentesi: del tutto senza senso (direi). Inoltre, con la ridefinizione che ho proposto, anche [tt]x_{}[/tt] continuerebbe a fare il suo lavoro.
Ciao,
Antonio
::
Ho studiato meglio la faccenda.Lasciando perdere gli argomenti opzionali, sono riuscito a trovare una possibile soluzione. L’ora comincia a farsi tarda, quindi potrei aver preso un abbaglio. In sostanza, oltre a usare [tt]\string\monthname…[/tt], faccio un po’ di patching. I comandi [tt]\monthname…[/tt] hanno la stessa struttura per tutte le lingue, quindi le patch dovrebbero applicarsi a tutte con una certa tranquillità.
`\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french,italian,spanish,english]{babel}
\usepackage{lipsum,textcase}\title{Nomi dei mesi in maiuscolo}
\author{}\usepackage{datetime}
\usepackage{etoolbox}\makeatletter
\newcommand*\patchmonthname[1]{%
\if@dt@multilingual
\begingroup
\expandafter\ifx\csname monthname\languagename\endcsname\relax
\typeout{No original \string\monthname\languagename}%
\endgroup
\else
\expandafter\ifx\csname p@monthname\languagename\endcsname\relax
\endgroup
\typeout{Patching \string\monthname\languagename}%
\@patchmonthname
\typeout{Patched \string\monthname\languagename}%
\else
\typeout{Already patched \string\monthname\languagename}%
\endgroup
\fi
\fi
\fi}\def\@patchmonthname{%
% Uso \x per fare prima a scrivere
\expandafter\let\expandafter\x\csname\string\monthname\languagename\endcsname
\@@patchmonthname
\expandafter\let\csname p@monthname\languagename\endcsname\x}\begingroup
\@makeother\#%
\gdef\@@patchmonthname{%
% Senza bisogno di generare errore se il patching fallisce:
% se il problema esiste si ripresenterà durante l'espansione
\patchcmd\x{\the\@orgargctr}{#1}\relax\relax
\patchcmd\x{\the\@orgargctr}{#1}\relax\relax
\patchcmd\x{\@orgargctr=#1\relax}{}\relax\relax
\patchcmd\x{\@orgargctr}{#1\relax}\relax\relax}
\endgroup\newcommand*\Monthname[1]{%
\edef\xx{\noexpand\MakeTextUppercase
% Dovrei generare un errore se non è definito?
\csname p@monthname\languagename\endcsname[#1]}\xx
}\patchmonthname{english}
\let\p@monthnameenglish\x\apptocmd\select@language{\patchmonthname{#1}}{}{\errmessage{failure}}
\makeatother\begin{document}
\maketitle
\section{È possibile?}
\Monthname{\month} 2012. \lipsum[2]
\begin{otherlanguage}{french}
\Monthname{\month} 2012. \lipsum[2]
\end{otherlanguage}
\begin{otherlanguage}{italian}
\Monthname{\month} 2012. \lipsum[2]
\end{otherlanguage}
\begin{otherlanguage}{spanish}
\Monthname{\month} 2012. \lipsum[2]
\end{otherlanguage}
\begin{otherlanguage}{french}
\Monthname{\month} 2012. \lipsum[2]
\end{otherlanguage}
\begin{otherlanguage}{italian}
\Monthname{\month} 2012. \lipsum[2]
\end{otherlanguage}
\begin{otherlanguage}{spanish}
\Monthname{\month} 2012. \lipsum[2]
\end{otherlanguage}
\end{document}`Ripeto, può essere che il codice sia un po’ una schifezza, devo ragionarci meglio. Inoltre ha qualche problema, per esempio se l’inglese non è la lingua predefinita (cioè l’ultima caricata in babel). Comunque può essere una base.
Domani si vedrà! 🙂
Antonio
PS: mi sembrava che qualcuno si stesse divertendo coi link del forum… finalmente sono in blu! 😎 😉
::
Per sbaglio (cercando altro) ho trovato questa discussione su TeX-StackExchange.antonio.macrì” post=68716[…] È per questo che dico che si può fare pur usando parentesi tonde o quadre anziché graffe. Le parentesi graffe vengono sempre “consumate” da TeX, mentre quelle tonde o quadre possiamo gestircele come meglio crediamo…
Sbagliavo: si può fare anche con le parentesi graffe. Il trucco è usare [tt]\bgroup[/tt] per indicare [tt]{[/tt].
`\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}
\usepackage{xspace}\makeatletter
\def\regione#1#2{%
\@ifnextchar\bgroup{#1\regione@@{#2}}{\regione@{#1}{#2}}}
\def\regione@#1#2{%
#1 è #2\xspace}
\def\regione@@#1#2{%
\@ifnextchar\bgroup{, #1\regione@@{#2}}{ e #1 sono #2\xspace}}
\makeatother\begin{document}
\begin{itemize}
\item \regione{silvia}{sarda};
\item \regione{francesco}{marco}{abbruzzesi};
\item \regione{maurizio}{aldo}{giuseppe}{pugliesi};
\item \regione{antonio}{giovanni}{luca}{carlo}{siciliani}.
\end{itemize}\regione{silvia}{sarda} mentre
\regione{francesco}{marco}{abbruzzesi};
\regione{maurizio}{aldo}{giuseppe}{pugliesi};
\regione{antonio}{giovanni}{luca}{carlo}{siciliani}.\end{document}`
Rimane il fatto, come precisava Roberto, che non si tratta di “vero” overloading.
In ogni caso, la notazione di Enrico è certamente più compatta e semplice.
::
Una questione storica. Il problema della non espandibilità di [tt]\monthname[/tt] deriva dall’uso di [tt]\futurelet[/tt] (che non può essere espanso, ma va eseguito) per trovare gli argomenti opzionali. È sempre stato così, oppure in versioni precedenti di LaTeX per cercare gli argomenti opzionali [tt]\newcommand[/tt] usava qualche altro meccanismo senza problemi di espansione?Grazie,
Antonio
::egreg9″ post=69456
Mi resta una (forte) domanda: perché non posso avere ~ a delimitare #1 e #2 nella definizione di [tt]\extractMonthYear[/tt]?
Puoi farlo sostituendo [tt]\let~\relax[/tt] a [tt]\let~\space[/tt] e definendo
`\def\extractMonthYear#1~#2#3\relax{…% il resto esattamente come prima`
Non trovi che sia carina? Domanda: perché quel [tt]\let~\relax[/tt] non rovina tutta la faccenda?Ciao
EnricoInteressante: dato che [tt]\relax[/tt] non è espandibile, può essere usato con un [tt]\let[/tt] per rendere non espandibile un altro token!
Se dico giusto, la faccenda continua a funzionare perché in quel modo rendo ~ non espandibile. Dunque, sopravvive all’espansione di [tt]\today[/tt] e il [tt]\def[/tt] se lo ritrova tal quale come delimitatore tra gli argomenti (nemmeno [tt]\def[/tt] espande i token che incontra come delimitatori). Sarebbe del tutto equivalente ad avere
`\providecommand*% o simile
\today{23\noexpand~febbraio 2012}
…
\def\extractMonthYear#1~#2#3\relax{…% il resto esattamente come prima`La mia domanda nascondeva anche un altro problema: perché non posso avere ~ a delimitare #1 e #2 nella definizione di [tt]\extractMonthYear[/tt] dopo aver cambiato a 11 il codice di categoria di ~?
La risposta naturalmente è che, oltre a dover mettere `\catcode`\~=11` al di fuori anche di [tt]\AtBeginDocument[/tt], [tt]\today[/tt] è già stato digerito da un bel pezzo, con ~ come carattere attivo, ed è impossibile cambiarglielo ora.
Anche se si applica solo (principalmente) all’italiano, bellina questa discussione. 🙂
::Doc” post=69441
Il link c’è ed è formato dalla parola “qui” in verde scuro che non emerge drispotto al colore del testo, ma se ci porti sipra la manina del browser vedi che “qui” è cliccabile 🙂
AZZ! Per mesi ho percorso TUTTO il post di Ivan alla ricerca del fatidico link!!!!!! Certo che questo tema…. Bah! 🙄
[OT]
Esiste una soluzione “lato client”:- Se sei in Chrome o Firefox, tasto destro sulla barra dei preferiti/segnalibri e clicca su “Aggiungi pagina…” (Chrome) o “Nuovo segnalibro” (Firefox).
- Come nome mettici “Evidenzia link”.
- Come indirizzo inserisci questo codice:
`javascript:(function(){var i,x;for(i=0;x=document.links;++i){x.style.color=[“orange”];x.style.fontWeight='bold';}})()`
Apri la pagina con il post di Ivan e poi “apri” il segnalibro “Evidenzia link” appena creato (in quella stessa pagina, non in una nuova!).
Finalmente potrai vedere anche il link nascosto in questo messaggio… Ti piace l’arancione? 😀
[/OT]Ciao,
Antonio
::
Grazie mille, Claudio e Enrico!Tentiamo lo sforzo ermeneutico sul codice di Enrico: 🙂
`\AtBeginDocument{%
\begingroup
% giorno / spazio / prima lettera del mese / tutto fino a \relax
\def\extractMonthYear#1 #2#3\relax{%`
Con la [tt]\def[/tt]inizione dentro [tt]\uppercase[/tt], [tt]\x[/tt] contiene solo la prima lettera del mese in maiuscolo
` \uppercase{\def\x{#2}}%`
L'[tt]\edef[/tt] esterno prepara la definizione di [tt]\MonthYear[/tt] come “Febbraio 2012”: con [tt]\x#3[/tt] unisce la prima lettera del mese in maiuscolo e il resto fino a [tt]\relax[/tt]. L'[tt]\endgroup[/tt] farà sparire [tt]\extractYearMonth[/tt] ([tt]\endgroup[/tt] ed [tt]\edef[/tt] non sono espandibili).
` \edef\x{\endgroup\edef\noexpand\MonthYear{\x#3}}%
\x`
A questo punto finalmente [tt]\MonthYear[/tt] vale “Febbraio 2012”.
` }
\begingroup`
Siccome [tt]\today[/tt] separa giorno e mese con ~, lo rendiamo equivalente a uno spazio:
` \let~\space`
L'[tt]\edef[/tt] seguente espande [tt]\today[/tt] e prepara la “chiamata” a [tt]\extractMonthYear[/tt]…
` \edef\x{\endgroup\noexpand\extractMonthYear\today\relax}%
\x % …che avviene qui!
}`Mi resta una (forte) domanda: perché non posso avere ~ a delimitare #1 e #2 nella definizione di [tt]\extractMonthYear[/tt]?
Edit:
Mi hai già risposto nel messaggio precedente (che ho visto solo ora :)):egreg9″ post=69444…C’è il problema che fra giorno e mese viene messo ~ la cui espansione è una schifezza; perciò lo neutralizziamo dicendo [tt]\let~\space[/tt] prima di eseguire l’espansione completa.
Grazie!
Ciao,
Antonio
-
AutoreRisposte