Wie erstelle ich Bedingungen in einer Dokumentklasse für Latex?

Wie erstelle ich Bedingungen in einer Dokumentklasse für Latex?

Ich versuche, eine Dokumentklasse highschool.clsfür die Forschungsarbeiten unserer Highschool-Schule zu schreiben, um book.clsdas Format der Arbeiten zu standardisieren. Ich versuche, eine Signaturseite mit der Überschrift „ZERTIFIZIERUNG“ so zu definieren, dass der folgende Text auf der Seite erscheint.

Bildbeschreibung hier eingeben

Um dies zu erreichen, habe ich die folgenden Definitionen für die LaTeX-Klasse vorgenommen 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

In meine TeX-Quelldatei würde ich etwas wie

\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}

Was ich erreichen möchte, ist, dass

  • wenn kein \surnameb,\firstnameb,\midinitialb,\surnamec,\firstnamec,und \midinitialcdeklariert ist, erhalte ich folgenden Text:

Bildbeschreibung hier eingeben

  • wenn kein \surnamec,\firstnamec,und \midinitialcdeklariert ist, erhalte ich folgenden Text:

Bildbeschreibung hier eingeben

  • und wenn alle deklariert sind, erhalte ich den Text: Bildbeschreibung hier eingeben

Ist das möglich? Und wenn ja, wie mache ich das?

Antwort1

Die folgende Lösung basiert auf diesen Annahmen:

  1. Man kann nur

    • Autor 1; oder
    • Autor 1, UndAutor 2; oder
    • Autor 1,Autor 2, UndAutor 3

    und nicht zum Beispiel

    • Autor 1, UndAutor 3; oder
    • Autor 2, UndAutor 3; oder
    • Autor 2nur; oder
    • Autor 3nur.
  2. Um zu unterscheiden, ob ein Autor „existiert“ oder nicht, genügt die Angabe lediglich des Vornamens.

Die zweite Bedingung kann modifiziert werden, aber es schien logisch, dass man einen Vornamen hatUndeinen Nachnamen undmöglicherweiseein zweiter Vorname, aber nienichtein Vorname. Folglich können Sie dann folgende Definitionen verwenden:

\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

Ich habe die bedingten Definitionen in die jeweiligen Autorenkomponenten eingefügt (das ist nicht wirklich notwendig, da nur \if@firstnameXverwendet wird) und die Bedingungen überall eingefügt, \signaturepum bestimmte Wörter/Phrasen/Satzzeichen basierend auf der Wahrheit der Bedingungen ein-/auszuschließen.

Die Eingabe

\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}

Erträge

Bildbeschreibung hier eingeben


Das folgende minimale Beispiel fügt eine Option hinzu, um die Autorenliste als einzelnes Makro \listauthors{{<first>},{<second>},{<third>},...}mithilfe einer CSV-Liste anzugeben.

Bildbeschreibung hier eingeben

\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}

Die Definition von \authorseqbestimmt, wie die Titel gedruckt werden. \authorseqStandardmäßig \authorfmlwird die Autorenliste wie folgt gedruckt <first name>\ <middle name>\unskip\ <last name>( \unskipberücksichtigt fehlende/nicht vorhandene <middle name>durch Entfernen des vorangehenden Leerzeichens \). Das Umschalten der Autorenanzeige (zur Verwendung in Ihrer Zusammenfassung und Einleitung, falls erforderlich) erfolgt durch eine Neudefinition von , während die Formatierung innerhalb der verwendeten Makros ( oder oder was auch immer) \authorseqgesteuert wird .\authorfml\authorlfm

verwandte Informationen