- Questo topic ha 9 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 1 mese fa da
robitex.
-
CreatoreTopic
-
1 Agosto 2014 alle 9:39 #95775::
Ciao,
in un file di classe definisco due comandi \set e \get per gestire dei valori che poi verranno caricati da un file (contenente in comandi \set).
Eccoli `\newcommand{\set}[2]{\expandafter\def\csname robitex@#1\endcsname{#2}}
\newcommand{\get}[1]{\csname robitex@#1\endcsname}`Vorrei però migliorare la situazione con questi due desiderata:
1 – vorrei che \get sollevasse un errore di classe se il campo non è definito
2 – vorrei un’opzione da dare al comando \get se volessi colorare lo sfondo di questi campi per farli risaltare nel pdf.Un ultima cosa, fate presto a passarmi il codice…
Nel senso che lo dovete fare voi ed io mi ritrovo il lavoro gratis 🙂
Ringrazio anticipatamente
R.
-
CreatoreTopic
-
AutoreRisposte
-
-
1 Agosto 2014 alle 10:08 #95776
-
1 Agosto 2014 alle 10:12 #95777::
Dovresti mettere CONCORSONE nel titolo, oppure “offro cassa di birra”, forse i tempi si stringerebbero 😀
Intanto la parte 1:
`\begin{filecontents}{robyclass.cls}
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesClass{robyclass}[2014/08/01 v. 0.1 Classe per le prove di Roberto]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
\ProcessOptions\relax
\LoadClass[a4paper]{book}
\RequirePackage{etoolbox}
\newcommand{\set}[2]{\expandafter\def\csname robitex@#1\endcsname{#2}}
\newcommand{\get}[1]{%
\ifcsdef{robitex@#1}%
{\csname robitex@#1\endcsname}%
{\ClassError{robyclass}{Attento, il comando robitex@#1 non è definito!}{}}}
\end{filecontents}
\documentclass{robyclass}
\begin{document}
\set{Prova}{Ciao!}
\get{Prova}
\get{prova}
\end{document}`
-
1 Agosto 2014 alle 12:41 #95778::
franen” post=95397Dovresti mettere CONCORSONE nel titolo, oppure “offro cassa di birra”, forse i tempi si stringerebbero 😀
Intanto la parte 1Ah ecco così mi piaci. Ma non posso fare il copia ed incolla del codice adesso perché devo andare in spiaggia…
Mica devo sempre lavorare.Aspetto la seconda parte del codice. Comunque sia, se il filone diventasse un concorsone — non temete questa volta premi davvero grandi — tu entreresti automaticamente tra i candidati.
Scherzi a parte… grazie ed a presto.
R.
-
1 Agosto 2014 alle 12:44 #95779
-
1 Agosto 2014 alle 14:30 #95780::
`\RequirePackage{filecontents}
\begin{filecontents*}{robyclass.cls}
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesClass{robyclass}[2014/08/01 v. 0.1 Classe per le prove di Roberto]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
\ProcessOptions\relax
\LoadClass[a4paper]{book}
\RequirePackage{etoolbox, xcolor}
\newcommand{\set}[2]{\expandafter\def\csname robitex@#1\endcsname{#2}}
\newcommand{\get}[1]{%
\ifcsdef{robitex@#1}%
{\sottolinea{\csname robitex@#1\endcsname}}%
{\ClassError{robyclass}{Attento, il comando #1 non è definito!}{}}}
\newcommand{\sottolinea}[1]{\colorbox{green}{#1}}
\end{filecontents*}
\documentclass{robyclass}
\begin{document}
\set{prova}{re!}
\get{prova}
\end{document}`
-
1 Agosto 2014 alle 19:04 #95781::
Tanto per far sparire quell’\expandafter che mi spaventa ancora dopo tanti anni 😀
Poi dici se ti interessa poter spezzare le righe nel testo sottolineato, che in caso bisogna pensare a altri modi…
`\RequirePackage{filecontents}
\begin{filecontents*}{robyclass.cls}
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesClass{robyclass}[2014/08/01 v. 0.1 Classe per le prove di Roberto]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
\ProcessOptions\relax
\LoadClass[a4paper]{book}
\RequirePackage{xparse, xcolor}
\ExplSyntaxOn
\DeclareDocumentCommand { \set }{ m m }
{
\cs_new_protected:cn {robitex@#1:} {#2}
}
\DeclareDocumentCommand { \get }{ m }
{
\cs_if_exist:cTF {robitex@#1:}
{\colorbox{green}{\use:c {robitex@#1:}}}
{\msg_error:nn {robyclass} {Sei~ certo~ che~ questo~ comando~ esista~ davvero?}}
}
\ExplSyntaxOff
\end{filecontents*}\documentclass{robyclass}
\usepackage{lipsum}
\begin{document}
\lipsum\set{prova}{Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura che la diritta via era smarrita}
\get{prova}
\end{document}`
-
3 Agosto 2014 alle 10:56 #95782::
robitex” post=95394Ciao,
in un file di classe definisco due comandi \set e \get per gestire dei valori che poi verranno caricati da un file (contenente in comandi \set).
Eccoli `\newcommand{\set}[2]{\expandafter\def\csname robitex@#1\endcsname{#2}}
\newcommand{\get}[1]{\csname robitex@#1\endcsname}`Vorrei però migliorare la situazione con questi due desiderata:
1 – vorrei che \get sollevasse un errore di classe se il campo non è definito
2 – vorrei un’opzione da dare al comando \get se volessi colorare lo sfondo di questi campi per farli risaltare nel pdf.Un ultima cosa, fate presto a passarmi il codice…
Nel senso che lo dovete fare voi ed io mi ritrovo il lavoro gratis 🙂
Ringrazio anticipatamente
R.Senza alcun pacchetto in più. 😉
`\makeatletter
\newcommand{\set}[2]{\global\@namedef{robitex@#1}{#2}} % oppure senza \global se vuoi che i campi siano solo locali
\newcommand{\get}[1]{%
\@ifundefined{robitex@#1}
{\PackageError{robitex}{Undefined field #1}{The field you used has not yet been defined}}
{\@nameuse{robitex@#1}}%
}
\makeatother`
Ciao
Enrico
-
3 Agosto 2014 alle 15:56 #95783::
Diciamo che il mio è fuori concorso, perché ho preso il codice di @egreg e gli ho solo aggiunto il comando opzionale che desideravi. 😆`
\documentclass{article}\usepackage{xcolor}
\makeatletter
\newcommand{\set}[2]{\global\@namedef{robitex@#1}{#2}}
\newcommand{\get}[2][]{%
\edef\robitex@temp{\if!#1!%
\else
\unexpanded{\colorbox{#1}}%
\fi}%
\@ifundefined{robitex@#2}
{\PackageError{robitex}{Undefined field #2}{The field you used has not yet been defined}}
{\robitex@temp{\@nameuse{robitex@#2}}}}%
\makeatother
\begin{document}
\set{my}{Ciao a tutti}
\get[blue]{my}
\get[red]{my}
\get{my}
\end{document}`
-
4 Agosto 2014 alle 5:28 #95784::
Grazie a tutti!
Avete fatto un buon lavoro ma purtroppo la conclusione è che non posso fare altro che assegnare il premio… a me stesso.
Del resto il premio era…Ecco la soluzione vincente, veramente originale, che non modifica le specifiche di concorso, giunta in tempo utile:
`\documentclass{article}\usepackage{xcolor}
\makeatletter
\def\robitex@render#1{#1}
\newcommand{\lightfield}[1][lime]{%
\def\robitex@render##1{%
\fcolorbox{gray}{#1}{##1}}%
}
\newcommand{\set}[2]{\global\@namedef{robitex@#1}{#2}}
\newcommand{\get}[1]{%
\@ifundefined{robitex@#1}
{\PackageError{robitex}{Undefined field `#1`}{The field you used has not yet been defined}}
{\robitex@render{\@nameuse{robitex@#1}}}%
}%
\makeatother\begin{document}
\set{my}{Ciao a tutti}
\get{my}
\get{my}
\lightfield
\get{my}
\end{document}`Come vedete un comando dal nome azzeccato — \lightfield — fa in modo che tutti i capi di li in poi vengano evidenziati.
Non aveva molto senso dare l’opzione di evidenziatura ad ogni singolo \get.
Il colore “lime” è molto elegante sul mio nuovo schermo led 28″…
Ciao.
R.
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.