Alternativa al pacchetto anima?
Contesto
Si potrebbe voler evidenziare del testo o colpirlo. Questo può essere fatto con il soulpacchetto o con il ulempacchetto usando un trucco , sebbene non funzioni così bene.
Problema
Il problema che ho con l'anima è che non si comporta bene con glossari, nuovi comandi o citazioni. Fondamentalmente, non puoi prendere l'intero testo e circondarlo con un \hl{}come è stato discusso altrove . E soluzione alternativa \mbox{\gls{toto}}o anche solo {\gls{toto}}fare il trucco.
Ad esempio, vedere il seguente esempio di lavoro minimo:
\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}
che si compila bene mentre:
[...]
\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}.}
[...]
fornisce una serie di messaggi di errore, parzialmente risolti da:
[...]
\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}}.}
[...]
che fallisce se includo il primo \mbox{\gls{co2}}nel \hl{}comando. Forse è troppo lungo?
Domande
- Che cosa è il problema tra
soul's\hl{}di comando e le\cite{},\etal{}o glossario voci? - Come risolvere questi problemi? (le soluzioni proposte funzionano solo parzialmente)
- Esiste un'alternativa che consente qualcosa di simile
\hl{}ma che può circondare un intero blocco di codice, possibilmente contenente figure, testo, ecc. In altre parole esiste un modo semplice per cambiare il colore di sfondo di una sezione precisa?
Il meglio che mi è venuto in mente è usare una scatola dei colori (vedi anche qui ), come questa:
[...]
\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}
[...]
Ma cambia la formattazione del testo ...
Risposte
Puoi usare il ulempacchetto per ottenere ciò che desideri, immagino. C'è anche un trucco per far soulfunzionare.
EDIT: Per quanto riguarda la tua seconda domanda se esiste un modo semplice per cambiare il colore di sfondo di una sezione precisa che potrebbe contenere figure, testo, ecc., Non è così facile. Puoi usare approcci che racchiudono il tuo contenuto in un altro ambiente, (come mdframedo tcolorbox), ma questo può influenzare la tua formattazione e potrebbe anche limitare alcuni comandi / elementi all'interno, specialmente i float. Ho incluso un esempio basato su quanto tcolorboxsegue che funziona almeno per i contenuti semplici. Inoltre, ho aggiunto un approccio alternativo che utilizza afterpageper modificare lo sfondo della pagina.
ulem
Definisci il tuo hlcomando in questo modo (cmp.https://tex.stackexchange.com/a/48549/223749):
\usepackage[normalem]{ulem}
\newcommand\hl{\bgroup\markoverwith
{\textcolor{yellow}{\rule[-.5ex]{.1pt}{2.5ex}}}\ULon}
Con questo, il tuo MWE viene compilato correttamente. (Dai un'occhiata ahttps://tex.stackexchange.com/a/254337/223749per possibili problemi). Utilizzando il soutcomando da ulemte puoi anche barrare lo stesso testo nel MWE senza errori.
MWE completo (al tuo MWE mancava un \makeglossariescomando):
\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}
anima
Se vuoi continuare soul, c'è anche una soluzione alternativa ai tuoi problemi usando \soulregisterquesta risposta (https://tex.stackexchange.com/a/139500/223749). Ciò fornisce anche una possibilità barrata.
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}
tcolorbox
Con alcuni trucchi, puoi creare un ambiente di evidenziazione personalizzato con il tcolorboxlavoro, che cambia il colore di sfondo di una sezione precisa possibilmente contenente figure, testo, ecc. Usando un tcolorboxambiente con tutti i margini impostati 0, e poi ripristinando \parindent, fondamentalmente dovresti ottenere il testo come sarebbe fuori dagli schemi. Inoltre, utilizzando il floatpacchetto e specificando l' Hopzione di posizionamento è possibile includere ambienti float come tableo figureall'interno, sebbene in realtà non fluttueranno. Ho usato ulemnel MWE per barrato.
Il seguente MWE contiene una figura e una tabella, nonché un'interruzione di pagina.
\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}
pagecolor / afterpage
Infine, un approccio interessante consiste nel colorare parzialmente lo sfondo della pagina utilizzando i pacchetti colore afterpage(presi dahttps://tex.stackexchange.com/a/237427/223749). Ciò ha il vantaggio che non è necessario modificare affatto il contenuto e la formattazione non sarà influenzata. Un possibile svantaggio (a seconda del tuo scopo) potrebbe essere che l'evidenziazione includerà anche i margini sinistro e destro. Inoltre, se hai oggetti mobili all'interno del tuo ambiente di evidenziazione e questi fluttuano fuori da esso, non verranno evidenziati.
MWE completo, inclusi una cifra e un'interruzione di pagina:
\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}
Un'alternativa è usare il pacchetto "proofread" e il comando "\ hilite". Tuttavia, è necessario utilizzare il comando "\ protec" prima di "\ gls" e chiudere le parentesi graffe subito dopo "\ gls {}". Quindi usa di nuovo "\ hilite" per evidenziare il resto del testo.
\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}