![Alternativa ao pacote soul?](https://rvso.com/image/420054/Alternativa%20ao%20pacote%20soul%3F.png)
Contexto
Pode-se querer destacar algum texto ou riscá-lo. Isso pode ser feito com o soul
pacote ou com o ulem
pacoteusando um truque, embora não funcione tão bem.
Problema
O problema que tenho com o soul é que ele não se comporta bem em glossários, novos comandos ou citações. Basicamente, você simplesmente não pode pegar o texto inteiro e cercá-lo com um texto \hl{}
como foi discutido.em outro lugar. E uma solução alternativa \mbox{\gls{toto}}
ou até mesmo {\gls{toto}}
fazer o truque.
Por exemplo, veja o seguinte exemplo de trabalho mínimo:
\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}
que compila bem enquanto:
[...]
\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}.}
[...]
fornece um monte de mensagens de erro, parcialmente corrigidas por:
[...]
\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}}.}
[...]
que falha se eu incluir o primeiro \mbox{\gls{co2}}
no \hl{}
comando. Talvez seja muito longo?
Questões
- O que exatamenteéo problema entre
soul
o comando '\hl{}
e as\cite{}
entradas\etal{}
ou glossário? - Como resolver esses problemas? (as soluções propostas funcionam apenas parcialmente)
- Existe uma alternativa que permite algo como
\hl{}
mas que pode envolver um bloco de código inteiro, possivelmente contendo figuras, texto, etc. em outras palavras, existe uma maneira simples de alterar a cor de fundo de uma seção precisa?
O melhor que descobri foi usar uma caixa de cores (veja tambémaqui), assim:
[...]
\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}
[...]
Mas isso muda a formatação do texto ...
Atualização em junho de 2023
Se você estiver usando LuaLaTeX para compilação, você pode simplesmente adicionar o seguinte ao seu preâmbulo:
\usepackage{luacolor}
\usepackage[soul]{lua-ul}
e depois use \hl{Lorem ipsum...}
normalmente, conforme descritoaqui. Este método tem a vantagem de ser robusto \enquote
, ao contrário de algumas das soluções abaixo.
Responder1
Você pode usar o ulem
pacote para conseguir o que deseja, eu acho. Também existe um truque para fazer soul
funcionar.
EDITAR: Quanto à sua segunda pergunta, se existe uma maneira simples de alterar a cor de fundo de uma seção precisa, possivelmente contendo figuras, texto, etc., isso não é tão fácil. Você pode usar abordagens que envolvam seu conteúdo em outro ambiente (como mdframed
ou tcolorbox
), mas isso pode afetar sua formatação e também restringir certos comandos/elementos internos, especialmente flutuadores. Incluí um exemplo baseado tcolorbox
abaixo que funciona pelo menos para conteúdo simples. Além disso, adicionei uma abordagem alternativa que usa afterpage
para alterar o plano de fundo da página.
ulemá
Defina seu próprio hl
comando assim (cmp.https://tex.stackexchange.com/a/48549/223749):
\usepackage[normalem]{ulem}
\newcommand\hl{\bgroup\markoverwith
{\textcolor{yellow}{\rule[-.5ex]{.1pt}{2.5ex}}}\ULon}
Com isso, seu MWE compila perfeitamente. (Dê uma olhada emhttps://tex.stackexchange.com/a/254337/223749para possíveis problemas). Usando o sout
comando de ulem
você também pode riscar o mesmo texto no MWE sem erros.
MWE completo (seu MWE estava faltando um \makeglossaries
comando):
\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}
alma
Se você quiser continuar soul
, também há uma solução alternativa para seus problemas \soulregister
seguindo esta resposta (https://tex.stackexchange.com/a/139500/223749). Isso também oferece uma possibilidade de tachado.
MWE completo:
\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}
caixa de cores
Com alguns truques, você pode criar um ambiente de destaque personalizado com tcolorbox
trabalho, que altera a cor de fundo de uma seção precisa, possivelmente contendo figuras, texto, etc. Usando um tcolorbox
ambiente com todas as margens definidas como 0
e depois restaurando \parindent
, você basicamente deve obter o texto como seria fora da caixa. Além disso, usando o float
pacote e especificando a H
opção de posicionamento, você pode incluir ambientes flutuantes como table
ou figure
dentro - embora eles não flutuem de fato. Usei ulem
no MWE para tachado.
O MWE a seguir contém uma figura e uma tabela, bem como uma quebra de página.
\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}
cor da página / pós-página
Finalmente, uma abordagem interessante é colorir parcialmente o fundo da página usando os pacotes color
e afterpage
(retirados dehttps://tex.stackexchange.com/a/237427/223749). Isso tem a vantagem de que você não precisa alterar o conteúdo e a formatação não será afetada. Uma possível desvantagem (dependendo do seu propósito) pode ser que o destaque incluirá também as margens esquerda e direita. Além disso, se você tiver carros alegóricos dentro do seu ambiente de destaque e eles flutuarem para fora dele, eles não serão destacados.
MWE completo, incluindo uma figura e uma quebra de página:
\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}
Responder2
Uma alternativa é usar oproofread
pacote e o \hilite
comando. Porém, você deve usar o comando \protect
antes \gls
e fechar os colchetes logo depois \gls
. Em seguida, use \hilite
novamente para destacar o restante do texto.
\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}