\hl 与 \allowbreak 配合使用时效果很差

\hl 与 \allowbreak 配合使用时效果很差

我正在尝试为 \texttt 文本添加背景颜色,并为此定义一个命令,如下所示: \newcommand{\code}[1]{\texttt{\hl{#1}}} 。有时这些行跨越多个单词(有或没有空格),我习惯\allowbreak在某些地方不加连字符(某些地方在标点符号之前,例如.,某些地方在空格之后,某些地方在大写字母之前)。没有 \hl,它按预期工作。

但是,当我输入 \hl 时,首先它会抱怨I came across hyphenatable material enclosed in group braces, which I can't handle. Either drop the braces or make the material unbreakable using an \mbox (\hbox).一些有空格的地方,然后是\allowbreak(例如\code{CREATE \allowbreak TABLE})。其次,我注意到它破坏了文本 \allowbreak而不是在几个地方之后删除最后一个或五个字符,而不会报告任何错误。在几个地方断行后,它似乎也很难为文本着色,因此突出显示会跨越到右边距,但会跳过下一行的开头。

我正在使用soulutf8它,看看是否有任何区别,突出显示的文本有时是西里尔字母,有时是拉丁字母,有时两者兼有。

我使用的工具是否正确?如果正确,如何使用自定义断点设置 tt 文本的背景颜色?

以下是一些问题的 MWE,每段后的评论中都有(意外的)结果。我没有在空格部分后添加 \allowbreak,因为正如指出的那样,它实际上毫无用处(尽管我希望它会被忽略,并且不会引发错误):

\documentclass[11pt]{book}

\usepackage[serbianc]{babel}
\usepackage{xcolor, soulutf8}
\usepackage{vmargin}

\begin{document}

\newcommand{\code}[1]{\texttt{\hl{#1}}}

\setmargrb{0.8in}{1in}{1.6in}{1.6in} 

Омотач за податке прикупљене пре 2017. године је дефинисан класом
\code{rs.lukaj\allowbreak.upisstats\allowbreak.scraper\allowbreak.obrada\allowbreak.UcenikWrapper}, 
унутар које се налазе класе. %highlight goes over margin and cut off

Омотач за податке прикупљене 2017. године је дефинисан класом
\code{rs\allowbreak.lukaj\allowbreak.upisstats\allowbreak.scraper\allowbreak.obrada2017\allowbreak.UcenikW}, 
и за разлику од %text broke in the middle and cut off

Унутар \code{conf/} директоријума се налазе конфигурацијски фајлови. 
Најважнији део \code{conf/\allowbreak application\allowbreak.conf} 
фајла су параметри % text cut off even when not broken

ће се метода позвати за сваку путању. Нпр. ако корисник посети 
\code{\{адреса\_сервера\}\allowbreak/query\allowbreak?initial=asdf}, 
позваће се % text broken before allowbreak and cut off
\end{document}

结果我得到了这个

在此处输入图片描述

答案1

使用\soulregister

\documentclass[11pt]{book}

\usepackage[serbianc]{babel}
\usepackage{xcolor, soulutf8}
\soulregister{\allowbreak}{0}

\newcommand{\code}[1]{\texttt{\hl{#1}}}

\begin{document}

Омотач за податке прикупљене пре 2017. године је дефинисан класом
\code{rs.lukaj\allowbreak.upisstats\allowbreak.scraper\allowbreak.obrada\allowbreak.UcenikWrapper}, 
унутар које се налазе класе. %highlight goes over margin

Омотач за податке прикупљене 2017. године је дефинисан класом
\code{rs\allowbreak.lukaj\allowbreak.upisstats\allowbreak.scraper\allowbreak.obrada2017\allowbreak.UcenikW}, 
и за разлику од %text broke in the middle and cut off

Унутар \code{conf/} директоријума се налазе конфигурацијски фајлови. 
Најважнији део \code{conf/\allowbreak application\allowbreak.conf} 
фајла су параметри % text cut off even when not broken

ће се метода позвати за сваку путању. Нпр. ако корисник посети 
\code{\{адреса\_сервера\}\allowbreak/query\allowbreak?initial=asdf}, 
позваће се % text broken before allowbreak and cut off
\end{document}

在此处输入图片描述

注意:不要使用vmargin。它不与其他几个软件包(尤其是 TikZ)兼容。

相关内容