Automatic camel case breaking
TeX would linebreak (hyphenate) the camel case words, but perhaps not where you wish eg
cre-a-te-Un-spec-i-fiedNodeEr-ror-Marker
shows the default hyphenation points (using the default US English hyphenation)
It wasn't clear if you wanted hyphens at the break points. I have assumed not. If you do then change \penalty2
to \-
.
This boxes the parts between capital letters so they don't break, and puts a small penalty before capitals so they can break.
As with anything using catcode changes (like \verb
it will not work in the argument to another command)
\documentclass{scrartcl}
\showhyphens{createUnspecifiedNodeErrorMarker}
\makeatletter
\def\zzz{\leavevmode\begingroup
\let\ifcase\iftrue
\def\or##1{%
\catcode`##1\active\uccode`\~`##1\uppercase{%
\def~{\egroup\penalty2\hbox\bgroup\string##1}}}%
\@Alph{}%
\@zzz}
\def\@zzz#1{\textbf{\hbox\bgroup#1\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}
An implementation in expl3
that also allows a (named) color as optional argument to \keyw
:
\documentclass{article}
\usepackage{xcolor}
\usepackage{microtype}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\keyw}{O{.}m}
{
\textcolor{#1}{ \bfseries \cschulz_keyw:n { #2 } }
}
\cs_new_protected:Nn \cschulz_keyw:n
{
\tl_map_inline:nn { #1 }
{
% if the current char is uppercase, add a discretionary hyphen
\str_if_eq:eeT { ##1 } { \str_uppercase:n { ##1 } }
{ \- }
##1
}
}
\ExplSyntaxOff
\begin{document}
\section{Test}
And another example the show must go on, but we have too less
text (\keyw{createUnspecifiedNodeWarningMarker} sdjkle
\keyw{createUnspecifiedNodeErrorMarker}, sdjklashjksa
\keyw{createUnspecifiedLinkWarningMarker} and
\keyw[red]{createUnspecifiedLinkErrorMarker}).
\end{document}
Expect several overfull boxes, anyway, as breaking only at capital letters is rather rigid.