![如何在 LaTeX 中的 \texttt 环境中用点将单词连字符连接起来?](https://linux22.com/image/392846/%E5%A6%82%E4%BD%95%E5%9C%A8%20LaTeX%20%E4%B8%AD%E7%9A%84%20%5Ctexttt%20%E7%8E%AF%E5%A2%83%E4%B8%AD%E7%94%A8%E7%82%B9%E5%B0%86%E5%8D%95%E8%AF%8D%E8%BF%9E%E5%AD%97%E7%AC%A6%E8%BF%9E%E6%8E%A5%E8%B5%B7%E6%9D%A5%EF%BC%9F.png)
网上有很多关于如何在 \texttt 环境中启用(或禁用)连字的讨论。我发现这两个选项
\usepackage[htt]{hyphenat}
和
\DeclareTextFontCommand{\mytexttt}{\ttfamily\hyphenchar\font=45\relax}
可以工作。但是,在 \texttt{ee.Algorithms.Landsat.simpleCloudScore()} 等术语中插入换行符仍然不起作用。我不在乎是否有规则建议不要换行代码,而是希望 LaTeX 能够输出,例如,
... ee.Algorithms
.Landsat.simpleCloudScore() ...
针对带破折号的单词所讨论的解决方案不起作用,而且令人惊讶的是,对于“我的”问题,几乎找不到任何解决方案。
答案1
您可以在句点处拆分,然后重新插入它们,并在前面加上惩罚,并且可以用连字符连接以下部分。
\documentclass{article}
\usepackage{xparse}
\usepackage[htt]{hyphenat}
\newcommand{\breakingperiod}{%
\penalty0 % allow a break before the period
.\nobreak\hspace{0pt}%
}
\ExplSyntaxOn
\NewDocumentCommand{\longword}{m}
{
\texttt
{
\seq_set_split:Nnn \l_michael_lw_seq { . } { #1 }
\seq_use:Nn \l_michael_lw_seq { \breakingperiod }
}
}
\ExplSyntaxOff
\begin{document}
\parbox{0pt}{\hspace{0pt}%
\longword{ee.Algorithms.Landsat.simpleCloudScore()}
}
\end{document}
该\parbox
技巧可以查看所有断点。
答案2
有各种可能性,取决于你是否想在 a 处断开.
以连字符
\documentclass{article}
\usepackage{url}
\begin{document}
\newcommand\zz[1]{\par\bigskip\fbox{\parbox{#1}{\ttfamily\hyphenchar\font=`\-\lccode`\.=`\.
a Something.Landsat.simpleCloudScore()}}}
\zz{20em}
\zz{15em}
\zz{10em}
\zz{5em}
\catcode`.=\active
\edef\.{\string.}
\renewcommand\zz[1]{\par\bigskip\fbox{\parbox{#1}{\ttfamily\hyphenchar\font=`\-\def.{\string.\hspace{0pt}}%
a Something.Landsat.simpleCloudScore()}}}
\zz{20em}
\zz{15em}
\zz{10em}
\zz{5em}
\catcode`.=12
\end{document}