我使用\texttt
标记代码。有时我会得到这样的行,这些行会溢出页面,因为 Latex 不会换行\texttt
放弃吧,动物们在劳动。功能
std::ostream::traits_type::eq
...
我想允许换行符::
在其中一个之前发生,因此将上面的换行符改为这样是可以接受的:
放弃吧,动物们在劳动。这
std::ostream
::traits_type::eq
功能 ...
这个答案接近我想要的——它允许换行后既定事实单身的角色——但我不知道该如何去适应它。
我如何编写会换行的内容前但仅限:
于\texttt
第一的 :
在一个::
?
答案1
你可以稍微按摩一下琴弦:
\documentclass{article}
\usepackage{xparse,l3regex}
\ExplSyntaxOn
\NewDocumentCommand{\cppstring}{m}
{
\tl_set:Nn \l_spraff_cppstring_tl { #1 }
% change _ to a printable underscore
\regex_replace_all:nnN { _ } { \cO\_ } \l_spraff_cppstring_tl
% change :: to \linebreak[0]::
\regex_replace_all:nnN { :: } { \c{linebreak}[0]:: } \l_spraff_cppstring_tl
% print the result
\texttt{ \tl_use:N \l_spraff_cppstring_tl }
}
\tl_new:N \l_spraff_cppstring_tl
\ExplSyntaxOff
\begin{document}
\noindent % just for the example
unrecoverable error occurs during the transformation, then a
\cppstring{std::ostream::traits_type::eq}
\end{document}
例如,可以通过\linebreak[0]
仅在第一个之后执行来改进这一点::
。最简单的方法是添加另一个替换
% remove the first \linebreak[0]
\regex_replace_once:nnN { \c{linebreak}\[0\] } {} \l_spraff_cppstring_tl
在打印结果之前。
请注意,与使角色活跃的策略不同,该命令\cppstring
也可以作为其他命令的参数。
babel-french
这对于对结肠进行特殊治疗也有好处。
这并没有起到什么作用。以下是带有文本的示例
lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum
\noindent % just for the example
unrecoverable error occurs during the transformation, then a
\cppstring{stdxxxxx::ostreamxxxxxx::traits_typexxxxx::eqxxxxxxx} lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum
不会使段落对齐,因为::
无法抓住第一次机会,因为它会在行中产生太宽的空格。
在紧急情况下,当重写不可能或不成功时,您可以使用sloppypar
:
lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum
\begin{sloppypar}
\noindent % just for the example
unrecoverable error occurs during the transformation, then a
\cppstring{stdxxxxx::ostreamxxxxxx::traits_typexxxxx::eqxxxxxxx} lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum
\end{sloppypar}
答案2
从所引用问题的公认答案开始,我在这里另外使:
active 并测试下一个字符是否为:
。 如果是,我\allowbreak
。
\documentclass[a4paper]{article}
\let\svcolon:
\catcode`:=\active %
\makeatletter
\def:{\@ifnextchar:{\allowbreak\svcolon}{\svcolon}}
\makeatother
\catcode`:=12 %
\renewcommand\texttt{\catcode`:=\active \texttthelp}
\newcommand{\texttthelp}[1]{%
\begingroup
\ttfamily
\begingroup\lccode`~=`/\lowercase{\endgroup\def~}{/\discretionary{}{}{}}%
\begingroup\lccode`~=`[\lowercase{\endgroup\def~}{[\discretionary{}{}{}}%
\begingroup\lccode`~=`.\lowercase{\endgroup\def~}{.\discretionary{}{}{}}%
\catcode`/=\active\catcode`[=\active\catcode`.=\active
\scantokens{#1\noexpand}%
\endgroup
}
\usepackage{lipsum}
\begin{document}
\lipsum[4]
unrecoverable error occurs during the transformation, then a
\texttt{std::ostream::traits\_type::eq}
coverable error occurs during the transformation, then a
\texttt{std::ostream::traits\_type::eq}
\end{document}