响应这个问题,David Carlisle 提供了源代码,可自动断开或用连字符连接驼峰式大小写单词,以便它们可以跨越多行。断开或用连字符连接发生在大写字母之前,例如驼峰式大小写。
我已成功使用代码并对其进行了少许修改以满足我的需要(使用打字机字体以及粗体文本):
\def\@zzz#1{\textbf{\texttt{\hbox\bgroup#1\egroup}}\endgroup}
但是我无法给文本上色。我尝试了各种方法,例如
- \textcolor 在 David Carlisle 的实现中,即
\def\@zzz#1{\textbf{\texttt{\hbox\bgroup\textcolor{mycustomcolor}{#1}\egroup}}\endgroup}
我也尝试使用 \textbf 之外的 \textcolor - 创建一个使用 \zzz 的新命令(David Carlisle 写道这不起作用,但我很绝望):
\newcommand{\coloredcamel}[1]{\textcolor{mycustomcolor}{\zzz{#1}}}
- 以及其他一些变体。例如,我尝试了上述方法,颜色包和彩色包。我也尝试了这个
\color
命令。
mycustomcolor 的定义是使用\definecolor{mycustomcolor}{RGB}{201, 20, 15}
在 David Carlisle 的实现中,是否可以以某种方式给文本着色?在此先感谢所提供的任何帮助。
答案1
您还需要使用,\color
而不是\textcolor
重新定义\ifcase
to\iftrue
是一个重复使用的廉价技巧,以\Alph
获取大写字母列表。只有\ifcase
在环境范围内没有命令使用时才是安全的,这显然不是这种情况,xcolor
所以这只是定义了一个新的大写字母列表,而不是 patchng `\@alph,但其他方面是相同的代码。
\documentclass{scrartcl}
\usepackage{xcolor}
\showhyphens{createUnspecifiedNodeErrorMarker}
\def\zzcolor{\color{red}}
\makeatletter
\def\zzz{\leavevmode\begingroup
\def\zzelt##1{%
\catcode`##1\active\uccode`\~`##1\uppercase{%
\def~{\egroup\egroup\penalty2\hbox\bgroup\bgroup\zzcolor\string##1}}}%
\zz@Alph{}%
\@zzz}
\def\zz@Alph#1{%
\zzelt A\zzelt B\zzelt C\zzelt D\zzelt E\zzelt F\zzelt G\zzelt H\zzelt I\zzelt J\zzelt
K\zzelt L\zzelt M\zzelt N\zzelt O\zzelt P\zzelt Q\zzelt R\zzelt S\zzelt T\zzelt U\zzelt V\zzelt W\zzelt X\zzelt
Y\zzelt Z}
\def\@zzz#1{\textbf{\hbox\bgroup\bgroup\zzcolor#1\egroup\egroup}\endgroup}
\makeatother
\begin{document}
\section{Test}
And another example the show must go on, but we have too less text (\zzz{createUnspecifiedNodeWarningMarker} and
\zzz{createUnspecifiedNodeErrorMarker}, sdjklashjksa \zzz{createUnspecifiedLinkWarningMarker} and
\zzz{createUnspecifiedLinkErrorMarker}).
\end{document}