LaTeX のドキュメント クラスで条件文を作成するにはどうすればよいでしょうか?

LaTeX のドキュメント クラスで条件文を作成するにはどうすればよいでしょうか?

highschool.cls私は、論文のフォーマットを標準化するために、 に基づいて、学校の高校の研究論文用のドキュメント クラスを作成しようとしていますbook.cls。次のテキストがページに表示されるように、「CERTIFICATION」という見出しの付いた署名ページを定義しようとしています。

ここに画像の説明を入力してください

これを実現するために、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

ソースTeXファイルでは、次のように入力します。

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

私が達成したいのは

  • \surnameb,\firstnameb,\midinitialb,\surnamec,\firstnamec,およびが宣言されていない場合は\midinitialc、次のテキストが表示されます。

ここに画像の説明を入力してください

  • \surnamec,\firstnamec,およびが宣言されていない場合は\midinitialc、次のテキストが表示されます。

ここに画像の説明を入力してください

  • すべてが宣言されると、次のテキストが表示されます。 ここに画像の説明を入力してください

これは可能ですか? 可能であれば、どうすればいいですか?

答え1

次のソリューションはこれらの仮定に基づいています。

  1. あなたにできるのは

    • 著者 1; または
    • 著者 1、 そして著者 2; または
    • 著者 1著者 2、 そして著者 3

    例えば、

    • 著者 1、 そして著者 3; または
    • 著者 2、 そして著者 3; または
    • 著者 2のみ、または
    • 著者 3のみ。
  2. 著者が「存在する」かどうかを区別するには、名前のみを入力するだけで十分です。

2番目の条件は変更可能ですが、名前を持つことが論理的に思えますそして姓とおそらくミドルネームは付けないがないファーストネーム。その結果、次の定義を使用できます。

\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

それぞれの著者コンポーネント内に条件付き定義を追加しました (only\if@firstnameXが使用されているため、これは実際には必要ありません)。また、\signaturep条件の真偽に基づいて特定の単語/フレーズ/句読点を含める/除外する条件を全体に配置しました。

入力

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

収穫

ここに画像の説明を入力してください


\listauthors{{<first>},{<second>},{<third>},...}次の最小限の例では、 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}

の定義により、\authorseqタイトルの印刷方法が決まります。\authorseqのデフォルトはで\authorfml、著者リストを として印刷します<first name>\ <middle name>\unskip\ <last name>(は、先行する制御スペース を削除する際に、\unskip欠落/存在しないものを処理します)。著者表示の切り替え (必要に応じて、要約や序論で使用するため) は の再定義によって行われ、書式設定は使用されるマクロ (またはなど) 内で制御されます。<middle name>\\authorseq\authorfml\authorlfm

関連情報