
На первый взгляд это может показаться дубликатомДругой вопросуже закрыто как дубликатВот этот. Но это не так ;-)
Как мне установитьглобальноразмер шрифта всех \lstinline
макросов, независимо от размера шрифта lstlisting
окружения?
По умолчанию для окружений у меня установлено значение \small
, которое выглядит очень хорошо, но мне нужен нормальный размер для встроенных элементов, так как оно лучше сочетается с окружающим текстом.
Ниже, как и просили, MWE, показывающий повторение макросов \lstset
:
\documentclass{article}
\usepackage{listings}
\lstset{basicstyle=\ttfamily\small,numbers=left}
\begin{document}
\begin{lstlisting}
Displayed code listings
Look great
In a small font
\end{lstlisting}
I would like \lstinline{inline listings} to be at normalsize as in
\lstset{basicstyle=\ttfamily}%
\lstinline{this piece of code}
but then I have to issue a new \verb|lstset| macro
\lstset{basicstyle=\ttfamily\small}%
in order to get back to small size
\begin{lstlisting}
for displayed code listings
to show appropiately.
again
\end{lstlisting}
\end{document}
решение1
А как насчет создания новой команды, как \myinline
в моем MWE:
\documentclass{article}
\usepackage{listings}
\lstset{basicstyle=\ttfamily\small,numbers=left}
\newcommand{\myinline}[1]{\lstinline[basicstyle={\ttfamily\normalsize}]{#1}}
\begin{document}
\begin{lstlisting}
Displayed code listings
Look great
In a small font
\end{lstlisting}
I would like \lstinline{inline listings} to be at normalsize as in
\myinline{this piece of code}
but then I have to issue a new \verb|lstset| macro
in order to get back to small size
\begin{lstlisting}
for displayed code listings
to show appropiately.
again
\end{lstlisting}
\end{document}
решение2
Если заглянуть в код, то такого метода различения этих двух нет. Но, похоже, мы можем сделать один, потому что \lstinline
он работает \lstset
внутри, поэтому мы могли бы добавить патч. Не знаю, имеет ли это другие последствия.
\documentclass[a4paper]{article}
\usepackage{listings,xcolor,xpatch}
\lstset{
basicstyle=\color{red}\ttfamily,
}
% style for inline
\lstdefinestyle{foobar}{
basicstyle=\color{green}\ttfamily\tiny,
}
% \ShowCommand\lstinline shows \lstinline runs \lstset{flexiblecolumns,#1}, so we mess with that
\makeatletter
\xpatchcmd\lstinline{flexiblecolumns,}{flexiblecolumns,style=foobar,}{}{\typeout{patch failed}}
\makeatother
\begin{document}
\begin{lstlisting}
FooBar
\end{lstlisting}
inline \lstinline|FooBar|
\end{document}
решение3
Сохраните \lstinline
под другим именем и переопределите его, чтобы передать исходному также опцию basicstyle=\ttfamily
(без \small
).
\documentclass{article}
\usepackage{listings}
\lstset{basicstyle=\ttfamily\small,numbers=left}
\NewCommandCopy{\originallstinline}{\lstinline}
\RenewDocumentCommand{\lstinline}{O{}}{%
\originallstinline[basicstyle=\ttfamily,#1]%
}
\begin{document}
\begin{lstlisting}
Displayed code listings
Look great
In a small font
\end{lstlisting}
Here I see that \lstinline{inline listings} is at normalsize
and there is no need to issue a new \verb|lstset| macro
in order to get back to small size
\begin{lstlisting}
for displayed code listings
to show appropriately.
again
\end{lstlisting}
We can also pass options like in \lstinline[language=TeX]|\LaTeX|
\end{document}