用打字机字体打印的连字符标识符

用打字机字体打印的连字符标识符

我正在排版标识符文档,方法是从数据库生成标识符。这些标识符的格式非常自由,即使用驼峰式大小写和下划线等的混合。我想用打字机字体打印它们,并加连字符。

我在 TeX.SX 的帮助下成功打印了下划线标识符,非常感谢。

但是...连字符。我想允许在小写字母和大写字母之间以及 和 之后换行_-并将普通连字符替换为另一个字符(\cdot很好,但这不是 中的字符T1),以防止后一种情况的歧义。

我想保留原始的连字符点(在我的示例中,这对于字符串“修改”很有用)。我想在数字之前或之后断开不需要特殊处理。

以下是我当前\identifier命令的一个示例,该命令不添加额外的连字符点。我对它的理解不够深入,无法混入来自例如的代码自动打破驼峰式命名法不过 - 有人可以帮我尝试一下吗?

\documentclass{article}
\usepackage[T1]{fontenc} % better underscore
\usepackage[htt]{hyphenat}
\makeatletter%
\DeclareRobustCommand*{\identifier}[1]{%
  \begingroup\@activeus\scantokens{%
  \ifmmode%
    \expandafter\texttt%
  \else%
    \expandafter\textnhtt%
  \fi{#1}%
    \endinput}\endgroup}%
\begingroup\lccode`\~=`\_\relax
   \lowercase{\endgroup\def\@activeus{\catcode`\_=\active \let~\_}}
\makeatother

\begin{document}
\parbox{0pt}{\hspace{0pt}%
  \identifier{SmartModificationSense}
  \identifier{SmartModification_Sense}
  \identifier{Smart_Modification_Sense2}
  \identifier{smartModification_Sense2}
  \identifier{smartModi-fication_Sense2}
  \identifier{adj_Iref3_5percent}
  \identifier{enable_SPI_1}
}
\end{document}

答案1

如果标识符在大写字母之前(前面没有另一个大写字母)或下划线之后拆分,则会添加一个居中点,并允许在单词片段中进行正常连字符连接。

\documentclass{article}
\usepackage[T1]{fontenc} % better underscore
\usepackage[htt]{hyphenat}
\usepackage{xparse,l3regex}

\ExplSyntaxOn
\NewDocumentCommand{\identifier}{m}
 {
  \cmarqu_identifier:n { #1 }
 }

\tl_new:N \l_cmarqu_identifier_tl

\cs_new:Nn \cmarqu_identifier:n
 {
  \tl_set:Nn \l_cmarqu_identifier_tl { #1 }
  \regex_replace_all:nnN
   { \B([^A-Z])([A-Z]) }
   { \1 \c{cmarqu_period:} \2 }
   \l_cmarqu_identifier_tl
  \regex_replace_all:nnN
   { \cD.}
   { \cO_\c{cmarqu_period:} }
   \l_cmarqu_identifier_tl
  \regex_replace_all:nnN
   { \c{cmarqu_period:}\c{cmarqu_period:} }
   { \c{cmarqu_period:} }
   \l_cmarqu_identifier_tl
  \texttt{\tl_use:N \l_cmarqu_identifier_tl}
 }
\cs_new:Nn \cmarqu_period:
 {
  \nobreak
  \discretionary{\textperiodcentered}{}{}
  \nobreak\hspace{0pt}
 }
\ExplSyntaxOff

\begin{document}
\parbox{0pt}{\hspace{0pt}%
  \identifier{SmartModificationSense}
  \identifier{SmartModification_Sense}
  \identifier{Smart_Modification_Sense2}
  \identifier{smartModification_Sense2}
  \identifier{smartModification_Sense2}
  \identifier{adj_Iref3_5percent}
  \identifier{enable_SPI_1}
}
\end{document}

在此处输入图片描述

相关内容