
Bearbeiten: Machen Sie sich nicht einmal die Mühe, die Frage zu lesen. Springen Sie einfach direkt zuAntwort von Heiko Oberdiek :)
Mit dem listings
Paket können Sie Listen in einigenabsolutDie Schriftgröße ist sehr einfach. Alles, was Sie tun müssen, wenn Sie Ihren Stil definieren, ist, möglicherweise zusammen mit anderen Makros, eine Schriftgrößendeklaration an die Taste listings
' zu übergeben basicstyle
. Zum Beispiel:
\lstdefinestyle{mystyle}{basicstyle=\ttfamily\color{blue}\scriptsize}
Das ist in Ordnung mit angezeigtem Code ( lstlisting
Umgebungen) und Standalone-Dateien ( \lstinputlisting
). Sie möchten jedoch seltenInline-Code( \lstinline
) so gesetzt werdenabsolutSchriftgröße. Was im folgenden Fall passiert, ist wahrscheinlich nicht das, was Sie wollen:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{basicstyle=\ttfamily\color{blue}\scriptsize}
\begin{document}
\Large
Here is a very important keyword: \lstinline|foo|.
\end{document}
Ups... "foo" ist in gesetzt \scriptsize
, im Gegensatz zum umgebenden Text, der in gesetzt ist \Large
. Obwohl Sie den Stil größtenteils beibehalten möchten (Schreibmaschinenschrift und blaue Farbe hier), möchten Sie wahrscheinlich, dass der Inline-Code die Schriftgrößenspezifikation überschreibt und in gesetzt wirdaktuelle Schriftgröße, Rechts?
Wenn Sie nun einfach versuchen , \fontsize{\f@size}{\f@baselineskip}
an zu übergeben basicstyle
, werden Sie enttäuscht sein:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{basicstyle=\ttfamily\color{blue}\scriptsize}
\begin{document}
\Large
Here is a very important keyword: \lstinline|foo|.
\makeatletter
Here is a very important keyword:
\lstinline[basicstyle=\fontsize{\f@size}{\f@baselineskip}\selectfont]|foo|.
\makeatother
\end{document}
Sie können Ihr Taschentuch zücken: Sie haben gerade den aktuellen Grundstil überschrieben und dadurch die Schreibmaschinenschrift- und Farbspezifikationen verloren! Sie könnten natürlich schreiben
\lstinline%
[basicstyle=\ttfamily\color{blue}\fontsize{\f@size}{\f@baselineskip}\selectfont]%
|foo|
Dieser Ansatz setzt jedoch voraus, dass Sie die ursprüngliche Definition kennen basicstyle
(die möglicherweise tief in einem Paket vergraben ist, viel zu tief für Normalsterbliche) und ist ein typisches Beispiel für Code-Duplikation, die Sie lieber vermeiden möchten.
Daher habe ich mir den folgenden Workaround ausgedacht, der gut funktioniert:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\makeatletter
\newcommand\applyCurrentFontsize
{%
% we first save the current fontsize, baseline-skip,
% and listings' basicstyle
\let\f@sizeS@ved\f@size%
\let\f@baselineskipS@ved\f@baselineskip%
\let\basicstyleS@ved\lst@basicstyle%
% we now change the fontsize of listings' basicstyle
\renewcommand\lst@basicstyle%
{%
\basicstyleS@ved%
\fontsize{\f@sizeS@ved}{\f@baselineskipS@ved}%
\selectfont%
}%
}
\makeatother
\newcommand\scaledlstinline[2][]
{%
\bgroup%
\lstset{#1}%
\applyCurrentFontsize%
% ... possibly other macros whose effects should remain local ...
\lstinline|#2|%
\egroup%
}
\lstset{basicstyle=\ttfamily\color{blue}\scriptsize}
\begin{document}
\Large
Here is a very important keyword: \lstinline[]|foo|.
Here is a very important keyword: \scaledlstinline{foo}.
\end{document}
So weit, so gut ... Allerdings stoße ich auf Probleme, wenn ich versuche, diese Taktik auf anzuwenden \lstMakeShortInline
, ein listings
Makro, mit dem Sie ein einstelliges Trennzeichen für Inline-Code definieren können (die entsprechenden Zeilen habe ich listings.dtx
unten gepostet). Genauer gesagt kann ich aufgrund der eigentümlichen Art und Weise , \lstMakeShortInline@
wie verwendet wird \lst@shortinlinedef
, nicht herausfinden, wo ich meine Gruppierungsbefehle platzieren soll.
Ich wäre für jede Anleitung dankbar.
\newcommand\lstMakeShortInline[1][]{%
\def\lst@shortinlinedef{\lstinline[#1]}%
\lstMakeShortInline@}%
\def\lstMakeShortInline@#1{%
\expandafter\ifx\csname lst@ShortInlineOldCatcode\string#1\endcsname\relax
\lst@shortlstinlineinfo{Made }{#1}%
\lst@add@special{#1}%
% \end{macrocode}
% The character's current catcode is stored in
% |\lst@ShortInlineOldCatcode\|\meta{c}.
% \begin{macrocode}
\expandafter
\xdef\csname lst@ShortInlineOldCatcode\string#1\endcsname{\the\catcode`#1}%
% \end{macrocode}
% The character is spliced into the definition using the same trick as
% used in |\verb| (for instance), having activated |~| in a group.
% \begin{macrocode}
\begingroup
\catcode`\~\active \lccode`\~`#1%
\lowercase{%
% \end{macrocode}
% The character's old meaning is recorded
% in |\lst@ShortInlineOldMeaning\|\meta{c} prior to assigning it a new one.
% \begin{macrocode}
\global\expandafter\let
\csname lst@ShortInlineOldMeaning\string#1\endcsname~%
\expandafter\gdef\expandafter~\expandafter{\lst@shortinlinedef#1}}%
\endgroup
% \end{macrocode}
% Finally the character is made active.
% \begin{macrocode}
\global\catcode`#1\active
% \end{macrocode}
% If we suspect that \meta{c} is already a short reference, we tell
% the user. Now he or she is responsible if anything goes wrong\,\dots
% (Change in \packagename{listings}: We give a proper error here.)
% \begin{macrocode}
\else
\PackageError{Listings}%
{\string\lstMakeShorterInline\ definitions cannot be nested}%
{Use \string\lstDeleteShortInline first.}%
{}%
\fi}
Antwort1
Das Paket listings
verfügt über zwei Hooks TextStyle
und DisplayStyle
/oder einen Schalter \lst@ifdisplaystyle
, die Sie für Ihre Zwecke verwenden können, um in Inline- und angezeigten Codeauflistungen eine andere Schriftgröße einzustellen, zB:
\documentclass{article}
\usepackage{color}
\usepackage{listings}
\makeatletter
\lstdefinestyle{mystyle}{
basicstyle=%
\ttfamily
\color{blue}%
\lst@ifdisplaystyle\scriptsize\fi
}
\makeatother
\lstset{style=mystyle}
\begin{document}
\Large
\noindent
Here is a very important keyword: \lstinline|foo|.
\begin{lstlisting}
Some code with foo.
\end{lstlisting}
\end{document}
Antwort2
@HeikoOberdieks Erklärung zuseine Antwortoben unterschätzt seine Leistungsfähigkeit und tatsächlich würde man allein aufgrund seiner Erklärung nicht meinen, dass seine Antwort das Problem des OP vollständig gelöst hat (wie ein Kommentator einwandte).
Heiko behauptet lediglich, dass er eine Methode bereitgestellt hat, „um in Inline- und angezeigten Codeauflistungen eine andere Schriftgröße einzustellen“. Aber was der OP wollte, war, dass \lstinline
die Schriftgröße des umgebenden Textes übernommen wird. Heikos Lösung tut das, obwohl es den Lesern nicht klar sein wird, dass sie das tut.
Aus diesem Grund möchte ich nur ein Beispiel anführen, das zeigt, dass sich die Schriftgröße mit Heikos Lösung tatsächlich \lstinline
vergrößert und verkleinert, um sich an den umgebenden Text anzupassen. (Wenn Heiko seiner Antwort ein ähnliches Beispiel hinzufügen möchte, würde ich dieses gerne löschen.)
Um den Vergleich der Höhen der beiden s zu erleichtern, füge ich \texttt{foo}
jeweils direkt ein hinzu.\lstinline|foo|
foo
\documentclass{article}
\usepackage{color}
\usepackage{listings}
\makeatletter
\lstdefinestyle{mystyle}{
basicstyle=%
\ttfamily
\color{blue}%
\lst@ifdisplaystyle\footnotesize\fi
}
\makeatother
\lstset{style=mystyle}
\begin{document}
\title{Here is a title with \lstinline|foo| \texttt{foo}.}
\date{}
\maketitle
\section{Here is a section heading with \lstinline|foo| \texttt{foo}.}
\Large
Here is: \lstinline|foo| \texttt{foo}.\\
\Huge
Here is: \lstinline|foo| \texttt{foo}.\\
\begin{lstlisting}
Some code with foo.
\end{lstlisting}
\end{document}