Newsgroup: it.comp.software.tex
Titolo: Prima lettera di una frase maiuscola

Domanda cretina alla quale google non mi ha dato risposta: esiste un comando
per rendere maiuscola solo la prima lettera di una stringa?
Ho un lunghissssssimo documento in cui parte delle voci in indice è in
minuscolo e parte in maiuscolo, e si è deciso che tutte indistintamente
vadano in maiuscolo. Tutte le voci sono inserite mediante comandi "miei",
quindi esistesse una macro da inserire nel \newcommand risolverei di botto
la situazione...
Grazie per l'aiuto!
     Franco "Belinde"
-- 
Tanto più estendo l'isola della mia conoscenza,
quanto più scopro aumentare la linea costiera della mia ignoranza.

 la situazione...
Vedo alcuni problemi, soprattutto relativi all'ordinamento alfabetico
nell'indice. Se non hai caratteri strani come iniziale (cioè solo 
alfabetici a-z A-Z), puoi risolvere con un metodo ragionevolmente
semplice:
\makeatletter
\newcommand{\myindex}{\@ifstar{\my@indexs}{\my@index}}
\newcommand{\my@index}[1]{#1\index{#1@\MakeUppercase #1}}
\newcommand{\my@indexs}[1]{\MakeUppercase#1%
  \index{#1@\MakeUppercase #1}}
\makeatother
Quando vuoi scrivere un termine in maiuscolo nel sorgente scrivi
\myindex*{pippo}, altrimenti scrivi \myindex{pippo}.
Si può semplificare la faccenda se sei sicuro che non indicizzerai
mai un termine che nel documento compare sia con iniziale maiuscola
che con iniziale minuscola.
Ciao
Enrico

 che con iniziale minuscola.
Il problema è proprio questo, che una stessa voce compare sia
maiuscolo che minuscolo. Per intendersi, nell'header ho
\newcommand{\indice}[1]{\index[luoghi]{#1}}
(sto usando indici multipli, e questa è una scorciatoia). Nel testo
compaiono indifferentemente
\indice{Passo del Bracco}
e
\indice{passo del Bracco}
Se esistesse un comando che rende maiuscola la prima lettera di una
stringa a prescindere dal suo stato, diciamo un comando \MAIUSCOLO,
potrei semplicemente cambiare l'header con
\newcommand{\indice}[1]{\index[luoghi]{\MAIUSCOLO{#1}}}
e tutto sarebbe risolto...

 che con iniziale minuscola.
Il problema è proprio questo, che una stessa voce compare sia
maiuscolo che minuscolo. Per intendersi, nell'header ho
\newcommand{\indice}[1]{\index[luoghi]{#1}}
(sto usando indici multipli, e questa è una scorciatoia). Nel testo
compaiono indifferentemente
\indice{Passo del Bracco}
e
\indice{passo del Bracco}
Se esistesse un comando che rende maiuscola la prima lettera di una
stringa a prescindere dal suo stato, diciamo un comando \MAIUSCOLO,
potrei semplicemente cambiare l'header con
\newcommand{\indice}[1]{\index[luoghi]{\MAIUSCOLO{#1}}}
e tutto sarebbe risolto... \MakeUppercase non mi mette in maiuscolo
TUTTA la stringa?

 e tutto sarebbe risolto...
Ci sono problemi riguardanti l'espansione e la scrittura nei file
ausiliari. Non esiste un comando espandibile che faccia quello che
chiedi.
Usando un filtro come sed sarebbe facile cambiare tutte le occorrenze 
in maiuscolo, ma occorrerebbe impararne la sintassi e non è proprio
semplice. Il tuo problema, immagino, è che ti trovi indicizzato sia
"Passo del Bracco" che "passo del Bracco".
Spiacente: l'unica soluzione è, se hai già scritto il documento,
cambiare le occorrenze di \indice{passo del Bracco} in 
\indice{Passo del Bracco}.
Con un "trova & cambia" si può fare abbastanza in fretta:
Trova "\indice{a" & Cambia in "\indice{A"
da ripetere per tutte le lettere. Oppure imparare sed.
Ciao
Enrico

 da ripetere per tutte le lettere. Oppure imparare sed.
Visto e considerato che l'operazione la devo ripetere per 47 files in 8
cartelle... sig... "man sed", sto arrivando...

 la situazione...
Qualcosa come quanto suggerito qui? 
http://www.gatago.com/comp/text/tex/17256380.html
-- 
Giuseppe "Oblomov" Bilotta
"E la storia dell'umanità, babbo?"
"Ma niente: prima si fanno delle cazzate,
 poi si studia che cazzate si sono fatte"
(Altan)
("And what about the history of the human race, dad?"
 "Oh, nothing special: first they make some foolish things,
  then you study what foolish things have been made")

 
http://www.gatago.com/comp/text/tex/17256380.html
Il problema stava, in realtà, nella scrittura sul file .idx e, a quanto
so, non c'è soluzione.
Ciao
Enrico



Secondo me sì invece.
Tra l'altro \titlecase si può definire più semplicemente di come viene
definito nella pagina di cui sopra, supponendo ovviamente che venga
usato solo all'interno dell'indice e senza cose troppo complicate:
% Modo semplice di definire \titlecase:
% notare l'assenza di {} attorno al #1
% argomento di \MakeUppercase: questo garantisce
% che \MakeUppercase agisca solo sul primo token
% del parametro di titlecase; dovrebbe funzionare
% anche per parole che cominciano con \ae, ad esempio
\def\titlecase#1{\MakeUppercase#1}
% Per quanto riguarda l'indice, dovrebbe bastare
% sfruttare \expandafter; per non impazzire con
% gli expand after "attraverso" \index[luoghi]
% raggruppiamo questi token in un'unica macro
\def\indexluoghi{\index[luoghi]}
\newcommand{\indice}[1]{\expandafter\indexluoghi\expandafter{\titlecase{#1}}}
Questo dovrebbe funzionare.
-- 
Giuseppe "Oblomov" Bilotta
"I weep for our generation" -- Charlie Brown

 Questo dovrebbe funzionare.
Ho appena proposto il tuo nome per un processo di canonizzazione. :-)
Funziona PERFETTAMENTE... l'unico problema è che adesso makeindex non
riesce più a generare l'indice con le lettere grassettate come
titoletti di sezione, ma sinceramente non me ne frega nulla.
Solo una cosa che non capisco: qual è la differenza tra \def e
\newcommand?
Per il resto, grazie tantissimo! Terrò "man sed" per le lunghe notti
invernali di fronte al caminetto...

 invernali di fronte al caminetto...
per quelle e' molto meglio un romanzo fantasy (o meglio ancora una
donna :) ).
il manuale di sed va bene per quando si ha la di***ea e bisogna passare
ore al cesso. :)
Ciao Jack

 invernali di fronte al caminetto...
E' stato un pensiero rincuorante finchè è durato... :-(


 E' stato un pensiero rincuorante finchè è durato... :-(
Infatti. In realtà \MakeUppercase viene "espanso al primo livello"
e lo trovi seguito da due spazi. Ma non è possibile, come ti avevo
detto, scrivere una macro che a sua volta scriva su un file esterno
il corrispondente maiuscolo di un carattere. Ciò che viene scritto
su un file è una lista di token, che sono immutabili.
\MakeUppercase agisce solo a livello di uscita nel dvi, convertendo
le minuscole in maiuscole tramite \uppercase (e facendo altre cose che
non sono rilevanti per la discussione).
Ciao
Enrico

 il corrispondente maiuscolo di un carattere
Hm. Se Belinde usa e-TeX (e tutti i latex più recenti sono basati su
quello) si può evitare il passaggio attraverso il file esterno ...
-- 
Giuseppe "Oblomov" Bilotta
"I'm never quite so stupid
 as when I'm being smart" --Linus van Pelt

 quello) si può evitare il passaggio attraverso il file esterno ...
Anche senza etex, ma funziona solo se la prima lettera delle parole da
indicizzare è una vera lettera, e non quindi un codice strano.
% Sfruttanto un trucco svelato nell'esercizio 20.19 del TeXbook
\makeatletter
\def\primalettera#1#2\@fine{#1}
\def\altrelettere#1#2\@fine{#2}
\def\salvamaiuscolaespansa{%
  \def\sme@aux##1{\uppercase{\def\maiuscolaespansa{##1}}}%
  \expandafter\sme@aux\expandafter{\damaiuscolare}%
}
\def\indexluoghi{\index[luoghi]}
\def\indice#1{%
  \edef\damaiuscolare{\primalettera#1\@fine}%
  \edef\lasciatoinvariato{\altrelettere#1\@fine}%
  \salvamaiuscolaespansa
  \edef\daindicizzare{\maiuscolaespansa\lasciatoinvariato}
  \expandafter\indexluoghi\expandafter{\daindicizzare}%
}
\makeatother
Non so se esistono versioni più semplici di questo ambaradan
-- 
Giuseppe "Oblomov" Bilotta
"They that can give up essential liberty to obtain
a little temporary safety deserve neither liberty
nor safety." Benjamin Franklin

 Non so se esistono versioni più semplici di questo ambaradan
Molto carino, complimenti. Come faresti con e-TeX?
Ciao
Enrico

 Come faresti con e-TeX?
http://tex.loria.fr/moteurs/etex_ref.html#scantokens


 \makeatother
Ecco.Capisco tutto fino al primo @, da lì in poi diventa misterioso. Potrei
anche provare ad inserire ed utilizzare il codicione, ma vorrei evitare
qualsiasi forma di "voodoo programming"... Già che state pensando tanto al
mio problema, non è che mi spiegate anche come funziona questo coso?
Grazie sempre di più,
           Franco


 
http://tex.loria.fr/moteurs/etex_ref.html#scantokens
Non č cosě semplice. Un buon problema a cui pensare.
Ciao
Enrico

 Non è così semplice. Un buon problema a cui pensare.
Qualunque cosa possa essere fatta scrivendo un file esterno e
leggendolo funzionerebbe anche passando da scantokens.


> \makeatother
Questo lavora come descritto nella mia prima email, salvo assegnare ad
un po' di macro ausiliare i valori necessari al funzionamento del
tutto.
\edef funziona solo come \def, salvo espandere il contenuto della
definzione *prima* dell'assegnazione. In questo modo \damaiuscolare
prende il valore della prima lettera del parametro di \indice,
\lasciatoinvariato il resto. \salvamaiuscolaespansa mette in
\maiuscolaespansa il valore di \damaiuscolare (come descritto sopra),
ed in \daindicizzare concateniamo i contenuti di \maiuscolaespansa e
\lasciatoinvariato; il tutto viene poi passato come parametro a
\indexluoghi che fa \index[luoghi]{...}
Spero sia chiaro.


 Spero sia chiaro.
E' chiaro... è chiaro che prima io possa dire di conoscere LaTeX ne ha
ancora da passare, di acqua sotto i ponti...
A questo punto, però, mi ricollego ad un messaggio che avevo scritto un po'
di tempo fa (451f81de$0$4574$
4faf...@reader2.news.tin.it
 dovrebbe essere
l'ID-message) in cui chiedevo quanto sia utile la conoscenza del TeX per un
LaTeXaro: alla luce di questo thread parrebbe quasi indispensabile
per "giochetti" fuori dagli standard. Che ne dite? Provvedo all'acquisto
del TeXbook?


 Spero sia chiaro.
E' chiaro... è chiaro che prima io possa dire di conoscere LaTeX ne ha
ancora da passare, di acqua sotto i ponti...
A questo punto, però, mi ricollego ad un messaggio che avevo scritto un po'
di tempo fa (news:451f81de$0$4574$
4faf...@reader2.news.tin.it
 dovrebbe
essere
l'ID-message) in cui chiedevo quanto sia utile la conoscenza del TeX per un
LaTeXaro: alla luce di questo thread parrebbe quasi indispensabile
per "giochetti" fuori dagli standard. Che ne dite? Provvedo all'acquisto
del TeXbook?
-- 


 del TeXbook?
Dipende da quanti "giochetti" fuori dagli standard pensi di dover fare
:)
In alternativa c'č anche l'eccellente TeX by Topic, disponibile anche
gratuitamente da
http://www.eijkhout.net/tbt/
(dove gratuitamente vuol dire che se lo ritieni opportuno, una
donazione all'autore (Victor Eijkhout) č gradita)
