引数が与えられた場合に条件付きで何かを表示しようとしています。
文書の冒頭に2つのデータを入力できるようにしたい
% Pre or Post epoxy?
\epoxy{pre}
% Checklist ID number
\idnum{123456}
そしてこの形で表示させる
(\@epoxy-epoxy -- \@idnum)
文書内のさまざまな場所に、指定されている場合は行全体を空白にする。
クラスドキュメントをこのように設定しました
\def\epoxy#1{\gdef\@epoxy{#1}}
\def\idnum#1{\gdef\@idnum{#1}}
文書のヘッダーを次のように定義したい。
\AtBeginDocument {\listtitle \newline (\@epoxy-epoxy -- \@idnum) \newline \header \begin{checklist}}
または
\AtBeginDocument {\listtitle \newline \newline \header \begin{checklist}}
idnumとepoxy引数が指定されているかどうかによって
これを実行する方法はありますか?
答え1
を初期化し\@epoxy
、\@idnum
固定値に設定します。次に、\@print@epoxy@idnum
マクロを定義します。
\let\@epoxy\hfuzz % initialize
\let\@idnum\vfuzz % initialize
\def\epoxy#1{\gdef\@epoxy{#1}}
\def\idnum#1{\gdef\@idnum{#1}}
\def\@print@epoxy@idnum{%
\ifx\@epoxy\hfuzz
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi
{\ifx\@idnum\vfuzz
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{\mbox{}}{(\@epoxy--epoxy -- \@idnum)}%
}%
}
答え2
条件文を使用する必要はなく、両方のコマンドが使用されない限り内部マクロが何も生成しないように設定するだけで済みます。したがって、ここではバージョン 1 ~ 3 は空白行を生成しますが、バージョン 4 と 5 は 2 つの項を表示します。
\documentclass{article}
\def\inittitle{%
\def\stuff{\mbox{}}%
\def\xidnum##1{}%
\def\epoxy##1{\def\stuff{\xidnum{##1-epoxy -- }}}%
\def\idnum##1{\def\xidnum####1{####1##1}}%
}
\setlength\parskip{20pt}
\begin{document}
\inittitle
1title \newline \stuff \newline zzz
\inittitle
\epoxy{pre}
2title \newline \stuff \newline zzz
\inittitle
\idnum{123456}
3title \newline \stuff \newline zzz
\inittitle
\epoxy{pre}
\idnum{123456}
4title \newline \stuff \newline zzz
\inittitle
\idnum{123456}
\epoxy{pre}
5title \newline \stuff \newline zzz
\end{document}
答え3
それぞれにブール条件を設定し、割り当て時に true に設定することができます。常にどちらもないか、両方ある場合は、1 つの条件で十分です。ここでは、定義された条件が記述されます。
\documentclass{article}
\newif\ifepoxy\epoxyfalse
\newif\ifidnum\idnumfalse
\makeatletter
\def\epoxy#1{\gdef\@epoxy{#1}\epoxytrue}
\def\idnum#1{\gdef\@idnum{#1}\idnumtrue}
\def\writeStuff{%
\ifepoxy
\@epoxy-epoxy
\fi
\ifidnum
-- \@idnum
\fi}
\makeatother
\begin{document}
Test1: \writeStuff
\epoxy{pre}
Test2: \writeStuff
\idnum{123456}
Test3: \writeStuff
\end{document}
編集 -- 簡素化
コマンドが定義されているかどうかをテストする場合は、 を使用できます\@ifundefined
。定義を個別にテストするには、前の回答を次のように簡略化できます。
\documentclass{article}
\makeatletter
\def\epoxy#1{\gdef\@epoxy{#1}}
\def\idnum#1{\gdef\@idnum{#1}}
\def\writeStuffII{%
\@ifundefined{@epoxy}{}{\@epoxy-epoxy}%
\@ifundefined{@idnum}{}{ -- \@idnum}
}
\makeatother
\begin{document}
代わりに、両方が何かを書き込むように定義する必要がある場合は、条件をネストすることができます。
\def\writeStuffIII{%
\@ifundefined{@epoxy}{}{%
\@ifundefined{@idnum}{}{\@epoxy-epoxy -- \@idnum}}
}