\thanks 在 LaTeX 文章类中如何发挥作用?

\thanks 在 LaTeX 文章类中如何发挥作用?

我试图弄清楚\thanks在标准 LaTeX 文章类(未指定选项)中为什么会用星号作为脚注标记。

我迷失了方向,试图追踪\@thanks\footnotemark\c@footnote到 和article.cls的定义和重新定义latex.ltx。我还尝试 grepping 的所有 LaTeX 基础文件\\ast,认为这必须在某处用于重新定义脚注标记,但我什么也没找到。

(出现这个问题是因为我想将\thanks脚注转换为尾注以便于期刊提交,但我的问题是关于这个命令的机制。)

梅威瑟:

\documentclass{article}
\begin{document}
\title{Example}
\author{Name\thanks{Affiliation, e-mail}}
\maketitle
\end{document}

以下是我能弄清楚的:

\maketitle中的定义article.cls

\newcommand\maketitle{\par                                                                     
  \begingroup                                                                                  
    \renewcommand\thefootnote{\@fnsymbol\c@footnote}%                                          
    \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%                        
    \long\def\@makefntext##1{\parindent 1em\noindent                                           
            \hb@[email protected]{%                                                                     
                \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%                            
    \if@twocolumn                                                                              
      \ifnum \col@number=\@ne                                                                  
        \@maketitle                                                                            
      \else                                                                                    
        \twocolumn[\@maketitle]%                                                               
      \fi                                                                                      
    \else                                                                                      
      \newpage                                                                                 
      \global\@topnum\z@   % Prevents figures from going at top of page.                       
      \@maketitle                                                                              
    \fi                                                                                        
    \thispagestyle{plain}\@thanks                                                              
  \endgroup                                                                                    
  \setcounter{footnote}{0}%                                                                    
  \global\let\thanks\relax                                                                     
  \global\let\maketitle\relax                                                                  
  \global\let\@maketitle\relax                                                                 
  \global\let\@thanks\@empty                                                                   
  \global\let\@author\@empty                                                                   
  \global\let\@date\@empty                                                                     
  \global\let\@title\@empty                                                                    
  \global\let\title\relax                                                                      
  \global\let\author\relax                                                                     
  \global\let\date\relax                                                                       
  \global\let\and\relax                                                                        
}

我看到脚注标记以某种方式重新定义,并\@thanks在最后调用。但\thanks\@thanks未在此文件中定义。

以下是中\thanks和的定义:\@thankslatex.ltx

\def\thanks#1{\footnotemark                                                                    
    \protected@xdef\@thanks{\@thanks                                                           
        \protect\footnotetext[\the\c@footnote]{#1}}%                                           
}                                                                                              
\let\@thanks\@empty

似乎\thanks重新定义\@thanks\@thanks加上包含其参数的脚注。它似乎\thec@footnote会产生脚注计数器的值并排版数字,而不是星号。文章类调用\@thefnmark\maketitle从未将其重新定义为星号(据我所知)。

答案1

让我们看一些定义:

  • \thanks之内article.cls

    \def\thanks#1{\footnotemark
        \protected@xdef\@thanks{\@thanks
            \protect\footnotetext[\the\c@footnote]{#1}}%
    }
    

    此宏设置脚注标记 - \footnotemark。然后它添加脚注文字的\@thanks使用\protected@xdef\@thanks{\@thanks <new footnote text>}

  • \maketitlearticle.cls

    \newcommand\maketitle{\par
      \begingroup
        \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
        \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
        \long\def\@makefntext##1{\parindent 1em\noindent
                \hb@[email protected]{%
                    \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
        \if@twocolumn
          \ifnum \col@number=\@ne
            \@maketitle
          \else
            \twocolumn[\@maketitle]%
          \fi
        \else
          \newpage
          \global\@topnum\z@   % Prevents figures from going at top of page.
          \@maketitle
        \fi
        \thispagestyle{plain}\@thanks
      \endgroup
      \setcounter{footnote}{0}%
      \global\let\thanks\relax
      \global\let\maketitle\relax
      \global\let\@maketitle\relax
      \global\let\@thanks\@empty
      \global\let\@author\@empty
      \global\let\@date\@empty
      \global\let\@title\@empty
      \global\let\title\relax
      \global\let\author\relax
      \global\let\date\relax
      \global\let\and\relax
    }
    

    在内部\maketitle,对脚注机制进行了一些重新定义在组内 \begingroup... \endgroup

    首先,将脚注编号更改为\@fnsymbol- 常规的*§,,(错误)序列:**††‡‡

    \def\@fnsymbol#1{\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or
       \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger
       \or \ddagger\ddagger \else\@ctrerr\fi}}
    

    f其次,对oot notemark和 的设置方式进行了更新text- 即更新了宏\@makefnmark\@makefntext。这些更新(重新定义)非常小,因为它们实际上与原始定义非常相似外部用法\maketitle(也取自latex.ltx

    % From latex.ltx
    \def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
    % From article.cls
    \newcommand\@makefntext[1]{%
        \parindent 1em%
        \noindent
        \hb@[email protected]{\hss\@makefnmark}#1}
    

    唯一的主要区别是使用 来设置脚注标记\rlap。这是因为在 s 列表中\author,您通常会用 来分隔,,而此重新定义允许脚注标记与之重叠。

    第三,使用以下命令设置实际标题\@maketitle

    \def\@maketitle{%
      \newpage
      \null
      \vskip 2em%
      \begin{center}%
      \let \footnote \thanks
        {\LARGE \@title \par}%
        \vskip 1.5em%
        {\large
          \lineskip .5em%
          \begin{tabular}[t]{c}%
            \@author
          \end{tabular}\par}%
        \vskip 1em%
        {\large \@date}%
      \end{center}%
      \par
      \vskip 1.5em}
    

    标记(脚注标记)的设置\thanks以及收集都是\@thanks随着的设置进行的\@author

    \maketitle最后,在 的末尾\@thanks调用 ,以“释放”用 收集的累积脚注文本\@author

    由于\@thanks全局携带内容(由于\protected@xdef),它会在末尾\maketitle\begingroup...\endgroup范围之外)与其他宏一起被清除。

现在让我们看一个例子:

在此处输入图片描述

\documentclass{article}
\usepackage[paperheight=20\baselineskip]{geometry}% Just for this example
\title{Some title}
\author{Author1\thanks{Abc}, Author2\thanks{Def} and Author3\thanks{Ghi}}
\begin{document}
\maketitle
\end{document}
  • 请注意脚注标记与之后的标点符号是如何重叠的Author1

  • 随着

    \usepackage{etoolbox}
    \makeatletter
    % \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
    \patchcmd{\@maketitle}{\@author}{\@author\show\@thanks}{}{}
    \makeatother
    

    在序言中我们可以看到输出来自内部的.log累积脚注文本的序列:\thanks\@author

    > \@thanks=macro:
    ->\protect \footnotetext [1]{Abc}\protect \footnotetext [2]{Def}\protect \footn
    otetext [3]{Ghi}.
    \@maketitle ...ular}[t]{c}\@author \show \@thanks 
                                                      \end {tabular}\par }\vskip...
    l.11     \maketitle
    

    \maketitle如上所述,这些都是在结束时立即设置的。

相关内容