- Questo topic ha 8 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 16 anni, 4 mesi fa da
egreg9.
-
CreatoreTopic
-
18 Aprile 2010 alle 21:04 #44388::
Ciao,
volendo scrivere una nuova classe documento basata su quella standard report, che integri il pacchetto Geometry, con lo scopo di comprendere automaticamente il più elevato numero di formati di pagina, ho scritto il seguente codice:`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myclass}
[2010/04/17 v0.0.0.1 Test of myclass]
\RequirePackage{pstricks}
\RequirePackage{geometry}
%
% Option declaration section
%
\DeclareOptionX*{\PassOptionsToClass{\CurrentOption}{report}}
%
% Process option section
%
\ExecuteOptionsX{a4paper}
\ProcessOptionsX
%
% Loading base class section
%
\LoadClass{report}
\endinput`inutile dire che non funziona: il pacchetto geometry restituisce con il seguente documento di test un errore di dimensione di pagina nulle.
`\documentclass{myclass}\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}
\begin{document}
a4paper 10pt\begin{pspicture}(3,3)
\psline(3,3)
\end{pspicture}
\end{document}`
L’idea sarebbe quella di mantenere le opzioni a4paper e 10pt come quelle di default, mentre se diversamente specificato, le opzioni di classe desiderate.Potrei anche rinunciare a risolvere il problema semplicemente eliminando le opzioni di classe per gestire i parametri con appositi comandi di preambolo, ma gli utenti sono così abituati…
Grazie davvero!!! 😉
-
CreatoreTopic
-
AutoreRisposte
-
-
18 Aprile 2010 alle 21:26 #44389::
Ciao,
volendo scrivere una nuova classe documento basata su quella standard report, che integri il pacchetto Geometry, con lo scopo di comprendere automaticamente il più elevato numero di formati di pagina, ho scritto il seguente codice:`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myclass}
[2010/04/17 v0.0.0.1 Test of myclass]
\RequirePackage{pstricks}
\RequirePackage{geometry}
%
% Option declaration section
%
\DeclareOptionX*{\PassOptionsToClass{\CurrentOption}{report}}
%
% Process option section
%
\ExecuteOptionsX{a4paper}
\ProcessOptionsX
%
% Loading base class section
%
\LoadClass{report}
\endinput`inutile dire che non funziona: il pacchetto geometry restituisce con il seguente documento di test un errore di dimensione di pagina nulle.
`\documentclass{myclass}\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}
\begin{document}
a4paper 10pt\begin{pspicture}(3,3)
\psline(3,3)
\end{pspicture}
\end{document}`
L’idea sarebbe quella di mantenere le opzioni a4paper e 10pt come quelle di default, mentre se diversamente specificato, le opzioni di classe desiderate.Potrei anche rinunciare a risolvere il problema semplicemente eliminando le opzioni di classe per gestire i parametri con appositi comandi di preambolo, ma gli utenti sono così abituati…
Grazie davvero!!! 😉
Stai passando tutte le opzioni a report, non vedo come geometry possa vederle. Prima di tutto caricherei esplicitamente xkeyval e non certo pstricks:
`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myclass}
[2010/04/17 v0.0.0.1 Test of myclass]
\RequirePackage{xkeyval}
\RequirePackage{geometry}
%
% Option declaration section
%
\newcommand{\mc@DeclareOptionXGm}[1]{%
\DeclareOptionX{#1}{\PassOptionsToPackage{\CurrentOption}{geometry}}}
\mc@DeclareOptionXGm{a4paper}
\mc@DeclareOptionXGm{letterpaper}
\DeclareOptionX*{\PassOptionsToClass{\CurrentOption}{report}}
%
% Process option section
%
\ExecuteOptionsX{a4paper}
\ProcessOptionsX
%
% Loading base class section
%
\LoadClass{report}`
Ciao
Enrico
-
19 Aprile 2010 alle 15:56 #44390::
Prof, il tuo codice non funziona se inserisco l’opzione 12pt (per esempio).
Comunque ho fatto ulteriori test e volevo chiederti se fosse possibile NON dichiarare come opzioni le dimensioni di pagina con il comando \mc@DeclareOptionXGm.In altre parole, la classe deve comportarsi così:
le opzioni 10pt,11pt,12pt devono essere passate a report.le opzioni di dimensioni di pagina e di orientamento tipo a4paper (valore di default scelto) e landscape devono essere processate da geometry.
Così facendo eventuali nuovi formati di pagina inseriti in geometry (come è successo recentemente con i formati giapponesi), sono automaticamente disponibile nella classe.
Riporto il codice modificato della classe:
`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myclass}
[2010/04/17 v0.0.0.1 Test of the class]
\RequirePackage{xkeyval}
\RequirePackage{pstricks}
\RequirePackage{geometry}
%
% Option declaration section
%
\DeclareOptionX{10pt}[]{\PassOptionsToClass{10pt}{report}}
\DeclareOptionX{11pt}[]{\PassOptionsToClass{11pt}{report}}
\DeclareOptionX{12pt}[]{\PassOptionsToClass{12pt}{report}}
\DeclareOptionX*{\geometry{\CurrentOption}}
%
% Process option section
%
\ExecuteOptionsX{a4paper}
\ProcessOptionsX
%
% Loading base class section
%
\LoadClass{report}
\endinput
%%`
ma ancora non funziona: a geometry non arrivano le dim di pagina. Ci sto lavorando da un po’ ma non riesco a vedere la soluzione.
Saluti.
Roberto.
-
19 Aprile 2010 alle 16:24 #44391::
Prof, il tuo codice non funziona se inserisco l’opzione 12pt (per esempio).
Comunque ho fatto ulteriori test e volevo chiederti se fosse possibile NON dichiarare come opzioni le dimensioni di pagina con il comando \mc@DeclareOptionXGm.In altre parole, la classe deve comportarsi così:
le opzioni 10pt,11pt,12pt devono essere passate a report.le opzioni di dimensioni di pagina e di orientamento tipo a4paper (valore di default scelto) e landscape devono essere processate da geometry.
Così facendo eventuali nuovi formati di pagina inseriti in geometry (come è successo recentemente con i formati giapponesi), sono automaticamente disponibile nella classe.
Riporto il codice modificato della classe:
`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myclass}
[2010/04/17 v0.0.0.1 Test of the class]
\RequirePackage{xkeyval}
\RequirePackage{pstricks}
\RequirePackage{geometry}
%
% Option declaration section
%
\DeclareOptionX{10pt}[]{\PassOptionsToClass{10pt}{report}}
\DeclareOptionX{11pt}[]{\PassOptionsToClass{11pt}{report}}
\DeclareOptionX{12pt}[]{\PassOptionsToClass{12pt}{report}}
\DeclareOptionX*{\geometry{\CurrentOption}}
%
% Process option section
%
\ExecuteOptionsX{a4paper}
\ProcessOptionsX
%
% Loading base class section
%
\LoadClass{report}
\endinput
%%`
ma ancora non funziona: a geometry non arrivano le dim di pagina. Ci sto lavorando da un po’ ma non riesco a vedere la soluzione.
Saluti.
Roberto.\DeclareOptionX*{\AtBeginDocument{\geometry{\CurrentOption}}} ❓
Ciao
Enrico
-
19 Aprile 2010 alle 16:30 #44392::
\DeclareOptionX*{\AtBeginDocument{\geometry{\CurrentOption}}} ❓
Ciao
EnricoCon questo codice la compilazione va in qualche tipo di loop circolare.
Questo codice va un po’ meglio, nel senso che funziona ma latex emmette un warning di opzione non utilizzata:
Classe:
`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myclass}
[2010/04/17 v0.0.0.1 Test of the class]
\RequirePackage{xkeyval}
%
% Option declaration section
%
\DeclareOptionX{10pt}[]{\PassOptionsToClass{10pt}{report}}
\DeclareOptionX{11pt}[]{\PassOptionsToClass{11pt}{report}}
\DeclareOptionX{12pt}[]{\PassOptionsToClass{12pt}{report}}
\DeclareOptionX*{\PassOptionsToPackage{\CurrentOption}{geometry}}
%
% Process option section
%
\ProcessOptionsX
%
% Loading base class section
%
\LoadClass{report}
\RequirePackage{pstricks}
\RequirePackage{geometry}
\endinput`
Sorgente:
`\documentclass[a5paper,12pt]{myclass}\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}\begin{document}
a4paper 10pt ghfdgfdsgfdgfdg gfd gf gf g dg\begin{pspicture}(3,3)
\psline(3,3)
\end{pspicture}
\end{document}`
Grazie. Ci lavorerò ancora un po’ stasera ora devo andare.
Ciao.
-
19 Aprile 2010 alle 16:47 #44393::
\DeclareOptionX*{\AtBeginDocument{\geometry{\CurrentOption}}} ❓
Ciao
EnricoCon questo codice la compilazione va in qualche tipo di loop circolare.
Questo codice va un po’ meglio, nel senso che funziona ma latex emmette un warning di opzione non utilizzata:
Classe:
`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myclass}
[2010/04/17 v0.0.0.1 Test of the class]
\RequirePackage{xkeyval}
%
% Option declaration section
%
\DeclareOptionX{10pt}[]{\PassOptionsToClass{10pt}{report}}
\DeclareOptionX{11pt}[]{\PassOptionsToClass{11pt}{report}}
\DeclareOptionX{12pt}[]{\PassOptionsToClass{12pt}{report}}
\DeclareOptionX*{\PassOptionsToPackage{\CurrentOption}{geometry}}
%
% Process option section
%
\ProcessOptionsX
%
% Loading base class section
%
\LoadClass{report}
\RequirePackage{pstricks}
\RequirePackage{geometry}
\endinput`
Sorgente:
`\documentclass[a5paper,12pt]{myclass}\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}\begin{document}
a4paper 10pt ghfdgfdsgfdgfdg gfd gf gf g dg\begin{pspicture}(3,3)
\psline(3,3)
\end{pspicture}
\end{document}`
Grazie. Ci lavorerò ancora un po’ stasera ora devo andare.
Ciao.`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myclass}
[2010/04/17 v0.0.0.1 Test of the class]
%
% Loading base class section
%
\LoadClass{report}
\RequirePackage{pstricks}
\RequirePackage{geometry}
\endinput`
Ciao
Enrico
-
20 Aprile 2010 alle 11:41 #44394::
[quote]\DeclareOptionX*{\AtBeginDocument{\geometry{\CurrentOption}}} ❓
Ciao
EnricoCon questo codice la compilazione va in qualche tipo di loop circolare.
Questo codice va un po’ meglio, nel senso che funziona ma latex emmette un warning di opzione non utilizzata:
Classe:
`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myclass}
[2010/04/17 v0.0.0.1 Test of the class]
\RequirePackage{xkeyval}
%
% Option declaration section
%
\DeclareOptionX{10pt}[]{\PassOptionsToClass{10pt}{report}}
\DeclareOptionX{11pt}[]{\PassOptionsToClass{11pt}{report}}
\DeclareOptionX{12pt}[]{\PassOptionsToClass{12pt}{report}}
\DeclareOptionX*{\PassOptionsToPackage{\CurrentOption}{geometry}}
%
% Process option section
%
\ProcessOptionsX
%
% Loading base class section
%
\LoadClass{report}
\RequirePackage{pstricks}
\RequirePackage{geometry}
\endinput`
Sorgente:
`\documentclass[a5paper,12pt]{myclass}\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}\begin{document}
a4paper 10pt ghfdgfdsgfdgfdg gfd gf gf g dg\begin{pspicture}(3,3)
\psline(3,3)
\end{pspicture}
\end{document}`
Grazie. Ci lavorerò ancora un po’ stasera ora devo andare.
Ciao.`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myclass}
[2010/04/17 v0.0.0.1 Test of the class]
%
% Loading base class section
%
\LoadClass{report}
\RequirePackage{pstricks}
\RequirePackage{geometry}
\endinput`
Ciao
Enrico[/quote]Che bello quando la soluzione raggiunge la semplicità 8)
cos’altro dire se non Alla prossima.
Grazie!!!
-
20 Aprile 2010 alle 16:26 #44395::
💡 e se volessi aggiungere una nuova opzione di classe?
la sintassi prevede infatti una chiave unit da passare direttamente a pstricks.Ho quindi provato il seguente codice:
`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myreport}
[2010/04/17 v0.0.0.1 A secret class for … based on pstricks]
\RequirePackage{xkeyval}
\RequirePackage{pstricks}
%
% Option declaration section
%
\DeclareOptionX{unit}{\psset{unit=#1}}
\DeclareOptionX*{\PassOptionsToClass{\CurrentOption}{report}}\ProcessOptionsX
%
% Loading base class section
%
\LoadClass{report}
\RequirePackage{geometry}
\endinput`
ottengo il risultato corretto tuttavia compilando un sorgente di prova e passando l’opzione per esempio b5j, ricevo un fastidioso Warning:`./t.tex:0: Unused global option(s):[b5j].`quando invece il formato b5j è perfettamente attuato da geometry.
Come posso eliminare questo “incorretto” warning?
Grazie (da un rompiscatole 😀 )
-
21 Aprile 2010 alle 7:45 #44396::
💡 e se volessi aggiungere una nuova opzione di classe?
la sintassi prevede infatti una chiave unit da passare direttamente a pstricks.Ho quindi provato il seguente codice:
`\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{myreport}
[2010/04/17 v0.0.0.1 A secret class for … based on pstricks]
\RequirePackage{xkeyval}
\RequirePackage{pstricks}
%
% Option declaration section
%
\DeclareOptionX{unit}{\psset{unit=#1}}
\DeclareOptionX*{\PassOptionsToClass{\CurrentOption}{report}}\ProcessOptionsX
%
% Loading base class section
%
\LoadClass{report}
\RequirePackage{geometry}
\endinput`
ottengo il risultato corretto tuttavia compilando un sorgente di prova e passando l’opzione per esempio b5j, ricevo un fastidioso Warning:`./t.tex:0: Unused global option(s):[b5j].`quando invece il formato b5j è perfettamente attuato da geometry.
Come posso eliminare questo “incorretto” warning?
Grazie (da un rompiscatole 😀 )Secondo me stai sbagliando impostazione. Troppe opzioni alla classe, con sintassi diverse, rendono difficile mantenere il codice.
Probabilmente il sistema più adatto è di identificare alcune opzioni base che vadano tra quelle “globali”, cioè date alla classe. Il resto si può gestire molto meglio con un comando successivo di impostazione:
`\documentclass[a5paper,12pt]{myreport}
\myreportsetup{
abc=def,
xyz=pqr,
dothis,
that=false
}`
Rimane il problema che devi definire l’azione di ogni chiave.Ciao
Enrico
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.