\documentclass{article}
\usepackage{soul}
\usepackage{color}
\begin{document}
Some \hl{te\discretionary{-}{-}{-}xt}.
\end{document}
Вышеуказанное не компилируется из-заОтсутствует { вставлено,Неправильный дискреционный список,Несовместимый список не может быть распакованиНеправильная \prevdepthошибки. Удаление \hl
или \discretionary
удаляет все ошибки.
Как исправить код, чтобы разрешить вложение \discretionary
душ \hl
?
Обновлять:
Я хотел бы локально переопределить, \discretionary
чтобы возвращать только третий аргумент, так как исходная команда не будет работать в макросах soul. Мне удалось дойти до этой точки:
\documentclass{article}
\usepackage{soul}
\usepackage[usenames,dvipsnames]{xcolor}%\usepackage{color}
%https://tex.stackexchange.com/a/139500:
\soulregister\cite7
\soulregister\ref7
\soulregister\pageref7
\def\highlightcolor{yellow}
\DeclareRobustCommand{\hlc}[2][\highlightcolor]{{\sethlcolor{#1}\hl{{\renewcommand*\discretionary[3]{\mbox{####3}}#2}}}}
\begin{document}
\hlc{Some,te\discretionary{-}{-}{-}xt}.
\end{document}
Однако это все еще выдает ошибку, если выделенный текст содержит пробелы. Я думаю, что это вызвано двойными скобками в \hl{{…}}
, но я не смог переопределить \discretionary
в пределах \hl
области действия другими способами. Есть ли какие-то альтернативы, позволяющие подсветку текста без удаления \discretionary
команд — у меня есть довольно длинные фрагменты текста, содержащие такие команды, которые мне нужно подсветить, но в финальной версии подсветка должна быть удалена. Поэтому я не хочу удалять \discretionary
команды, а просто локально переопределить их так, чтобы они не вызывали ошибок при использовании подсветки. Мне было бы достаточно вернуть только его третий аргумент.