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 ,
当然,间距需要一些修正。