特定字符自动换行

特定字符自动换行

根据我的旧问题将长单词推入新行,我寻找允许在特定字符上换行的可能性。

例如,就我而言,我想在“_”(下划线)处中断。

\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}打印,否则在换行符之前和之后打印。cab

如果你想将其限制为一种特定类型的短语,那么我建议你使用

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

相关内容