我将尝试根据一个命令编写 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
具有相同的原始{}
定义,则它们将会具有相同的定义。