\renewcommand 的问题

\renewcommand 的问题

我正在尝试使用 来\renewcommand更改整个正文中脚注的大小。我通过更改\footenotesize为不同的命令来实现此\scriptsize目的。稍后,我希望该命令\footnotesize恢复其原始用途。但是,\renewcommand再次使用 执行此操作会导致我的 .tex 文件停止编译,通常是在第一个\includegraphics命令上。即使没有该\includegraphics命令,.tex 文件也不会编译。我不明白发生了什么,但如果我删除第二个\renewcommand,文档就会编译。

\documentclass{article}
\usepackage{graphicx}   % Graphics package to include figures (need graphicx.sty)

\begin{document}

\renewcommand{\footnotesize}{\scriptsize}

Here is some text. And Here is some text with a footnote.\footnote{Here is the footnote text.}

\renewcommand{\footnotesize}{\footnotesize}

\begin{figure}
\caption{Probability of Leaving within One Year: 1999-2002}
        \begin{center}
   \includegraphics[width=4in]{combined-one-3060-vertical.eps}
   \end{center}
\label{fig:leave1-baseline}
{\footnotesize
Notes:  The top panel plots the average leave probability for one-year age bins for the 2002 sample, while the bottom panel separately plots these probabilities for the 2002 and 1999-2001 samples.
}
\end{figure}

\end{document}

答案1

您的代码不起作用,因为您使用的命令与新命令和旧命令相同

\renewcommand{\footnotesize}{\footnotesize}

正确的做法是,首先保存\footnotesize

\let\oldfootnotesize\footnotesize

当你想恢复其含义时,使用

\renewcommand{\footnotesize}{\oldfootnotesize}

因此,修改你的 MWE 为

\documentclass{article}
\usepackage[demo]{graphicx}   % Graphics package to include figures (need graphicx.sty)

\begin{document}

\let\oldfootnotesize\footnotesize
\renewcommand{\footnotesize}{\scriptsize}

Here is some text. And Here is some text with a footnote.\footnote{Here is the footnote text.}

\renewcommand{\footnotesize}{\oldfootnotesize}

\begin{figure}
\caption{Probability of Leaving within One Year: 1999-2002}
        \begin{center}
   \includegraphics[width=4in]{combined-one-3060-vertical.eps}
   \end{center}
\label{fig:leave1-baseline}
{\footnotesize
Notes:  The top panel plots the average leave probability for one-year age bins for the 2002 sample, while the bottom panel separately plots these probabilities for the 2002 and 1999-2001 samples.
}
\end{figure}

\end{document} 

作品。

答案2

当你执行类似以下操作时,你将创建一个循环引用,从而耗尽 TeX 的容量

\renewcommand{\footnotesize}{\footnotesize}

处理 TeX 中临时更改的典型方法是使用定位技术或者范围界定

\begingroup
\renewcommand{\footnotesize}{\scriptsize}
% do stuff
\endgroup

\footnotesize这将恢复after的原始含义\endgroup。或者,您可以按以下方式使用中间变量:

\let\oldfootnotesize\footnotesize
\renewcommand{\footnotesize}{\scriptsize}
% do stuff
\let\footnotesize\oldfootnotesize

使用 会在调用时\let<csname1><csname2>立即将 复制<csname2>到 中。根据控制序列的类型,<csname1>letltxmacro提供了一个安全的替代方案。请参阅何时使用\LetLtxMacro

虽然上述内容有望回答这个问题,但不建议也不鼓励这样做。事实上,使用

\footnote{\scriptsize Here is the footnote text.}

即使没有并发症,也可能一样好。

答案3

我会用不同的方式来做到这一点,这样就无需重新定义那些相当棘手的\renewcommand内核命令就可以工作。\footnotesize

脚注文本中使用的字体的选择由 做出\@footnotetext,因此我们的首要任务是进行间接调用而不是直接调用:

\usepackage{etoolbox} % this goes among the other instructions of the same type

% the following code should be in the preamble
\makeatletter % we must add to commands with an @ in their name
\patchcmd{\@footnotetext}
  {\footnotesize}
  {\footnotefontsize}
  {}{}
\newcommand{\footnotefontsize}{\footnotesize}
\makeatother

这段代码并没有真正改变字体大小;但现在你可以自由地说

\renewcommand{\footnotefontsize}{\scriptsize}

甚至(但愿不会)

\renewcommand{\footnotefontsize}{\Large}

或者可能

\renewcommand{\footnotefontsize}{\footnotesize}

完整示例

\documentclass{article}
\usepackage{etoolbox} % this goes among the other instructions of the same type

% the following code should be in the preamble
\makeatletter % we must add to commands with an @ in their name
\patchcmd{\@footnotetext}
  {\footnotesize}
  {\footnotefontsize}
  {}{}
\newcommand{\footnotefontsize}{\footnotesize}
\makeatother

\begin{document}
a\footnote{First}

\renewcommand{\footnotefontsize}{\Large}

b\footnote{Second}

\renewcommand{\footnotefontsize}{\footnotesize}

c\footnote{Third}
\end{document}

在此处输入图片描述

相关内容