Как изменить размер шрифта **только** для \lstinline{}?

Как изменить размер шрифта **только** для \lstinline{}?

На первый взгляд это может показаться дубликатомДругой вопросуже закрыто как дубликатВот этот. Но это не так ;-)

Как мне установитьглобальноразмер шрифта всех \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}

введите описание изображения здесь

Связанный контент