语境
你可能想突出显示一些文本,或者删除它。这可以通过包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{}
但可以围绕整个代码块,可能包含图形、文本等。换句话说,有没有一种简单的方法来改变精确部分的背景颜色?
我想到最好的办法是使用彩色框(另见这里), 像这样:
[...]
\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 年 6 月的更新
如果您使用 LuaLaTeX 进行编译,那么您只需将以下内容添加到您的序言中:
\usepackage{luacolor}
\usepackage[soul]{lua-ul}
然后\hl{Lorem ipsum...}
按照说明正常使用这里\enquote
.与下面的某些解决方案相反,此方法具有对 具有鲁棒性的优点。
答案1
我想,您可以使用该ulem
包来实现您想要的功能。还有一个技巧可以让它发挥soul
作用。
编辑:关于您的第二个问题,是否有一种简单的方法来更改可能包含图形、文本等的精确部分的背景颜色,这并不容易。您可以使用将内容包装到另一个环境中的方法(如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)。这也提供了删除线的可能性。
完整 MWE:
\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
所有边距设置为 的环境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}