soulutf8 从复合词中去除字符

soulutf8 从复合词中去除字符

soulutf8在 LaTeX 文档中使用它来加下划线。但是,它似乎会从复合词的末尾删除字符,例如:

\ul{$n$-rozměrný}

结果是

n罗兹默恩

但是,如果我在连字符处断开这个单词,即:

\ul{$n$ rozměrný}

'ý' 字符再次出现:

n罗斯梅尔尼

我的文档定义如下:

\documentclass[dvips,12pt]{article}

\usepackage[czech]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[IL2]{fontenc}
\usepackage{soulutf8}

已经描述了类似的问题这里;然而,对于我的情况,提出的解决方案似乎不起作用。

答案1

问题在于,虽然babel-czech将连字符变成了简写字符,但是却soul没有检查主动的-;结果是,文本中有多少个连字符,末尾就有多少个字符被弄乱。

这是一个解决方法regexpatch

\documentclass[12pt]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[czech]{babel}
\usepackage{soulutf8}

\usepackage{regexpatch}
\makeatletter
\regexpatchcmd*{\SOUL@eval}
  {\cO-}
  {\cA-}
  {}{}
\makeatother

\begin{document}

\ul{$n$-rozměrný}

\ul{$n$ rozměrný}

\ul{a-b-cd}

\end{document}

在此处输入图片描述

请注意,IL2 编码已过时,不再推荐使用。我更喜欢utf8utf8x因为它更稳定。

没有regexpatch也是可能的,但是非常间接。

\documentclass[12pt]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[czech]{babel}
\usepackage{soulutf8}

\usepackage{etoolbox}
\makeatletter
\patchcmd{\SOUL@eval}{-}{\SOUL@@@hyphen}{}{}
\patchcmd{\SOUL@eval}{-}{\SOUL@@@hyphen}{}{}
\catcode`-=\active
\patchcmd{\SOUL@eval}{\SOUL@@@hyphen}{-}{}{}
\patchcmd{\SOUL@eval}{\SOUL@@@hyphen}{-}{}{}
\catcode`-=12
\makeatother

\begin{document}

\ul{$n$-rozměrný}

\ul{$n$ rozměrný}

\ul{a-b-cd}

\end{document}

相关内容