Risposte nei forum create
-
AutoreRisposte
-
::
Qui c’è un po’ di codice che dovrebbe fare al caso tuo (…)
Spiacente, però; tener conto della maiuscola mi sembra piuttosto complicato e, del resto, inutile: è piuttosto difficile che una di quelle parole compaia a inizio capoverso.Sì, sono d’accordo. Alla fine era più una curiosità 🙂
Sinceramente non sarei d’accordo sull’uso del “reset”, mi pare piuttosto forzato, ma se proprio vuoi, nel codice c’è.
Il fatto è che pensavo: io sono un lettore, mi guardo l’indice e scelgo di leggere p.e. il capitolo 4 senza aver prima letto gli altri tre. In questo caso, secondo me, il reset va bene… che ne pensi?
Vediamo ora come funziona: (…)
Ciao
EnricoGrazie mille per la spigazione! Effettivamente così è molto più chiaro.
L’unica cosa che mi resta da fare è rendere il codice utilizzabile anche in situazioni di questo tipo:
`\documentclass{scrartcl}\usepackage{acronym}
\makeatletter
\def\eng#1{%
\ifcsname ENG@#1\endcsname
\seguente{#1}%
\else
\primo{#1}%
\global\@namedef{ENG@#1}{}%
\unless\ifcsname ENG@used#1\endcsname
\global\let\ENG@el\relax
\xdef\ENG@list{\ENG@list\ENG@el{#1}}%
\fi
\global\@namedef{ENG@used#1}{}%
\fi}\let\primo\emph
\let\seguente\@iden
\let\ENG@list\@empty\def\engreset{\global\let\ENG@el\@engreset\ENG@list}
\def\@engreset#1{\global\expandafter\let\csname ENG@#1\endcsname\@undefined}
\makeatother\begin{document}
\section{Esempio comandi immersi}
\begin{acronym}[FPGA]
\acro{FPGA}{Field-Programmable Gate Array}
\end{acronym}\eng{\acl{FPGA} scheme} \`e l'acronimo lungo, \eng{\acs{FPGA} scheme} quello corto.
\eng{design {\sc hdl} entry}
\end{document}`A occhio e croce credo di potermela cavare più o meno definendo nel preambolo qualcosa del genere:
`\newcommand{\primo}[1]{\expandafter\emph{\csname #1\endcsname}}`NB Ho già verificato che non funziona 😛 (spero solo di non aver fatto errori troppo grossolani, perché è da poco che sto cominciando a “giocare” con \expandafter & Co.)A presto
Giovanni
::
Salve a tutti di nuovo.Dato che quei frammenti di codice non funzionano bene come mi aspetterei, ho deciso di cogliere la palla al balzo e studiarmi un po’ di cose da me.
E proprio qui mi serve il vostro aiuto.Riassumendo ciò che voglio fare in pseudo-codice:
`nuovocomando: eng() {
if ( lowercase() è già stato usato )
then
scrivi con carattere normale
else
scrivi enfatizzato
endif
}nuovocomando: engresetall() {
dimentica tutti i già usati
}`
Il primo problema in cui mi sono imbattuto è che può in alcuni casi essere espandibile (p.e. usando \acl del pacchetto acronym).
Il secondo problema è che avrei bisogno di una struttura adeguata alla memorizzazione dei vari in grado anche di essere `svuotata’.Da qui penso che le cose da studiare bene sono:
- costrutti if/then/else;
token e registri token;
costrutti tipo \csname … \endcsname e \expandafter.Però volevo essere sicuro di stare sulla buona strada e nel caso ricevere qualche dritta su dove indirizzare di più i miei sforzi.
Grazie per l’attenzione
Giovanni
::http://www.guit.sssup.it/phpbb/viewtopic.php?t=3709&highlight=legature
Grazie mille! Sempre veloce e gentile 🙂
A dire il vero avevo fatto una piccola ricerca sul forum, ma evidentemente non sono stato troppo bravo 😛
Ad ogni modo, mi scuso per aver “trasgredito” (anche se involontariamente) le regole della netiquette.
Saluti
Giovanni
::
Credo di essere sulla buona strada…Posto un esempio esplicativo e semi-funzionante 😛 :
`\documentclass{scrartcl}\newcommand{\primo}[1]{\emph{#1}}
\newcommand{\seguente}[1]{#1}\makeatletter
\newcommand*\ENG@used{}
% L'esempio ispiratore riportava \newcommand*\ENG@used{@<>@<>@}
\newcommand{\eng}[1]{%
\expandafter\ifx\csname engused@#1\endcsname\ENG@used%
\seguente{#1}%
\else%
\global\expandafter\let\csname engused@#1\endcsname\ENG@used%
\primo{#1}%
\fi%
}
\makeatother\newcommand{\engreset}{
% qui va il codice per far `dimenticare' i termini già usati
% per includerlo, magari, un \renewcommand{\chapter}
% o \renewcommand{\section}
}\begin{document}
\section{Esempio di funzionamento}
Questo termine \`e in inglese: \primo{dependability}.
E qui lo ripeto: \seguente{dependability}.
Lo ripeto ancora: \seguente{dependability}.
Qui resetto.
Qui ri-cito: \primo{dependability}.
E qui lo cito per l'ultima volta: \seguente{dependability}.\section{Test}
Questo termine \`e in inglese: \eng{dependability}.
E qui lo ripeto: \eng{dependability}.
Lo ripeto ancora: \eng{dependability}.
Qui resetto. \engreset
Qui ri-cito: \eng{dependability}.
E qui lo cito per l'ultima volta: \eng{dependability}.\section{Test con pi\`u forestierismi}
Dunque, ecco una sequenza di termini stranieri:
\begin{itemize}
\item \eng{computer}
\item \eng{Computer}
\item \eng{desktop}
\item \eng{computer}
\item \eng{desktop}
\item \eng{time-sharing}
\end{itemize}
Come si vede, questo metodo \`e “case-sensitive''.
Per riformulare il problema in maniera “case-insensitive'' credo
basti giocare un pochino con “\verb|\lowercase|''.\end{document}`
Ciò che non riesco a capire ancora bene è l’uso di
`\newcommand*\ENG@used{@<>@<>@}`
e l’implementazione di `\reseteng`
::Di regola, il corsivo si usa per le parole non di uso comune per il lettore a cui è diretto il lavoro. Quindi, se per il tuo “lettore ideale” time-sharing e multiplexer sono di uso comune, non usare il corsivo.
Grazie mille per questa dritta tipografica.
Questa sarebbe stata comunque la mia ultima spiaggia 🙂In attesa che qualche guru ci sforni la soluzione su un piatto d’argento, se ne hai voglia potresti iniziare a vedere il codice del pacchetto acronym (che fa una cosa del genere con gli acronimi).
Infatti lo conoscevo e lo stavo già guardando… anche se devo ammettere che sono poco pratico del codice TeX/LaTeX di basso livello.
Se ci riesco, posto qui il risultato.Scusa per la risposta incompleta!
Figurati! E poi sei stato comunque gentile ad indirizzarmi verso il pacchetto acronym e a darmi la dritta sulla scelta tipografica! Grazie ancora! 😀
A presto
Giovanni
-
AutoreRisposte