如何根据一个命令切换 if else 条件

如何根据一个命令切换 if else 条件

我将尝试根据一个命令编写 if 或 else 条件代码\sectiontype{}命令

情况1:

如果 tex 文件中存在 \sectiontype{} 命令,则执行以下代码

\artsubmitted{\textbf{Section Title} The article was submitted to \@sectiontype}

案例 2:

如果 tex 文件中存在 \sectiontype{} 命令,则执行以下代码

\artsubmitted{The article was submitted to Jounal Division}

平均能量损失

    \documentclass{article}
    \usepackage{authblk}

    \makeatletter

    \newcommand\editedhead{\raggedright \textbf{Edited by:}\break}

    \let\@editor\@empty
    \newcommand{\editor}[1]{\protected@edef\@editor{\@editor #1\par}}

    \def\@artsubmitted{}
    \def\artsubmitted#1{%
         \gdef\@artsubmitted{\raggedright  #1}}

    \def\@sectiontype{}
    \def\sectiontype#1{%
         \gdef\@sectiontype{\raggedright #1}}

    \sectiontype{Fuel Cells}


\ifx\@sectiontype\@empty
\artsubmitted{{The article was submitted to Jounal Division}}
\else
\artsubmitted{\textbf{Section Title}: The article was submitted to \@sectiontype}
\fi

    \def\@maketitle{%
      \newpage
      \null
    \vbox to \textheight{\vbox to \textheight{\vspace*{12pc}%\vfill%
    \hbox to 10pc{\hfill%
    \begin{minipage}[b]{10pc}
    {\editedhead\par}
    {\@editor\par}%
    {\@artsubmitted}
    \end{minipage}}}
    \hspace*{11pc}
    \vbox to \textheight{\vspace*{-44pc}%
    \hbox to 10pc{\hfill%
    \begin{minipage}[b]{31pc}  
      \let \footnote \thanks
        {\@title \par}%
        \vskip 1.5em%   
        {\large
          \lineskip .5em%
          \begin{tabular}[t]{l}%
            \raggedright\@author
          \end{tabular}\par}%
       \end{minipage}}}}%
      \par
      \vskip 8.5em}

    \makeatother

    \begin{document}

    \title{Hormonal crosstalk for root development}
    \author[1]{Author One}
    \author[2]{Author Two}
    \author[2]{Author Three}
    \affil[1]{Author Address}
    \editor{Editor A and Editor address}
    \editor{Editor B and Editor address}
    \editor{Editor C and Editor address}
    \maketitle

    \end{document}

下面提到的命令在 tex 文件序言空间中成功执行。但相同的编码在 article.cls 文件中不起作用。我不知道原因是什么?

    \ifx\@sectiontype\@empty
\artsubmitted{{The article was submitted to Jounal Division}}
\else
\artsubmitted{\textbf{Section Title}: The article was submitted to \@sectiontype}
\fi

答案1

你有

\if\@sectiontype

\if如果扩展后的前两个不可扩展标记是相同的字符,则为真。

\@sectiontype可以通过定义进行扩展

\raggedright Fuel cells

因此它会扩展\raggedright

其定义为

\def\raggedright{%
  \let\\
  .....}

\let因此它将与定义中的第一个不可扩展标记进行比较\\

其中\\定义为

\DeclareRobustCommand\\{%
  \let \reserved@e \relax

因此,以哪个\\开头的定义是,测试哪个是两个非字符,哪个算作真。\protect\relax\if\let\relax

然而,刚刚完成的扩展中剩余的标记现在位于输入流中,因此特别是的扩展\\具有来自

\def\@gnewline #1{%
  \ifvmode
    \@nolnerr
  \else
    \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break
  \fi}

在序言中,您处于 vmode,因此它首先给出无线错误。


你没有明确说明你想做什么,但我怀疑你想要测试

\ifx\@sectiontype\@empty

它无需扩展就可以测试这两个命令是否具有相同的定义,如果\@sectiontype具有相同的原始{}定义,则它们将会具有相同的定义。

相关内容