Как набрать длинное тире в среде alltt

Как набрать длинное тире в среде alltt

Я пытаюсь набрать длинное тире, используя ---внутреннюю allttсреду, но получаю три дефиса вместо одного длинного тире.

МВЭ

\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}

Ответ на комментарии В комментариях спрашивалось, почему я хочу набрать длинное тире в моноширинной среде. Я хотел бы набрать тире, которое выглядит как длинное тире, но занимает длину двух пробелов в моноширинной среде, т. е. как "--", но соединенных вместе, чтобы сформировать один символ, похожий на длинное тире.

решение1

Я бы предложил «скрыть» это в виде макроса, откуда бы брал длинное тире \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}

Если моноширинный шрифт не поставляется с тире, он будет установлен как отдельные тире. Вы можете принудительно установить моноширинный вид тире, возможно, с определением, \emdashпохожим на:

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

\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}

Некоторую информацию о лидерах можно найти вХочу заполнить строку повторяющейся строкой.

решение2

Простое решение: использовать 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}

Обратите внимание, что первая строка содержит — (Unicode U+2014 EM DASH)

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

Более сложное решение: преобразовать ---в{\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}

Вывод тот же, что и раньше.

Слишком сложное решение: подделать длинное тире, поскольку в семействе шрифтов нет шрифта переменной ширины для пишущей машинки.

\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}

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

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

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