在脚注内更改内联列表字体大小

在脚注内更改内联列表字体大小

列表将具有与 上指定的相同大小basicstyle,我已将其设置为footnotesize,这对我来说看起来最合适。但是,这也适用于内联列表,内联列表通常出现在普通文本上,因此应该是普通大小。

可以使用 来更改\lst@AddToHook{TextStyle}{\let\lst@basicstyle\normalsize}。但是,这会导致脚注内的内联列表也是正常大小。我想更改该行为,以便\footnotesize在脚注内时大小自动更改为。

这是我最好的尝试:

\documentclass{article}

%\usepackage{silence}
\usepackage{listings, letltxmacro}

\lstset{
    basicstyle=\footnotesize\ttfamily\selectfont
}

% Making so \lstinline has the same size as normal text
\makeatletter
\lst@AddToHook{TextStyle}{\let\lst@basicstyle\normalsize\ttfamily\selectfont}
\makeatother

% Setting the correct size on footnote
\LetLtxMacro{\OldFootnote}{\footnote}
\makeatletter
\renewcommand{\footnote}[2][\value{footnote}]{ %
    \lst@AddToHook{TextStyle}{\let\lst@basicstyle\footnotesize}% Setting size of lslinline to footnote
    \OldFootnote[{#1}]{#2}%
    \lst@AddToHook{TextStyle}{\let\lst@basicstyle\normalsize}% Setting size of lslinline to normal
    \relax%
}%
\makeatother

\begin{document}
    Sample text\footnote{Sample footnote with \lstinline|inline_listings| embedded with footnote size.} with normal size \lstinline|inline_listings|.
\end{document}

在此处输入图片描述

在此处输入图片描述

这个解决方案有3个问题:

  • 所有脚注均以 0 开头。
  • \footnote即使代码中单词和脚注符号之间没有空格,单词和脚注符号之间也总是有一个空格。
  • 这似乎有点“黑客行为”。感觉就像\lst@AddToHook每次使用脚注时都会占用大量编译器资源,如果你有一个包含大量脚注的长文件。

所以我的问题是:是否有更优雅或“正确”的解决方案?如果没有,我该如何解决前两个问题?

答案1

最简单的策略是在 之上定义一个命令\lstinline

\documentclass{article}
\usepackage{listings}

\lstset{
  basicstyle=\footnotesize\ttfamily
}
\newcommand{\code}[1][]{\lstinline[basicstyle=\ttfamily,#1]}

\begin{document}
\vspace*{\fill}

Sample text

\begin{lstlisting}
This is footnote size
\end{lstlisting}

Sample text\footnote{Sample footnote with \code|inline_listings| embedded 
with footnote size.} with normal size \code|inline_listings|.

\end{document}

在此处输入图片描述

答案2

不使用新命令的替代方法是简单地使用重置内联列表的字体大小\lst@AddToHook{TextStyle},因为当它们没有特定的字体大小时,它们会适应当前字体大小。

\documentclass{article}

\usepackage{listings}

\lstset{
    basicstyle=\footnotesize\ttfamily
}

\makeatletter
\lst@AddToHook{TextStyle}{\let\lst@basicstyle\ttfamily}
\makeatother

\begin{document}
\vspace*{\fill}

Sample text

\begin{lstlisting}
This is footnote size
\end{lstlisting}

Sample text\footnote{Sample footnote with \lstinline|inline_listings| embedded with footnote size.} with normal size \lstinline|inline_listings|.
    
\end{document}

在此处输入图片描述

相关内容