自动打破驼峰式命名法

自动打破驼峰式命名法

根据我的旧问题将长单词推入新行,我寻找一种允许在驼峰式大小写字母前换行的可能性。

例如术语创建未指定节点错误标记可以闯入创建未指定节点错误标记

\documentclass{scrartcl}

\begin{document}
\section{Test}
And another example the show must go on, but we have too less text (\textbf{createUnspecifiedNodeWarningMarker} and
\textbf{createUnspecifiedNodeErrorMarker}, sdjklashjksa \textbf{createUnspecifiedLinkWarningMarker} and
\textbf{createUnspecifiedLinkErrorMarker}).
\end{document}

答案1

TeX 会对驼峰式单词进行换行(连字符),但可能不是你想要的位置,例如

cre-a-te-Un-spec-i-fiedNodeEr-ror-Marker

显示默认连字点(使用默认的美国英语连字)

不清楚您是否希望在断点处使用连字符。我假设不需要。如果需要,请将其更改\penalty2\-

在此处输入图片描述

这会将大写字母之间的部分装箱以防止它们断开,并在大写字母之前放置一个小惩罚以使它们断开。

与使用 catcode 更改的任何内容一样(例如\verb它不会在另一个命令的参数中起作用)

\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}

答案2

其中的实现expl3还允许使用(命名的)颜色作为可选参数\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}

在此处输入图片描述

无论如何,预计会出现几个满溢的盒子,因为仅在大写字母处断裂是相当严格的。

相关内容