lstinline verschluckt Leerzeichen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: lstinline verschluckt Leerzeichen

Re: lstinline verschluckt Leerzeichen

von MoeWe » Mi 8. Mai 2024, 17:28

Du kannst mit \lstset die Parameter einfach global setzen. Dann reicht es, nur \lstinline aufzurufen.
\documentclass{article}

\usepackage{listings}
\lstset{columns=fixed,basicstyle=\ttfamily\bfseries\small,keepspaces}

\begin{document}
Lorem  \lstinline{normal = plane - (plane . e0) ^   einf;} ipsum
\end{document}
Alternativ klappt die folgende Lösung, da TeX dann das Argument, das hier speziell behandelt werden muss, nicht als Argument eines anderen Makros lesen muss (wo diese Spezialbehandlung dann nicht funktioniert).
\documentclass{article}

\usepackage{listings}
\newcommand*{\code}{\lstinline[columns=fixed,basicstyle=\ttfamily\bfseries\small,keepspaces]}

\begin{document}
Lorem  \code{normal = plane - (plane . e0) ^   einf;} ipsum
\end{document}


Hmmm. Ich habe nur auf die Leerzeichen geachtet, merke aber gerade, dass columns=fixed hier nicht mit \lstset funktioniert, da das bei \lstinline offenbar immer explizit erfragt werden muss (zumindest verstehe ich die Dokumentation so).

Re: lstinline verschluckt Leerzeichen

von hajoe » Mi 8. Mai 2024, 16:26

Funzt, konnte ich nachvollziehen. Das ist nur mühsam, die immer gleichen lstinline-Parameter immer wieder neu zu tippen. Also habe ich probiert:

\newcommand{\code}[1]{\lstinline[columns=fixed,basicstyle=\ttfamily\bfseries\small,keepspaces]{#1}}

und dann

\code{normal = plane - (plane . e0) ^ <mehrere Leerzeichen> einf;}

Und hier werden wieder statt mehrerer Leerzeichen nur eines gesetzt. Was mache ich falsch?? Danke!

von meepleep » Di 19. Okt 2010, 19:03

Cool, funzt. Danke! Auch für die Erklärung.

von bloodworks » Di 19. Okt 2010, 18:36

Dass ist doch mal n MB...

die Option heißt keepspaces siehe listings-Doku
\documentclass{article} 
\usepackage[latin1]{inputenc}




\usepackage{listings} 
\lstset{numbers=left, numberstyle=\tiny, numbersep=5pt,language=C++, captionpos=b,basicstyle=\ttfamily,aboveskip=24pt, belowskip=12pt,showstringspaces=false, frame=single, breaklines=true, xleftmargin=6mm, xrightmargin=4mm} % ,keepspaces}
% Geht auch alles in ein lstset, vgl. listings-Doku
% Ich würde im übrigen einen eigenen listings-Style definieren, macht etwas mehr Schreibarbeit, aber wenn dein Dokument mal unerwartet anwächst, dann bist du froh darüber


\begin{document} 

good: 

\verb|normal = plane - (plane . e0) ^ einf;| 

\verb|hm = e0 ^ einf;| 

bad: 

\lstinline[keepspaces]|normal = plane - (plane . e0) ^ einf;|
\lstinline|normal = plane - (plane . e0) ^ einf;| 

\lstinline[keepspaces]|hm = e0  ^ einf;| 


%Entweder global oder lokal, wie du willst. 
\end{document}

Ansonsten kann ich keine Unterschiede mehr entdecken zwischen den beiden Umgebungen. Das warum fragst du am besten das Paket, bzw. die Source. Das ganze hat was mit dem Spalten Paradigma von listings zu tun. Er versuch irgendwie das ganze in Spalten einzuordnen und dabei wird im default Fall ein Zeichen nach der ( in die gleiche Spalte gesetzt. (Zumindest kann das vorkommen...) Aber das wird dir die Seite 19 im der listings-Doku besser erklären, wie ich das kann.

lstinline verschluckt Leerzeichen

von meepleep » Di 19. Okt 2010, 18:15

Hallo zusammen.

Vorweg: Google benutzt, Problem ist ein ganz kleines, ich hoffe, irgendwer weiß Bescheid.

Folgend das Minimal example:
\documentclass{article}

\usepackage [ngerman] {babel}



\usepackage{listings}
\lstset{numbers=left, numberstyle=\tiny, numbersep=5pt}
\lstset{language=C++}
\lstset{captionpos=b}
\lstset{basicstyle=\ttfamily}
\lstset{aboveskip=24pt, belowskip=12pt}
\lstset{showstringspaces=false, frame=single, breaklines=true}
\lstset{xleftmargin=6mm, xrightmargin=4mm}

\begin{document}

good:

\verb|normal = plane - (plane . e0) ^ einf;|

\verb|hm = e0 ^ einf;|

bad:

\lstinline|normal = plane - (plane . e0) ^ einf;|

\lstinline|hm = e0 ^ einf;|

\end{document}
Das Problem Nr. 1 ist: Der Output von verb und lstinline sollte in diesem Fall im Prinzip gleich sein (finde ich), ist er aber nicht, zumindest nicht bei mir.

Das Problem Nr. 2 ist: Das echte Problem. lstinline verschluckt bei mir Leerzeichen. Und zwar sehr selektiv. Ich will jetzt nicht schreiben, was ich alles getestet habe, aber offenbar mag er keine Leerzeichen zwischen Klammern und Accentcircumflexes. \verb wertet alles so aus, wie ich das erwarten würde:
normal = plane - (plane . e0) ^ einf;
hm = e0 ^ einf;
\lstinline aber so:
normal = plane - (plane . e0)^ einf;
hm = e0 ^ einf;

Ich wäre sehr froh, wenn mir das jemand erklären könnte... das warum vor allem. Und wenn er/sie mir nach Möglichkeit sagen könnte, wie ich \lstinline benutzen kann, ohne dass das Leerzeichen verschwindet. :)

Nach oben