如何改变 emdash 连字符?

如何改变 emdash 连字符?

在标准 LaTeX(即 cmr 字体等)中,“---”被替换为破折号。我认为这被视为连字符。是否可以使“---”实际上生成以下宏的内容?

\def\mdash{\unskip\kern.16667em\textemdash\penalty\exhyphenpenalty\hskip.16667em\relax}

(参见评论破折号:- 与 – 与 —)。

更新:我想澄清一下我想要实现的目标。假设我有几个文档共享一个“公司样式文件”(或公司类文件)。这样可以使使用语义标记的文档看起来一致。例如,\emph可以将 的含义改为斜体或(颤抖)下划线。如果我想让破折号(输入为---)看起来一致\mdash(即遵守该间距),该怎么办?除了编辑所有文件并替换---为 之外,\mdash还有.sty基于 的解决方案吗?

答案1

实际上,我只想在编辑器中做一个全局替换,---\mdash如果你想尝试 TeX,那么

在此处输入图片描述

\documentclass{article}

\begin{document}

a-b 1--2

a---b c --- d

a \raisebox{-5pt}{zzz} a

$ 1+2 -3 $

x \the\numexpr -\numexpr 1-2\relax\relax

\hyphenation{zzzz-yyyy}

\rule{--3em}{2pt}

\parbox{--3em}{\raggedright a zzzzyyyy}

section: \addtocounter{section}{-1}\thesection

\bigskip\hrule\bigskip

\makeatletter

\edef\dashone{\string-}
\edef\dashtwo{\dashone\dashone}
\edef\dashthree{\dashone\dashone\dashone}
\catcode`\-=13
\protected\def\dashactive{\futurelet\dashtmp\dashtesta}
\let-\dashactive
\def\dashtesta{%
\ifx\dashtmp-\expandafter\@firstoftwo
\else\expandafter\@secondoftwo
\fi
\dashbgobble\dashone}
\def\dashbgobble#1{\futurelet\dashtmp\dashtestb}
\def\dashtestb{%
\ifx\dashtmp-\expandafter\@firstoftwo
\else\expandafter\@secondoftwo
\fi
\mdashgobble\dashtwo}
\def\mdashgobble#1{\mdash}
\def\mdash{%
\leavevmode% you need this:-)
\unskip\kern.16667em\textemdash
\penalty\exhyphenpenalty
\hskip.16667em\relax}

\let\oldsetlength\setlength
\protected\def\setlength#1#2{%
  \let-\dashone\oldsetlength{#1}{#2}\let-\dashactive}

\let\oldhyphenation\hyphenation
\protected\def\hyphenation#1{%
  \let-\dashone\oldhyphenation{#1}\let-\dashactive}

\makeatother

a-b 1--2

a---b c --- d

a \raisebox{-5pt}{zzz} a

$ 1+2 -3 $

x NO!%\the\numexpr -\numexpr 1-2\relax\relax

\hyphenation{zzzz-yyyy}

\rule{--3em}{2pt}

\parbox{--3em}{\raggedright a zzzzyyyy}

section: NO!%\addtocounter{section}{-1}\thesection

\end{document}

上面使用了一个不可扩展的\futurelet测试来提前查看-后面的一个或两个-,这意味着它在期望数字的原始构造中不起作用(如果删除,%您将在处收到错误NO!)。

另一种方法是根据宏参数定义一个可扩展的前瞻\def-#1{\ifx-#1 ... ,这将使具有原始数字的情况起作用,但会从看起来像的任何上下文中产生令人讨厌的解析错误,-}这将停止抓取参数,并会在看起来像会抓取整个组而不仅仅是单个字符的-上下文中丢失括号组信息。-{-

相关内容