So setzen Sie einen Geviertstrich in einer Alltt-Umgebung

So setzen Sie einen Geviertstrich in einer Alltt-Umgebung

Ich versuche, einen Geviertstrich ---innerhalb einer allttUmgebung zu setzen, erhalte jedoch drei Bindestriche anstelle eines einzelnen Geviertstrichs.

MWE

\documentclass[12pt]{article}

\usepackage{alltt}

\begin{document}
Usually, \verb"---" becomes an em dash, i.e. "---", in normal mode.
But in the alltt environment, it becomes three hyphens.
\begin{alltt}
Please---will you give me an em dash?
\end{alltt}
\end{document}

Reaktion auf Kommentare In den Kommentaren wurde gefragt, warum ich einen Geviertstrich in einer monospaced Umgebung setzen möchte. Ich möchte einen Strich setzen, der wie ein Geviertstrich aussieht, aber in einer monospaced Umgebung die Länge von zwei Leerzeichen hat, also wie „--“, aber zusammengefügt, um ein einzelnes geviertstrichähnliches Zeichen zu bilden.

Antwort1

Mein Vorschlag wäre, es in Form eines Makros zu „verbergen“, aus dem der Geviertstrich entnommen wird \normalfont:

Bildbeschreibung hier eingeben

\documentclass{article}
\newcommand{\emdash}{{\normalfont ---}}
\usepackage{alltt}

\begin{document}
Usually, \verb"---" becomes an em dash, i.e. ``---'', in normal mode.
But in the alltt environment, it becomes three hyphens.
\begin{alltt}
Please\emdash{}will you give me an em dash?
\end{alltt}
\end{document}

Sofern die monoproportionale Schriftart keinen Geviertstrich enthält, wird dieser als separater Strich gesetzt. Sie könnten einen monoproportional aussehenden Geviertstrich erzwingen, vielleicht mit einer Definition, die etwa so \emdashaussieht:

Bildbeschreibung hier eingeben

\documentclass{article}
\makeatletter
\newlength{\emdashttlen}
\settowidth{\emdashttlen}{\ttfamily---}
\newcommand{\emdash}{\makebox[\emdashttlen]{-\cleaders\hbox{\hspace{-.45ex}-}\hfill\kern0pt}}
\makeatother
\usepackage{alltt}

\begin{document}
Usually, \verb"---" becomes an em dash, i.e. ``---'', in normal mode.
But in the alltt environment, it becomes three hyphens.
\begin{alltt}
Please---will you give me an em dash?
Please\emdash{}will you give me an em dash?
\end{alltt}

\end{document}

Einige Informationen zu Führungskräften finden Sie inMöchten Sie die Zeile mit einer sich wiederholenden Zeichenfolge füllen?.

Antwort2

Einfache Lösung: Verwenden Sie UTF-8

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{alltt,etoolbox}
\apptocmd{\alltt}{\def\textemdash{{\fontfamily{cmvtt}\selectfont---}}}{}{}

\begin{document}

\begin{alltt}
Please—will you give me an em dash?
Please--will you give me an em dash?
\end{alltt}

\end{document}

Beachten Sie, dass die erste Zeile — (Unicode U+2014 EM DASH) enthält.

Bildbeschreibung hier eingeben

Kompliziertere Lösung: transformieren ---in{\fontfamily{cmvtt}\selectfont---}

\documentclass{article}

\usepackage{alltt,etoolbox}

\makeatletter
\begingroup\lccode`~=`-
\lowercase{\endgroup\apptocmd{\alltt}{\let~\alltthyphen}{}{}
\newcommand\alltthyphen{\@ifnextchar~{\@alltthyphen@i}{\char`\- }}
\def\@alltthyphen@i#1{% #1 is -
  \@ifnextchar~{{\fontfamily{cmvtt}\selectfont---}\@gobble}{\char`\-\char`\- }%
}}
\makeatother

\begin{document}

\begin{alltt}
Please---will you give me an em dash?
PleaseXXwill you give me an em dash?
\end{alltt}

\end{document}

Die Ausgabe ist die gleiche wie zuvor

Überkomplizierte Lösung: einen Geviertstrich vortäuschen, da die Schriftfamilie keine Schreibmaschinenschrift mit variabler Breite hat

\documentclass{article}

\usepackage{alltt,etoolbox}
\usepackage{tgcursor}

\makeatletter
\begingroup\lccode`~=`-
\lowercase{\endgroup\apptocmd{\alltt}{\let~\alltthyphen}{}{}
\newcommand\alltthyphen{\@ifnextchar~{\@alltthyphen@i}{\char`\- }}
\def\@alltthyphen@i#1{% #1 is -
  \@ifnextchar~{\fake@em@dash\@gobble}{\char`\-\char`\- }%
}}
\def\fake@em@dash{%
  \sbox0{--}%
  \makebox[\wd0][s]{-\hss-\hss-}%
}
\makeatother

\begin{document}

\begin{alltt}
Please---will you give me an em dash?
PleaseXXwill you give me an em dash?
\end{alltt}

\end{document}

Bildbeschreibung hier eingeben

Möglicherweise möchten Sie die Einstellung vereinfachen, indem Sie nur --anstelle von verwenden ---. Dies würde Änderungen an den obigen Makros erfordern.

verwandte Informationen