Re:VIEW Starterにおいて、長いURLを途中で自動的に改行したい。
詳しくはこちら
https://twitter.com/circleblowing/status/1297946704881184769
\seqsplit{...}
を使うと単語の途中でも自動的に改行してくれる。
これを利用して、\url{...}
を \href{...}{\texttt{\seqsplit{...}}}
に置き換える。
ただし \url{}
マクロを上書きするのは影響範囲が大きいので、かわりに myurl{}
というマクロを定義する。
sty/mystyle.sty
に以下を追加。
%% 長いURLを自動的に改行する
\newcommand{\myurl}[2]{%
\href{#1}{\texttt{\seqsplit{#2}}}%
}
review-ext.rb
に以下を追加。
module ReVIEW
class LATEXBuilder
## ===== ここから =====
def _inline_hyperlink(url, escaped_label, flag_footnote)
if /\A[a-z]+:/ !~ url
"\\ref{#{url}}"
elsif ! escaped_label.present?
#"\\url{#{escape_url(url)}}"
"\\myurl{#{escape_url(url)}}{#{escape(url)}}"
elsif ! flag_footnote
"\\href{#{escape_url(url)}}{#{escaped_label}}"
elsif within_context?(:footnote)
#"#{escaped_label}(\\url{#{escape_url(url)}})"
"#{escaped_label}(\\myurl{#{escape_url(url)}}{#{escape(url)}})"
else
#"#{escaped_label}\\footnote{\\url{#{escape_url(url)}}}"
"#{escaped_label}\\footnote{\\myurl{#{escape_url(url)}}{#{escape(url)}}}"
end
end
private :_inline_hyperlink
## ===== ここまで =====
end
end
以下の方法では、URLに _
や .
が含まれるとLaTeXのコンパイルエラーになる。
理由は、URL と LaTeX ではエスケープする文字が違うから。
(例:_
は、LaTeX 中ではエスケープする必要があるが、URL 中ではエスケープしてはならない。)
sty/mystyle.sty
に以下を追加。
%% 長いURLを自動的に改行する
\newcommand{\myurl}[1]{%
%\url{#1}%
\href{#1}{\texttt{\seqsplit{#1}}}%
}
review-ext.rb
に以下を追加。
module ReVIEW
class LATEXBuilder
## ===== ここから =====
alias __inline_hyperlink _inline_hyperlink
def _inline_hyperlink(*args)
s = __inline_hyperlink(*args)
return s.gsub(/\\url\{/, '\\myurl{') # マクロ名をすり替える(`\url{}` → `\myurl{}`)
end
## ===== ここまで =====
end
end
Re:VIEW Staretr本体に取り込むかは未定。