为什么 \texttt{} 中的破折号 ('-') 会导致最后一个字符无法呈现?

为什么 \texttt{} 中的破折号 ('-') 会导致最后一个字符无法呈现?

我已经\texttt{}根据以下命令进行了修改答案使渲染的文本突出显示:

\let\OldTexttt\texttt
\renewcommand{\texttt}[1]{\OldTexttt{\hl{#1}}}

我对 TeX 并不熟悉,所以我不知道这个命令的作用是什么,也不知道它有什么副作用。我只知道它添加了高亮。显然存在一些问题,因为渲染的带有破折号的文本缺少最后一个字符。

源代码(最小工作示例/按要求/):

\documentclass[12pt,oneside,final]{fithesis2}

\usepackage[czech]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{soul}
\usepackage{xcolor}

\definecolor{gray}{rgb}{0.95,0.95,0.95}

\sethlcolor{gray}

\let\OldTexttt\texttt
\renewcommand{\texttt}[1]{\OldTexttt{\hl{#1}}}

\begin{document}

\texttt{game-server.js}

\end{document}

如果需要,fithesis2可以从我们大学的网站点击Soubory třídy fithesis2 jako ZIP,约 880 KiB

编译后的 PDF:

编译后的 PDF

我尝试删除\texttt{}修改,它解决了缺少字符的问题,但我实际上想保留突出显示。删除\usepackage[czech]{babel}也有帮助,但我想我需要那一行,因为我用捷克语写作。(?)

删除\texttt{}修改也会破坏换行,现在在呈现的文本中\texttt{}根本不会发生换行,所以现在我只剩下一些超出右边缘的线条。

我该怎么做才能拥有这一切——突出显示、工作换行和破折号?

谢谢。

答案1

soul这是和babel-czech(和)之间的不兼容性babel-slovak。当它工作时,soul寻找一个标准-,但它找不到它,即使它似乎在那里,因为babel-czech将连字符更改为活动字符。

因此,仅当在 的参数中发现连字符时才会出现问题\hl,因为字符数差了一个。

这是一个解决方法。

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

\usepackage{soulutf8}
\usepackage{xcolor}
\usepackage{regexpatch}

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

\definecolor{gray}{rgb}{0.95,0.95,0.95}

\sethlcolor{gray}

\begin{document}

\hl{abc-def}

\hl{abcdef}

\end{document}

在此处输入图片描述

这是您的最小示例;请注意我所做的小改动,特别是使用utf8而不是utf8xsoulutf8而不是soul以及对 的更好的重新定义\texttt

\documentclass[12pt,oneside,final]{fithesis2}

\usepackage[czech]{babel}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage{soulutf8}
\usepackage{letltxmacro}
\usepackage{regexpatch}

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

\definecolor{gray}{rgb}{0.95,0.95,0.95}

\sethlcolor{gray}

\LetLtxMacro\OldTexttt\texttt
\DeclareRobustCommand{\texttt}[1]{\OldTexttt{\hl{#1}}}

\begin{document}

\hl{game-server.js}

\texttt{game-server.js}

\end{document}

在此处输入图片描述

相关内容