可配置 \dots 后的间距

可配置 \dots 后的间距

LaTeX 在省略号后添加了一些空格\textellipsis。包增强了此功能ellipsis,它仅在某些字符前添加空格(并且还提供了“轻松”配置点之间和之后的间距的选项):

在此处输入图片描述

但是间距是“错误的”,例如…!…:或者…?不需要相同的量(参见:?)。但是,我迷失了ellipsis.sty,我不明白其中的一半。

我们如何为每个不同的角色设置一定的金额?

如果有类似的东西就太好了

\SetEllipsisSpacing
  {
    . = .1em,
    ? = .08em,
    ! = .09em,
    : = .1em,
  }
\SetEllipsisSpacing
  {
    { . } { .1em }
    { ? } { .08em }
    { ! } { .09em }
    { : } { .1em }
  }

而不是当前(也是唯一)的选项\def\ellipsispunctuation{,.:;!?}

这是一个最小的可编译示例。

\documentclass{scrartcl}
\usepackage[LY1,T1]{fontenc}
\usepackage[utf8]{inputenx}
\usepackage{lmodern} % Just here to be an example, I use a different font
\usepackage{ellipsis}

%\def\ellipsisgap{.1em}

%\DeclareTextCommandDefault{\textellipsis}
%  {{\fontencoding{LY1}\selectfont\char133}}

\begin{document}
a…! …: …?
\end{document}

这是因为我发现 LY1 编码有一个省略号,所以我可以定义

\DeclareTextCommandDefault{\textellipsis}
  {{\fontencoding{LY1}\selectfont\char133}}

但需要进行一些调整。

在此处输入图片描述

答案1

这可能会让你开始:

\documentclass{scrartcl}
\usepackage[LY1,T1]{fontenc}
\usepackage[utf8]{inputenx}
\usepackage{lmodern} % Just here to be an example, I use a different font
\usepackage{xparse,newunicodechar}


\ExplSyntaxOn
\newunicodechar{…}
 {
  {\fontencoding{LY1}\selectfont\char133}
  \manuel_lookup:
 }

\NewDocumentCommand\SetEllipsisSpacing { m }
 {
  \keys_set:nn { manuel/ellipsis } { #1 }
 }

\tl_new:N \g_manuel_list_tl

\keys_define:nn { manuel/ellipsis }
 {
  comma   .code:n = \tl_gput_right:Nx \g_manuel_list_tl { { , } { \kern#1 } },
  unknown .code:n = \tl_gput_right:Nx \g_manuel_list_tl { { \l_keys_key_tl } { \kern#1 } },
 }

\cs_new_protected:Npn \manuel_lookup:
 {
  \peek_catcode:NF \c_space_token { \manuel_decide:n }
 }

\cs_new_protected:Npn \manuel_decide:n #1
 {
  \str_case:nVF { #1 } \g_manuel_list_tl { \skip_horizontal:n { .1em } }
  #1
 }

\cs_generate_variant:Nn \str_case:nnF { nV }
\ExplSyntaxOff

\SetEllipsisSpacing{
   . = .1em,
   ? = -.1em,
   ! = -.02em,
   : = -.02em,
   comma = .1em
}

\begin{document}
…! 
…: 
…? 
…, 
….
… a
…X
\end{document}

在此处输入图片描述

由于用逗号作为键比较困难,因此我comma为其添加了键。

答案2

这里我重新定义了\ldots 如果下一个字符是已检查的字符之一,则重新定义的宏会在其前插入自定义数量的空格。已修改以消除可选参数,并希望获得正确的句末间距。

\documentclass{article}
\let\svldots\ldots
\makeatletter
\renewcommand\ldots{\svldots%
  \@ifnextchar!{\kern10pt}{%
  \@ifnextchar:{\kern8pt}{%
  \@ifnextchar?{\kern6pt}{%
}}}}
\makeatother
\begin{document}
NEW:

Here\ldots are\ldots! some\ldots: test\ldots? cases. Next\ldots

ORIGINAL:

Here\svldots are\svldots! some\svldots: test\svldots? cases. Next\svldots
\end{document}

在此处输入图片描述

答案3

经过一些反复试验,我们找到了.09适合该字体和该尺寸的选项。

文字省略

\Huge尺寸方面:

文字省略号巨大

\documentclass{scrartcl}
\usepackage[LY1,T1]{fontenc}
\usepackage[utf8]{inputenx}
\usepackage{lmodern} % Just here to be an example, I use a different font

\DeclareTextCommandDefault{\textellipsis}
  {{\fontencoding{LY1}\selectfont\char133}}

\newcommand\ellip [1]{\begingroup
                      \setbox0\hbox{\textellipsis}%
                      \setbox2\hbox{#1}%
                      \textellipsis\kern\dimexpr-.5\wd2+.09\wd0\relax
                                    #1\endgroup}

\begin{document}\thispagestyle{empty}
a…! a…: a…?

a\textellipsis! a\textellipsis: a\textellipsis?

a\ellip! a\ellip: a\ellip?


\end{document}

答案4

您可以使用我的\ifeqcase上一个问题 你可以输入:

\def\mydots{\dots\futurelet\next\mydotsA}
\def\mydotsA{\kern\ifeqcase\next {%
   ! {5em}
   ? {3em}
   , {1em}
  }{0pt}\relax
}

\mydots ?  \mydots !  \mydots ,

当然,间距需要一些修正。

相关内容