Альтернатива пакету «Душ»?

Альтернатива пакету «Душ»?

Контекст

Может возникнуть желание выделить какой-то текст или зачеркнуть его. Это можно сделать либо с помощью 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}

пользовательская среда подсветки на основе tcolorbox

цвет страницы / послестраница

Наконец, интересный подход заключается в частичном окрашивании фона страницы с использованием пакетов 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}

выделение с помощью pagecolor/afterpage

решение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}

Связанный контент