Nuova classe: Problema con l’array author

  • Creatore
    Topic
  • #18010
    Up
    0
    Down
    ::


    Ispirandomi a una classe già esistente e a quella di ArsTexnica, sto tentando di creare una nuova classe per una nuova rivista che sta nascendo. Il mio problema è che non riesco a reiniziallizare l’array che contiene il nome degli autori.
    Ho provato con
    `
    \global\let\@author\@empty
    `
    ma non sembra funzionare. Mi scuso se la domanda è già stata posta e onn sono stato capace di trovarla sul sito, ma non riesco a venirne fuori neanche consultando i vari libri.
    Grazie
    Michele

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #18011
      Up
      0
      Down
      ::

      Ispirandomi a una classe già esistente e a quella di ArsTexnica, sto tentando di creare una nuova classe per una nuova rivista che sta nascendo. Il mio problema è che non riesco a reiniziallizare l’array che contiene il nome degli autori.
      Ho provato con
      `
      \global\let\@author\@empty
      `
      ma non sembra funzionare. Mi scuso se la domanda è già stata posta e onn sono stato capace di trovarla sul sito, ma non riesco a venirne fuori neanche consultando i vari libri.

      Alquanto vago. Che cosa vorresti fare, di preciso?

      Ciao
      Enrico

    • #18012
      Up
      0
      Down
      ::


      Certamente scusami.
      Sto cercando di creare una nuova rivista che raccoglie gli articoli del dottorato di ricerca. E’ stato deciso di basarsi sul template di latex della Wiley di Physica Status Solidi.
      Il problema nasce quando si deve comporre la rivista per la stampa finale.
      Ispirandomi al lavoro di ArsTexnica ho creato un enviroment articolo
      `
      \newenvironment{articolo}{%
      \@openarticle}{\@closearticle}
      \def\@openarticle{%

      \refstepcounter{article}
      \@addtoreset{section}{article}
      \@addtoreset{figure}{article}
      \@addtoreset{table}{article}
      \@addtoreset{equation}{article}
      \@addtoreset{footnote}{article}
      \global\let\@author\@empty

      \newpage
      }
      \def\@closearticle{}
      `
      In modo da poter separare gli articoli tra di loro e sfruttare la macro maketitle già esistente. Il problema nasce dal fatto che il tutto funziona discretamente bene a parte la gestione degli autori. Per ogni articolo si ricorda i precedenti e non resetta l’array. Basandomi sulla classe article ho appunto trovato il comando usato ma non funziona.
      Spero di essere stato più chiaro.

    • #18013
      Up
      0
      Down
      ::

      Certamente scusami.
      Sto cercando di creare una nuova rivista che raccoglie gli articoli del dottorato di ricerca. E’ stato deciso di basarsi sul template di latex della Wiley di Physica Status Solidi.
      Il problema nasce quando si deve comporre la rivista per la stampa finale.
      Ispirandomi al lavoro di ArsTexnica ho creato un enviroment articolo
      `
      \newenvironment{articolo}{%
      \@openarticle}{\@closearticle}
      \def\@openarticle{%

      \refstepcounter{article}
      \@addtoreset{section}{article}
      \@addtoreset{figure}{article}
      \@addtoreset{table}{article}
      \@addtoreset{equation}{article}
      \@addtoreset{footnote}{article}
      \global\let\@author\@empty

      \newpage
      }
      \def\@closearticle{}
      `
      In modo da poter separare gli articoli tra di loro e sfruttare la macro maketitle già esistente. Il problema nasce dal fatto che il tutto funziona discretamente bene a parte la gestione degli autori. Per ogni articolo si ricorda i precedenti e non resetta l’array. Basandomi sulla classe article ho appunto trovato il comando usato ma non funziona.
      Spero di essere stato più chiaro.

      Non metterei tutti quegli \@addtoreset là. Basta darli una volta per tutte: non ha molto senso farlo localmente.

      Quanto al problema di \@author, la definizione usuale di \author è
      `\def\author#1{\gdef\@author{#1}}`
      ma probabilmente la classe su cui ti basi fa qualcos’altro. Indagherei su quello: principalmente sul fatto che usa \@authors (e non \@author), facendo qualche trucchettino per inserire più autori dando più volte \author.

      Ciao
      Enrico

    • #18014
      Up
      0
      Down
      ::

      Non metterei tutti quegli \@addtoreset là. Basta darli una volta per tutte: non ha molto senso farlo localmente.

      Perché non li? per ogni articolo devo reinizializzare i valori delle varie parti ecc.
      il documento è organizzato così:
      `
      \begin{document}
      \begin{articolo}
      \title
      \author
      \maketitle
      testoarticolo
      \end{articolo}
      \begin{articolo}
      \title
      \author
      \maketitle
      testo
      \end{articolo}
      \tableofcontents
      \end{document}
      `
      Per la questione dell’array in effetti usa authors. Poi provo.

    • #18015
      Up
      0
      Down
      ::

      Non metterei tutti quegli \@addtoreset là. Basta darli una volta per tutte: non ha molto senso farlo localmente.

      Perché non li? per ogni articolo devo reinizializzare i valori delle varie parti ecc.

      Per la questione dell’array in effetti usa authors. Poi provo.

      \@addtoreset{foo}{bar} aggiunge il contatore foo alla lista di azzeramento associata al contatore bar. Così stai semplicemente aggiungendo più volte il contatore alla lista.

      Quando hai dato \@addtoreset{foo}{bar}, ogni comando \stepcounter{bar}, \refstepcounter{bar} e \setcounter{bar} azzera foo. Quindi il codice giusto è
      `\@addtoreset{section}{article}
      \@addtoreset{figure}{article}
      \@addtoreset{table}{article}
      \@addtoreset{equation}{article}
      \@addtoreset{footnote}{article}
      \newcommand\articolo{}
      \def\articolo{%
      \cleardoublepage
      \refstepcounter{article}
      …}
      \def\endarticolo{…}`
      Ho anche tolto quel \newenvironment{articolo}, tanto vale definirsi direttamente \articolo e \endarticolo. Il \newcommand serve per pararsi le spalle nel caso il comando \articolo sia già definito.

      Occhio agli spazi spuri. Per esempio, metterei il comando di cambio pagina prima di tutto, così da trovarsi in modo verticale dove spazi e linee vuote sono ignorati.

      Ciao
      Enrico

    • #18016
      Up
      0
      Down
      ::


      Stranamente definendo il comando e non l’ambiente il maketitle non funziona più. Ho lasciato l’enviroment portando i contatori fuori.
      Riporto il codice del maketitle che tra l’altro dà uno strano comportamento con il secondo articolo nel quale l’abstract precede il titolo (mi rendo conto che ciò va oltre le mie capacità)::
      `
      \def\maketitle{\par
      \@topnum\z@ % this prevents figures from falling at the top of page 1
      \ifx\copyrightyear\cpyear@test\relax
      \let\copyrightyear\current@year
      \fi
      \if@autolastp\readlastpagenumber\fi
      \thispagestyle{firstpage}% this sets first page specifications
      \ifx\@empty\shortauthors \let\shortauthors\shorttitle
      \else \normalandify\shortauthors
      \fi
      \@maketitle@hook
      \begingroup
      \if@twocolumn
      \twocolumn[\FirstPageTopSkip\@maketitle]%
      \else
      \@maketitle
      \fi
      \toks@\@xp{\shortauthors}\@temptokena\@xp{\shorttitle}%
      \toks4{\def\\{ \ignorespaces}}% defend against questionable usage
      \edef\@tempa{%
      \@nx\markboth{\the\toks4
      \@nx{\the\toks@}}{\the\@temptokena}}%
      \@tempa
      \endgroup
      \c@footnote\z@
      \def\do##1{\let##1\relax}%
      \do\maketitle \do\@maketitle \do\title \do\@xtitle \do\@title
      \do\@pretitle \do\@subtitle
      \do\author \do\@xauthor \do\address \do\@xaddress
      \do\email \do\@xemail \do\curraddr \do\@xcurraddr
      \do\commby \do\@commby
      \do\dedicatory \do\@dedicatory \do\thanks \do\thankses
      \do\keywords \do\@keywords \do\subjclass \do\@subjclass
      }
      \def\@maketitle@hook{\global\let\@maketitle@hook\@empty}
      \def\@maketitle{%
      \normalfont\normalsize
      \let\@makefnmark\relax \let\@thefnmark\relax
      \ifx\@empty\@subjclass\else \ifSubjClassinTitle \else\@footnotetext{\@setsubjclass}\fi\fi
      \ifx\@empty\@keywords\else \ifKeywordsinTitle \else\@footnotetext{\@setkeywords}\fi\fi
      \ifx\@empty\thankses\else\@footnotetext{%
      \def\par{\let\par\@par}\@setthanks}\fi
      \@mkboth{\@nx\shortauthors}{\@nx\shorttitle}%
      \FirstPageTopSkip
      \if@twocolumn \else
      \def\@fnsymbol##1{\ifcase##1\or\ast\or{\ast\ast}\or{\ast\ast\ast}%
      \or \dagger\or \ddagger\or
      \mathchar “278\or \mathchar “27B\or \|\or **\or \dagger\dagger
      \or \ddagger\ddagger \else\@ctrerr\fi\relax}
      \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
      \def\@makefnmark{$^{\@thefnmark}$}%

      \def\@makefntext{\indent\@makefnmark}%
      \fi
      \setlength{\TitleWidth}{\linewidth}
      \addtolength{\TitleWidth}{-\TitleSkip}
      \if@authoratbotitle\ifx\@empty\authors \else \@setauthors \fi\fi
      \ifx\@empty\@pretitle\else\@setpretitle\fi%
      \@settitle%
      \ifx\@empty\@subtitle\else\@setsubtitle\fi%
      \if@authoratbotitle\else\ifx\@empty\authors \else \@setauthors \fi\fi
      \ifx\@empty\addresses\else
      \ifAddressinTitle
      \headelem{0\baselineskip}{1\baselineskip}{%
      \ifExcludeAddressFromSkip\z@\else\TitleSkip\fi}{\z@}
      {\normalfont}{\@setaddresses}
      \fi\fi
      \ifDatesinTitle
      \headelem{0\baselineskip}{1\baselineskip}{\TitleSkip}{\z@}
      {\dt@font}{\@setdate}
      \fi
      \if@abstreotitle\else
      \ifx\@empty\@dedicatory
      \else
      %\baselineskip18\p@
      \headelem{.5\baselineskip}{0\baselineskip}{\TitleSkip}{\z@}
      {\dc@font}{\@dedicatory}
      \fi
      \@setabstract\fi
      \ifx\@empty\@keywords\else \ifKeywordsinTitle\@setkeywords\fi\fi
      \ifx\@empty\@subjclass\else \ifSubjClassinTitle\@setsubjclass\fi\fi
      \if@abstreotitle
      \ifx\@empty\@dedicatory
      \else
      %\baselineskip18\p@
      \headelem{0.5\baselineskip}{0\baselineskip}{\TitleSkip}{\z@}
      {\dc@font}{\@dedicatory}
      \fi
      \@setabstract\fi
      \normalsize
      \if@titlepage
      \newpage
      \else
      \vskip\BeforeMainTextSkip
      \dimen@34\p@ \advance\dimen@-\baselineskip
      \vskip\dimen@\relax
      \fi
      } % end \@maketitle
      `
      Mentre la definizione dell’abstract e del @setabstract sono:
      `
      \newenvironment{abstract}{%
      \ifx\maketitle\relax
      \ClassWarning{\@classname}{Abstract should precede
      \protect\maketitle\space in documentclasses; reported}%
      \fi
      \global\setbox\abstractbox=\vtop \bgroup
      \let\@makefnmark\relax \let\@thefnmark\relax
      \abstr@font
      \list{}{\labelwidth\z@
      \leftmargin\AbstractLeftMargin \rightmargin\AbstractRightMargin
      \listparindent\normalparindent \itemindent\z@
      \parsep\z@ \@plus\p@
      \let\fullwidthdisplay\relax
      }%
      \ifx\@empty\abstractname\item[]%
      \else%
      \ifEmbeddedAbstractHead
      \item[\hskip\labelsep\bfseries\abstractname]
      \else
      \item[]
      \fi%
      \fi%
      }{%
      \endlist\egroup
      \ifx\@setabstract\relax \@setabstracta \fi
      }
      \def\@setabstract{\@setabstracta \global\let\@setabstract\relax}
      \def\@setabstracta{%
      \ifvoid\abstractbox
      \else
      \BeforeAbstractSkip \advance\skip@-\lastskip
      \advance\skip@-\baselineskip \vskip\skip@
      \ifEmbeddedAbstractHead
      \else
      \if@noabstractname
      \else
      {\noindent\hskip\TitleSkip\abstrl@font\abstractname\par\nobreak}
      \vskip -5\p@%
      \fi\fi
      \box\abstractbox
      \prevdepth\z@ % because \abstractbox is a vtop
      \fi
      \if@finallayout
      {\normalfont\fontsize{6}{7\p@}\normalfont \hfill
      \copyright\ \copyrightyear\ \copyrightholder}
      \else
      {\normalfont\fontsize{6}{7\p@}\normalfont \hfill
      Copyright line will be provided by the publisher}
      \fi
      }
      `

      Per quanto riguarda la l’elenco autori la definizione degli autori ho effettivamente risolto con
      `
      \let\authors\@empty
      `
      Grazie a chi saprà consigliarmi.

Visualizzazione 5 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top