我正在使用 XeLaTeX 和 fontspec 包来处理使用 UTF-8 标点符号(·)而不是空格的文本。
然而,'TeX 并不将标点符号理解为空格字符,因此使用标点符号的长行文本会溢出页面边界。
例子:
\documentclass[openany]{book}
\usepackage{fontspec}
\begin{document}
Lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem·ipsum·lorem...
\end{document}
我知道 seqsplit 包存在,但它似乎更多用于在包装边界(DNA/RNA 转录)处分割长字符串,而不是在这种情况下进行分割。
两个相互关联的问题:
- 是否有一个包或命令可用于将标点符号通常定义为空格字符?
- 换行时是否可以消除中间标点符号?也就是说,换行取代了中间标点符号的需要。
(注意:我仅将标点符号用作空格,而不是任何其他常见的标点符号用法,因此此解决方案可能会破坏标点符号的其他用法。)
答案1
变体https://tex.stackexchange.com/a/44951/4427(请参阅此处了解归因)。
\documentclass{article}
\usepackage{fontspec}
\usepackage{newunicodechar}
\newcommand{\spaceinterpunct}{\unskip
\hskip 2pt plus 1pt minus 1pt
\cleaders\copy\interpunctbox\hskip\wd\interpunctbox
\hskip 2pt plus 1pt minus 1pt
\ignorespaces}
\newsavebox\interpunctbox
\sbox\interpunctbox{·}
\newunicodechar{·}{\spaceinterpunct}
\begin{document}
Nulla·malesuada·porttitor·diam.·Donec·felis·erat,·congue·non,·volutpat·at,·tincidunt·tristique,·libero.·Vivamus·viverra·fermentum·felis.·Donec·nonummy·pellentesque·ante.·Phasellus·adipiscing·semper·elit.·Proin·fermentum·massa·ac·quam.·Sed·diam·turpis,·molestie·vitae,·placerat·a,·molestie·nec,·leo.·Maecenas·lacinia.·Nam·ipsum·ligula,·eleifend·at,·accumsan·nec,·suscipit·a,·ipsum.·Morbi·blandit·ligula·feugiat·magna.·Nunc·eleifend·consequat·lorem.·Sed·lacinia·nulla·vitae·enim.·Pellentesque·tincidunt·purus·vel·magna.·Integer·non·enim.·Praesent·euismod·nunc·eu·purus.·Donec·bibendum·quam·in·tellus.·Nullam·cursus·pulvinar·lectus.·Donec·et·mi.·Nam·vulputate·metus·eu·enim.·Vestibulum·pellentesque·felis·eu·massa.
\end{document}
您甚至可以换行(在标点之后或之前,这并不重要。以下带有换行符的代码将产生相同的输出。
Nulla·malesuada·porttitor·diam.·Donec·felis·erat,·
congue·non,·volutpat·at,·tincidunt·tristique,·libero.·
Vivamus·viverra·fermentum·felis.·Donec·nonummy·
pellentesque·ante.·Phasellus·adipiscing·semper·elit.·
Proin·fermentum·massa·ac·quam.·Sed·diam·turpis,·
molestie·vitae,·placerat·a,·molestie·nec,·leo.·
Maecenas·lacinia.·Nam·ipsum·ligula,·eleifend·at,·
accumsan·nec,·suscipit·a,·ipsum.·Morbi·blandit·
ligula·feugiat·magna.·Nunc·eleifend·consequat·
lorem.·Sed·lacinia·nulla·vitae·enim.·Pellentesque·
tincidunt·purus·vel·magna.·Integer·non·enim.·
Praesent·euismod·nunc·eu·purus.·Donec·bibendum·
quam·in·tellus.·Nullam·cursus·pulvinar·lectus.·
Donec·et·mi.·Nam·vulputate·metus·eu·enim.·
Vestibulum·pellentesque·felis·eu·massa.