![Альтернатива пакету «Душ»?](https://rvso.com/image/420054/%D0%90%D0%BB%D1%8C%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%B0%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D1%83%20%C2%AB%D0%94%D1%83%D1%88%C2%BB%3F.png)
Контекст
Может возникнуть желание выделить какой-то текст или зачеркнуть его. Это можно сделать либо с помощью soul
пакета, либо с помощью ulem
пакетаиспользуя трюк, хотя это не так уж и хорошо работает.
Проблема
Проблема с soul в том, что он плохо себя ведет с глоссариями, новыми командами или цитатами. По сути, вы просто не можете взять весь текст и окружить его\hl{}
как это обсуждалосьв другом месте. И обойти \mbox{\gls{toto}}
или даже просто {\gls{toto}}
сделать трюк.
Например, посмотрите следующий минимальный рабочий пример:
\documentclass{article}
\usepackage{soul}
\usepackage[acronym]{glossaries}
\usepackage{color}
\newacronym{co2}{CO$_2$}{carbon dioxide}
\newcommand{\etal}{\textit{et al.}}
\begin{document}
Lorem ipsum \gls{co2} dolor by Toto \etal{}\cite{latexcompanion} sit amet, consectetur adipiscing elit.
Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \gls{co2}.
\begin{thebibliography}{9}
\bibitem{latexcompanion}
Michel Goossens, Frank Mittelbach, and Alexander Samarin.
\textit{The \LaTeX\ Companion}.
Addison-Wesley, Reading, Massachusetts, 1993.
\end{thebibliography}
\end{document}
который отлично компилируется, пока:
[...]
\begin{document}
\hl{Lorem ipsum \gls{co2} dolor by Toto \etal{}\cite{latexcompanion} sit amet, consectetur adipiscing elit.
Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \gls{co2}.}
[...]
выдает кучу сообщений об ошибках, частично исправленных следующим образом:
[...]
\begin{document}
Lorem ipsum \mbox{\gls{co2}} \hl{dolor by Toto \mbox{\etal{}} {\cite{latexcompanion}} sit amet, consectetur adipiscing elit.
Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \mbox{\gls{co2}}.}
[...]
который терпит неудачу, если я включаю первый \mbox{\gls{co2}}
в \hl{}
команду. Может быть, он слишком длинный?
Вопросы
- Что именноявляетсяпроблема между
soul
командой\hl{}
и записями\cite{}
,\etal{}
или глоссария? - Как решить эти проблемы? (предложенные решения работают лишь частично)
- Есть ли альтернатива, позволяющая сделать что-то вроде
\hl{}
but, которое может окружать весь блок кода, возможно, содержащий рисунки, текст и т. д. Другими словами, есть ли простой способ изменить цвет фона определенного раздела?
Лучшее, что я придумал, — это использовать цветовую коробку (см. такжездесь), так:
[...]
\usepackage{tcolorbox}
\tcbuselibrary{breakable}
[...]
\begin{tcolorbox}[breakable,notitle,boxrule=0pt,colback=yellow,colframe=yellow]
Lorem ipsum \gls{co2} dolor by Toto \etal{}\cite{latexcompanion} sit amet, consectetur adipiscing elit.
Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \gls{co2}.
\end{tcolorbox}
[...]
Но это меняет форматирование текста...
Обновление по состоянию на июнь 2023 г.
Если вы используете LuaLaTeX для компиляции, вы можете просто добавить в преамбулу следующее:
\usepackage{luacolor}
\usepackage[soul]{lua-ul}
и затем используйте \hl{Lorem ipsum...}
как обычно, как описаноздесь. Этот метод имеет то преимущество, что он надежен \enquote
, в отличие от некоторых из приведенных ниже решений.
решение1
Вы можете использовать ulem
пакет, чтобы достичь желаемого, я полагаю. Также есть трюк, чтобы заставить soul
работать.
EDIT: Что касается вашего второго вопроса, есть ли простой способ изменить цвет фона определенного раздела, возможно, содержащего рисунки, текст и т. д., это не так просто. Вы можете использовать подходы, которые заключают ваш контент в другую среду (например, mdframed
или tcolorbox
), но это может повлиять на ваше форматирование и также может ограничить определенные команды/элементы внутри, особенно плавающие элементы. Я включил пример, основанный на tcolorbox
ниже, который работает, по крайней мере, для простого контента. Кроме того, я добавил альтернативный подход, который использует afterpage
для изменения фона страницы.
улем
Определите свою собственную hl
команду следующим образом (cmp.https://tex.stackexchange.com/a/48549/223749):
\usepackage[normalem]{ulem}
\newcommand\hl{\bgroup\markoverwith
{\textcolor{yellow}{\rule[-.5ex]{.1pt}{2.5ex}}}\ULon}
При этом ваш MWE отлично компилируется. (Посмотрите наhttps://tex.stackexchange.com/a/254337/223749для возможных проблем). Используя sout
команду из ulem
вы также можете зачеркнуть тот же текст в MWE без ошибок.
Полный MWE (в вашем MWE отсутствовала \makeglossaries
команда):
\documentclass{article}
\usepackage[normalem]{ulem}
\newcommand\hl{\bgroup\markoverwith
{\textcolor{yellow}{\rule[-.5ex]{.1pt}{2.5ex}}}\ULon}
\usepackage[acronym]{glossaries}
\usepackage{color}
\newacronym{co2}{CO$_2$}{carbon dioxide}
\newcommand{\etal}{\textit{et al.}}
\makeglossaries
\begin{document}
\hl{Lorem ipsum \gls{co2} dolor by Toto \etal{}\cite{latexcompanion} sit amet, consectetur adipiscing elit. Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \gls{co2}.}
\sout{Lorem ipsum \gls{co2} dolor by Toto \etal{}\cite{latexcompanion} sit amet, consectetur adipiscing elit. Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \gls{co2}.}
\begin{thebibliography}{9}
\bibitem{latexcompanion}
Michel Goossens, Frank Mittelbach, and Alexander Samarin.
\textit{The \LaTeX\ Companion}.
Addison-Wesley, Reading, Massachusetts, 1993.
\end{thebibliography}
\end{document}
душа
Если вы хотите придерживаться soul
, есть также обходной путь для решения ваших проблем с помощью \soulregister
следующего ответа (https://tex.stackexchange.com/a/139500/223749). Это также обеспечивает возможность зачеркивания.
Полная МВЭ:
\documentclass{article}
\usepackage{soul}
\soulregister\cite7
\soulregister\gls7
\soulregister\etal7
\usepackage[acronym]{glossaries}
\usepackage{color}
\newacronym{co2}{CO$_2$}{carbon dioxide}
\newcommand{\etal}{\textit{et al.}}
\makeglossaries
\begin{document}
\hl{Lorem ipsum \gls{co2} dolor by Toto \etal{}\cite{latexcompanion} sit amet, consectetur adipiscing elit. Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \gls{co2}.}
\st{Lorem ipsum \gls{co2} dolor by Toto \etal{}\cite{latexcompanion} sit amet, consectetur adipiscing elit. Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \gls{co2}.}
\begin{thebibliography}{9}
\bibitem{latexcompanion}
Michel Goossens, Frank Mittelbach, and Alexander Samarin.
\textit{The \LaTeX\ Companion}.
Addison-Wesley, Reading, Massachusetts, 1993.
\end{thebibliography}
\end{document}
tcolorbox
С помощью некоторых трюков вы можете создать пользовательскую среду выделения с tcolorbox
работой, которая изменяет цвет фона определенного раздела, возможно, содержащего рисунки, текст и т. д. Используя tcolorbox
среду со всеми полями, установленными на 0
, а затем восстановив \parindent
, вы в основном должны получить текст, который был бы снаружи поля. Кроме того, используя пакет float
и указав H
опцию размещения, вы можете включить плавающие среды, такие как table
или figure
внутри -- хотя они на самом деле не будут плавать. Я использовал ulem
в MWE для зачеркивания.
Следующий MWE содержит рисунок и таблицу, а также разрыв страницы.
\documentclass{article}
\usepackage{mwe}
\usepackage[acronym]{glossaries}
\usepackage{color}
\usepackage{float}
\usepackage[normalem]{ulem}
\newlength\defaultparindent
\AtBeginDocument{\setlength\defaultparindent{\parindent}}
\usepackage[breakable]{tcolorbox}
\newenvironment{highlighttcb}%
{\begin{tcolorbox}[colback=yellow,
colframe=white,
boxsep=0pt,
left=0pt,
right=0pt,
top=0pt,
bottom=0pt,
center,
valign=top,
before skip=0pt,
after skip=0pt,
width=\textwidth,
breakable,
boxrule=0pt,
frame empty,
sharp corners
]
\setlength{\parindent}{\defaultparindent}
}%
{\end{tcolorbox}}
\newacronym{co2}{CO$_2$}{carbon dioxide}
\newcommand{\etal}{\textit{et al.}}
\makeglossaries
\begin{document}
\blindtext
\blindtext
\blindtext
\blindtext
\blindtext
\begin{highlighttcb}%
Lorem ipsum \gls{co2} dolor by Toto \etal{}\cite{latexcompanion} sit amet, consectetur adipiscing elit. Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \gls{co2}.
\sout{Lorem ipsum \gls{co2} dolor by Toto \etal{}\cite{latexcompanion} sit amet, consectetur adipiscing elit. Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \gls{co2}.}
\begin{figure}[H]
\includegraphics[width=.4\textwidth]{example-image-a}\hfill
\includegraphics[width=.4\textwidth]{example-image-b}
\caption{This is a figure caption within tcolorbox.}
\end{figure}
\blindtext
\blindtext
\blindtext
\blindtext
\begin{table}[H]
\centering
\begin{tabular}{lcr}
a & b & c \\
a & b & c \\
a & b & c \\
\end{tabular}
\caption{This is a table caption within tcolorbox.}
\end{table}
\blindtext
\end{highlighttcb}
\begin{thebibliography}{9}
\bibitem{latexcompanion}
Michel Goossens, Frank Mittelbach, and Alexander Samarin.
\textit{The \LaTeX\ Companion}.
Addison-Wesley, Reading, Massachusetts, 1993.
\end{thebibliography}
\end{document}
цвет страницы / послестраница
Наконец, интересный подход заключается в частичном окрашивании фона страницы с использованием пакетов color
и afterpage
(взятых изhttps://tex.stackexchange.com/a/237427/223749). Это имеет то преимущество, что вам вообще не нужно менять содержимое, и форматирование не будет затронуто. Возможным недостатком (в зависимости от вашей цели) может быть то, что выделение будет включать также левое и правое поля. Кроме того, если у вас есть плавающие элементы внутри вашей среды выделения, и они выплывают из нее, они не будут выделены.
Полный текст MWE, включая рисунок и разрыв страницы:
\documentclass{article}
\usepackage{mwe}
\usepackage[acronym]{glossaries}
\usepackage{color}
\usepackage[normalem]{ulem}
\usepackage{afterpage}
\makeatletter
% Macro \changepagecolor has the same syntax as \pagecolor or \color
% with an optional argument and a mandatory argument.
\newcommand*{\changepagecolor}{%
\@ifnextchar[\@changepagecolor@i\@changepagecolor@ii
}
% Case: \changepagecolor[...]{...}
\def\@changepagecolor@i[#1]#2{%
\@changepagecolor@do{[{#1}]{#2}}%
}
% Case: \changepagecolor{...}
\newcommand*{\@changepagecolor@ii}[1]{%
\@changepagecolor@do{{#1}}%
}
\newcommand*{\@changepagecolor@do}[1]{%
% Fill the remaining space with a colored rule
\begingroup
\offinterlineskip
\hbox to 0pt{%
\kern-\paperwidth
\vtop to 0pt{%
\color#1%
\hrule width 2\paperwidth height \paperheight
\vss
}%
\hss
}%
\endgroup
% Set page color for the next page
\afterpage{\pagecolor#1}%
}
\makeatother
\newenvironment{highlight}%
{\changepagecolor{yellow}}%
{\changepagecolor{white}}
\newacronym{co2}{CO$_2$}{carbon dioxide}
\newcommand{\etal}{\textit{et al.}}
\makeglossaries
\begin{document}
\blindtext
\blindtext
\blindtext
\blindtext
\begin{highlight}
Lorem ipsum \gls{co2} dolor by Toto \etal{}\cite{latexcompanion} sit amet, consectetur adipiscing elit. Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \gls{co2}.
\sout{Lorem ipsum \gls{co2} dolor by Toto \etal{}\cite{latexcompanion} sit amet, consectetur adipiscing elit. Etiam tortor sapien, rutrum vitae lacinia sit amet, mollis ac est. Aenean tortor orci \gls{co2}.}
\blindtext
\begin{figure}[!h]
\includegraphics[width=.4\textwidth]{example-image-a}\hfill
\includegraphics[width=.4\textwidth]{example-image-b}
\caption{This is a figure caption within the custom highlight environment}
\end{figure}
\end{highlight}
\blindtext
\begin{thebibliography}{9}
\bibitem{latexcompanion}
Michel Goossens, Frank Mittelbach, and Alexander Samarin.
\textit{The \LaTeX\ Companion}.
Addison-Wesley, Reading, Massachusetts, 1993.
\end{thebibliography}
\end{document}
решение2
Альтернативой является использованиеproofread
пакет и \hilite
команда. Однако вы должны использовать команду \protect
до \gls
и закрыть скобки сразу после \gls
. Затем используйте \hilite
снова, чтобы выделить оставшуюся часть текста.
\documentclass{article}
\usepackage{soulutf8} % Only necessary if there are accented characters inside the curly braces
\usepackage{proofread}
\usepackage[xindy]{glossaries}
\makeglossaries
\newglossaryentry{euismod}{
name={euismod},
description={euismod sodales, sollicitudin vel, wisi. Morbi auctor lorem non justo.}
}
\begin{document}
Curabitur auctor semper nulla. Donec varius orci eget risus. Duis nibh mi, congue eu, \hilite{accumsan eleifend.
Nam dui ligula, fringilla a, \protect\gls{euismod}}\hilite{ sodales, sollicitudin vel, wisi. Morbi auctor lorem non justo}. Nam lacus libero, pretium at.
\printglossary
\end{document}