问题:如何制作发光的文字?
@'Symbol 1',有趣的是,我将您的脚本封装到一个新的命令(名为“\glow”)中,这样我就可以像使用“\hl{}”一样突出显示文本。然而,“\glow{This is a \hl{test}}”的结果并不令人满意,因为发光效果上方的黄色框被多次重写,将其隐藏起来。
因此,我尝试修改您的解决方案,首先打印原始字符串(例如,使用 '\hl{}'),使用 \pdfstringdef 删除格式并获取发光字符串的干净/纯文本,然后最后一次显示它以获取干净的文本。
然而 \pdfstringdef 将重音字符转换为八进制序列,如下所示:
这是一个经过稍微调整的版本,它具有透明度,可以“尊重”突出显示或其他背景效果。然而,对于重音字符甚至括号等,问题仍然存在:
\documentclass{article}
\usepackage{tikz} % Graphique
\usepackage{transparent} % Transparence
%\usepackage[outline]{contour} % Contour
\usepackage{xcolor} % Couleurs par nom
\usepackage{soul} % \hl{}
\usepackage{hyperref} % \pdfstringdef
% =============================================================================
\makeatletter % Autorise la modification des macros système
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% /!\ UTILISATION DE 'PDFSTRINGDEF' POUR 'NETTOYER' LE TEXTE
\newcommand{\glow}[2]{
% Début liste de 'nettoyage' (rajouter les commandes à 'nettoyer')
\pdfstringdefDisableCommands{\def\hl{}} % Nettoyage de '\hl{#1}'
% Fin liste de 'nettoyage'
\pdfstringdef\plainstr{#2} % Extraction chaine 'nettoyée'
% #2%i % Texte avec mise en forme (fond) NOK
\leavevmode % Mode horizontal (pas de passage à la ligne implicite)
\pgfsys@beginscope % = pdfliteral{q}
\rlap{#2}%i % Texte avec mise en forme (fond) 1x
\pgfsetroundjoin % = pdfliteral{1 j}
\pgfsetroundcap % = pdfliteral{1 J}
\pdfliteral{1 Tr}%i % no pgf alternative
\foreach\ind in {10, ..., 1}{%i
\pgfmathsetmacro\per{(11-\ind)*5}%i
\iffalse
% Couleur décroissante
\color{#1!\per}%
\else
% Transparence cumulée
\color{#1}%
\transparent{0.1}% % 10% max
\fi
\iftrue
% Contour 'léger'
\pgfsetlinewidth{\ind/2} % light
\else
% Contour 'épais'
\pgfsetlinewidth{(\ind/2)+1} % heavy
\fi
% \rlap{#2}%i % x fois COULEUR avec mise en forme NOK
\rlap{\plainstr}%i % x fois COULEUR sans mise en forme
}%i
\pgfsys@endscope % = pdfliteral{Q}
\plainstr % Texte sans mise en forme (dessus) NOIR
% #2%i % Texte avec mise en forme (dessus) NOIR
}
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\makeatother % Bloque la modification des macros système
% =============================================================================
\begin{document}
COMPILE AT LEAST TWICE !!!
This is a test.
This is another \hl{test}.
\glow{green}{This one is supposed to glow without highlight.}
\glow{cyan}{This one is also supposed to \hl{glow} preserving the highlight.}
pdfstringdefDisableCommands and pdfstringdef removes the formatting.
Then I overwrite the glowing string with a clean black string without hl{}.
\glow{orange}{But accented characters are a hell to deal with.}
\glow{red}{Bùt àccéntèd charaçters are a hell to deal wïth.}
Even parenthesis gets "destroyed" in the process...
\end{document}
顺便说一句,我正在尝试模仿 Word 的文本发光功能:
有什么解决办法吗?
PS:除非我有 300 个“声誉”,否则我无法添加标签“latex”或“glow”或“pdfstringdef”
编辑:使用提供的解决方案,总体上有效(重音字符正确呈现),我现在得到了“反馈”效果。我应该调查一下。“不是那么简单,亲爱的华生。”
答案1
尝试\text_purify:n
(需要相当先进的文本系统!)
\documentclass{article}
\usepackage{tikz} % Graphique
\usepackage{transparent} % Transparence
%\usepackage[outline]{contour} % Contour
\usepackage{xcolor} % Couleurs par nom
\usepackage{soul} % \hl{}
\usepackage{hyperref} % \pdfstringdef
% =============================================================================
\makeatletter % Autorise la modification des macros système
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\ExplSyntaxOn
\cs_set_eq:NN\textpurify\text_purify:n
\ExplSyntaxOff
% /!\ UTILISATION DE 'PDFSTRINGDEF' POUR 'NETTOYER' LE TEXTE
\newcommand{\glow}[2]{
% Début liste de 'nettoyage' (rajouter les commandes à 'nettoyer')
%\pdfstringdefDisableCommands{\def\hl{}} % Nettoyage de '\hl{#1}'
% Fin liste de 'nettoyage'
\edef\plainstr{\textpurify{#2}} % Extraction chaine 'nettoyée'
% #2%i % Texte avec mise en forme (fond) NOK
\leavevmode % Mode horizontal (pas de passage à la ligne implicite)
\pgfsys@beginscope % = pdfliteral{q}
\rlap{#2}%i % Texte avec mise en forme (fond) 1x
\pgfsetroundjoin % = pdfliteral{1 j}
\pgfsetroundcap % = pdfliteral{1 J}
\pdfliteral{1 Tr}%i % no pgf alternative
\foreach\ind in {10, ..., 1}{%i
\pgfmathsetmacro\per{(11-\ind)*5}%i
\iffalse
% Couleur décroissante
\color{#1!\per}%
\else
% Transparence cumulée
\color{#1}%
\transparent{0.1}% % 10% max
\fi
\iftrue
% Contour 'léger'
\pgfsetlinewidth{\ind/2} % light
\else
% Contour 'épais'
\pgfsetlinewidth{(\ind/2)+1} % heavy
\fi
% \rlap{#2}%i % x fois COULEUR avec mise en forme NOK
\rlap{\plainstr}%i % x fois COULEUR sans mise en forme
}%i
\pgfsys@endscope % = pdfliteral{Q}
\plainstr % Texte sans mise en forme (dessus) NOIR
% #2%i % Texte avec mise en forme (dessus) NOIR
}
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\makeatother % Bloque la modification des macros système
% =============================================================================
\begin{document}
COMPILE AT LEAST TWICE !!!
This is a test.
This is another \hl{test}.
\glow{green}{This one is supposed to glow without highlight.}
\glow{cyan}{This one is also supposed to \hl{glow} preserving the highlight.}
pdfstringdefDisableCommands and pdfstringdef removes the formatting.
Then I overwrite the glowing string with a clean black string without hl{}.
\glow{orange}{But accented characters are a hell to deal with.}
\glow{red}{Bùt àccéntèd charaçters are a hell to deal wïth.}
Even parenthesis gets "destroyed" in the process...
\end{document}
答案2
关于“xspace”的简短说明,尽管我知道在很多情况下,它都是“必要之恶”,就像我自己的情况一样。项目名称嵌入在宏中,因此更改项目名称很简单(替换宏内容即可)。但是作为宏,后面的空格会被彻底删除。虽然在标点符号之前没有问题,但当两个相邻的单词毫无理由地粘在一起时,句子内部就会变得混乱(尽管我们总能以某种方式找到有效的原因,例如行星排列等)。
无论如何,我创建了一个小 MWE,证明了正是剥离“xspace”导致了“奇怪的反馈效应”。现在,人类又向前迈进了一大步……
(顺便说一句,我还调整了颜色/透明度设置,我认为我成功了,看起来更像 Word 的发光,并且不再有颜色渗色:“Yeah Baby,Yeah!”)
\documentclass{article}
\usepackage{tikz} % Graphique
\usepackage{transparent} % Transparence
\usepackage{xcolor} % Couleurs par nom
\usepackage{soul} % \hl{}
\usepackage{xspace} % Gestion des espaces
\def\test{\hl{test}\xspace} % <<--- THE MACRO !!!
% =============================================================================
\makeatletter % Autorise la modification des macros système
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\ExplSyntaxOn
\cs_set_eq:NN\textpurify\text_purify:n
\ExplSyntaxOff
% /!\ UTILISATION DE 'TEXT_PURIFY' POUR 'NETTOYER' LE TEXTE
\newcommand{\glow}[2]{
\edef\plainstr{\textpurify{#2}} % Extraction chaine 'nettoyée'
% #2%i % Texte AVEC mise en forme (fond) (NOK)
\leavevmode % Mode horizontal (pas de passage à la ligne implicite)
\pgfsys@beginscope % = pdfliteral{q}
\rlap{#2}%i % Texte AVEC mise en forme (fond) 1x
\pgfsetroundjoin % = pdfliteral{1 j}
\pgfsetroundcap % = pdfliteral{1 J}
\pdfliteral{1 Tr}%i % no pgf alternative
\foreach\ind in {10, ..., 1}{%i
\pgfmathsetmacro\per{(11-\ind)*5}%i
\color{#1!\per}% % Couleur décroissante
\transparent{0.2}% % Transparence cumulée
\iftrue
\pgfsetlinewidth{\ind/2} % Contour 'léger'
\else
\pgfsetlinewidth{(\ind/2)+1} % Contour 'épais'
\fi
% \rlap{#2}%i % x fois COULEUR AVEC mise en forme (NOK)
\rlap{\plainstr}%i % x fois COULEUR sans mise en forme
}%i
\pgfsys@endscope % = pdfliteral{Q}
% #2%i % Texte AVEC mise en forme (dessus) NOIR
\plainstr % Texte sans mise en forme (dessus) NOIR
}
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\makeatother % Bloque la modification des macros système
% =============================================================================
\begin{document}
COMPILE AT LEAST TWICE !!!
This is a \hl{test}.
This is another \test with a macro instead.
\glow{green}{This test is sùpposed to glow without highlight.}
\glow{cyan}{This \hl{test} is sûpposed to glow preserving the highlight.}
\glow{cyan}{This \test macro featüres a xspace that is context dependant.}
However text\_purify seems to be overzealous and "purify" it.
\end{document}