如何在任意字符串片段上使用粗体字体,而不影响相邻字符?

如何在任意字符串片段上使用粗体字体,而不影响相邻字符?

我试图在 Beamer 演示文稿中突出显示任意文本片段,以解释 SQL 注入攻击。使用下划线或不同的文本颜色效果很好,因为只有指定的文本受到影响,但是当尝试使用粗体时,指定的文本和任何相邻的标点符号都会受到影响。我理解这是出于排版原因,但在这里我试图强调字符,而不是单词,结果不是我所期望的。

以下是一个例子:

\documentclass{beamer}

\usepackage{times}

\newcommand{\highlight}[1]{\textbf{#1}}

\begin{document}

  \begin{frame}
    \frametitle{Presentation}
    \texttt{WHERE user\_id = '\highlight{' OR 1=1 \#}';}
  \end{frame}

\end{document}

外部引号字符不应突出显示,最后的分号也不应该突出显示,只有内部字符串部分才应该突出显示。

我尝试了以下命令定义,但没有成功:

\newcommand{\highlight}[1]{\textbf{#1}}
\newcommand{\highlight}[1]{\bfseries #1}
\newcommand{\highlight}[1]{\bfseries #1 \mdseries}

这次讨论,我理解 \bfseries 是低级字体更改原语,而 \textbf 是高级原语,我可能应该依赖第二个原语。我还尝试从评论 #52 中给出的 \textbf 宏定义中获得灵感,使用与数学环境相对应的部分,因为它似乎更严格,但没有成功,可能是因为它似乎使用了纯 tex 语法,而不是 latex。

当然,由于其他突出显示策略效果很好,我可能应该停止尝试使用粗体字体,但这对我来说听起来比花哨的颜色更自然。我是一个绝望的例子吗?

答案1

以下是一个例子:

\documentclass{article}

\newcommand{\highlight}[1]{\textbf{#1}}

\begin{document}

\texttt{WHERE user\_id = '\highlight{' OR 1=1 \#}';}

\end{document}

在此处输入图片描述

等一下!根本没有粗体字!是的,如果你查看日志文件,你会看到

LaTeX Font Info:    Font shape `OT1/cmtt/bx/n' in size <10> not available
(Font)              Font shape `OT1/cmtt/m/n' tried instead on input line 9.

因为 Computer Modern 字体中没有等宽粗体。您可以使用类似的 Latin Modern 字体,这些字体具有等宽粗体字体和更轻的中等大小,以便更好地区分两种粗细:

\documentclass{article}
\usepackage[lighttt]{lmodern} % to emphasize boldface

\newcommand{\highlight}[1]{\textbf{#1}}

\begin{document}

\texttt{WHERE user\_id = '\highlight{' OR 1=1 \#}';}

\end{document}

在此处输入图片描述

如果没有这个lighttt选项,你会得到

在此处输入图片描述

或者你可以使用完全不同的等宽字体,例如 Inconsolata:

\documentclass{article}
\usepackage{inconsolata}

\newcommand{\highlight}[1]{\textbf{#1}}

\begin{document}

\texttt{WHERE user\_id = '\highlight{' OR 1=1 \#}';}

\end{document}

在此处输入图片描述

还有许多其他选择。

相关内容