
Ich versuche, einen Geviertstrich ---
innerhalb einer alltt
Umgebung 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
:
\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 \emdash
aussieht:
\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.
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}
Möglicherweise möchten Sie die Einstellung vereinfachen, indem Sie nur --
anstelle von verwenden ---
. Dies würde Änderungen an den obigen Makros erfordern.