Skip to content

Instantly share code, notes, and snippets.

@zr-tex8r
Created June 18, 2025 12:56
Show Gist options
  • Save zr-tex8r/751127cd158078134ce15239b403c20f to your computer and use it in GitHub Desktop.
Save zr-tex8r/751127cd158078134ce15239b403c20f to your computer and use it in GitHub Desktop.
LaTeX: urlパッケージでのフォント設定を和文に対応させる

bxjaurl

LaTeX: urlパッケージでのフォント設定を和文に対応させる

前提環境

  • フォーマット: LaTeX
  • エンジン: 不問
    • ただしメインの機能である「urlパッケージのフォント設定の和文対応」 はpTeX系エンジンまたはLuaTeX-jaを利用している場合にのみ有効になる。 その他の場合は通常のurlの動作になる。
    • 一部の機能は e-TeX 拡張を必要とする。
  • 依存パッケージ:
    • url

インストール

  • *.sty → $TEXMF/tex/latex/bxjaurl

ライセンス

本パッケージは MIT ライセンスの下で配布される。

bxjaurl パッケージ ― 本体

パッケージ読込

\usepackage[«オプション»,…]{bxjaurl}

パッケージ読込時にurlパッケージが未読込だった場合は自動的に読み込まれる。 この際に、bxjaurlに指定したオプションがurlに渡される。

機能

urlパッケージの以下のフォント設定機能が和文対応になる。

  • \urlstyle命令
  • \UrlFontマクロのユーザ定義

更新履歴

  • Version 0.2 〈2025/06/18〉
    • 最初の公開版。

Takayuki YATO (aka. "ZR")
https://github.com/zr-tex8r

%%
%% This is file 'bxjaurl.sty'.
%%
%% Copyright (c) 2025 Takayuki YATO (aka. "ZR")
%% GitHub: https://github.com/zr-tex8r
%% Twitter: @zr_tex8r
%%
%% This package is distributed under the MIT License.
%%
%% package declaration
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{bxjaurl}[2025/06/18 v0.2]
\def\bxur@pkgname{bxjaurl}
\providecommand\bxDebug[1]{}
%--------------------------------------- general
%% unique tokens
\def\bxur@end{\bxur@end@}
%% variables
\@onlypreamble\bxur@do
\let\bxur@do\relax
\newif\ifbxur@styles
%% \ifbxur@defined
\let\ifbxur@defined\iffalse
\def\bxur@do{\let\ifbxur@defined\ifdefined}
\ifx\ifdefined\@undefined\else \bxur@do \fi
%% \bxur@debug{<message>}
\def\bxur@debug#1{%
\bxDebug{\bxur@pkgname: #1}%
}
%--------------------------------------- handle options
%% \bxur@url@opts
\@onlypreamble\bxur@url@opts
\let\bxur@url@opts\@empty
%% '(no)styles'
\DeclareOption{styles}{%
\bxur@stylestrue
}
\DeclareOption{nostyles}{%
\bxur@stylesfalse
}
%% other options are passed to 'utl'
\DeclareOption*{%
\edef\bxur@url@opts{\bxur@url@opts,\CurrentOption}%
}
\ExecuteOptions{styles}
\ProcessOptions*
\edef\bxur@do{%
\noexpand\RequirePackage[\bxur@url@opts]{url}[]%
}\bxur@do
\@gobble{% for shallow parsers
\RequirePackage{url}[]%
}
%--------------------------------------- environment check
%% check version of 'url'
\ifx\UrlLeft\@undefined
\PackageWarningNoLine\bxur@pkgname
{Package 'url' is too old}
\expandafter\endinput\fi\relax
%% \bxur@engine
\let\bxur@engine=0
\def\bxur@do#1#2{%
\edef\bxur@tmpa{\string#1}\edef\bxur@tmpb{\meaning#1}%
\ifx\bxur@tmpa\bxur@tmpb #2\fi
}
\bxur@do\jfam{\let\bxur@engine=j}
\bxur@do\luatexversion{\let\bxur@engine=l}
\bxur@debug{engine = \meaning\bxur@engine}
%% check engine
\if 0\bxur@engine
\PackageInfo\bxur@pkgname
{Unsupported engine\@gobble}
\expandafter\endinput\fi\relax
%--------------------------------------- the hook
%% \bxur@curjfnt
\if l\bxur@engine
\newcount\bxur@curjfnt
\fi
%% \bxur@hook
% The hook.
\let\bxur@hook\@empty
\expandafter\def\expandafter\UrlLeft\expandafter{%
\expandafter\bxur@hook\UrlLeft
}
\if j\bxur@engine % pTeX-ish
\chardef\bxur@tmp@fam=15
\g@addto@macro\bxur@hook{%
\ifnum\jfam>\thr@@\else
\jfam\bxur@tmp@fam
\fi
\bxur@debug{\number\jfam}%
\textfont\jfam\jfont
}
\else\if l\bxur@engine % LuaTeX
\g@addto@macro\bxur@hook{%
\ifbxur@defined\jfam \ifbxur@defined\ltjsetparameter
\ifnum\jfam<\z@
\jfam\z@
\fi
\bxur@debug{\number\jfam}%
\bxur@curjfnt\ltj@curjfnt
\ltjsetparameter{jatextfont={\jfam,\bxur@ltj@jfont}}%
\fi\fi
}
\protected\def\bxur@ltj@jfont{%
\ltj@curjfnt\bxur@curjfnt\relax
}
\fi\fi
%--------------------------------------- patch url styles
\ifbxur@styles %<*styles>
%% \bxur@addto@urlfont{<code>}
% Adds (locally) <code> to the content of \UrlFont.
\def\bxur@addto@urlfont#1{%
\expandafter\bxur@addto@urlfont@a\UrlFont#1\bxur@end
}
\def\bxur@addto@urlfont@a#1\bxur@end{%
\def\UrlFont{#1}%
}
%% the process
\def\bxur@do#1{%
\expandafter\bxur@do@style\csname url@#1style\endcsname{#1}%
}
\@onlypreamble\bxur@do@style
\def\bxur@do@style#1#2#3#4#5{%
% \url@XXstyle{XX}{CHECK-URLFONT}{ADDED}{CHECK-STYLE}
\def\bxur@tmpa{#5}%
\def\bxur@tmpb{#3}%
\ifx#1\bxur@tmpa % unmodified
\g@addto@macro#1{\bxur@addto@urlfont{#4}}%
\ifx\UrlFont\bxur@tmpb % current style is XX
\bxur@debug{current style is #2}%
#1% do patched version
\fi
\else
\PackageInfo\bxur@pkgname
{Skipped patch to style '#2',\MessageBreak
because it has unexpected definition\@gobble}
\fi
}
%% apply to existing styles
\bxur@do{tt}{\ttfamily}{\gtfamily}{%
\@ifundefined{selectfont}{\def\UrlFont{\tt}}{\def\UrlFont{\ttfamily}}%
}
\bxur@do{rm}{\rmfamily}{\mcfamily}{%
\@ifundefined{selectfont}{\def\UrlFont{\rm}}{\def\UrlFont{\rmfamily}}%
}
\bxur@do{sf}{\sffamily}{\gtfamily}{%
\@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\sffamily}}%
}
\bxur@do{same}{}{}{%
\def\UrlFont{}%
}
\fi %</styles>
%--------------------------------------- all done
\endinput
%% EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment