Estoy tratando de escribir una clase de documentos highschool.cls
para los trabajos de investigación de la escuela secundaria en nuestra escuela basada en el book.cls
fin de estandarizar el formato de los trabajos. Estoy intentando definir una página de firma con el título "CERTIFICACIÓN" de modo que aparezca el siguiente texto en la página.
Para lograr esto, hice las siguientes definiciones en la clase LaTeX highschool.cls
.
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{highschool}
[2012/08/22 v0.1e
Standard LaTeX document class]
\newcommand\@ptsize{}
\newif\if@surnamea \@surnameafalse
\newif\if@surnameb \@surnamebfalse
\newif\if@surnamec \@surnamecfalse
\newif\if@firstnamea \@firstnameafalse
\newif\if@firstnameb \@firstnamebfalse
\newif\if@firstnamec \@firstnamecfalse
\newif\if@midinitiala \@midinitialafalse
\newif\if@midinitialb \@midinitialbfalse
\newif\if@midinitialc \@midinitialcfalse
\setlength\paperheight {11in}%
\setlength\paperwidth {8.5in}%
\setlength\textwidth {6in}%
\def\defenseDate#1{\gdef\@defensedate{#1}}
\def\surnamea#1{\gdef\@surnamea{#1}}
\def\firstnamea#1{\gdef\@firstnamea{#1}}
\def\midinitiala#1{\gdef\@midinitiala{#1}}
\def\surnameb#1{\gdef\@surnameb{#1}}
\def\firstnameb#1{\gdef\@firstnameb{#1}}
\def\midinitialb#1{\gdef\@midinitialb{#1}}
\def\surnamec#1{\gdef\@surnamec{#1}}
\def\firstnamec#1{\gdef\@firstnamec{#1}}
\def\midinitialc#1{\gdef\@midinitialc{#1}}
\if@compatibility
\renewcommand\@ptsize{0}
\else \DeclareOption{10pt}{\renewcommand\@ptsize{0}} \fi
\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
\ExecuteOptions{12pt,oneside,final,openright}
\ProcessOptions
\input{bk1\@ptsize.clo}
\def\signaturep{ %% signature page..
\topmargin 0in \headsep 0in
\begin{center}
\textbf{CERTIFICATION}\\[6pt]
\end{center}
This is to certify that this research paper entitled,
\textbf{``{\uppercase\expandafter{\@title}}''} and submitted by
\textbf{\uppercase\expandafter{\@firstnamea} \uppercase\expandafter{\@midinitiala}. \uppercase\expandafter{\@surnamea}}, \textbf{\uppercase\expandafter{\@firstnameb} \uppercase\expandafter{\@midinitialb}. \uppercase\expandafter{\@surnameb}}, and \textbf{\uppercase\expandafter{\@firstnamec} \uppercase\expandafter{\@midinitialc}. \uppercase\expandafter{\@surnamec}}
to fulfill part of the requirements for
the course Science and Technology Research II was successfully
defended and approved on \expandafter{\@defensedate}.
}%% signature page
\def\prelim{%%prelim page
\typeout{Making SMCT preliminary headings...}%
\pagestyle{plain}
\pagenumbering{roman}
\signaturep \newpage
\baselineskip=20pt
} %%prelim
\endinput
En mi archivo TeX fuente, escribiría algo como
\documentclass{highschool}
\defenseDate{18 August 2012}
\title{This is the Title of the Paper}
\surnamea{Author}
\firstnamea{First}
\midinitiala{N}
\surnameb{Author}
\firstnameb{Second}
\midinitialb{N}
\surnamec{Author}
\firstnamec{Third}
\midinitialc{N}
\begin{document}
\prelim %% Prints Preliminary chapters
\end{document}
Lo que quiero lograr es que
- cuando no hay
\surnameb,\firstnameb,\midinitialb,\surnamec,\firstnamec,
y\midinitialc
declarados, me sale el siguiente texto:
- cuando no hay
\surnamec,\firstnamec,
y\midinitialc
declarados, me sale el siguiente texto:
- y cuando todos están declarados, me sale el texto:
¿Es posible hacer esto? Si es así ¿cómo lo hago?
Respuesta1
La siguiente solución se basa en estos supuestos:
solo puedes tener
- Autor 1; o
- Autor 1, yAutor 2; o
- Autor 1,Autor 2, yAutor 3
y no por ejemplo
- Autor 1, yAutor 3; o
- Autor 2, yAutor 3; o
- Autor 2solo; o
- Autor 3solo.
Basta con indicar únicamente el nombre para distinguir si un autor "existe" o no.
La segunda condición se puede modificar, pero parecía lógico que uno tuviera un nombreyun apellido yposiblementeuna inicial del segundo nombre, pero nuncanoun nombre. En consecuencia, puede utilizar las siguientes definiciones:
\def\defenseDate#1{\gdef\@defensedate{#1}}
\def\surnamea#1{\gdef\@surnamea{#1}\@surnameatrue}
\def\firstnamea#1{\gdef\@firstnamea{#1}\@firstnameatrue}
\def\midinitiala#1{\gdef\@midinitiala{#1}\@midinitialatrue}
\def\surnameb#1{\gdef\@surnameb{#1}\@surnamebtrue}
\def\firstnameb#1{\gdef\@firstnameb{#1}\@firstnamebtrue}
\def\midinitialb#1{\gdef\@midinitialb{#1}\@midinitialbtrue}
\def\surnamec#1{\gdef\@surnamec{#1}\@surnamectrue}
\def\firstnamec#1{\gdef\@firstnamec{#1}\@firstnamectrue}
\def\midinitialc#1{\gdef\@midinitialc{#1}\@midinitialctrue}
\def\signaturep{ %% signature page..
\topmargin 0in \headsep 0in
\begin{center}
\textbf{CERTIFICATION}\\[6pt]
\end{center}
This is to certify that this research paper entitled,
\textbf{``{\MakeUppercase{\@title}}''} and submitted by
\textbf{\MakeUppercase{\@firstnamea} \MakeUppercase{\@midinitiala}.\ \MakeUppercase{\@surnamea}}%
\if@firstnameb, \if@firstnamec\else and \fi
\textbf{\MakeUppercase{\@firstnameb} \MakeUppercase{\@midinitialb}.\ \MakeUppercase{\@surnameb}}\if@firstnamec, \else\space\fi
\if@firstnamec and \textbf{\MakeUppercase{\@firstnamec} \MakeUppercase{\@midinitialc}.\ \MakeUppercase{\@surnamec}} \fi\else\space\fi
to fulfill part of the requirements for
the course Science and Technology Research II was successfully
defended and approved on \expandafter{\@defensedate}.
}%% signature page
Agregué las definiciones condicionales dentro de cada uno de los respectivos componentes del autor (esto no es realmente necesario, ya que solo \if@firstnameX
se usa) y coloqué las condiciones \signaturep
para incluir/excluir ciertas palabras/frases/puntuación según la verdad de las condiciones.
la entrada
\documentclass{highschool}
\defenseDate{18 August 2012}
\title{This is the Title of the Paper}
\surnamea{Author}
\firstnamea{First}
\midinitiala{N}
\surnameb{Author}
\firstnameb{Second}
\midinitialb{N}
%\surnamec{Author}
%\firstnamec{Third}
%\midinitialc{N}
\begin{document}
\prelim %% Prints Preliminary chapters
\end{document}
rendimientos
El siguiente ejemplo mínimo agrega una opción para especificar la lista de autores como una sola macro \listauthors{{<first>},{<second>},{<third>},...}
usando una lista CSV.
\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\makeatletter
\def\@firstmiddlelast#1,#2,#3\@nil{%
\gdef\@firstname{#1}% Extract first name
\gdef\@middlename{#2}% Extract middle name
\gdef\@lastname{#3}% Extract last name
}
\newcommand{\authorfml}{{\bfseries\MakeUppercase{\@firstname\ \@middlename\unskip\ \@lastname}}}% First Middle Last
\newcommand{\authorlfm}{\@lastname,\ \@firstname\ \@middlename\unskip}% Last, First Middle
\newcommand{\authorseq}{\authorfml}% Default author order
\newcounter{@list@item}\newcounter{@total@item}
\newcommand{\listauthors}[1]{%
\setcounter{@total@item}{0}% Reset total count
\renewcommand*{\do}[1]{\stepcounter{@total@item}}%
\docsvlist{#1}% Count number of items in list
\setcounter{@list@item}{1}% Start at first item
\renewcommand*{\do}[1]{%
\stepcounter{@list@item}% Move to next item
\@firstmiddlelast##1\@nil% Extract first/middle/last names
\authorseq% Print author names
\ifnum\value{@list@item}=\value{@total@item}\relax
, and % Second-to-last name
\else
\ifnum\value{@list@item}<\value{@total@item}\relax
, % First set of names
\fi
\fi
}%
\docsvlist{#1}% Print list
}
\makeatother
\begin{document}
See \listauthors{{First1,Middle1,Last1},{First2,,Last2},{First3,Middle3,Last3},
{First4,Middle4,Last4},{First5,,Last5},{First6,Middle6,Last6},
{First7,Middle7,Last7},{First8,Middle8,Last8},{First9,,Last9}} from first to last. \par
\renewcommand{\authorseq}{\authorlfm}
See \listauthors{{First1,Middle1,Last1},{First2,,Last2},{First3,Middle3,Last3}} from first to last. \par
\end{document}
La definición de \authorseq
determina cómo se imprimen los títulos. \authorseq
El valor predeterminado es \authorfml
el que imprime la lista de autores como <first name>\ <middle name>\unskip\ <last name>
( \unskip
se encarga de faltar/inexistente <middle name>
al eliminar el espacio de control anterior \
). El cambio de visualización del autor (para usar en su resumen e introducción, si es necesario) se realiza mediante una redefinición de
\authorseq
, mientras que el formato se controla dentro de las macros utilizadas ( \authorfml
o \authorlfm
o lo que sea).