带换行符的彩色文本

带换行符的彩色文本

冒着这个问题可能在某个地方已经解决的风险,但我就是找不到解决方案:我想在文本中突出显示 java 类名,为此我创建了一个宏\newcommand{\class}[1]{\textcolor{Green4}{\texttt{#1}}}。但是当我使用例如\class{ALongClassName},并且文本比行的其余部分长时,文本会超出常规段落。当单词太长而无法放入当前所在的行时,我更喜欢在单词前自动换行。

我试过了\-\class{ALongClassName},但是万一出错,它会-在行尾显示一个字符。有什么方法可以防止这种情况发生,或者有更好的方法来实现我需要的吗?

如有任何想法,我们将不胜感激,提前致谢。

答案1

\filbreak(The TeXbook,第 111 页)的变体:

\documentclass{article}
\usepackage{xcolor}
\usepackage{showframe}

\newcommand{\class}[1]{%
  \hfil\penalty0 \hfilneg
  \textcolor{red}{\texttt{#1}}%
}

\begin{document}
Here is an example of long text given to class
\class{SomeVeryLongClassNameThatNeedsToBePushedToTheNextLine}
and text after it and a \class{ShortClassName}

在此处输入图片描述

这里有一个不同的建议:在大写字母处断开。这假定类名仅由 ASCII 字母组成。

\documentclass{article}
\usepackage{xcolor}
\usepackage{xparse}
\usepackage{showframe}

\ExplSyntaxOn
\NewDocumentCommand{\class}{m}
 {
  \textcolor{red}{\texttt{\lukelr_split_class:n { #1 }}}
 }
\cs_new_protected:Nn \lukelr_split_class:n
 {
  \tl_map_inline:nn { #1 }
   {
    \int_compare:nT { \char_value_uccode:n { `##1 } =`##1 }
     { \discretionary{}{}{} }
    ##1
   }
 }
\ExplSyntaxOff

\begin{document}
Here is an example of long text given to class
\class{SomeVeryLongClassNameThatNeedsToBePushedToTheNextLine}
and text after it and a \class{ShortClassName}

\end{document}

代码将每个字符与其大写字母进行比较;如果它们相等,则在字符前添加一个空的自由变量,从而可以进行换行。

在此处输入图片描述

答案2

我认为该问题与此处描述的内容有关:如何在 \texttt 内自动连字符?将该解决方案应用到您的class宏中将产生所需的结果:

在此处输入图片描述

笔记:

代码:

\documentclass{article}
\usepackage{xcolor}
\usepackage{showframe}

\newcommand*{\EnableHyphenationInTexttt}{\hyphenchar\font=45\relax}% breakable \texttt


\newcommand{\classOld}[1]{\textcolor{red}{\texttt{#1}}}
\newcommand{\class}[1]{\textcolor{red}{\texttt{\EnableHyphenationInTexttt#1}}}


\begin{document}
Here is an example of long text given to class: \classOld{SomeVeryLongClassNameThatNeedsToWrapAcrossMultipleLines}

\medskip
Here is an example of long text given to class: \class{SomeVeryLongClassNameThatNeedsToWrapAcrossMultipleLines}

\end{document}

相关内容