我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 编码已过时,不再推荐使用。我更喜欢utf8
,utf8x
因为它更稳定。
没有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}