如何在不使用 url 包的情况下模拟 \url 连字?

如何在不使用 url 包的情况下模拟 \url 连字?

我被迫url在论文集论文中避免使用该软件包(!)但我的参考书目包含一个很长的 URL。我已经

\newcommand{\url}[1]{{\tttext{#1}}}

但 URL 溢出到边缘,因为它没有连字符。我不想手动更改参考书目来添加连字符(我当前的解决方案),而是定义新命令\url以将命令放在\-点和正斜杠之前。我见过一些相关问题,但对于我的 TeX 技能来说已经足够接近了……

另外,有没有办法可以在没有实际连字符的情况下实现连字符连接?

编辑:抱歉,我应该说,不仅url不允许使用这个包……而且我不能包含任何额外的包。包含的包是

graphicx multicol footmisc amsmath amsfonts

所以我猜这是一个 plainTeX 问题。

答案1

如果没有任何软件包,你唯一的希望就是他们使用一个相当新的 TeX 发行版:

\newcommand{\url}[1]{%
  \begingroup
  \ttfamily
  \begingroup\lccode`~=`/\lowercase{\endgroup\def~}{/\discretionary{}{}{}}%
  \begingroup\lccode`~=`.\lowercase{\endgroup\def~}{.\discretionary{}{}{}}%
  \catcode`/=\active\catcode`.=\active
  \scantokens{#1\noexpand}%
  \endgroup
}

这将允许句号和斜线后出现中断。

如果您的 URL 中包含一些特殊字符,我们可以处理它们,只需提供一些示例即可。

答案2

您可以采用以下解决方案使用回车符来中断 URL 的选项?界定\url

在此处输入图片描述


如果您喜欢在行尾使用破折号,则替换该行\discretionary{-}{}{}

在此处输入图片描述

但请注意,这可能会造成混淆,因为很难判断尾随的破折号是否是 URL 的一部分。如果要在线查看链接,则这不是问题,但对于打印版本,这可能是一个问题。


或者,如果您使用,那么您可以在行尾\discretionary{\usebox\MyArrowBox}{}{}使用一个特殊字符(我使用了,但您可以调整它以使用任何其他符号)来指示连续的文本,以免与破折号混淆。\hookleftarrow

在此处输入图片描述


代码:

\documentclass{article}
\usepackage{hyphenat}
\usepackage{xstring}
\usepackage{forloop}

\newsavebox\MyArrowBox%
\sbox\MyArrowBox{$\hookleftarrow$}%
\makeatletter%
\newcommand*{\BreakableChar}{%
  \leavevmode%
  \prw@zbreak%
  \discretionary{}{}{}%
  %\discretionary{-}{}{}% If want a dash
  %\discretionary{\usebox\MyArrowBox}{}{}%
  \prw@zbreak%
}%

\newcounter{index}%
\newcommand{\url}[1]{%
  \StrLen{#1 }[\stringLength]%
  \forloop[1]{index}{1}{\value{index}<\stringLength}{%
    \StrChar{#1}{\value{index}}[\currentLetter]%
    {\currentLetter\BreakableChar}%
  }%
}%

\newcommand*{\MyUrl}{https://tex.stackexchange.com/questions/50777/how-to-emulate-url-hyphenating-without-using-the-url-package}%

\begin{document}
\parbox{4cm}{\url{\MyUrl}}

\bigskip
\parbox{7cm}{\url{\MyUrl}}
\end{document}

相关内容