根据我的旧问题将长单词推入新行,我寻找允许在特定字符上换行的可能性。
例如,就我而言,我想在“_”(下划线)处中断。
\documentclass{scrartcl}
\begin{document}
\section{Test}
Finally there is a simple solution using \textsc{\textbf{XMLResource.OPTION\_RECORD\_UNKNOWN\_FEATURE}} option. And the
text must go on \ldots.
\par
\end{document}
答案1
我建议您使用\discretionary
连字符命令。
\documentclass{scrartcl}
\let\underscore\_
\renewcommand{\_}{\discretionary{\underscore}{}{\underscore}}
\begin{document}
\section{Test}
Finally there is a simple solution using
\textsc{\textbf{XMLResource.OPTION\_RECORD\_UNKNOWN\_FEATURE}} option. And the
text must go on \ldots.
\par
\end{document}
\discretionary{}{\underscore}{\underscore}
如果您希望将下划线放在下一行,或者\discretionary{\underscore}{\underscore}{\underscore}
获取换行符之前和之后的字符,则使用。
\discretionary
是 TeX 连字方案的钩子。在某些语言(包括德语)中,单词在连字时可能会改变拼写,Knuth 引入了此命令来帮助解决此类情况。 如果没有换行符,则\discretionary{a}{b}{c}
打印,否则在换行符之前和之后打印。c
a
b
如果你想将其限制为一种特定类型的短语,那么我建议你使用
\newcommand{\resource}[1]{\textbf{\let\underscore\_
\renewcommand{\_}{\discretionary{\underscore}{}{\underscore}} #1}}
并写入\resource{XMLResource.OPTION\_RECORD\_UNKNOWN\_FEATURE}
您的文本。(我已从\textsc
您的示例中删除了,因为它没有效果。)
如果您希望在文档的某个部分使用它,那么您可以类似地定义一个在开头插入这些定义的环境,例如
\newenvironment{underscoresplit}{\let\underscore\_
\renewcommand{\_}{\discretionary{\underscore}{}{\underscore}}}{}
用作
\begin{underscoresplit}
Finally there is a simple solution using
\textsc{\textbf{XMLResource.OPTION\_RECORD\_UNKNOWN\_FEATURE}} option. And the
text must go on \ldots.
\end{underscoresplit}
答案2
您可以定义自己的下划线宏,或重新定义原始宏,在\allowbreak
之前或之后插入:
\newcommand{\origunderscore}{}
\let\origunderscore\_
\renewcommand{\_}{\allowbreak\origunderscore}
如果愿意的话,可以省略第一行,这只是为了安全起见。
首先,我们定义一个宏来保留名称,这样如果任何包已经定义了它,就会出现错误 - 以避免意外重新定义它
我们存储原始的下划线宏
我们使用原始宏重新定义下划线,但在之前插入一个可能的断点
虽然这解决了您的示例中的情况,但允许在任意字符上中断更加困难。选项:
- 你可以制作这个角色积极的并为其制作一个宏
- 您可以使用 XeTeX 和
\XeTeXinterchartoks
- 你可以使用 LuaTeX 和
pre_linebreak_filter
在LaTeX 社区我们有一个非常相似的问题,只是反过来:不要根据特定字母拆分单词。
答案3
url
对于这种情况,您应该使用同名命令的包。然后它在 _ 处默认被破坏:
\documentclass{scrartcl}
\usepackage{url,lipsum}
\begin{document}
\section{Test}
\lipsum[5]
\begin{sloppypar}
Finally there is a simple solution using \url{XMLResource.OPTION_RECORD_UNKNOWN_FEATURE} option. And the
text must go on \ldots.
\end{sloppypar}
\end{document}