% \iffalse %% %% File: extdash.dtx Copyright (C) 1998-2018 by Alexander I. Rozhenko %% %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{extdash} % [2018/06/24 v1.3 Extended Dash Package (NCC)] % % \changes{v1.0}{1998/12/20}{Initial version} % \changes{v1.1}{2004/11/23}{Minor corrections of the documentation} % \changes{v1.2}{2005/01/29}{Change spaces surround em-dash} % \changes{v1.3){2018/06/24}{Add more em-dash configuring options by request from Frank Mittelbach} % %<*driver> \let\makeindex\relax \documentclass{ltxdoc} \usepackage{extdash} \GetFileInfo{extdash.sty} \begin{document} \title{The \textsf{extdash} package\thanks{This file has version number \fileversion, last revised \filedate.}} \author{Alexander I. Rozhenko\\rozhenko@oapmg.sscc.ru} \date{\filedate} \maketitle \DocInput{extdash.dtx} \end{document} % % \fi % The package implements the commands, |\Hyphdash|, |\Endash|, and % |\Emdash|, to control hyphenation of compound words and ordinary % words dashed by \emph{em-dash}. Some additional commands and % shortcuts are also introduced. % % \tableofcontents % % \section{User Interface} % % \DescribeMacro{\Hyphdash} % \DescribeMacro{\Hyphdash*} % The main purpose of the |extdash| package is to allow hyphenation % of compound words. When the word |something-something| occurs, the only % hyphenation point after the dash is available. To allow hyphenation % of both words joint by dash you can write % \begin{center} % |something\Hyphdash something|\quad or easier\quad % |something\-/something| % \end{center} % (the last case is available if\/ you use the package |extdash| % with |shortcuts| option). Sometimes the line break immediately after % the dash is inadmissible. To avoid this, you can write % \begin{center} % |something\Hyphdash* something|\quad or easier\quad % |something\=/something| % \end{center} % (the last case is also a shortcut). An example is the word % \emph{$L$-approximation} which can't be broken at the dash.\pagebreak % % \DescribeMacro{\Endash} % \DescribeMacro{\Endash*} % Analogously, you can use |\Endash| command (and its star version) to join % words with \emph{en-dash}. Shortcuts for it are |\--| and |\==|. % % \DescribeMacro{\Emdash} % \DescribeMacro{\Emdash*} % The last case is the use of \emph{em-dash} when some glue % before and after em-dash have to be added. The command |\Emdash| adds % this glue, named |\Halfspace|, which natural width is equal to the % \DescribeMacro{\Halfspace} % \DescribeMacro{\Halfspace*} % half of the ordinary interword space. The |\Halfspace| command % produces the \emph{elastic} horizontal space and its |*|-form % produces the nonbreakable elastic space. All these commands have % shortcuts % \begin{center} % |\---|\qquad |\===|\qquad |\-,|\qquad |\=,| % \end{center} % Note, that |\Emdash| command removes extra space before and after it. % When |\Emdash| appears at the beginning of a paragraph (the direct % speech) the space after it will be rigid and unbreakable. % % The standard em-dash is longer that it is required by Russian and German % typesetting rules. To decrease its length to the required one, you can % use this package with |shortemdash| option % (the |cyremdash| option is also supported for compatibility with the previous % version). % % Note: Some more options are available from the version 1.3. They control % the spacing around |\Emdash| and the breaking strategy to be applied % before it. % % \section{Package Options} % % \subsection{Shortcuts} % % \begin{center} % |\usepackage[shortcuts]{extdash}| % \end{center} % % The |shortcuts| option redefines \LaTeX{} commands |\-| and |\=| in % such a way to recognize shortcut sequences. If\/ no shortcut % recognized, the corresponding original command will be called. % In other words, when no shortcut recognized, the command |\-| % sets extra hyphenation point and |\=| means the accent command. % % \begin{center} % \begin{tabular}{l@{\qquad}l@{\qquad\qquad}l@{\qquad}l} % Command & Shortcut & Command & Shortcut \\ % \cs{Hyphdash} & \cs{-/} & \cs{Hyphdash*} & \cs{=/} \\ % \cs{Endash} & \cs{--} & \cs{Endash*} & \cs{==} \\ % \cs{Emdash} & \cs{---} & \cs{Emdash*} & \cs{===} \\ % \cs{Halfspace}& \cs{-,} & \cs{Halfspace*}& \cs{=,} % \end{tabular} % \end{center} % % \emph{All described commands and shortcuts are robust.} % % \subsection{Breaks before em-dash} % % All dash commands defined in this package disallow line breaks before a dash. % For em-dash this rule can be changed. To allow breaks before a em-dash, please % use the option % % \begin{center} % |\usepackage[allowbreakbefore]{extdash}| % \end{center} % % \subsection{Shorter em-dash} % % \begin{center} % |\usepackage[shortemdash]{extdash}| % \end{center} % % This option redefines |\Emdash| to be shorter than the standard % em-dash (0.8~em). % % \subsection{Spaces around em-dash} % % By default, the half-space is inserted before and after em-dash. % This behavior can be changed with option % % \begin{center} % |\usepackage[wordspacearound]{extdash}| % \end{center} % % \noindent or % % \begin{center} % |\usepackage[nospacearound]{extdash}| % \end{center} % % The first option provides interword spaces around em-dash and the % last one removes spaces around em-dash. Of course, these two % options are mutually exclusive. % % \StopEventually{} % % \section{The Implementation} % % \begin{macro}{\EXD@test} % \begin{macro}{\EXD@break} % First we implement the command, |\EXD@test|. It recognizes the % star after the command, sets |\EXD@break| command to be equal % to |\nobreak| if\/ star is found or |\@empty| if\/ not, and calls % its parameter. % \begin{macrocode} %<*package> \def\EXD@test#1{% \@ifstar{\let\EXD@break\nobreak #1}{\let\EXD@break\@empty #1}% } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\Hyphdash} % \begin{macro}{\Endash} % \begin{macro}{\Emdash} % \begin{macro}{\Halfspace} % Now we declare user's level commands % \begin{macrocode} \DeclareRobustCommand{\Hyphdash}{\EXD@test{\EXD@dash-}} \DeclareRobustCommand{\Endash}{\EXD@test{\EXD@dash{--}}} \DeclareRobustCommand{\Emdash}{\EXD@test{\EXD@emd@sh}} \DeclareRobustCommand{\Halfspace}{\@tempcnta\z@ \@ifstar{\EXD@nobreak\EXD@space\ignorespaces}{\EXD@space\ignorespaces}% } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\EXD@dash} % \begin{macro}{\EXD@emd@sh} % \begin{macro}{\EXD@nobreak} % \begin{macro}{\EXD@embreakbefore} % \begin{macro}{\EXD@spacecalc} % \begin{macro}{\EXD@space} % and then the basic commands % \begin{macrocode} \def\EXD@nobreak{\ifvmode\leavevmode\else\nobreak\fi} \def\EXD@dash#1{% \EXD@nobreak\hbox{#1}\EXD@break\hskip\z@skip \ignorespaces } \def\EXD@emnobreak{\nobreak} \def\EXD@emd@sh{% \ifvmode \leavevmode\EXD@emdash\nobreak\hskip.35em \else \unskip\EXD@emnobreak \@tempcnta\m@ne \EXD@space \EXD@emdash \EXD@break \EXD@space \fi \ignorespaces } \DeclareOption{allowbreakbefore}{% \let\EXD@emnobreak\@empty } % \end{macrocode} % The |\@tempcnta| specifies the width of half-space. It can have % the following values: |-1|, |0|, or |+1|. The negative value % means using the space before em-dash (the space is narrow at this point), % zero value means an ordinary half space, and the positive value % means a half-space after em-dash (the space is wider at this point). % This trick compensates a visual effect of wider space before an em-dash % especially if the punctuation mark goes before. % % The meaning of negative and positive values of |\@tempcnta| % is redefined with |wordspacearound| and |nospacearound| options. % \begin{macrocode} \def\EXD@spacecalc{% \edef\@tempa{% \ifnum\@tempcnta<\z@ .4\else \ifnum \@tempcnta=\z@ .5\else .6\fi\fi }% \def\@tempb{.5}% } \def\EXD@space{% \EXD@spacecalc \hskip \@tempa\fontdimen2\font \@plus \@tempb\fontdimen3\font \@minus \@tempa\fontdimen4\font \@tempcnta -\@tempcnta } \DeclareOption{wordspacearound}{% \def\EXD@spacecalc{% \edef\@tempa{\ifnum \@tempcnta=\z@ .5\fi}% \let\@tempb\@tempa } } \DeclareOption{nospacearound}{% \def\EXD@spacecalc{% \edef\@tempa{\ifnum \@tempcnta=\z@ .5\else0\fi}% \let\@tempb\@tempa } } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\EXD@emdash} % The last basic command is the default \emph{em-dash}. It could be % redefined later in |shortemdash| option. % \begin{macrocode} \def\EXD@emdash{\hbox{---}} % \end{macrocode} % \end{macro} % % \begin{macrocode} \DeclareOption{shortcuts}{% % \end{macrocode} % % \begin{macro}{\HyphOrDash} % \begin{macro}{\BarOrDash} % The commands |\HyphOrDash| and |\BarOrDash| are called by |\-| and |\=| commands % and can appear in aux file. They choose the corresponding shortcut or the original % command saved in |\EXD@hyph| and |\EXD@bar|. % \begin{macrocode} \DeclareRobustCommand{\HyphOrDash}{% \let\EXD@break\@empty \@ifnextchar/{\EXD@d@sh}{% \@ifnextchar-{\EXD@hdash}{% \@ifnextchar,{\EXD@sp@ce}{\EXD@hyph}% }% }% } \DeclareRobustCommand{\BarOrDash}{% \let\EXD@break\nobreak \@ifnextchar/{\EXD@d@sh}{% \@ifnextchar={\EXD@bdash}{% \@ifnextchar,{\nobreak\EXD@sp@ce}{\EXD@bar}% }% }% } % \end{macrocode} % \end{macro} % \end{macro} % % Shortcuts: % \begin{macrocode} \def\EXD@d@sh/{\EXD@dash-} \def\EXD@sp@ce,{\EXD@space} \def\EXD@hdash-{\@ifnextchar-{\EXD@hhdash}{\EXD@dash{--}}} \def\EXD@bdash={\@ifnextchar={\EXD@bbdash}{\EXD@dash{--}}} \def\EXD@hhdash-{\EXD@emd@sh} \def\EXD@bbdash={\EXD@emd@sh} % \end{macrocode} % % We turn on the shortcuts mechanism at the beginning of the document to % avoid conflict with |fontenc| package which redefines accents. % \begin{macrocode} \AtBeginDocument{% \let\EXD@hyph\- \let\@dischyph\HyphOrDash \let\-\@dischyph \let\EXD@bar\= \let\@acciii\BarOrDash \let\=\@acciii } } % \end{macrocode} % % \begin{macrocode} \DeclareOption{shortemdash}{% \def\EXD@emdash{\hb@xt@.8\fontdimen6\font{--\hss--}} } \DeclareOption{cyremdash}{% \def\EXD@emdash{\hb@xt@.8\fontdimen6\font{--\hss--}} } \ProcessOptions\relax % % \end{macrocode} % \endinput