列表将具有与 上指定的相同大小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}