diff options
author | Norbert Preining <norbert@preining.info> | 2023-08-30 03:01:17 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2023-08-30 03:01:17 +0000 |
commit | 4fee29360f7566a474b6143951b0744fa151edc9 (patch) | |
tree | 1af77d3ca21368f054b09f30dd60e8028a91be62 /macros | |
parent | 64e26532c685fd24d6983508c6239e3c268b810b (diff) |
CTAN sync 202308300301
Diffstat (limited to 'macros')
176 files changed, 2154 insertions, 1176 deletions
diff --git a/macros/jptex/latex/pxchfon/README-ja.md b/macros/jptex/latex/pxchfon/README-ja.md index ed76bf0f82..ee6573018c 100644 --- a/macros/jptex/latex/pxchfon/README-ja.md +++ b/macros/jptex/latex/pxchfon/README-ja.md @@ -3,25 +3,28 @@ PXchfon パッケージバンドル LaTeX: pLaTeX/upLateX における日本語フォント設定 -pLaTeX / upLaTeX の文書の標準のフォント(明朝・ゴシック)をユーザ指定の -ものに置き換える。dvipdfmx 専用である。他のフォント追加パッケージと -異なり、追加するフォントを LaTeX 文書中で指定するので、一度パッケージ -をインストールするだけで、任意の日本語フォント(ただし等幅に限る)を -使うことができる。欧文部分を同じ日本語フォントで置き換えることも可能で -ある。UTF / OTF パッケージにも対応している。 +pLaTeX/upLaTeX+dvipdfmx のワークフローで PDF 文書を作る場合に、標準の +和文フォント(明朝・ゴシック)に対して実際に使われる OpenTypeフォントを +ユーザが指定する機能を提供する。使用するフォントを LaTeX 文書中で指定 +するので、一度パッケージをインストールするだけで、任意の日本語フォント +(ただし等幅に限る)を使うことができる。 -0.5 版での拡張で、pTeX において広く行われているフォント設定(IPA フォント -の使用等)をパッケージオプション一つで行う機能を追加した。この機能は元々、 -別の PXjafont パッケージとして提供されていたものである。 +japanese-otf パッケージにも対応している。 + +また、upLaTeX において広く行われているフォント設定(IPA フォントの仕様 +等)をパッケージオプション一つで行う機能(プリセット指定)も備えている。 ### 前提環境 * フォーマット: LaTeX - * エンジン: pTeX、upTeX + * エンジン: + - pTeX: 3.0 版以降 + - upTeX: 0.10 版以降 + ※一部の機能は e-TeX 拡張を必要とする。 * DVIウェア: dvipdfmx * 依存パッケージ: - - atbegshi パッケージ(`everypage` オプション使用時) - - pxufont パッケージ(`unicode` オプション使用時) + - atbegshi パッケージ: `everypage` オプション使用時 + - pxufont パッケージ: `unicode` オプション使用時 ### インストール @@ -54,6 +57,22 @@ MITライセンスの下で配布される。 更新履歴 -------- + * Version 2.0 ‹2023/08/28› + - keyval パッケージを使用する。 + - Unicode 直接指定のオプションを key-value 形式の `unicode` キーに + 統一する。(旧形式も当面は使用可能。) + - オプション `(no)fullwidth` を追加。 + ※試験的機能のオプション `unicode(*)-fwid` は廃止。 + - オプション `legacycode` を追加。 + ※試験的機能の旧型式オプションは廃止。 + - オプション `legacycode-replace` を追加。 + - プリセット非指定時の `(no)alphabet` の省略を非推奨とする。 + - 多ウェイト用のユーザ命令が用いられたのに japanese-otf の `deluxe` + が有効でない場合は警告を出す。 + - オプション `maybe-multiweight` を追加。 + - `\asUTF` 命令を廃止。 + - `unicode*` オプションを廃止。 + - pxjafont パッケージを廃止。 * Version 1.9b ‹2023/08/18› - (試験的) jfmsync 機能。 * Version 1.9a ‹2023/02/22› diff --git a/macros/jptex/latex/pxchfon/README.md b/macros/jptex/latex/pxchfon/README.md index 88c85f255c..6cd05a265c 100644 --- a/macros/jptex/latex/pxchfon/README.md +++ b/macros/jptex/latex/pxchfon/README.md @@ -39,6 +39,21 @@ This package is distributed under the MIT License. Revision History ---------------- + * Version 2.0 ‹2023/08/28› + - Use keyval package. + - Now options on direct-Unicode settings are provided as a single + key-value option `unicode`. (The old options are also supported.) + - New option `(no)fullwidth`. + (Experimental option `unicode(*)-fwid` is removed.) + - New options `legacycode` and `legacycode-replace`. + (Old experimental options on “legacycode” are removed.) + - Warn if `(no)alphabet` is omitted without using a preset. + - Warn if user commands on multi-weight are used without employing + `deluxe` option of japanese-otf package. + - New option `maybe-multiweight`. + - Abolish command `\asUTF`. + - Abolish option `unicode*`. + - Abolish pxjafont package. * Version 1.9b ‹2023/08/18› - (Experimental) Add “jfmsync” feature. * Version 1.9a ‹2023/02/22› diff --git a/macros/jptex/latex/pxchfon/pxchfon.pdf b/macros/jptex/latex/pxchfon/pxchfon.pdf Binary files differindex 277f31af6b..10ce88b39d 100644 --- a/macros/jptex/latex/pxchfon/pxchfon.pdf +++ b/macros/jptex/latex/pxchfon/pxchfon.pdf diff --git a/macros/jptex/latex/pxchfon/pxchfon.sty b/macros/jptex/latex/pxchfon/pxchfon.sty index 8ba5fce6b3..310af67b71 100644 --- a/macros/jptex/latex/pxchfon/pxchfon.sty +++ b/macros/jptex/latex/pxchfon/pxchfon.sty @@ -10,14 +10,18 @@ %% package declaration \NeedsTeXFormat{pLaTeX2e} -\ProvidesPackage{pxchfon}[2023/08/18 v1.9b] +\ProvidesPackage{pxchfon}[2023/08/28 v2.0] \def\pxcz@pkgname{pxchfon} %--------------------------------------- general +%% packages +\RequirePackage{keyval} + %% variables \newif\ifpxcz@ok \newif\ifpxcz@utf +\let\pxcz@value\relax \let\pxcz@pre\relax \let\pxcz@post\relax @@ -55,6 +59,29 @@ \def\pxcz@lower@a#1\pxcz@end#2{% \lowercase{\def#2{#1}}} +%% \pxcz@setkeys{<text>}{<error>} +\pxcz@onlypreamble@def\pxcz@setkeys#1#2{% + \def\KV@errx##1{#2}% + \edef\pxcz@do{\noexpand\setkeys{pxchfon}{#1}}\pxcz@do + \let\KV@errx\pxcz@org@KV@errx} +\let\pxcz@org@KV@errx\KV@errx + +%% \pxcz@handle@kvopt{<key>}{<cs-key>}{<value>}{<code>} +%% \pxcz@handle@bool@kvopt{<key>}{<cs-key>}{<value>} +\pxcz@onlypreamble@def\pxcz@handle@kvopt{% + \pxcz@handle@kvopt@a{@@}} +\pxcz@onlypreamble@def\pxcz@handle@bool@kvopt#1#2#3{% + \pxcz@handle@kvopt@a{}{#1}{#2}{#3}{\pxcz@value}} +\pxcz@onlypreamble@def\pxcz@handle@kvopt@a#1#2#3#4{% + \@nameuse{pxcz@#3@giventrue}% + \pxcz@csletcs{pxcz@value}{pxcz@#3#1#4}% + \ifx\pxcz@value\relax + \PackageError\pxcz@pkgname + {Invalid value for option key '#2'\MessageBreak (#4)}% + \expandafter\@gobble + \else \expandafter\@firstofone + \fi} + %% \pxcz@split{<at>}{<target>} \def\pxcz@split#1#2{% \edef\pxcz@tmpx{{#1}{#2}}% @@ -73,13 +100,10 @@ %--------------------------------------- environment check %% check for 'pxjafont' package -% if old version of pxjafont is loaded (probably this package is -% required from pxjafont), then I abort here with an error message. \@ifpackageloaded{pxjafont}{% - \ifx\pxAliasedPxjafont\@undefined - \PackageError\pxcz@pkgname - {FATAL: Old 'pxjafont' is loaded}{\@ehc} - \expandafter\@@end\fi}{} + \PackageError\pxcz@pkgname + {Old 'pxjafont' is loaded}{\@ehc} + \endinput}{} %% \ifpxcz@uptex \newif\ifpxcz@uptex \pxcz@uptexfalse @@ -96,10 +120,32 @@ \edef\pxcz@JYn{% \ifpxcz@uptex JY2\else JY1\fi} +%% \ifpxcz@lite@mode +\newif\ifpxcz@lite@mode +\IfFileExists{pxchfon0.def}{}{%else + \PackageInfo\pxcz@pkgname + {Working in Lite mode\@gobble}% + \pxcz@lite@modetrue} + +%% \ifpxcz@otf@loaded %% \ifpxcz@otf@deluxe +%% \pxcz@otf@weight: otf weight mode +\newif\ifpxcz@otf@loaded \pxcz@otf@loadedtrue \newif\ifpxcz@otf@deluxe \pxcz@otf@deluxefalse -\@ifpackagewith{otf}{deluxe}{\pxcz@otf@deluxetrue}{} -\@ifpackagewith{pxotf}{deluxe}{\pxcz@otf@deluxetrue}{} +% watch out for priority... +\@ifpackagewith{otf}{deluxe}{% + \pxcz@otf@deluxetrue \let\pxcz@otf@weight=d +}{\@ifpackagewith{otf}{bold}{% + \let\pxcz@otf@weight=b +}{\@ifpackagewith{otf}{expert}{% + \let\pxcz@otf@weight=r % 'expert' cancels 'noreplace' +}{\@ifpackagewith{otf}{noreplace}{% + \let\pxcz@otf@weight=n +}{\@ifpackageloaded{otf}{% + \let\pxcz@otf@weight=r +}{%else + \pxcz@otf@loadedfalse \let\pxcz@otf@weight=n +}}}}} %% \ifpxcz@otf@multi \newif\ifpxcz@otf@multi \pxcz@otf@multifalse @@ -109,6 +155,21 @@ \newif\ifpxcz@otf@expert \pxcz@otf@expertfalse \@ifpackagewith{otf}{expert}{\pxcz@otf@experttrue}{} +%% \ifpxcz@otf@mmivjis: 'jis2004' of otf is used? +\newif\ifpxcz@otf@mmivjis \pxcz@otf@mmivjisfalse +\@ifpackagewith{otf}{jis2004}{\pxcz@otf@mmivjistrue}{} + +%% \pxcz@jascale +\ifpxcz@uptex % do not consider JFM scale + \let\pxcz@jascale\utf@sc@le + \ifx\pxcz@jascale\@undefined + \let\pxcz@jascale\Cjascale + \fi + \ifx\pxcz@jascale\@undefined + \edef\pxcz@jascale{\ifx\jsc@JYn\@undefined 0.962216\else 0.924715\fi}% + \fi +\fi + %% \pxcz@pxufont@avail \IfFileExists{pxufont-ruby.sty}{\chardef\pxcz@pxufont@avail=2 }{% \IfFileExists{pxufont.sty}{\chardef\pxcz@pxufont@avail=1 }{% @@ -127,6 +188,11 @@ \newif\ifpxcz@old@hook@system \@ifl@t@r\fmtversion{2020/10/01}{}{\pxcz@old@hook@systemtrue} +%% \pxcz@hy@disable@commands{<code>} +\pxcz@onlypreamble@def\pxcz@hy@disable@commands{% + \providecommand*\pdfstringdefPreHook{}% + \g@addto@macro\pdfstringdefPreHook} + %--------------------------------------- custom presets %% \pxcz@custom@presets @@ -184,30 +250,28 @@ %% variables \newif\ifpxcz@enabled \pxcz@enabledtrue -\let\pxcz@alphabet=n +\let\pxcz@alphabet\relax \newif\ifpxcz@otf \pxcz@otftrue \newif\ifpxcz@cmap@alpha \newif\ifpxcz@mmivjis \newif\ifpxcz@everypage \newif\ifpxcz@oneweight -\newif\ifpxcz@uniquify \newif\ifpxcz@fullwidth -\let\pxcz@directunicode\relax +\let\pxcz@unicode\relax \let\pxcz@main@preset\relax \let\pxcz@file@preset\relax \newif\ifpxcz@file@preset@tl -\newif\ifpxcz@alpha -\newif\ifpxcz@rel \newif\ifpxcz@dumpmap \newif\ifpxcz@dumpmap@tl \newif\ifpxcz@switch@font \pxcz@switch@fonttrue -\newif\ifpxcz@switch@font@xwid \newif\ifpxcz@switch@font@xjis \let\pxcz@strict@csi\relax -\newif\ifpxcz@directunicode@default +\newif\ifpxcz@unicode@given \let\pxcz@legacycode\relax +\newif\ifpxcz@legacycode@replace +\newif\ifpxcz@legacycode@replace@given \let\pxcz@expert\relax -\newif\ifpxcz@glyphid +\chardef\pxcz@glyphid\z@ \newif\ifpxcz@autojfmsync %% process options @@ -240,14 +304,23 @@ % (no)oneweight \DeclareOption{oneweight}{\pxcz@oneweighttrue} \DeclareOption{nooneweight}{\pxcz@oneweightfalse} -% (no)directunicode / directunicode* -\chardef\pxcz@directunicode@none=0 -\chardef\pxcz@directunicode@otf=1 -\chardef\pxcz@directunicode@all=2 -\chardef\pxcz@directunicode@full=3 -\DeclareOption{directunicode*}{\let\pxcz@directunicode\pxcz@directunicode@all} -\DeclareOption{directunicode}{\let\pxcz@directunicode\pxcz@directunicode@otf} -\DeclareOption{nodirectunicode}{\let\pxcz@directunicode\pxcz@directunicode@none} +% unicode=<name> +\chardef\pxcz@unicode@@false=0 +\chardef\pxcz@unicode@@UTF=1 +\chardef\pxcz@unicode@@simple=2 +\chardef\pxcz@unicode@@full=3 +\chardef\pxcz@unicode@@true=\pxcz@unicode@@full +\define@key{pxchfon}{unicode}[true]{% + \pxcz@handle@kvopt{unicode}{unicode}{#1}{% + \let\pxcz@unicode\pxcz@value}} +\DeclareOption{nounicode}{\setkeys{pxchfon}{unicode=false}} +% (old options) +\DeclareOption{directunicode*}{\setkeys{pxchfon}{unicode=simple}} +\DeclareOption{directunicode}{\setkeys{pxchfon}{unicode=UTF}} +\DeclareOption{nodirectunicode}{\setkeys{pxchfon}{unicode=false}} +% (no)fullwidth +\DeclareOption{fullwidth}{\pxcz@fullwidthtrue} +\DeclareOption{nofullwidth}{\pxcz@fullwidthfalse} % (no)dumpmap \DeclareOption{dumpmap}{\pxcz@dumpmaptrue} \DeclareOption{nodumpmap}{\pxcz@dumpmapfalse} @@ -260,24 +333,55 @@ % (no)strictcsi \DeclareOption{strictcsi}{\let\pxcz@strict@csi=t} \DeclareOption{nostrictcsi}{\let\pxcz@strict@csi=f} -% XXXXX-legacycode -\chardef\pxcz@legacycode@apply=0 -\chardef\pxcz@legacycode@ignore=1 -\chardef\pxcz@legacycode@suppress=2 -\chardef\pxcz@legacycode@replace=3 -\DeclareOption{apply-legacycode}{\let\pxcz@legacycode\pxcz@legacycode@apply} -\DeclareOption{ignore-legacycode}{\let\pxcz@legacycode\pxcz@legacycode@ignore} -\DeclareOption{suppress-legacycode}{\let\pxcz@legacycode\pxcz@legacycode@suppress} -\DeclareOption{replace-legacycode}{\let\pxcz@legacycode\pxcz@legacycode@replace} +% legacycode=<name> +\chardef\pxcz@legacycode@@apply=0 +\chardef\pxcz@legacycode@@ignore=1 +\chardef\pxcz@legacycode@@suppress=2 +\define@key{pxchfon}{legacycode}{% + \pxcz@handle@kvopt{legacycode}{legacycode}{#1}{% + \let\pxcz@legacycode\pxcz@value}} +% legacycode-replace=<bool> +\define@key{pxchfon}{legacycode-replace}[true]{% + \pxcz@handle@bool@kvopt{legacycode-replace}{legacycode@replace}{#1}} % (no)expert \DeclareOption{expert}{\let\pxcz@expert=t} \DeclareOption{noexpert}{\let\pxcz@expert=f} % (no)glyphid -\DeclareOption{glyphid}{\pxcz@glyphidtrue} -\DeclareOption{noglyphid}{\pxcz@glyphidfalse} +\DeclareOption{glyphid}{\chardef\pxcz@glyphid=2 } +\DeclareOption{noglyphid}{\chardef\pxcz@glyphid=0 } % (no)autojfmsync \DeclareOption{autojfmsync}{\pxcz@autojfmsynctrue} \DeclareOption{noautojfmsync}{\pxcz@autojfmsyncfalse} +% maybe-multiweight +\DeclareOption{maybe-multiweight}{\let\pxchfonMaybeMultiweight=t} +% use=<spec> +\define@key{pxchfon}{use}{% + \pxcz@okfalse + \pxcz@split{:}{#1}\ifx\pxcz@pre\relax + \pxcz@handle@use@b{file}{#1}% + \else + \pxcz@handle@use@a{file}{file}% + \pxcz@handle@use@a{tl-ja}{ja}% + \pxcz@handle@use@a{tl-ko}{ko}% + \pxcz@handle@use@a{tl-sc}{sc}% + \pxcz@handle@use@a{tl-tc}{tc}% + \pxcz@handle@use@a{tl}{ja}% + \fi + \ifpxcz@ok\else + \PackageError\pxcz@pkgname + {The value for option 'use' has an invalid prefix:\MessageBreak + ('\pxcz@pre:')}% + {\@ehc}% + \fi} +\pxcz@onlypreamble@def\pxcz@handle@use@a#1#2{% + \ifpxcz@ok\else + \def\pxcz@tmpb{#1}\ifx\pxcz@pre\pxcz@tmpb + \pxcz@handle@use@b{#2}{\pxcz@post}% + \fi\fi} +\pxcz@onlypreamble@def\pxcz@handle@use@b#1#2{% + \edef\pxcz@use@list{\pxcz@use@list\pxcz@use@do{#1}{#2}}% + \pxcz@oktrue} + % preset spec options \pxcz@onlypreamble@def\pxcz@all@main@preset{% noembed,% @@ -287,16 +391,16 @@ ms-hg,ipa-hg,ipaex-hg,moga-mobo,moga-mobo-ex,moga-maruberi,ume,% kozuka-pro,kozuka-pr6,kozuka-pr6n,hiragino-pro,hiragino-pron,% hiragino-elcapitan-pro,hiragino-elcapitan-pron,% - morisawa-pro,morisawa-pr6n,yu-win,yu-win10,yu-win10+,yu-osx,% + morisawa-pro,morisawa-pr6n,yu-win,yu-win10,yu-osx,% sourcehan-otc,sourcehan,sourcehan-jp,noto-otc,noto,noto-jp,% haranoaji,% - sourcehan-otc+,sourcehan+,noto-otc+,noto+,% sourcehan-otc!,sourcehan!,sourcehan-jp!,noto-otc!,noto!,noto-jp!,% noto-otf!,% %(alias) hiragino,noto-otf,% noEmbed,kozuka,hiragino-elcapitan,morisawa} \pxcz@onlypreamble@def\pxcz@all@abolished@preset{% + sourcehan+,sourcehan-otc+,noto+,noto-otc+,yu-win10+, ipa-otf,ipa-otf-dx,kozuka4,kozuka6,kozuka6n, ms-dx,ipa-ttf,ipa-ttf-dx,ipav2,ipav2-dx,ipa-dx,hiragino-dx} \def\pxcz@do#1{\DeclareOption{#1}{\def\pxcz@main@preset{#1}}} @@ -310,25 +414,21 @@ %% 'local-only' constant options % The 'unicode' option means a Unicode-oriented mapping, and requires % dvipdfmx of version 20170918 or later. The 'unicode-fwid' is a variant. -% The 'unicode*(-fwid)' option is a transitional (deteriorated) version -% of 'unicode(-fwid)' and can work with dvipdfmx of version 20170318. -% NOTE: 'unicode*(-fwid)' is DEPRECATED and will be abolished in v2.0. -\pxcz@onlypreamble@csdef{pxcz@POPT/unicode}{% - \let\pxcz@directunicode\pxcz@directunicode@full} -\pxcz@onlypreamble@csdef{pxcz@POPT/unicode*}{% - \pxcz@uniquifytrue - \let\pxcz@directunicode\pxcz@directunicode@full} -\pxcz@onlypreamble@csdef{pxcz@POPT/unicode-fwid}{% - \pxcz@fullwidthtrue - \let\pxcz@directunicode\pxcz@directunicode@full} -\pxcz@onlypreamble@csdef{pxcz@POPT/unicode*-fwid}{% - \pxcz@fullwidthtrue \pxcz@uniquifytrue - \let\pxcz@directunicode\pxcz@directunicode@full} +% The 'unicode*(-fwid)' option is ABOLISHED. +\define@key{pxchfon}{unicode*}[]{% + \PackageError\pxcz@pkgname + {Option 'unicode*' is ABOLISHED!\MessageBreak + You should update to TL2018 or later and use\MessageBreak + option 'unicode' instead}% + {This option was to invoke a transitional setting\MessageBreak + that was specially tailored for TL2017.\MessageBreak + \@ehc}} % general option handler \DeclareOption*{% - \pxcz@csuse@or{pxcz@POPT/\CurrentOption}{% - \pxcz@parse@opt\CurrentOption - \ifpxcz@ok\else \@unknownoptionerror \fi}} + \pxcz@parse@opt\CurrentOption + \ifpxcz@ok\else + \pxcz@setkeys{\CurrentOption}{\@unknownoptionerror}% + \fi} %% \pxcz@use@list \pxcz@onlypreamble@let\pxcz@use@list\@empty @@ -337,13 +437,6 @@ %% \pxcz@parse@opt{<option>} \pxcz@onlypreamble@def\pxcz@parse@opt#1{% \pxcz@okfalse - \pxcz@parse@opt@b{use=file:}{#1}{file}% - \pxcz@parse@opt@b{use=tl-ja:}{#1}{ja}% - \pxcz@parse@opt@b{use=tl-ko:}{#1}{ko}% - \pxcz@parse@opt@b{use=tl-sc:}{#1}{sc}% - \pxcz@parse@opt@b{use=tl-tc:}{#1}{tc}% - \pxcz@parse@opt@b{use=tl:}{#1}{ja}% - \pxcz@parse@opt@b{use=}{#1}{file}% \pxcz@parse@opt@a{+}{#1}{\pxcz@file@preset@tltrue}% \pxcz@parse@opt@a{*}{#1}{\pxcz@file@preset@tlfalse}% \pxcz@parse@opt@a{tl:}{#1}{\pxcz@file@preset@tltrue}% @@ -354,33 +447,23 @@ #3\let\pxcz@file@preset\pxcz@post \pxcz@oktrue \fi \fi} -\pxcz@onlypreamble@def\pxcz@parse@opt@a#1#2#3{% for file preloads +\pxcz@onlypreamble@def\pxcz@parse@opt@a#1#2#3{% \ifpxcz@ok\else \pxcz@split{#1}{#2}\ifx\pxcz@pre\@empty #3\let\pxcz@file@preset\pxcz@post \pxcz@oktrue \fi \fi} -\pxcz@onlypreamble@def\pxcz@parse@opt@b#1#2#3{% for file presets - \ifpxcz@ok\else - \pxcz@split{#1}{#2}\ifx\pxcz@pre\@empty - \edef\pxcz@use@list{\pxcz@use@list\pxcz@use@do{#3}{\pxcz@post}}% - \pxcz@oktrue - \fi - \fi} %% dispatch \ProcessOptions* -%% 'unicode*' and 'unicode*-fwid' are DEPRECATED -\ifpxcz@uniquify - \PackageWarningNoLine\pxcz@pkgname - {IMPORTANT: Option 'unicode*\ifpxcz@fullwidth -fwid\fi' - is DEPRECATED!\MessageBreak - This option invokes a transitional setting that\MessageBreak - is specially tailored for TL2017, and will be\MessageBreak - abolished in v2.0 (soon to be released).\MessageBreak - You should update to TL2018 or later and use\MessageBreak - option 'unicode\ifpxcz@fullwidth -fwid\fi' instead} +%% adjust \pxcz@pxufont@avail +\ifpxcz@enabled\else + % pxufont-ruby (virtually) requires dvipdfmx. + % (But if it is already loaded, it cannot be helped.) + \ifnum\pxcz@pxufont@avail=2 \ifnum\pxcz@pxufont@loaded<2 + \chardef\pxcz@pxufont@avail=1 + \fi\fi \fi %% 'everypage' needs 'atbegshi' package @@ -388,56 +471,39 @@ \RequirePackage{atbegshi} \fi\fi -%% apply default value for \pxcz@directunicode -\ifx\pxcz@directunicode\relax - \let\pxcz@directunicode\pxcz@directunicode@none +%% apply default value for \pxcz@unicode +\ifpxcz@unicode@given\else + \let\pxcz@unicode\pxcz@unicode@@false \ifnum\pxcz@pxufont@loaded>0 \PackageWarningNoLine\pxcz@pkgname {Option 'unicode' is enabled, since the package\MessageBreak 'pxufont' is already loaded} - \let\pxcz@directunicode\pxcz@directunicode@full + \let\pxcz@unicode\pxcz@unicode@@full \fi - \pxcz@directunicode@defaulttrue \fi %% set 'pxcz@alpha' -\@tempswafalse -\if\pxcz@main@preset\relax - \if\pxcz@file@preset\relax \@tempswatrue \fi -\fi -\if t\pxcz@alphabet \pxcz@alphatrue -\else\if f\pxcz@alphabet \pxcz@alphafalse -\else\if r\pxcz@alphabet \pxcz@alphafalse -\else\if@tempswa \pxcz@alphatrue -\else \pxcz@alphafalse -\fi\fi\fi\fi -\ifpxcz@alpha - \IfFileExists{pxchfon0.def}{}{%else - \PackageError\pxcz@pkgname - {Option 'alphabet' not available in Lite edition}% - {You must install full edition of PXchfon bundle, or specify - 'noalphabet'\MessageBreak as package option.}% - \pxcz@alphafalse} -\fi - -%% set 'pxcz@rel' -\if r\pxcz@alphabet \pxcz@reltrue -\else \pxcz@relfalse -\fi -\ifpxcz@rel - \IfFileExists{pxchfon0.def}{}{%else - \PackageError\pxcz@pkgname - {Option 'relfont' not available in Lite edition}% - {You must install full edition of PXchfon bundle.}% - \pxcz@relfalse} +%% apply default value for \pxcz@alphabet +\if\pxcz@alphabet\relax + \ifx\pxcz@main@preset\relax \ifx\pxcz@file@preset\relax + % TODO: warn + \let\pxcz@alphabet=t + \fi\fi + \if\pxcz@alphabet\relax + \let\pxcz@alphabet=f + \fi \fi %% \ifpxcz@alphafont % Whether or not alphabet fonts are used. \newif\ifpxcz@alphafont -\ifpxcz@alpha \pxcz@alphafonttrue -\else\ifpxcz@rel \pxcz@alphafonttrue -\else \pxcz@alphafontfalse +\if f\pxcz@alphabet \else \pxcz@alphafonttrue \fi +\ifpxcz@alphafont\ifpxcz@lite@mode + \PackageError\pxcz@pkgname + {Font settings for alphabetic logical fonts\MessageBreak + are not supported in Lite edition}% + {You must install full edition of PXchfon bundle.}% + \pxcz@alphafontfalse \let\pxcz@alphabet=f \fi\fi %% apply default for \pxcz@strict@csi @@ -461,7 +527,6 @@ \ifpxcz@switch@font \pxcz@switch@font@xjistrue \else - \let\pxcz@switch@font@xwidtrue\pxcz@switch@font@xwidfalse \let\pxcz@switch@font@xjistrue\pxcz@switch@font@xjisfalse \fi @@ -472,7 +537,7 @@ \endgroup \AtBeginDocument{% \@tempswatrue - \ifnum\pxcz@directunicode<\pxcz@directunicode@full\else + \ifnum\pxcz@unicode<\pxcz@unicode@@full\else \pxcz@get@dvipdfmx@version \ifx\pxcz@dvipdfmx@version\@undefined\else \ifnum\pxcz@dvipdfmx@version<20170918 @@ -495,25 +560,9 @@ %% \pxcz@apply@opt@unicode % Forces the 'unicode' setup (unless a directunicode option was given). \pxcz@onlypreamble@def\pxcz@apply@opt@unicode{% - \ifpxcz@directunicode@default % default -> unicode - \pxcz@warn@unicode - \let\pxcz@directunicode\pxcz@directunicode@full - \pxcz@uniquifyfalse - \else\ifnum\pxcz@directunicode=\pxcz@directunicode@full - \ifpxcz@uniquify % unicode* -> 'unicode+' - \pxcz@switch@font@xwidtrue \pxcz@uniquifyfalse - \fi % unicode -> (unchanged) - \else \pxcz@uniquifyfalse % otherwise, enable switch-font - \fi\fi} -%% \pxcz@apply@opt@unicodeP -% Forces the 'unicode+' setup, which is a 'unicode' with switch-font -% enabled on the width features. -\pxcz@onlypreamble@def\pxcz@apply@opt@unicodeP{% - \pxcz@uniquifyfalse - \pxcz@switch@font@xwidtrue % 'unicode+' - \ifnum\pxcz@directunicode=\pxcz@directunicode@full\else + \ifpxcz@unicode@given\else % default -> unicode \pxcz@warn@unicode - \let\pxcz@directunicode\pxcz@directunicode@full + \let\pxcz@unicode\pxcz@unicode@@full \fi} %% \pxcz@warn@unicode \pxcz@onlypreamble@def\pxcz@warn@unicode{% @@ -526,7 +575,6 @@ \edef\pxcz@tmpa{#1}% \pxcz@cond\ifx\pxcz@main@preset\pxcz@tmpa\fi {\@firstofone}{\@gobble}} -% A 'XXXX+' preset forces 'unicode+' setting. % 'sourcehan(-otc)' and 'noto(-otc)' force 'unicode' setting. \pxcz@do{sourcehan}{\pxcz@apply@opt@unicode} \pxcz@do{sourcehan-otc}{\pxcz@apply@opt@unicode} @@ -535,59 +583,59 @@ \pxcz@do{noto-otf}{\pxcz@apply@opt@unicode} \pxcz@do{noto-otc}{\pxcz@apply@opt@unicode} \pxcz@do{noto-jp}{\pxcz@apply@opt@unicode} -\pxcz@do{sourcehan+}{\pxcz@apply@opt@unicodeP} -\pxcz@do{sourcehan-otc+}{\pxcz@apply@opt@unicodeP} -\pxcz@do{noto+}{\pxcz@apply@opt@unicodeP} -\pxcz@do{noto-otc+}{\pxcz@apply@opt@unicodeP} -\pxcz@do{yu-win10+}{\pxcz@apply@opt@unicodeP} \pxcz@custom@apply@opt@unicode % No-embed is not supported under the 'unicode' setup -\ifnum\pxcz@directunicode=\pxcz@directunicode@full +\ifnum\pxcz@unicode=\pxcz@unicode@@full \pxcz@warn@unless@all@embeddedtrue \fi +%% apply default for pxcz@legacycode@replace +\ifpxcz@legacycode@replace@given\else + \ifnum\pxcz@unicode=\pxcz@unicode@@full + \pxcz@legacycode@replacetrue + \fi +\fi + %% apply default for \pxcz@legacycode \ifx\pxcz@legacycode\relax - \ifnum\pxcz@directunicode=\pxcz@directunicode@full - \let\pxcz@legacycode\pxcz@legacycode@replace - \else \let\pxcz@legacycode\pxcz@legacycode@apply + \ifpxcz@legacycode@replace + \let\pxcz@legacycode\pxcz@legacycode@@suppress + \else \let\pxcz@legacycode\pxcz@legacycode@@apply \fi \fi -%% 'replace-legacycode' requires the 'pxufont' package -\ifnum\pxcz@legacycode=\pxcz@legacycode@replace +%% 'lecacycode=replace' requires the 'pxufont' package +\ifpxcz@legacycode@replace \ifnum\pxcz@pxufont@avail<1 \PackageError\pxcz@pkgname - {The option 'replace-lecacycode' requires the 'pxufont'\MessageBreak + {The option 'lecacycode-replace' requires the 'pxufont'\MessageBreak package, but it is not installed}% - {The option 'suprress-lecacycode' is applied as fallback.\MessageBreak - \@ehc} - \let\pxcz@legacycode\pxcz@legacycode@suppress + {\@ehc} + \pxcz@legacycode@replacefalse \fi \fi %% check requirements for 'glyphid' -\ifpxcz@glyphid +\ifnum\pxcz@glyphid>0 \pxcz@oktrue - \ifnum\pxcz@legacycode=\pxcz@legacycode@replace\else \pxcz@okfalse \fi + \ifpxcz@enabled\else \pxcz@okfalse \fi + \ifpxcz@legacycode@replace\else \pxcz@okfalse \fi + \ifnum\pxcz@unicode<\pxcz@unicode@@simple \pxcz@okfalse \fi \ifpxcz@uptex\else \pxcz@okfalse \fi \ifnum\pxcz@pxufont@avail<2 \pxcz@okfalse \fi \ifpxcz@ok\else - \PackageError\pxcz@pkgname - {The option 'glyphid' cannot be used here. You must\MessageBreak + \PackageWarningNoLine\pxcz@pkgname + {The option 'glyphid' will not work. You must\MessageBreak use upLaTeX and the 'unicode' option, and package\MessageBreak 'pxufont' of v0.5 or later must be installed} - {\@ehc} - \pxcz@glyphidfalse + \chardef\pxcz@glyphid=1 % fallback mode \fi \fi %% check requirements for 'expert' \pxcz@oktrue -\ifnum\pxcz@legacycode=\pxcz@legacycode@replace\else \pxcz@okfalse \fi -\ifnum\pxcz@directunicode=\pxcz@directunicode@full\else \pxcz@okfalse \fi -\ifpxcz@uniquify \pxcz@okfalse \fi % no 'unicode*' -\ifpxcz@switch@font@xwid \pxcz@okfalse \fi % no 'unicode+' +\ifpxcz@legacycode@replace\else \pxcz@okfalse \fi +\ifnum\pxcz@unicode=\pxcz@unicode@@full\else \pxcz@okfalse \fi \ifnum\pxcz@pxufont@avail<2 \pxcz@okfalse \fi \ifpxcz@ok\else \if t\pxcz@expert % explicitly given @@ -619,6 +667,9 @@ %--------------------------------------- user interface +%% variables +\newif\ifpxcz@deluxe@used + %% \pxcz@sym@list \def\pxcz@sym@list{% mnl,mnr,mnb,gtr,gtb,gtx,gtu,mgr,% @@ -629,50 +680,52 @@ %%<*> \setminchofont/\setgothicfont/etc. \newcommand*\setminchofont{\pxcz@setfont{mnl,mnr,mnb}} \newcommand*\setgothicfont{\pxcz@setfont{gtr,gtb,gtx,gtu}} -\newcommand*\setlightminchofont{\pxcz@setfont{mnl}} -\newcommand*\setmediumminchofont{\pxcz@setfont{mnr}} -\newcommand*\setboldminchofont{\pxcz@setfont{mnb}} -\newcommand*\setmediumgothicfont{\pxcz@setfont{gtr}} -\newcommand*\setboldgothicfont{\pxcz@setfont{gtb}} -\newcommand*\setxboldgothicfont{\pxcz@setfont{gtx}} -\newcommand*\setoneweightgothicfont{\pxcz@setfont{gtu}} -\newcommand*\setmarugothicfont{\pxcz@setfont{mgr}} +\newcommand*\setlightminchofont{\pxcz@setfont@dx{mnl}} +\newcommand*\setmediumminchofont{\pxcz@setfont@dx{mnr}} +\newcommand*\setboldminchofont{\pxcz@setfont@dx{mnb}} +\newcommand*\setmediumgothicfont{\pxcz@setfont@dx{gtr}} +\newcommand*\setboldgothicfont{\pxcz@setfont@dx{gtb}} +\newcommand*\setxboldgothicfont{\pxcz@setfont@dx{gtx}} +\newcommand*\setoneweightgothicfont{\pxcz@setfont@dx{gtu}} +\newcommand*\setmarugothicfont{\pxcz@setfont@dx{mgr}} \newcommand*\setkoreanminchofont{\pxcz@setfont{koml,komr,komb}} \newcommand*\setkoreangothicfont{\pxcz@setfont{kogr,kogb,kogx,kogu,komgr}} -\newcommand*\setkoreanlightminchofont{\pxcz@setfont{koml}} -\newcommand*\setkoreanmediumminchofont{\pxcz@setfont{komr}} -\newcommand*\setkoreanboldminchofont{\pxcz@setfont{komb}} -\newcommand*\setkoreanmediumgothicfont{\pxcz@setfont{kogr}} -\newcommand*\setkoreanboldgothicfont{\pxcz@setfont{kogb}} -\newcommand*\setkoreanxboldgothicfont{\pxcz@setfont{kogx}} -\newcommand*\setkoreanoneweightgothicfont{\pxcz@setfont{kogu}} -\newcommand*\setkoreanmarugothicfont{\pxcz@setfont{komgr}} +\newcommand*\setkoreanlightminchofont{\pxcz@setfont@dx{koml}} +\newcommand*\setkoreanmediumminchofont{\pxcz@setfont@dx{komr}} +\newcommand*\setkoreanboldminchofont{\pxcz@setfont@dx{komb}} +\newcommand*\setkoreanmediumgothicfont{\pxcz@setfont@dx{kogr}} +\newcommand*\setkoreanboldgothicfont{\pxcz@setfont@dx{kogb}} +\newcommand*\setkoreanxboldgothicfont{\pxcz@setfont@dx{kogx}} +\newcommand*\setkoreanoneweightgothicfont{\pxcz@setfont@dx{kogu}} +\newcommand*\setkoreanmarugothicfont{\pxcz@setfont@dx{komgr}} \newcommand*\setschineseminchofont{\pxcz@setfont{scml,scmr,scmb}} \newcommand*\setschinesegothicfont{\pxcz@setfont{scgr,scgb,scgx,scgu,scmgr}} -\newcommand*\setschineselightminchofont{\pxcz@setfont{scml}} -\newcommand*\setschinesemediumminchofont{\pxcz@setfont{scmr}} -\newcommand*\setschineseboldminchofont{\pxcz@setfont{scmb}} -\newcommand*\setschinesemediumgothicfont{\pxcz@setfont{scgr}} -\newcommand*\setschineseboldgothicfont{\pxcz@setfont{scgb}} -\newcommand*\setschinesexboldgothicfont{\pxcz@setfont{scgx}} -\newcommand*\setschineseoneweightgothicfont{\pxcz@setfont{scgu}} -\newcommand*\setschinesemarugothicfont{\pxcz@setfont{scmgr}} +\newcommand*\setschineselightminchofont{\pxcz@setfont@dx{scml}} +\newcommand*\setschinesemediumminchofont{\pxcz@setfont@dx{scmr}} +\newcommand*\setschineseboldminchofont{\pxcz@setfont@dx{scmb}} +\newcommand*\setschinesemediumgothicfont{\pxcz@setfont@dx{scgr}} +\newcommand*\setschineseboldgothicfont{\pxcz@setfont@dx{scgb}} +\newcommand*\setschinesexboldgothicfont{\pxcz@setfont@dx{scgx}} +\newcommand*\setschineseoneweightgothicfont{\pxcz@setfont@dx{scgu}} +\newcommand*\setschinesemarugothicfont{\pxcz@setfont@dx{scmgr}} \newcommand*\settchineseminchofont{\pxcz@setfont{tcml,tcmr,tcmb}} \newcommand*\settchinesegothicfont{\pxcz@setfont{tcgr,tcgb,tcgx,tcgu,tcmgr}} -\newcommand*\settchineselightminchofont{\pxcz@setfont{tcml}} -\newcommand*\settchinesemediumminchofont{\pxcz@setfont{tcmr}} -\newcommand*\settchineseboldminchofont{\pxcz@setfont{tcmb}} -\newcommand*\settchinesemediumgothicfont{\pxcz@setfont{tcgr}} -\newcommand*\settchineseboldgothicfont{\pxcz@setfont{tcgb}} -\newcommand*\settchinesexboldgothicfont{\pxcz@setfont{tcgx}} -\newcommand*\settchineseoneweightgothicfont{\pxcz@setfont{tcgu}} -\newcommand*\settchinesemarugothicfont{\pxcz@setfont{tcmgr}} +\newcommand*\settchineselightminchofont{\pxcz@setfont@dx{tcml}} +\newcommand*\settchinesemediumminchofont{\pxcz@setfont@dx{tcmr}} +\newcommand*\settchineseboldminchofont{\pxcz@setfont@dx{tcmb}} +\newcommand*\settchinesemediumgothicfont{\pxcz@setfont@dx{tcgr}} +\newcommand*\settchineseboldgothicfont{\pxcz@setfont@dx{tcgb}} +\newcommand*\settchinesexboldgothicfont{\pxcz@setfont@dx{tcgx}} +\newcommand*\settchineseoneweightgothicfont{\pxcz@setfont@dx{tcgu}} +\newcommand*\settchinesemarugothicfont{\pxcz@setfont@dx{tcmgr}} \pxcz@onlypreamble@def\pxcz@setfont#1{\@ifnextchar[%] {\pxcz@setfont@a{#1}}{\pxcz@setfont@a{#1}[0]}} +\pxcz@onlypreamble@def\pxcz@setfont@dx{% + \pxcz@deluxe@usedtrue\pxcz@setfont} \pxcz@onlypreamble@def\pxcz@setfont@a#1[#2]#3{% \edef\pxcz@tmpa{#3}\pxcz@lower\pxcz@tmpa \pxcz@split{?:}{?\pxcz@tmpa}% @@ -689,31 +742,23 @@ \@for\pxcz@x:=\pxcz@sym@list\do{% \@namedef{pxcz@FS/\pxcz@x}{}} -%--------------------------------------- '\asUTF' -% NB. This feature is superseded by the \diruni command. -\ifpxcz@uptex - -%%<*> \asUTF{<jachar>} -\AtBeginDocument{% - \@ifpackageloaded{otf}{% - \providecommand*\asUTF{\pxcz@asutf@a}% - }{}% -} -\def\pxcz@asutf@a#1{% - \pxcz@warn@depre@asutf - \kchardef\pxcz@tmpa=`#1\relax - \expandafter\pxcz@asutf@b\meaning\pxcz@tmpa\relax -} -\def\pxcz@asutf@b#1"#2\relax{% - \UTF{#2}% -} -\def\pxcz@warn@depre@asutf{% - \PackageWarningNoLine\pxcz@pkgname - {Important: Command '\string\asUTF' is DEPRECATED}% - \global\let\pxcz@warn@depre@asutf\relax -} +%%<*> \maybemultiweight +\newcommand*\maybemultiweight{% + \let\pxchfonMaybeMultiweight=t} +% check for usage of multi-weight commands +\ifx t\pxchfonMaybeMultiweight\else + \AtBeginDocument{% + \ifpxcz@deluxe@used\ifpxcz@otf@deluxe\else + \PackageWarningNoLine\pxcz@pkgname + {Setting for multi-weight usage of japanese-otf\MessageBreak + font set is employed, but 'deluxe' option\MessageBreak + of japanese-otf is not enabled!\MessageBreak + You should specify 'maybe-multiweight' option\MessageBreak + if you really intend the present setting} + \fi\fi} \fi + %--------------------------------------- fontmap internals %% \pxcz@noembed @@ -817,15 +862,6 @@ \pxcz@onlypreamble@def\pxcz@add@lopt#1{% \edef\pxcz@lopts{% \ifx\pxcz@lopts\@empty\else \pxcz@lopts:\fi#1}} -%% \pxcz@uniquify@lopts -\pxcz@onlypreamble@def\pxcz@uniquify@lopts#1#2{% - \pxcz@oktrue - \def\pxcz@tmpb{jp90}\ifx\pxcz@tmpb\pxcz@lopts\pxcz@okfalse\fi - \def\pxcz@tmpb{jp04}\ifx\pxcz@tmpb\pxcz@lopts\pxcz@okfalse\fi - \ifx\@empty\pxcz@lopts\if t#1\pxcz@okfalse\fi\fi - \ifpxcz@ok - \edef\pxcz@lopts{#2}% - \fi} %% \pxcz@is@jis@cmap \pxcz@onlypreamble@def\pxcz@is@jis@cmap{% @@ -889,28 +925,6 @@ \edef\pxcz@font{\expandafter\pxcz@tmpb\pxcz@font}% \fi} % entries -\ifpxcz@switch@font@xwid - \def\pxcz@switch@font@@sourcehanC@fwid#1:0:{:2:} - \def\pxcz@switch@font@@sourcehanC@hwid#1:0:{:1:} - \def\pxcz@switch@font@@sourcehan@fwid#1-{#1SC-} - \def\pxcz@switch@font@@sourcehan@hwid#1-{#1K-} - \def\pxcz@switch@font@@notoC@fwid#1:0:{:2:} - \def\pxcz@switch@font@@notoC@hwid#1:0:{:1:} - \def\pxcz@switch@font@@noto@fwid#1jp{#1sc} - \def\pxcz@switch@font@@noto@hwid#1jp{#1kr} - \def\pxcz@switch@font@@yugoth@fwid#1:0:{:1:} - \def\pxcz@switch@font@@yumin@fwid#1.ttf{% - \@nameuse{pxcz@SFYM/#1.ttf}} - \def\pxcz@switch@font@@yuminU@fwid#1.TTF{% - \@nameuse{pxcz@SFYM/#1.TTF}} - \def\pxcz@do#1{\@namedef{pxcz@SFYM/#1}} - \pxcz@do{yuminl.ttf}{:1:YuGothL.ttc} - \pxcz@do{yumin.ttf}{:1:YuGothR.ttc} - \pxcz@do{yumindb.ttf}{:1:YuGothM.ttc} - \pxcz@do{YUMINL.TTF}{:1:YUGOTHL.TTC} - \pxcz@do{YUMIN.TTF}{:1:YUGOTHR.TTC} - \pxcz@do{YUMINDB.TTF}{:1:YUGOTHM.TTC} -\fi \ifpxcz@switch@font@xjis \@namedef{pxcz@switch@font@@mogamobo@jp90}#1.ttc{% \pxcz@csuse@or{pxcz@SFMG/#1.ttc}{#1.ttc}} @@ -936,14 +950,14 @@ %% entry modifiers % Uni: Changes cmap to 'unicode' if directunicode. \pxcz@declare@entry@modifier{Uni}{% - \ifnum\pxcz@directunicode<\pxcz@directunicode@otf\else + \ifnum\pxcz@unicode<\pxcz@unicode@@UTF\else \ifx\pxcz@font\pxcz@noembed\else \let\pxcz@cmap\pxcz@cmap@directuni \fi \fi} % Uni*: Changes cmap to 'unicode' if directunicode*. \pxcz@declare@entry@modifier{Uni*}{% - \ifnum\pxcz@directunicode<\pxcz@directunicode@all\else + \ifnum\pxcz@unicode<\pxcz@unicode@@simple\else \ifx\pxcz@font\pxcz@noembed\else \let\pxcz@cmap\pxcz@cmap@directuni \fi @@ -966,7 +980,7 @@ % HWid \pxcz@declare@entry@modifier{HWid}{% \ifx\pxcz@font\pxcz@noembed \pxcz@okfalse - \else\ifnum\pxcz@directunicode=\pxcz@directunicode@full \pxcz@oktrue + \else\ifnum\pxcz@unicode=\pxcz@unicode@@full \pxcz@oktrue \else\ifpxcz@cmap@alpha \pxcz@okfalse \else \pxcz@oktrue \fi\fi\fi @@ -1048,20 +1062,13 @@ \global\pxcz@noembed@usedtrue \fi % apply layout options when using 'unicode' - \ifnum\pxcz@directunicode<\pxcz@directunicode@full\else + \ifnum\pxcz@unicode<\pxcz@unicode@@full\else \ifx\pxcz@cmap\pxcz@cmap@directuni - \ifpxcz@uniquify - \pxcz@uniquify@lopts{t}{\pxcz@@jpXX}% - \ifpxcz@fullwidth - \pxcz@add@lopt{fwid}% - \fi - \else \ifpxcz@fullwidth \pxcz@split{wid}\pxcz@lopts\ifx\pxcz@pre\relax \pxcz@add@lopt{fwid}% \fi \fi - \fi \ifx\pxcz@lopts\@empty\else \edef\pxcz@mopts{\pxcz@mopts\space -l \pxcz@lopts}% \fi @@ -1069,8 +1076,8 @@ \fi % suppress legacy-code mappings unless 'apply-legacycode' \ifx\pxcz@cmap\pxcz@cmap@directuni\else \ifpxcz@retain\else - \ifnum\pxcz@legacycode=\pxcz@legacycode@apply % no-op - \else\ifnum\pxcz@legacycode=\pxcz@legacycode@ignore + \ifnum\pxcz@legacycode=\pxcz@legacycode@@apply % no-op + \else\ifnum\pxcz@legacycode=\pxcz@legacycode@@ignore \let\pxcz@font\@empty % skip \else\ifx\pxcz@font\@empty\else \let\pxcz@font\pxcz@kill@mapping % kill @@ -1420,35 +1427,34 @@ %% variables \newif\ifpxcz@diruni@ok -\let\pxcz@otf@weight\relax %% check if \diruni is available \ifpxcz@uptex - \@ifpackageloaded{otf}{% directunicode needs otf - \ifnum\pxcz@directunicode>\z@ \pxcz@diruni@oktrue \fi - }{%else - \ifnum\pxcz@directunicode<\pxcz@directunicode@all\else - \pxcz@diruni@oktrue % directunicode* does not need otf + \ifpxcz@otf@loaded % direct Unicode needs otf + \ifnum\pxcz@unicode>\z@ \pxcz@diruni@oktrue \fi + \else + \ifnum\pxcz@unicode<\pxcz@unicode@@simple\else + \pxcz@diruni@oktrue % 'unicode=UTF' does not need otf \AtBeginDocument{% loading otf later causes inconsistency \@ifpackageloaded{otf}{\pxcz@diruni@okfalse}{}}% \fi - } + \fi \fi %%<*> \diruni -\@ifdefinable{\diruni}{% - \DeclareRobustCommand*{\diruni}{% +\newcommand*{\diruni}{\pxcz@diruni} +\DeclareRobustCommand*{\pxcz@diruni}{% \not@math@alphabet\diruni\relax \ifx\cy@encoding\pxcz@JYn % if in standard Japanese encoding \expandafter\let\csname UTF \endcsname\pxcz@du@UTF \kanjishape{diruni}\selectfont \fi - }} +} %%<*> \textdiruni{<text>} \@ifdefinable{\textdiruni}{% \DeclareRobustCommand*{\textdiruni}[1]{% - \relax\ifmmode\hbox\fi{\diruni#1}% + \relax\ifmmode\hbox\fi{\pxcz@diruni#1}% }} %% \pxcz@du@UTF @@ -1456,43 +1462,26 @@ \kchar"#1\relax} %% redefinition in PDF-strings -\providecommand*\pdfstringdefPreHook{} -\g@addto@macro\pdfstringdefPreHook{% - \let\diruni\@empty +\pxcz@hy@disable@commands{% + \let\pxcz@diruni\@empty \let\textdiruni\@firstofone } -\ifpxcz@diruni@ok %---- <*diruni-ok> +%% \pxcz@err@diruni +\def\pxcz@err@diruni{% + \global\let\pxcz@diruni\relax + \PackageError\pxcz@pkgname + {Command '\string\(text)diruni' not available}% + {You must use upLaTeX and load pxchfon + \ifcase\pxcz@unicode with 'unicode' option% + \else pxchfon after 'otf' package% + \fi .\MessageBreak\@ehc}} +\AtBeginDocument{% + \ifpxcz@diruni@ok \let\pxcz@err@diruni\relax + \else \let\pxcz@diruni\pxcz@err@diruni + \fi} -%% \pxcz@otf@weight: otf weight mode -% watch out for priority... -\@ifpackagewith{otf}{deluxe}{% - \let\pxcz@otf@weight=d -}{\@ifpackagewith{otf}{bold}{% - \let\pxcz@otf@weight=b -}{\@ifpackagewith{otf}{expert}{% - \let\pxcz@otf@weight=r % 'expert' cancels 'noreplace' -}{\@ifpackagewith{otf}{noreplace}{% - \let\pxcz@otf@weight=n -}{\@ifpackageloaded{otf}{% - \let\pxcz@otf@weight=r -}{%else - \let\pxcz@otf@weight=n -}}}}} -%% \pxcz@otf@mmivjis: otf jis2004 -\@ifpackagewith{otf}{jis2004}{% - \let\pxcz@otf@mmivjis=t% -}{%else - \let\pxcz@otf@mmivjis=f% -} -%% \pxcz@du@scale -\let\pxcz@du@scale\utf@sc@le -\ifx\pxcz@du@scale\@undefined - \let\pxcz@du@scale\Cjascale -\fi -\ifx\pxcz@du@scale\@undefined - \edef\pxcz@du@scale{\ifx\jsc@JYn\@undefined 0.962216\else 0.924715\fi}% -\fi +\ifpxcz@diruni@ok %---- <*diruni-ok> %% \pxcz@du@decl@shape{<fam>}{<ser>}<sw>{<tfmname>}{<suffix>} \pxcz@onlypreamble@def\pxcz@du@decl@shape#1#2#3#4#5{% @@ -1502,7 +1491,7 @@ \pxcz@du@shape@spec{#3}{#4}{#5}{v}}{}} \pxcz@onlypreamble@def\pxcz@du@shape@spec#1#2#3#4{% \if#1t% - s*[\pxcz@du@scale]#2\if t\pxcz@otf@mmivjis#3\fi-#4% + s*[\pxcz@jascale]#2\ifpxcz@otf@mmivjis#3\fi-#4% \else#2\fi} \if d\pxcz@otf@weight % deluxe @@ -1524,7 +1513,7 @@ \pxcz@du@decl@shape{hgt}{m}t{otf-ujgr}{n}% \pxcz@du@decl@shape{hgt}{bx}f{ssub*hgt/m/diruni}{}% \else % noreplace -\ifnum\pxcz@directunicode>\@ne % (directunicode*) +\ifnum\pxcz@unicode>\@ne % (directunicode*) \pxcz@du@decl@shape{mc}{m}t{uprml}{}% \pxcz@du@decl@shape{mc}{bx}f{ssub*gt/m/diruni}{}% \pxcz@du@decl@shape{gt}{m}t{upgbm}{}% @@ -1555,19 +1544,33 @@ \endgroup } -\ifpxcz@glyphid %---- <*glyphid> +\fi %---- </diruni-ok> + +%--------------------------------------- 'glyphid' + +%% \pxcz@geta +\chardef\pxcz@geta=\jis"222E\relax + +\ifnum\pxcz@glyphid=2 %---- <*glyphid> + +%% check integrity +\ifpxcz@otf@loaded\else + \AtBeginDocument{% loading otf later causes inconsistency + \@ifpackageloaded{otf}{% + \PackageWarningNoLine\pxcz@pkgname + {The option 'glyphid' will not work. You must\MessageBreak + load pxchfon after 'otf' package}% + \def\gid{\pxcz@gid@fb}}{}} +\fi %%<*> \gid{<number>} -\DeclareRobustCommand*{\gid}[1]{% +\newcommand*{\gid}{\pxcz@gid} +\DeclareRobustCommand*{\pxcz@gid}[1]{% \begingroup \kanjishape{dirgid}\selectfont \kchar#1\pxcz@gid@jfm@sync \endgroup} \let\pxcz@gid@jfm@sync\relax -\def\pxcz@hy@gid#1{?} -\g@addto@macro\pdfstringdefPreHook{% - \let\gid\pxcz@hy@gid -} %% \pxcz@dg@decl@shape{<fam>}{<ser>}<sw>{<tfmname>} \pxcz@onlypreamble@def\pxcz@dg@decl@shape#1#2#3#4{% @@ -1577,7 +1580,7 @@ \pxcz@dg@shape@spec{#3}{#4}{v}}{}} \pxcz@onlypreamble@def\pxcz@dg@shape@spec#1#2#3{% \if#1t% - s*[\pxcz@du@scale]#2-#3% + s*[\pxcz@jascale]#2-#3% \else#2\fi} \if d\pxcz@otf@weight % deluxe @@ -1607,28 +1610,19 @@ \fi %---- </glyphid> -\fi %---- </diruni-ok> +\ifnum\pxcz@glyphid>0 + %% \pxcz@gid@fb + \providecommand*{\gid}{\pxcz@gid@fb} + \DeclareRobustCommand*{\pxcz@gid@fb}[1]{% + \begingroup \kchar\pxcz@geta \endgroup} -%% \pxcz@err@diruni -\ifcase\pxcz@directunicode - \def\pxcz@errhelp@diruni{% - You must use upLaTeX and load pxchfon with 'directunicode(*)' option.} -\else - \def\pxcz@errhelp@diruni{% - You must use upLaTeX and load pxchfon after 'otf' package.} + % redefinition in PDF-strings + \begingroup \kansujichar1=\pxcz@geta \kcatcode\pxcz@geta=18 + \xdef\pxcz@hy@gid#1{\kansuji1} + \endgroup + \pxcz@hy@disable@commands{% + \let\gid\pxcz@hy@gid} \fi -\def\pxcz@err@diruni{% - \PackageError\pxcz@pkgname - {Command '\string\diruni' not available}% - {\pxcz@errhelp@diruni\MessageBreak\@ehc}% - \global\let\pxcz@err@diruni\relax} -\AtBeginDocument{% - \ifpxcz@diruni@ok - \let\pxcz@err@diruni\relax - \let\pxcz@errhelp@diruni\relax - \else - \let\diruni\pxcz@err@diruni - \fi} %--------------------------------------- 'alphabet' option @@ -1705,7 +1699,6 @@ \pxcz@Entry{gtr}{r-cfjas-r-@PXcjk0@}{unicode}{HWid}}% \fi\fi \@ifpackagewith{otf}{deluxe}{\pxcz@err@dxotf{otf}}{}% - \@ifpackagewith{pxotf}{deluxe}{\pxcz@err@dxotf{pxotf}}{}% } \fi %---- </otfdx> \fi %---- </alphabet> @@ -1788,7 +1781,7 @@ \ifx t\pxcz@strict@csi \pxcz@inspect@flavor@all \fi - \ifpxcz@alpha % 'alphabet' + \if t\pxcz@alphabet % 'alphabet' \pxcz@check@alldefined{mnl,mnr,mnb}\ifpxcz@ok \renewcommand\rmdefault{cfjar}% \pxcz@set@bfdefault@to@bx{rm}% @@ -1816,7 +1809,7 @@ \normalfont \pxcz@addtospec{ALPHA}% \fi - \ifpxcz@rel % 'relfont' + \if r\pxcz@alphabet % 'relfont' \edef\pxcz@afont@enc{\encodingdefault}% \pxcz@check@afont@enc \pxcz@check@alldefined{mnl,mnr,mnb}% @@ -1832,27 +1825,23 @@ \ifpxcz@uptex\else \pxcz@addtospec{STD}% \fi - \ifnum0\ifnum\pxcz@legacycode=\pxcz@legacycode@replace 1\fi + \ifnum0\ifpxcz@legacycode@replace 1\fi \ifpxcz@uptex 1\fi >\z@ \pxcz@addtospec{UPSTD}% \fi \ifpxcz@otf - \ifnum0\ifnum\pxcz@legacycode=\pxcz@legacycode@replace 1\fi + \ifnum0\ifpxcz@legacycode@replace 1\fi \ifpxcz@uptex 1\fi >\z@ \pxcz@addtospec{UPOTF}% \fi \pxcz@addtospec{OTF}% \fi - \ifpxcz@glyphid \pxcz@addtospec{GID}% + \ifnum\pxcz@glyphid=2 \pxcz@addtospec{GID}% \fi \ifx t\pxcz@expert \pxcz@addtospec{EXPERT}% \fi \ifpxcz@utf \pxcz@addtospec{UTF}% \fi - \@ifpackageloaded{pxotf}{\pxcz@oktrue}{\pxcz@okfalse}% - \@ifpackageloaded{pxfontenc}{\pxcz@oktrue}{}% - \ifpxcz@ok \pxcz@addtospec{PXOTF}% - \fi % warn if some weights are not substituted, and if necessaty \ifpxcz@warn@unless@all@defined \ifpxcz@otf@deluxe @@ -2089,7 +2078,7 @@ %%<+> \jfmsyncbox{<width>}{<text>} \DeclareRobustCommand*{\jfmsyncbox}[2]{% \makebox[#1][l]{#2\jfmsync}} -\g@addto@macro\pdfstringdefPreHook{% +\pxcz@hy@disable@commands{% \let\jfmsyncbox\@secondoftwo} \ifpxcz@enabled %---- when using dvipdfmx @@ -2299,12 +2288,6 @@ \pxcz@declare@preset@alias{hiragino-elcapitan}{hiragino-elcapitan-pro} \pxcz@declare@preset@alias{morisawa}{morisawa-pro} \pxcz@declare@preset@alias{noto-otf}{noto} -%(plus-variants) -\pxcz@declare@preset@alias{sourcehan+}{sourcehan} -\pxcz@declare@preset@alias{sourcehan-otc+}{sourcehan-otc} -\pxcz@declare@preset@alias{noto+}{noto} -\pxcz@declare@preset@alias{noto-otc+}{noto-otc} -\pxcz@declare@preset@alias{yu-win10+}{yu-win10} %(bang-variants) \pxcz@declare@preset@alias{sourcehan!}{sourcehan} \pxcz@declare@preset@alias{sourcehan-otc!}{sourcehan-otc} @@ -2317,12 +2300,13 @@ %% ... and invokes the specified one! \if\pxcz@main@preset\relax\else \pxcz@use@preset{\pxcz@main@preset} +\pxcz@deluxe@usedfalse \fi %% load pxufont \ifx t\pxcz@expert \RequirePackage{pxufont-ruby}[] -\else\ifnum\pxcz@legacycode=\pxcz@legacycode@replace +\else\ifpxcz@legacycode@replace \RequirePackage{pxufont}[] \fi\fi diff --git a/macros/jptex/latex/pxchfon/pxchfon.tex b/macros/jptex/latex/pxchfon/pxchfon.tex index 2a33dd19a0..b58048a15b 100644 --- a/macros/jptex/latex/pxchfon/pxchfon.tex +++ b/macros/jptex/latex/pxchfon/pxchfon.tex @@ -13,11 +13,11 @@ pdftitle={pxchfonパッケージ}, pdfauthor={八登崇之}} \usepackage{bxtexlogo} -\bxtexlogoimport{*} +\bxtexlogoimport{*,logo-e} \usepackage{shortvrb} \MakeShortVerb{\|} -\newcommand{\PkgVersion}{1.9b} -\newcommand{\PkgDate}{2023/08/18} +\newcommand{\PkgVersion}{2.0} +\newcommand{\PkgDate}{2023/08/28} \newcommand{\Pkg}[1]{\textsf{#1}} \newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$} \newcommand{\Note}{\par\noindent ※} @@ -34,6 +34,7 @@ %=========================================================== \section{概要} +\label{sec:Introduction} {\pLaTeX}/{\upLaTeX}+dvipdfmxのワークフローでPDF文書を作る場合に、 標準の和文フォント(明朝・ゴシック)に対して実際に使われる @@ -55,12 +56,18 @@ OpenTypeフォントをユーザが指定する機能を提供する。 %=========================================================== \section{前提環境} +\label{sec:Prerequisites} \begin{itemize} \item {\TeX}フォーマット\Means {\LaTeX} -\item {\TeX}エンジン\Means {\pTeX}/{\upTeX} +\item {\TeX}エンジン\Means + \begin{itemize} + \item \pTeX(3.0版以降) + \item \upTeX(0.10版以降) + \end{itemize} + \Note 一部の機能は{\eTeX}拡張を必要とする。 \item DVIウェア\Means dvipdfmx - (詳細は\ref{sec:Loading}節参照) + (詳細は\ref{sec:Loading}節と\ref{sec:Other-Drivers}を参照) \item 前提パッケージ\Means \begin{itemize} \item \Pkg{atbegshi}パッケージ(|everypage| オプション使用時) @@ -90,7 +97,7 @@ OpenTypeフォントをユーザが指定する機能を提供する。 \footnote{現状では、|dvipdfmx| 以外のドライバ指定は 全て |nodvidriver| と等価である。}% 他のDVIウェアにおける動作については - \ref{sec:Other-Drivers}節を参照。 + \ref{sec:Other-Drivers}を参照。 ドライバオプションの既定値は |dvipdfmx| である。 \item \Strong{プリセット指定オプション}(|ms|、|haranoaji| 等) 名前に対応するプリセット指定を有効にする。 @@ -111,29 +118,38 @@ OpenTypeフォントをユーザが指定する機能を提供する。 指定のマップファイルを読み込む」ことを指示する。 \Note 詳細については\ref{sec:MapFileLoad}節を参照。 \item |alphabet|\Means - 欧文フォントも指定されたフォントの英数字部分で置き換える。 + 欧文フォントも(本パッケージの機能で) + 指定されたフォントの英数字部分で置き換える。 (明朝が |\rmfamily|、ゴシックが |\sffamily| に適用される。) \Note 技術的制約のため \footnote{プロポーショナル幅のフォントを使うためには、 - そのフォントに合わせた{\TeX}側の論理フォント(TFM)を + そのフォントの字幅に合わせた{\TeX}側の論理フォント(TFM)を 事前に用意する必要があるため。 和文が全角幅しか使えないのも同じ理由である。}、 \Strong{半角等幅のフォント}しかサポートされないことに注意してほしい。 つまり、この設定を使うと欧文が全て等幅になってしまう。 「部分的に欧文フォントを和文フォントに合わせたい」という場合は、 後述の |relfont| オプションの使用も検討されたい。 - \Note プリセット指定オプション\Strong{不使用}の場合は - こちらが既定で有効になる。 - すなわち\Strong{欧文フォントも置き換えられる}。 \item |noalphabet|\Means |alphabet| の否定。 欧文フォントは変更しない。 % インストール時に欧文用の設定をしていない場合は必ずこれを % 指定する必要がある。 - \Note プリセット指定オプション使用の場合はこちらが既定で有効になる。 + \Note |alphabet| と |noalphabet| と後述の |relfont| の3つの + オプションは排他である。 + プリセット指定オプション\Strong{使用}の場合は、 + このうち |noalphabet| が既定で有効になる。 + プリセット指定オプション\Strong{不使用}の場合は、 + 以前の版では |alphabet| が既定になっていた。 + 今でもこの動作は維持されているが、 + 2.0版以降はこの既定設定を利用することは\Strong{非推奨}% + \footnote{プリセット指定オプションの有無により既定が変わる仕様は + 好ましくないため。}% + となり、プリセット不使用の場合は + 3つのオプションの何れかを指定することが推奨される。 \item |otf|(既定)\Means \Pkg{japanese-otf}パッケージの使用時に、 - そのフォントも置き換えの対象とする。 + そのフォントも置換の対象とする。 \item |nootf|\Means |otf| の否定。 \Pkg{japanese-otf}パッケージのフォントは置き換えない。 @@ -196,50 +212,22 @@ OpenTypeフォントをユーザが指定する機能を提供する。 \item |noeverypage|(既定)\Means |everypage|の否定。 出力DVIの先頭ページにのみフォントマップ設定を書き込む。 -\item \Strong{Unicode直接指定オプション}\Means +\item |unicode|[|=|\Meta{値}]\Means + Unicode直接指定。 一部または全部のフォントについて、エンコーディング指定方式を “CMap指定”から“Unicode直接指定”に変更する。 - |nodirectunicode|(既定:CMap設定のまま)、 - |directunicode|、|directunicode*|、 - |unicode*|、|unicode| の5種類の指定がある。 + 有効な値は |false|(既定)、|UTF|、|simple|、|full| の4つである。 + 値を省略して「|unicode|」だけ書いた場合は |full| が指定される。 \Note 詳細については\ref{sec:DirectUnicode}節を参照。 \Note 一部のプリセット指定(|sourcehan|等)は - Unicode直接指定の既定値を変更する。 + |unicode| の既定値を変更する。 \Note Unicode直接指定を有効にするオプションを指定しても、 置換されて\Strong{いない}ウェイトはUnicode直接指定にならない。 (詳しくは\ref{ssec:DirectUnicodeNotice}節の注意を参照。) -%\item |directunicode|\Means -% \Pkg{japanese-otf}パッケージのUnicode出力用フォント(|\UTF{}| の出力) -% について、Unicodeを用いてフォントのグリフにアクセスするように -% 設定する。 -% この設定を用いると、当該のフォントのもつ任意のUnicode文字 -% (ただし全角幅に限る)が利用可能になる。 -% \footnote{通常は、Unicodeを一旦Adobe-Japan1のCIDに変換して、 -% CIDでフォントのグリフにアクセスするという処理になる。 -% このため、Adobe-Japan1のグリフと対応しないUnicode文字は -% 普通は使えない。なお、\texttt{directunicode} は0.6c版では -% 横書きのみの対応であったが、0.7版で縦書きにも対応した。 -% ただし、dvipdfmxの仕様の都合で、縦書き用グリフにはならない。 -% また、現状では実質的に効果がBMP内の文字に限られる。} -%\item |directunicode*|\Means -% |directunicode| の設定を適用し、さらに、{\upTeX}標準の -% 和文フォントにもUnicodeを用いたグリフアクセスを設定する。 -% \Note これは、「非標準的なCMapをもつOpenTypeフォント -% \footnote{例えば、Adobeの「Source Han Sans」など。}% -% を\Pkg{pxchfon}で使いたい」 -% という要求のための部分的な解決法である。 -% このオプションを利用する場合、状況によって一部の出力が異常になる -% 可能性があることに予め注意すべきである。 -% 例えば、|prefer2004jis| は機能しなくなるし、また縦組の約物の -% 出力は異常になる。 -%\item |nodirectunicode|(既定)\Means -% |directunicode| の否定。 \item |usecmapforalphabet|\Means |alphabet| または |relfont| を指定して日本語フォントの英数字部分を 欧文フォントとして使う際に、そのエンコーディング指定方式を “CMap指定”にする。 -% \Note “CMap指定”と“Unicode直接指定”の違いについては -% \ref{sec:DirectUnicode}節を参照。 \Note 半角英数字用の\texttt{UniJIS-UCS2-HW-H}というCMapが指定される。 \Note AJ1のグリフ集合をもつOpenTypeフォントの場合、既定では \footnote{|unicode| オプションが指定されない場合。}% @@ -247,7 +235,7 @@ OpenTypeフォントをユーザが指定する機能を提供する。 このオプションを指定して半角幅のものを使う必要がある。 \item |nousecmapforalphabet|(既定)\Means |usecmapforalphabet| の否定。 - \Note 和文と異なり、欧文フォントでは実質的に“Unicode直接指定”の方が + \Note 和文と異なり、欧文フォントでは実質的にUnicode直接指定の方が 既定となっている。 \Note 一部のプリセット指定は |usecmapforalphabet| の指定を強制する。 \item |dumpmap|\Means @@ -282,12 +270,44 @@ OpenTypeフォントをユーザが指定する機能を提供する。 しかし、CFFグリフのフォントに対してCSI指定があっても特に問題は 起こらず、また、フォントのグリフ種別の判断する処理は少し時間が かかるため、既定では厳密な判定は行わない。 + \Note 2014/05/06以降の版の{\logoe-(u)\pTeX}が必要である。 \item |nostrictcsi|(既定)\Means |strictcsi| の否定。 |Identity-H|/|-V| に対するCSI指定は常に出力される。 \Note さすがにファイルに出力されたマップ行に不備があるのは 避けたいので、|dumpmap(tl)| が指定された場合は、 既定が |strictcsi| に変更される。 +\item |fullwidth|\Means + Unicode直接指定が有効である場合に、 + 全角幅のグリフを優先させる。 + \Note 全角幅想定の文字が使える可能性が増えるという利点がある一方で、 + 半角幅想定の文字が使える可能性が減るという欠点もある。 +\item |nofullwidth|(既定)\Means + |fullwidth| の否定。 +\item |legacycode=|\Meta{値}\Means + Unicode直接指定を全体に採用した場合 + \footnote{つまり、|unicode| オプションの値が |simple| + または |full| である場合。 + ただし現状では |unicode| の値がこれ以外の場合でも |legacycode| + の値は設定可能であるが、恐らく既定の |apply| 以外の設定は + 無益であろう。}% + にエンコーディングがUnicodeではない原メトリック和文TFMに関する + マップ行に対する取扱を規定する。 + 有効な値は以下の通り\Means + \begin{itemize} + \item |apply|(既定)\Means + “CMap指定”のマップ行を出力する。 + \item |ignore|\Means + マップ行を出力しない。 + \item |suppress|\Means + 当該のTFMの無効化を指示するマップ行を出力する。 + \end{itemize} + \Note |legacycode-replace| が真の場合は既定値が |suppress| に + 変更される。 +\item |legacycode-replace=|\Meta{真偽値}\Means + \Pkg{pxufont}パッケージを読み込んで、原メトリック和文TFMについて + エンコーディングがUnicodeのもののみが利用されるようにする。 + 既定値は偽だが、|unicode| オプションが |full| の場合は真に変更される。 \item |expert|(既定)\Means Unicode直接指定が有効な場合 に\Pkg{japanese-otf}の |expert| オプション @@ -302,10 +322,20 @@ OpenTypeフォントをユーザが指定する機能を提供する。 が有効の場合にのみ利用できる。 \item |noglyphid|(既定)\Means |glyphid| の否定。 +\item |maybe-multiweight|\Means + 「|deluxe| オプション付きの\Pkg{japanese-otf}パッケージが読み込まれて + いないにもかかわらず多ウェイト用のフォント設定命令が使われた」 + 際に出る警告を抑止する。% + \footnote{例えば + 「単ウェイト・多ウェイト兼用を意図したフォント設定命令を + テンプレートに記述している」 + 「\Pkg{japanese-otf}以外でその和文TFMを流用している」 + などの状況を想定している。} \end{itemize} %=========================================================== \section{機能} +\label{sec:Usage} 以下に該当する和文(CJK)用の論理フォント(原メトリックTFM)について、 それに対応する物理フォント(OpenTypeフォント)を @@ -438,17 +468,13 @@ OpenTypeフォントをユーザが指定する機能を提供する。 \Note pdf{\TeX}の |\pdfmapline| に相当する機能。 \item |\diruni|\Means 現在の和文フォントを“Unicode直接入力” - (フォントマップを“Unicode直接指定”にした上で + (フォントマップをUnicode直接指定にした上で さらに和文VFをバイパスする) の状態に切り替える(宣言型命令)。 これにより、実際のフォントに存在する任意の全角幅の 文字が出力可能となる。 その代わり、この状態では、約物の周りの空き調整が無効になる。 -% 詳細については\ref{sec:Loading}節の |directunicode| オプションの -% 説明を参照されたい。 - \Note “Unicode直接指定”のオプションの何れか - (|unicode|等)が有効であり、 - かつ現在の和文ファミリについてフォントの置き換えが有効に + \Note 現在のウェイトについてUnicode直接指定が有効に なっている必要がある。 \Note この命令自体は単にNFSSのシェープ値を |diruni| という値に変えて いるだけであり、このシェープに“Unicode直接入力”のフォントが @@ -459,8 +485,7 @@ OpenTypeフォントをユーザが指定する機能を提供する。 現在の和文フォントで、指定の値のGIDをもつグリフを出力する。 \Note 全角幅のグリフでないと正常に出力されない。 \Note エンジンが{\upLaTeX}であり、 - |unicode| オプションが指定されていて、かつ、 - 現在の和文ファミリについてフォントの置き換えが有効に + かつ、現在のウェイトについてUnicode直接指定が 有効になっている必要がある。 \end{itemize} @@ -471,14 +496,14 @@ OpenTypeフォントをユーザが指定する機能を提供する。 このパッケージの元々の意図は、標準のフォントを 普段使っているものと全く別の書体に変えることであったが、 例えば「普段使う設定が複数ありそれを簡単に切り替えたい」という -場合にも有用である。 -そこで、{\pTeX}において広く行われている設定をパッケージ内に +場合にも有用であることがわかった。 +そこで、{(u)\pLaTeX}において広く行われている設定をパッケージ内に 組み込んで、パッケージオプションでそれを呼び出すという機能が 後になって追加された。 \footnote{元々は\Pkg{pxjafont}という別のパッケージで 提供されていた機能であるが、 0.5版からこのパッケージに組み入れることにした。 -詳しくは付録\ref{sec:Pkg-pxjafont}を参照。} +詳しくは\ref{sec:Package-pxjafont}を参照。} パッケージオプションにプリセット名を指定すると予め決められたフォント ファイル名が |\setminchofont| 等の命令で設定される。 @@ -737,6 +762,8 @@ OpenTypeフォントをユーザが指定する機能を提供する。 \setxboldgothicfont[3]{HiraginoSans-W8.ttc} \setmarugothicfont[1]{HiraginoSansR-W4.ttc} \end{verbatim}\end{quote} +\Note 「新しいmacOSのヒラギノフォント」用のプリセットについては + \ref{ssec:Package-pxchfon-extras}節を参照されたい。 \item |morisawa-pro|\Means モリサワフォント基本7書体(Pro版)。 @@ -924,6 +951,7 @@ OpenTypeフォントをユーザが指定する機能を提供する。 %------------------- \subsection{pxchfon-extrasパッケージ} +\label{ssec:Package-pxchfon-extras} 本パッケージの方針として、 「プロプライエタリなフォントを利用するためのプリセット設定」 @@ -979,6 +1007,24 @@ OpenTypeフォントをユーザが指定する機能を提供する。 \item |hiragino-dx|\Means |hiragino-pro| の別名。 \end{itemize} +以下に挙げるプリセット設定は{\TeX}~Live 2017% +(dvipdfmx 20170318版)のために用意された特殊な設定である。 +1.5版においてこれらのプリセットは\Strong{非推奨}となり、 +2.0版で廃止された。 +これらのプリセットを利用していた場合は、 +\Strong{{\TeX}システムを更新}(dvipdfmxを20170918版以降に)した上で、 +“本来の正しい設定”に移行することを推奨する。 + +\begin{itemize} +\item |sourcehan+|、|sourcehan-otc+|、|noto+|、|noto-otc+|:\\ + →代わりに|+|無しの名前(|sourcehan| 等)を指定する。 + \Note |unicode| は自動的に有効になる。 + \Note 日本語版以外のフォントはもはや不要である。 + +\item |yu-win10+|:\\ + →代わりに |yu-win10| と |unicode| を指定する。 +\end{itemize} + %=========================================================== \section{ファイルプリセット機能} \label{sec:FilePreset} @@ -1191,9 +1237,9 @@ CMap指定の利用が必須であったため、慣習的に、dvipdfmxのフ \footnote{例えば、Adobe開発のフリーフォントの 「Source Han Serif(源ノ明朝)」など。}% が普及しつつあり、そのようなフォントでは異体字の切替などの -付加機能を専ら“OpenType属性の指定”により行うことを想定している。 +付加機能を専ら「OpenType属性の指定」により行うことを想定している。 これに対応するため、dvipdfmxのマップ指定において -“OpenType属性の指定”がサポートされるようになった。 +OpenType属性の指定がサポートされるようになった。 \Pkg{pxchfon}では和文フォントのエンコーディングに対する Unicode直接指定をサポートしている。 @@ -1205,33 +1251,50 @@ CMap指定の場合の機能性を可能な限り保つことを目指してい 過渡的な要素が多く混ざっていてやや煩雑になっていることに 注意してほしい。 -\paragraph{“Unicode直接指定”オプション} -以下のパッケージオプションを指定することで +\paragraph{Unicode直接指定オプション} +|unicode| オプションを指定することで Unicode直接指定の有効・無効を切り替えられる。 \begin{itemize} -\item |unicode|\Means +\item |unicode|[|=full|]\Means 全般的にUnicode直接指定を利用する。 最も理想的な設定であるが、\Strong{{\TeX}~Live 2018以降のdvipdfmx}% (20170918版以降)が必要である。 -\item |unicode*|\Means - {\TeX}~Live 2017のdvipdfmx(20170318版)専用の\Strong{過渡的}な設定。 - \Note 1.5版以降では\Strong{非推奨}であり、 - 2.0版で\Strong{廃止}される予定である。 -\item |directunicode*|\Means +\item |unicode=all|\Means 全般的にUnicode直接指定を利用するが、 古い({\TeX}~Live 2016以前の)dvipdfmxに 対応するために、OpenType属性の指定を全く行わない。 つまり、入力のUnicode文字に対する既定のグリフが常に出力され、 異体字の区別は全て無効になる。 -\item |directunicode|\Means +\item |unicode=UTF|\Means \Pkg{japanese-otf}の|\UTF|入力のフォントに限って Unicode直接指定を利用する。 - |directunicode*| と同じくOpenType属性の指定を全く行わない。 - \Note 前述の通り |directunicode*| はデメリットが強いため、 + |all| と同じくOpenType属性の指定を全く行わない。 + \Note 前述の通り |all| はデメリットが強いため、 適用範囲を限定したもの。 +\item |unicode=false|\Means + Unicode直接指定を利用せず、全般的にCMap指定を適用する。 \end{itemize} +\Note 単に |unicode| と指定するのは |unicode=full| と等価になる。 +\Note 以前は |unicode=all| は |directunicode*|、 +|unicode=UTF| は |directunicode| という指定方法であったが、 +極めて解りにくいので2.0版で「key-value型の |unicode| オプション」 +に統一された。 +従来の形式も当面はサポートされるが新しい |unicode| の使用を推奨する。% +\footnote{なお「単独の |unicode|」も従来の動作を維持しているが、 + これは古い形式ではなく + 「新しい |unicode| の指定法の一種」として扱う。} + +{\TeX}~Live 2017のdvipdfmx(20170318版)専用の\Strong{過渡的}な設定 +である |unicode*| は2.0版で\Strong{廃止}された。 +これを使っている場合は、\Strong{{\TeX}システムを更新}% +(dvipdfmxを20170918版以降に)した上で、 +代わりに |unicode| を指定することを推奨 +\footnote{|unicode=all| は{\TeX}~Live 2017でも使えるが、 + 出力は元々の |unicode*| より劣化する。}% +する。 + \paragraph{Unicode直接指定専用プリセット} 以下に挙げるプリセット設定は“AJ1でない”OpenTypeフォントを @@ -1251,27 +1314,6 @@ Unicode直接指定の有効・無効を切り替えられる。 \item |noto-jp| \end{itemize} -\paragraph{特殊プリセット指定\<(非推奨)} - -以下に挙げるプリセット設定は{\TeX}~Live 2017% -(dvipdfmx 20170318版)のために用意された特殊な設定である。 - -1.5版においてこれらのプリセットは\Strong{非推奨}となった。 -2.0版で廃止される予定である。 -そのため、これらのプリセットを利用している場合は、 -\Strong{{\TeX}システムを更新}(dvipdfmxを20170918版以降に)した上で、 -“本来の正しい設定”に移行することを推奨する。 - -\begin{itemize} -\item |sourcehan+|、|sourcehan-otc+|、|noto+|、|noto-otc+|:\\ - →代わりに|+|無しの名前(|sourcehan| 等)を指定する。 - \Note 前述の通り、|unicode| は自動的に補われる。 - \Note 日本語版以外のフォントはもはや不要である。 - -\item |yu-win10+|:\\ - →代わりに |yu-win10| と |unicode| を指定する。 -\end{itemize} - %------------------- \subsection{Unicode直接指定に関する注意事項} \label{ssec:DirectUnicodeNotice} @@ -1471,18 +1513,16 @@ r-cfjam-r-@PXcjk0@ msgothic.ttc FontIndex=0 %=========================================================== \section{pxjafontパッケージ} -\label{sec:Pkg-pxjafont} +\label{sec:Package-pxjafont} 現在の版の\Pkg{pxchfon}パッケージは旧来の\Pkg{pxjafont}の機能を 取り込んでいるため、\Pkg{pxjafont}は不要である。 古い環境との互換性のため\Pkg{pxjafont}を残していたが、 -1.0版において\Pkg{pxjafont}の使用を\Strong{非推奨}の扱いとした。 -(2.0版においてに\Strong{廃止}予定。) +2.0版において\Strong{廃止}された。 -\Pkg{pxjafont}を利用しているユーザは、 +\Pkg{pxjafont}を利用していたユーザは、 \ref{sec:Preset}節を参照して現在の\Pkg{pxchfon}用の 適切な設定に書き直す必要がある。 - \Note 古いプリセット名の中に廃止されたものがあるので注意。 %=========================================================== @@ -1589,7 +1629,7 @@ r-cfjam-r-@PXcjk0@ msgothic.ttc FontIndex=0 日本語用のフォントについて用いられることが想定されている。 \item 「Unicode直接指定オプション」は中国語・韓国語のフォントに対しても 有効である。 -|directunicode| の場合は「\Pkg{japanese-otf}パッケージのUnicode入力命令」 +|unicode=UTF| の場合は「\Pkg{japanese-otf}パッケージのUnicode入力命令」 (|\UTFK|、|\UTFM|、等)が対象となり、 それ以外はこれに加えて{\upTeX}標準のフォントも 対象になる。 diff --git a/macros/jptex/latex/pxchfon/pxjafont.sty b/macros/jptex/latex/pxchfon/pxjafont.sty deleted file mode 100644 index 542eba412a..0000000000 --- a/macros/jptex/latex/pxchfon/pxjafont.sty +++ /dev/null @@ -1,24 +0,0 @@ -%% -%% This is file 'pxjafont.sty'. -%% -%% Copyright (c) 2009-2023 Takayuki YATO (aka. "ZR") -%% GitHub: https://github.com/zr-tex8r -%% Twitter: @zr_tex8r -%% -%% This package is distributed under the MIT License. -%% - -%% package declaration -\NeedsTeXFormat{pLaTeX2e} -\ProvidesPackage{pxjafont} -%% show warning -\PackageWarning{pxchfon} - {!!!!!!!!!!!! IMPORTANT WARNING !!!!!!!!!!!!\MessageBreak - The package 'pxjafont' is obsolete and its use is\MessageBreak - deprecated. please refer to the manual of pxchfon.\MessageBreak - The warning is issued} -%% delegate -\let\pxAliasedPxjafont=t -\RequirePackageWithOptions{pxchfon}[] -\endinput -%% EOF diff --git a/macros/latex/contrib/hvextern/Changes b/macros/latex/contrib/hvextern/Changes index 5c38357d6f..14afbfe9ed 100644 --- a/macros/latex/contrib/hvextern/Changes +++ b/macros/latex/contrib/hvextern/Changes @@ -1,5 +1,6 @@ hvextern.sty ---------------- +v 0.37 2023-08-29 - do not write files without --shell-escape v 0.36 2023-08-24 - added option "vshift" for inline objects v 0.35 2023-08-22 - fix shellesc option, don`t set it globally to true v 0.34 2023-07-05 - fix for missing --shell-escape option diff --git a/macros/latex/contrib/hvextern/doc/hvextern.pdf b/macros/latex/contrib/hvextern/doc/hvextern.pdf Binary files differindex fddd186b01..21dd33cfdc 100644 --- a/macros/latex/contrib/hvextern/doc/hvextern.pdf +++ b/macros/latex/contrib/hvextern/doc/hvextern.pdf diff --git a/macros/latex/contrib/hvextern/doc/hvextern.tex b/macros/latex/contrib/hvextern/doc/hvextern.tex index 84b2df5183..ae1528783d 100644 --- a/macros/latex/contrib/hvextern/doc/hvextern.tex +++ b/macros/latex/contrib/hvextern/doc/hvextern.tex @@ -1,16 +1,21 @@ -%% $Id: hvextern.tex 749 2023-08-24 19:10:17Z herbert $ -\RequirePackage{pdfmanagement-testphase} -\DeclareDocumentMetadata{} +%% $Id: hvextern.tex 753 2023-08-29 07:22:20Z herbert $ +%\RequirePackage{pdfmanagement-testphase} +\DocumentMetadata{} \documentclass[english,a4paper,twoside]{article} \usepackage{babel} \usepackage{libertinus} \setmonofont[Scale=MatchLowercase,FakeStretch=0.88]{AnonymousPro} +\newfontfamily\NotoSansMono[Ligatures=TeX,Scale=MatchLowercase, + FakeStretch=0.90,Ligatures=ResetAll%,RawFeature=-tlig + ]{Noto Sans Mono} +\newfontfamily\CodeTwo{CODE2000}[Scale=MatchLowercase] \usepackage{iftex} \usepackage{fancyhdr} \pagestyle{fancy} \usepackage{hvlogos} -\usepackage[checkCode]{hvextern} +\usepackage%[checkCode] +{hvextern} \usepackage{hvindex} \usepackage{hvdoctools} \usepackage{listings} @@ -24,6 +29,8 @@ \def\Java{\textsf{Java}\xspace} + + \begin{document} \title{Writing, running and including the output of external documents from within a main\newline \LaTeX\ document~--v. \hvexternFileversion} @@ -48,7 +55,7 @@ showFilename,verbose} There exists only one option \Loption{checkCode} which is valid for all \TeX-compiler. In this case an already existing external file will only be compiled, if the -external code changed. This dosn't depends on the setting of the option \Lkeyword{force}. +external code changed. This doesn't depends on the setting of the option \Lkeyword{force}. \Loption{checkCode} can speed up the compilation time. \section{Syntax} @@ -81,16 +88,12 @@ The very first compilation run of the main document must be done with the \Loption{-shell-escape} command-line option, otherwise it won't work. Follow-up runs, for example, to resolve references, should usually be done without \Loption{-shell-escape}. - The currently used filename for the example is saved in the macro \Lcs{hvExternFilename}. \begin{verbatim} lualatex --shell-escape <file> \end{verbatim} - - - The purpose for this package is to show the output of documents which have to be compiled with a different preamble or a different engine or a complete different system, but integrating the output automatically in the main document.. @@ -111,7 +114,7 @@ This document was run with \LuaLaTeX. Suppose you want to insert the output of a which needs for several reasons a \XeLaTeX\ run. Instead of created and running a document outside of the main document and then to insert the output we can do this from within this \LuaLaTeX\ document itself. The external document is compiled -with \XeLaTeX\ and the output is insert as pdf image:\label{inline-exa} +with \XeLaTeX\ and the output is insert as pdf image: \begin{externalDocument}[% compiler=xelatex, inline, force=true, runs=2, grfOptions={height=8pt},% crop, cropmargin=0, cleanup, docType=latex,vshift=-1pt]{voss} @@ -121,8 +124,9 @@ with \XeLaTeX\ and the output is insert as pdf image:\label{inline-exa} 美好的一天. \end{document} \end{externalDocument} +The current filename of the above example is \hvExternFilename\ and for the source +see page \pageref{inline-exa}. -The current filename of the above example is \hvExternFilename. Let's show another example which needs a \pdfLaTeX\ run. The \Index{source} code itself is also not shown by the environment \Lenv{externalDocument}. @@ -317,7 +321,7 @@ A vertical shift of the filename is possible by setting a length to the keyword e.g. \texttt{shiftFN=5ex}. -\clearpage%%%%%%%%%%%% +%\clearpage%%%%%%%%%%%% \begin{externalDocument}[grfOptions={width=0.95\linewidth}, compiler=xelatex,code,mpwidth=0.6\linewidth, @@ -1072,10 +1076,10 @@ not part of your current font. With the setting \LKeyset{inline=true} the optional keyword \Lkeyword{code} and \Lkeyword{showFilename} is automatically set to false. The -next Chinese characters +next Chinese characters \label{inline-exa} \begin{externalDocument}[ compiler=xelatex, inline, runs=2, grfOptions={height=8pt}, - crop, cropmargin=0, + crop, cropmargin=0, vshift=-1pt,usefancyvrb, cleanup, force=true, docType=latex]{voss}% \documentclass{ctexart} \pagestyle{empty} @@ -1086,11 +1090,12 @@ next Chinese characters are inserted as \Index{inline image} without showing the code. The complete code looks like: +\let\myFont\CodeTwo -\begin{Verbatim} +\begin{Verbatim}[fontfamily=myFont] With \Lkeyset{inline} the optional argument \Lkeyword{code} is automatically set to false. The next Chinese characters -\begin{externalDocument}[ +\begin{externalDocument}[vshift=-1pt, compiler=xelatex, inline, runs=2, grfOptions={height=8pt}, crop, cropmargin=0, cleanup, force=true, docType=latex]{voss} \documentclass{ctexart} @@ -1103,6 +1108,7 @@ are inserted as inline image without showing the code. The complete code looks like: \end{Verbatim} +With the keyword \Lkeyword{vshift} the inserted image can be moed in vertically direction. \subsection{Input text instead of an image} By default the created pdf which can be, of course, only text, will be inserted by \Lcs{includegraphics}. @@ -1267,7 +1273,7 @@ The following examples uses mpwidth=0.6\linewidth, usefancyvrb=false, docType=latex]{voss} -\documentclass[paper=a6,DIV=18,parskip=half-]{screxa} +\documentclass[paper=a6,DIV=18,parskip=half-]{scrartcl} \pagestyle{empty} \usepackage{libertinus} \setmonofont{DejaVu Sans Mono}[Scale=MatchLowercase,FakeStretch=0.9] @@ -1858,13 +1864,13 @@ to get the directory listed: \begin{verbatim} -\runExtCmd[redirect,verbose,lstOptions={basicstyle=\ttfamily\small}]{df}{voss} +\runExtCmd[redirect,verbose,lstOptions={basicstyle=\ttfamily\small}]{du}{voss}% *nix \end{verbatim} \medskip -\runExtCmd[redirect,verbose,lstOptions={basicstyle=\ttfamily\footnotesize}]{df}{voss} +\runExtCmd[redirect,verbose,lstOptions={basicstyle=\ttfamily\small}]{du}{voss} @@ -1883,8 +1889,10 @@ already exists, there is no need to create it with the next run again and again. if the package option \Loption{checkCode} exists. \item[\Lkeyword{cleanup}] the auxiliary files of a \LaTeX-run are deleted, preset to \texttt{aux}, \texttt{log}. It must be a comma seperated list of the extensions of the main file, s.g. \texttt{cleanup=\{aux,log\}}. -\item[\Lkeyword{moveToExampleDir}] name of a directory for the examples, must first be created by the user himself -\item[\Lkeyword{ExampleDir}] move all examples into a directory +\item[\Lkeyword{moveToExampleDir}] move all examples into a directory, must be set \emph{before} the +option \Lkeyword{ExampleDir}. +\item[\Lkeyword{ExampleDir}] name of a directory for the examples, must + first be created by the user himself. \item[\Lkeyset{tclbox=false}] Can be used if there are some negative interactions between package \Lpack{listings} and package \Lpack{tcolorbox}. \item[\Lkeyword{framesep}] Value for \Lcs{fbox} if keyword \texttt{frame} is used. diff --git a/macros/latex/contrib/hvextern/latex/hvextern.sty b/macros/latex/contrib/hvextern/latex/hvextern.sty index 1304e197e7..5db1916c16 100644 --- a/macros/latex/contrib/hvextern/latex/hvextern.sty +++ b/macros/latex/contrib/hvextern/latex/hvextern.sty @@ -1,4 +1,4 @@ -%% $Id: hvextern.sty 749 2023-08-24 19:10:17Z herbert $ +%% $Id: hvextern.sty 753 2023-08-29 07:22:20Z herbert $ %% This is file `hvextern.sty', %% %% Copyright (C) 2016-23 @@ -12,8 +12,8 @@ %% and version 1.3c or later is part of all distributions of LaTeX %% version 2005/12/01 or later. -\def\hvexternFileversion{0.36} -\ProvidesFile{hvextern}[2023/08/24 v\hvexternFileversion: package for running external documents (HV)] +\def\hvexternFileversion{0.37} +\ProvidesFile{hvextern}[2023/08/29 v\hvexternFileversion: package for running external documents (HV)] \newif\ifhv@extern@checkCode \hv@extern@checkCodefalse @@ -21,7 +21,18 @@ \ProcessOptions -\RequirePackage{shellesc,xkeyval,graphicx} +\RequirePackage{shellesc,xkeyval,graphicx,comment} + +\newif\ifhv@extern@shellescape % the main command line option, for later test +%\typeout{>>>> \the\ShellEscapeStatus}% +\expandafter\ifnum\the\ShellEscapeStatus=1 + \hv@extern@shellescapetrue + \typeout{>>>> command line option shell-escape is enabled!}% +\else + \hv@extern@shellescapefalse + \typeout{>>>> command line option shell-escape is disabled!}% +\fi + \RequirePackage{fancyvrb,tikz,listings,ifplatform,iftex} \RequirePackage{ifoddpage,filemod} \RequirePackage{tcolorbox,xparse} @@ -29,7 +40,6 @@ \def\hv@ex@typeout#1{\ifhv@extern@verbose\typeout{>>(hvextern) #1}\fi} - \ifwindows \def\hv@move{move }% \def\hv@rm{del }% @@ -198,6 +208,7 @@ \ResetKeys + \ifhv@extern@checkCode \ifluatex \hv@ex@typeout{Loading hvextern.lua}% @@ -442,13 +453,19 @@ \expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.pdf}{}{% \expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.png}{}{% \expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.txt}{}{% - \global\hv@extern@forcetrue}}}% set force, if no pdf or png exists + \global\hv@extern@forcetrue}}}% set force, if no pdf or png or txt exists \begingroup - \hv@ex@typeout{writing file \hvExternFilename\hv@extern@ext ...}% + \ifhv@extern@shellescape + \hv@ex@typeout{writing file \hvExternFilename\hv@extern@ext ...}% + \else + \hv@ex@typeout{no shell-escape, no writing of file \hvExternFilename\hv@extern@ext}% + \let\filecontents\comment + \let\endfilecontents\endcomment + \fi \filecontents[force,noheader]{\hvExternFilename\hv@extern@ext}% } - {\endfilecontents% \end% - \hv@ex@typeout{... done}% + {\endfilecontents + \ifhv@extern@shellescape\hv@ex@typeout{... done}\fi \global\stepcounter{hv@example@counter}% \endgroup \expandafter\hvExternSetKeys\expandafter{\hv@extern@savePara}% @@ -691,10 +708,9 @@ \fi \fi \fi% end of \ifshowoutput - \ifhv@extern@force\expandafter\run@hv@extern@cleanup\expandafter{\hv@extern@cleanup}\fi% cleanup - \hv@ex@typeout{Move source file into example dir, in case of missing --shell-escape}% -% \hv@ex@typeout{\hvExternFilename ----> \hv@extern@ExamplesDir}% - \ShellEscape{\hv@move \hvExternFilename\hv@extern@ext\space \hv@extern@ExamplesDir}% + \ifhv@extern@force + \expandafter\run@hv@extern@cleanup\expandafter{\hv@extern@cleanup}% + \fi% cleanup \vspace{\hv@extern@belowskip}% } diff --git a/macros/latex/contrib/jwjournal/README.md b/macros/latex/contrib/jwjournal/README.md index 4dd00cbba4..4114691820 100644 --- a/macros/latex/contrib/jwjournal/README.md +++ b/macros/latex/contrib/jwjournal/README.md @@ -9,7 +9,7 @@ A typical journal entry produced by `jwjournal` looks like this: Codewise, it is as simple as below: ``` -2023-01-01 Sunny --- Botanical Garden +2023-01-01 Sunny | Botanical Garden Today I visited the botanical garden! @@ -23,7 +23,7 @@ Codewise, it is as simple as below: Every day of the week has its unique color, like this: ![image](https://github.com/Jinwen-XU/jwjournal/raw/main/screenshots/demo2.png) -By the way, the conversion from plain date string like `2023-01-01` to natural language like `January 1, 2023 | Sunday` is done automatically by `jwjournal` and has multilingual support. Thus, for example (via `\UseLanguage`): +By the way, the conversion from plain date string like `2023-01-01` to natural language like `January 1, 2023 ⬦ Sunday` is done by `jwjournal` automatically and has multilingual support. Thus, for example (via `\UseLanguage`): - Chinese: ![image](https://github.com/Jinwen-XU/jwjournal/raw/main/screenshots/demo3-cn.png) - French: ![image](https://github.com/Jinwen-XU/jwjournal/raw/main/screenshots/demo3-fr.png) - German: ![image](https://github.com/Jinwen-XU/jwjournal/raw/main/screenshots/demo3-de.png) @@ -48,7 +48,7 @@ The options are: - `color entry` adds more color to the title of each entry - `scroll` turns on the scroll mode and can generate a single-page pdf similar to a long screenshot -And there are only two major syntaxes for the main text: +And there are only three major syntaxes for the main text: 1) Title - Any line begins with date like `2023-01-01` would be regard as the *Title* line. - You may write the weather and/or location after the date. @@ -64,6 +64,11 @@ And there are only two major syntaxes for the main text: ``` The space(s) between `[Note]` and the text following it would be ignored. > You may also use `【` and `】`, which is especially useful when writing Chinese. +3) Displayed images can be included via one of the following ways: + - `|| [<width>] {<image file name>}`: show image in the middle. + - `(( [<width>] {<image file name>}`: show image on the left. + - `)) [<width>] {<image file name>}`: show image on the right. + > The `[<width>]` is optional. Here `<width>` is a number like `0.75`, the unit is `\linewidth`. When `[<width>]` is not given, the width would be full `\linewidth`. With a few more for icing on the cake: - `|`: The first vertical bar would be interpreted as `\hfill`. This allows you to write the title line as @@ -71,11 +76,33 @@ With a few more for icing on the cake: 2023-01-01 Sunny | Botanical Garden ``` and then the address `Botanical Garden` would be printed at the end of the title line. +- `\\` and `//`: `\\` has its usual meaning in LaTeX for starting a new line, while `//` has been defined to be starting a new line with some vertical spacing. This allows you to write the annotations as: + ``` + [Note] Some text. + // + More text. + // + (Some remark) + \\ + (Another remark) + \\ + (Final remark) + ``` + As a result, all the text would be properly indented. + > Note that images specified via `||`, `((` or `))` already contain line breaks, thus you don't need to (actually, *you can't*) write `//` or `\\` around them. +- `>>`: Text after `>>` would be centered. This is intended for writing annotations/captions for displayed images: + ``` + || {image-name} + >> (Some remark) + >> (Another remark) + ``` +- `->` and `<-`: Skip or retrieve certain vertical space, by default half of `\baselineskip`. You may specify the exact spacing in the unit of `\baselineskip`: for example, `-> [0.3]` would be skipping `0.3\baselineskip`, while `<- [.75]` means retrieving `0.75\baselineskip`. - `+++`: If a single sentence or a few words fall to the next page, you may write a `+++` before that entry to enlarge the current page by one line. + > You may write this `+++` several times if necessary, but do make sure that the number of the `+` sign is a multiple of 3. - `===`: Three or more equal signs `=` would simply be ignored. This is for improving the readability of the code, allowing you to write your journal like: ``` - 2023-01-01 Sunny --- Botanical Garden - ===================================== + 2023-01-01 Sunny | Botanical Garden + =================================== Today I visited the botanical garden! @@ -88,15 +115,15 @@ Indentations are not important, but paragraphs need to be separated by a blank l - with indentation: ``` 2023-01-01 - Sunny + Sunny | Botanical Garden ...... ...... ``` - with a separation line: ``` - 2023-01-01 Sunny - ================ + 2023-01-01 Sunny | Botanical Garden + =================================== ...... ...... @@ -104,7 +131,7 @@ Indentations are not important, but paragraphs need to be separated by a blank l - or maybe even: ``` ========== - 2023-01-01 Sunny + 2023-01-01 Sunny | Botanical Garden ========== ...... @@ -130,7 +157,7 @@ The colors from Monday to Sunday have the internal names `jwjournal-color-1`, .. ``` ### Functionality -The main features are achieved with the power of LaTeX3's regex functionality. It scans the content paragraph by paragraph and converts recognized patterns into corresponding TeX commands. Thus, `2023-01-01 Weather` becomes `\JWJournalEntry{2023-01-01}{Weather}`, `[Note] ...` becomes `\item[Note] ...` inside a `description` environment, and `+++` is essentially `\enlargethispage*{\baselineskip}`, etc. However, this comes with a price: in order to scan the content, it is firstly stored in a macro `\g_jwjournal_content_tl`, and that means that you cannot use commands like `\verb` in your main text (unless explicitly `\end{jwjournal}`, write your code, and then `\begin{jwjournal}`). +The main features are achieved with the power of LaTeX3's regex functionality. It scans the content paragraph by paragraph and converts recognized patterns into corresponding TeX commands. Thus, `2023-01-01 Weather` becomes `\JWJournalEntry{2023-01-01}{Weather}`, `[Note] ...` becomes `\item[Note] ...` inside a `description` environment, and `+++` is essentially `\enlargethispage{\baselineskip}`, etc. However, this comes with a price: in order to scan the content, it is firstly stored in a macro `\g_jwjournal_content_tl`, and that means that you cannot use commands like `\verb` in your main text (unless explicitly `\end{jwjournal}`, write your code, and then `\begin{jwjournal}`). Also, synctex won't work properly. ### Dates diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf b/macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf Binary files differindex d4175f7072..40281336ad 100644 --- a/macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf +++ b/macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex b/macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex index 92b00e0ddf..81647136b9 100644 --- a/macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex +++ b/macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex @@ -10,21 +10,47 @@ 2023-01-01 晴 | 公寓 - 在文中出现的日期和标注不会被识别: 2022-12-25、[标注],放心使用 + 在文中出现的日期和标注不会被识别: 2022-12-25、[标注]、【标注】,放心使用! [体育] 一些关于体育赛事的事情 - 【学习】一些关于学习的事情 % 【...】与 [...] 效果相同 + 【学习】 % 【...】与 [...] 效果相同 + 一些关于学习的事情 + + 图片这可以这样引入: + + || [.4] {example-image-a} + >> (图片的注释) + >> (更多注释) + + 也可以靠左或者靠右显示: + (( [.4] {example-image-a} + -> [.3] % 加入一点竖直间距,例如这里是 0.3\baselineskip + )) [.4] {example-image-a} 2023-01-02 不明(天气也可以写在第二行,看你的喜好) - 标签的颜色会根据日期改变: + 标签的颜色会根据日期改变,并且很长的文本会自动缩进: [学习] 今天没有学习,但我写了很多很多很多很多很多很多很多很多很多很多很多很多很多很多很多很多代码。 + 如果标注后的文本有多段,可以合理使用 \texttt{\textbackslash\textbackslash} 与 \texttt{\slash\slash} 将它们连接起来,这样所有文本都会被正确缩进: + + [标签] 一些文本。 + // + 更多文本(使用了 \texttt{\slash\slash},因此与上面的文本有一定距离)。 + // + 更多文本(同样与上面的文本有一定距离)。 + // + (一些注释) + \\ + (其他注释,由于使用了 \texttt{\textbackslash\textbackslash},和上面是紧贴着的) + \\ + (更多注释,同样和上面是紧贴着的) + 2023-01-03 @@ -39,9 +65,8 @@ -========== 2023-01-05 多云 —— 居家办公 -========== +======================================= 也可以把代码排列成这样。 @@ -50,7 +75,7 @@ 2023-01-06 晴朗 —— 居家办公 ========== -... +或者这样…… diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf b/macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf Binary files differindex f1da481824..04b98e6366 100644 --- a/macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf +++ b/macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-en.tex b/macros/latex/contrib/jwjournal/jwjournal-demo-en.tex index 500c772c1c..f0b85fc484 100644 --- a/macros/latex/contrib/jwjournal/jwjournal-demo-en.tex +++ b/macros/latex/contrib/jwjournal/jwjournal-demo-en.tex @@ -14,15 +14,40 @@ [Learning] something about learning. + Images can be included via: + + || [.4] {example-image-a} + >> (Remark on the image) + >> (More remark...) + + You may also show the image on the left or on the right: + (( [.4] {example-image-a} + -> [.3] % add some vertical spacing, here is 0.3\baselineskip + )) [.4] {example-image-a} + 01/02/2023 Unknown (the weather can also be written on the second line, depending on your preference) - The color of the labels will change according to the date. + The color of the labels shall change according to the date, and long text shall be automatically wrapped and indented: [Note] I didn't study today, but I wrote many many many many many many many many many many many many code. + If there are multiple paragraphs following the label, you may use \texttt{\textbackslash\textbackslash} and \texttt{\slash\slash} wisely to concatenate them, so that all texts would be indented properly: + + [Label] Some text. + // + More text (with \texttt{\slash\slash}, thus having some vertical spacing from the above text). + // + More text (same, with some vertical spacing from the above text). + // + (Some remark) + \\ + (Another remark, due to the use of \texttt{\textbackslash\textbackslash}, is close to the above remark) + \\ + (More remark --- similarly, is close to the above remark) + 01/03/2023 @@ -37,9 +62,8 @@ Unknown (the weather can also be written on the second line, depending on your p -========== 01-05-2023 Cloudy --- Work at home -========== +============================================ You may also organize your code like this. @@ -48,7 +72,7 @@ You may also organize your code like this. 01-06-2023 Sunny --- Work at home ========== -... +Or like this... diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf b/macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf Binary files differindex 65f7cf45a5..7303b8b07e 100644 --- a/macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf +++ b/macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex b/macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex index c7b3e41d25..d8c6413bc8 100644 --- a/macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex +++ b/macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex @@ -8,23 +8,48 @@ \begin{document} -01/01/2023 Ensoleillé | Appartement +01/01/2023 Ensoleillé | Mon appartement - Les dates et annotations apparaissant dans le texte ne seront pas reconnues : 25/12/2022, [Note], alors n'hésitez pas à les écrire. + Les dates et annotations apparaissant dans le texte ne seront pas détectées : 25/12/2022, [Note], alors n'hésitez pas à les écrire ! [Sports] quelque chose sur les événements sportifs. [Apprendre] quelque chose sur l'apprentissage. + Les images peuvent être incluses via : + + || [.4] {example-image-a} + >> (Remarque sur l'image) + >> (Plus de remarque...) + + Vous pouvez également afficher l'image à gauche ou à droite : + (( [.4] {example-image-a} + -> [.3] % ajouter un certain espace vertical, ici c'est 0.3\baselineskip + )) [.4] {example-image-a} + 02/01/2023 Inconnu (la météo peut aussi être écrite sur la deuxième ligne, selon votre préférence) - La couleur des étiquettes changera en fonction de la date. + La couleur des étiquettes changera en fonction de la date, et le texte long sera automatiquement indenté : [Note] Je n'ai pas étudié aujourd'hui, mais j'ai écrit beaucoup beaucoup beaucoup beaucoup beaucoup beaucoup beaucoup beaucoup beaucoup de code. + Si l'étiquette est suivie de plusieurs paragraphes, vous pouvez utiliser \texttt{\textbackslash\textbackslash} et \texttt{\slash\slash} judicieusement pour les concaténer, de manière à ce que tous les textes soient indentés convenablement : + + [Étiquette] Un peu de texte. + // + Plus de texte (avec \texttt{\slash\slash}, ce qui permet d'avoir un espace vertical par rapport au texte ci-dessus). + // + Plus de texte (le même, avec un certain espace vertical par rapport au texte précédent). + // + (Quelque remarque) + \\ + (Une autre remarque, due à l'utilisation de \texttt{\textbackslash\textbackslash}, est proche de la remarque ci-dessus) + \\ + (Une autre remarque --- de même, est proche de la remarque ci-dessus) + 03/01/2023 @@ -39,9 +64,8 @@ Inconnu (la météo peut aussi être écrite sur la deuxième ligne, selon votre -========== 05-01-2023 Nuageux --- Travail à domicile -========== +================================================== Vous pouvez également organiser votre code comme ceci. @@ -50,7 +74,7 @@ Vous pouvez également organiser votre code comme ceci. 06-01-2023 Ensoleillé --- Travail à domicile ========== -... +Ou bien comme ceci... diff --git a/macros/latex/contrib/jwjournal/jwjournal.cls b/macros/latex/contrib/jwjournal/jwjournal.cls index fc8b091952..f7d1da7f64 100644 --- a/macros/latex/contrib/jwjournal/jwjournal.cls +++ b/macros/latex/contrib/jwjournal/jwjournal.cls @@ -12,7 +12,7 @@ \NeedsTeXFormat{LaTeX2e}[2022-06-01] \ProvidesExplClass {jwjournal} - {2023/08/26} {} + {2023/08/29} {} {JW's journal class} \keys_define:nn { jwjournal } @@ -55,6 +55,8 @@ \colorlet { jwjournal-color-6 } { yellow!20!orange } \colorlet { jwjournal-color-7 } { red!20!orange } +\colorlet { jwjournal-entry } { . } + \NewDocumentCommand \JWJournalEntry { m m } { \skip_vertical:n { .5 \baselineskip } @@ -98,7 +100,7 @@ } \RequirePackage { enumitem } -\setlist [ description ] { font = \normalfont\sffamily, leftmargin = 3em} +\setlist [ description ] { font = \normalfont\sffamily, leftmargin = 3em, topsep = 0pt } \RenewDocumentCommand \descriptionlabel { m } { \skip_horizontal:n { \labelsep } @@ -117,6 +119,54 @@ \end{description} } +\NewDocumentCommand \JWJournalSkip { O{.5} } + { + % \vspace{#1\baselineskip} + \vskip#1\baselineskip + } +\NewDocumentCommand \JWJournalBack { O{.5} } + { + % \vspace{-#1\baselineskip} + \vskip-#1\baselineskip + } + +\newenvironment{JWJournalCompactCenter} + {\parskip=0pt\par\nopagebreak\centering} + {\par\noindent\ignorespacesafterend} +\newenvironment{JWJournalCenter} + {\parskip=0pt\par\medskip\nopagebreak\centering} + {\par\noindent\ignorespacesafterend} +\newenvironment{JWJournalLeft} + {\parskip=0pt\par\medskip\nopagebreak\raggedright} + {\par\noindent\ignorespacesafterend} +\newenvironment{JWJournalRight} + {\parskip=0pt\par\medskip\nopagebreak\raggedleft} + {\par\noindent\ignorespacesafterend} +\NewDocumentCommand \JWJournalCompactCenterText { m } + { + \begin{JWJournalCompactCenter} + #1 + \end{JWJournalCompactCenter} + } +\NewDocumentCommand \JWJournalShowImageCenter { O{1} m } + { + \begin{JWJournalCenter} + \includegraphics[width=#1\linewidth]{#2} + \end{JWJournalCenter} + } +\NewDocumentCommand \JWJournalShowImageLeft { O{1} m } + { + \begin{JWJournalLeft} + \includegraphics[width=#1\linewidth]{#2} + \end{JWJournalLeft} + } +\NewDocumentCommand \JWJournalShowImageRight { O{1} m } + { + \begin{JWJournalRight} + \includegraphics[width=#1\linewidth]{#2} + \end{JWJournalRight} + } + \tl_new:N \g_jwjournal_content_tl \NewDocumentEnvironment { jwjournal } { +b } { @@ -126,7 +176,10 @@ } {} +\tl_const:Nn \c_jwjournal_new_line_with_skip_tl { \\[.3\baselineskip] } +\bool_new:N \l_jwjournal_regex_no_more_match_bool \seq_new:N \l_jwjournal_tmp_seq +\tl_new:N \l_jwjournal_tmp_tl \cs_generate_variant:Nn \regex_split:nnN { nVN } \cs_new:Nn \jwjournal_parse_content:N { @@ -134,56 +187,107 @@ \tl_set:Nn \g_jwjournal_content_tl {} \seq_map_inline:Nn \l_jwjournal_tmp_seq { - \tl_set:Nn \l_tmpa_tl { ❄️ ##1 } + \tl_set:Nn \l_jwjournal_tmp_tl { ❄️ ##1 } + \regex_replace_all:nnN { ={3,} } { } - \l_tmpa_tl + \l_jwjournal_tmp_tl + \regex_replace_all:nnN + { -> } + { \c{JWJournalSkip} } + \l_jwjournal_tmp_tl + \regex_replace_all:nnN + { <- } + { \c{JWJournalBack} } + \l_jwjournal_tmp_tl + \regex_replace_all:nnN + { \|\| } + { \c{JWJournalShowImageCenter} } + \l_jwjournal_tmp_tl + \regex_replace_all:nnN + { \(\( } + { \c{JWJournalShowImageLeft} } + \l_jwjournal_tmp_tl + \regex_replace_all:nnN + { \)\) } + { \c{JWJournalShowImageRight} } + \l_jwjournal_tmp_tl \regex_replace_once:nnN { \| } { \c{hfill} } - \l_tmpa_tl - \regex_match:nVT { ❄️ +++ (.*) } \l_tmpa_tl + \l_jwjournal_tmp_tl + \regex_replace_all:nnN + { // } + { \c{c_jwjournal_new_line_with_skip_tl} } + \l_jwjournal_tmp_tl + + % \regex_replace_all:nnN + % { >> (.*) } + % { \c{JWJournalCompactCenterText}\{\1\} } + % \l_jwjournal_tmp_tl + \exp_args:Nno \regex_split:nnN { >> } { \l_jwjournal_tmp_tl } \l_tmpa_seq + \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl + \tl_clear:N \l_jwjournal_tmp_tl + \tl_put_right:NV \l_jwjournal_tmp_tl \l_tmpa_tl + \seq_map_inline:Nn \l_tmpa_seq { - \tl_gput_right:Nn \g_jwjournal_content_tl { \g_jwjournal_enlarge_page_by_one_line_tl } - \regex_replace_once:nnN - { ❄️ +++ (.*) } - { ❄️ \1 } - \l_tmpa_tl + \tl_put_right:Nn \l_jwjournal_tmp_tl + { \JWJournalCompactCenterText { ####1 } } } + + \bool_set_false:N \l_jwjournal_regex_no_more_match_bool + \bool_do_until:nn \l_jwjournal_regex_no_more_match_bool + { + \regex_match:nVTF { ❄️ \ *? \+{3} } \l_jwjournal_tmp_tl + { + \tl_gput_right:Nn \g_jwjournal_content_tl { \c_jwjournal_enlarge_page_by_one_line_tl } + \regex_replace_once:nnN + { ❄️ \ *? \+{3} (.*) } + { ❄️ \1 } + \l_jwjournal_tmp_tl + } + { + \bool_set_true:N \l_jwjournal_regex_no_more_match_bool + } + } + \regex_replace_once:nnN { ❄️ (\ *)? (\d{4}-\d{1,2}-\d{1,2}) (\ *)? (.*) } { \c{JWJournalEntry} {\2} {\4} } - \l_tmpa_tl + \l_jwjournal_tmp_tl \regex_replace_once:nnN { ❄️ (\ *)? (\d{1,2}-\d{1,2}-\d{4}) (\ *)? (.*) } { \c{JWJournalEntry} {\2} {\4} } - \l_tmpa_tl + \l_jwjournal_tmp_tl \regex_replace_once:nnN { ❄️ (\ *)? (\d{4} \D \d{1,2} \D \d{1,2}) (\ *)? (.*) } { \c{JWJournalEntry} {\2} {\4} } - \l_tmpa_tl + \l_jwjournal_tmp_tl \regex_replace_once:nnN { ❄️ (\ *)? (\d{1,2} \D \d{1,2} \D \d{4}) (\ *)? (.*) } { \c{JWJournalEntry} {\2} {\4} } - \l_tmpa_tl + \l_jwjournal_tmp_tl + \regex_replace_once:nnN - { ❄️ (\[.*\] .*) } + { ❄️ \ *? (\[.*\] .*) } { \c{JWJournalItem} {\1} } - \l_tmpa_tl + \l_jwjournal_tmp_tl \regex_replace_once:nnN - { ❄️ 【(.*)】(.*) } + { ❄️ \ *? 【(.*)】(.*) } { \c{JWJournalItem} { \[\1\] \2 } } - \l_tmpa_tl - \regex_replace_once:nnN { ❄️ } { } \l_tmpa_tl - \tl_gput_right:NV \g_jwjournal_content_tl \l_tmpa_tl + \l_jwjournal_tmp_tl + + \regex_replace_once:nnN { ❄️ } { } \l_jwjournal_tmp_tl + + \tl_gput_right:NV \g_jwjournal_content_tl \l_jwjournal_tmp_tl \tl_gput_right:Nn \g_jwjournal_content_tl { \par } } } \bool_if:NTF \l__jwjournal_scroll_bool { - \tl_const:Nn \g_jwjournal_enlarge_page_by_one_line_tl {} + \tl_const:Nn \c_jwjournal_enlarge_page_by_one_line_tl {} \geometry{ papersize={7in,\maxdimen}, top=.75in,bottom=.75in, @@ -212,7 +316,7 @@ } } { - \tl_const:Nn \g_jwjournal_enlarge_page_by_one_line_tl { \enlargethispage*{\baselineskip} } + \tl_const:Nn \c_jwjournal_enlarge_page_by_one_line_tl { \enlargethispage{\baselineskip} } \geometry{ papersize={7in,10in}, top=.75in,bottom=.75in, diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md index 17d0940072..43e0dce339 100644 --- a/macros/latex/contrib/l3kernel/CHANGELOG.md +++ b/macros/latex/contrib/l3kernel/CHANGELOG.md @@ -7,6 +7,14 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2023-08-29] + +### Added +- `\c_sys_timestamp_str` + +### Changed +- Rename `\tex_pdfcreationdate:D` to `\tex_creationdate:D` + ## [2023-08-11] ### Changed @@ -1504,7 +1512,8 @@ this project uses date-based 'snapshot' version identifiers. - Step functions have been added for dim variables, e.g. `\dim_step_inline:nnnn` -[Unreleased]: https://github.com/latex3/latex3/compare/2023-08-11...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2023-08-29...HEAD +[2023-08-29]: https://github.com/latex3/latex3/compare/2023-08-11...2023-08-29 [2023-08-11]: https://github.com/latex3/latex3/compare/2023-08-03...2023-08-11 [2023-08-03]: https://github.com/latex3/latex3/compare/2023-06-30...2023-08-03 [2023-06-30]: https://github.com/latex3/latex3/compare/2023-06-16...2023-06-30 diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md index 6be76267b6..7afb055297 100644 --- a/macros/latex/contrib/l3kernel/README.md +++ b/macros/latex/contrib/l3kernel/README.md @@ -1,7 +1,7 @@ LaTeX3 Programming Conventions ============================== -Release 2023-08-11 +Release 2023-08-29 Overview -------- diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx index de20e5abe8..9adee097c5 100644 --- a/macros/latex/contrib/l3kernel/expl3.dtx +++ b/macros/latex/contrib/l3kernel/expl3.dtx @@ -24,7 +24,7 @@ % %<*driver|generic|package|2ekernel> %</driver|generic|package|2ekernel> -\def\ExplFileDate{2023-08-11}% +\def\ExplFileDate{2023-08-29}% %<*driver> \documentclass[full]{l3doc} \usepackage{graphicx} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf Binary files differindex dbcbdc76bd..33262bd828 100644 --- a/macros/latex/contrib/l3kernel/expl3.pdf +++ b/macros/latex/contrib/l3kernel/expl3.pdf diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf Binary files differindex 25cec1c3cd..61d451cc9e 100644 --- a/macros/latex/contrib/l3kernel/interface3.pdf +++ b/macros/latex/contrib/l3kernel/interface3.pdf diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex index 696f03d048..0198240396 100644 --- a/macros/latex/contrib/l3kernel/interface3.tex +++ b/macros/latex/contrib/l3kernel/interface3.tex @@ -62,7 +62,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2023-08-11} +\date{Released 2023-08-29} \pagenumbering{roman} \maketitle diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx index bc36340167..17cb2467bf 100644 --- a/macros/latex/contrib/l3kernel/l3basics.dtx +++ b/macros/latex/contrib/l3kernel/l3basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx index bf51cb5527..aaa4333858 100644 --- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx +++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx index 0b4ae26892..34b6ca44ef 100644 --- a/macros/latex/contrib/l3kernel/l3box.dtx +++ b/macros/latex/contrib/l3kernel/l3box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx index 978c6d95de..f3a5021425 100644 --- a/macros/latex/contrib/l3kernel/l3candidates.dtx +++ b/macros/latex/contrib/l3kernel/l3candidates.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/contrib/l3kernel/l3cctab.dtx index e8804818f2..fc9cdd9e92 100644 --- a/macros/latex/contrib/l3kernel/l3cctab.dtx +++ b/macros/latex/contrib/l3kernel/l3cctab.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx index 88455b8472..0eaac6a532 100644 --- a/macros/latex/contrib/l3kernel/l3clist.dtx +++ b/macros/latex/contrib/l3kernel/l3clist.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx index cf1ed0ebc8..2269c6c686 100644 --- a/macros/latex/contrib/l3kernel/l3coffins.dtx +++ b/macros/latex/contrib/l3kernel/l3coffins.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/contrib/l3kernel/l3color.dtx index 3597f0bc4e..1453001a2a 100644 --- a/macros/latex/contrib/l3kernel/l3color.dtx +++ b/macros/latex/contrib/l3kernel/l3color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx index 36e5e8d313..d700a0f021 100644 --- a/macros/latex/contrib/l3kernel/l3debug.dtx +++ b/macros/latex/contrib/l3kernel/l3debug.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx index 14386a1430..a60fe16ff4 100644 --- a/macros/latex/contrib/l3kernel/l3deprecation.dtx +++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx index 43a3312231..b1744b9f7b 100644 --- a/macros/latex/contrib/l3kernel/l3doc.dtx +++ b/macros/latex/contrib/l3kernel/l3doc.dtx @@ -85,7 +85,7 @@ and all files in that bundle must be distributed together. % require you to do updates, if the class changes.}} % % \author{\Team} -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % \maketitle % \tableofcontents % diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/contrib/l3kernel/l3doc.pdf Binary files differindex da3b5ed323..8ec07dcef3 100644 --- a/macros/latex/contrib/l3kernel/l3doc.pdf +++ b/macros/latex/contrib/l3kernel/l3doc.pdf diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx index 58c151045a..2b40c56fc5 100644 --- a/macros/latex/contrib/l3kernel/l3docstrip.dtx +++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf Binary files differindex db1f297e26..d93d065c3b 100644 --- a/macros/latex/contrib/l3kernel/l3docstrip.pdf +++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx index 922e0315b2..0d7e3e877a 100644 --- a/macros/latex/contrib/l3kernel/l3expan.dtx +++ b/macros/latex/contrib/l3kernel/l3expan.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx index 8ef7950afa..1c1401e392 100644 --- a/macros/latex/contrib/l3kernel/l3file.dtx +++ b/macros/latex/contrib/l3kernel/l3file.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -126,7 +126,8 @@ % the \meta{false code} is inserted into the input stream. % \end{function} % -% \begin{function}[updated = 2012-02-09]{\iow_open:Nn, \iow_open:cn} +% \begin{function}[updated = 2012-02-09] +% {\iow_open:Nn, \iow_open:NV, \iow_open:cn, \iow_open:cV} % \begin{syntax} % \cs{iow_open:Nn} \meta{stream} \Arg{file name} % \end{syntax} @@ -446,7 +447,8 @@ % % \subsection{Writing to files} % -% \begin{function}[updated = 2012-06-05]{\iow_now:Nn, \iow_now:Nx, \iow_now:cn, \iow_now:cx} +% \begin{function}[updated = 2012-06-05] +% {\iow_now:Nn, \iow_now:NV, \iow_now:Nx, \iow_now:cn, \iow_now:cV, \iow_now:cx} % \begin{syntax} % \cs{iow_now:Nn} \meta{stream} \Arg{tokens} % \end{syntax} @@ -703,7 +705,7 @@ % \end{texnote} % \end{variable} % -% \begin{function}[TF, updated = 2012-02-10]{\file_if_exist:n} +% \begin{function}[TF, updated = 2012-02-10]{\file_if_exist:n, \file_if_exist:V} % \begin{syntax} % \cs{file_if_exist:nTF} \Arg{file name} \Arg{true code} \Arg{false code} % \end{syntax} @@ -922,7 +924,7 @@ % \end{function} % % -% \begin{function}[updated = 2017-06-26]{\file_input:n} +% \begin{function}[updated = 2017-06-26]{\file_input:n, \file_input:V} % \begin{syntax} % \cs{file_input:n} \Arg{file name} % \end{syntax} @@ -1634,7 +1636,7 @@ % \end{macrocode} % \end{variable} % -% \begin{macro}{\iow_open:Nn, \iow_open:cn} +% \begin{macro}{\iow_open:Nn, \iow_open:NV, \iow_open:cn, \iow_open:cV} % \begin{macro}{\@@_open_stream:Nn, \@@_open_stream:NV} % The same idea as for reading, but without the path and without the need % to allow for a conditional version. @@ -1652,7 +1654,7 @@ \@@_open_stream:NV #1 \l_@@_file_name_tl } } -\cs_generate_variant:Nn \iow_open:Nn { c } +\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV } \cs_new_protected:Npn \@@_open_stream:Nn #1#2 { \tex_global:D \tex_chardef:D #1 = \l_@@_stream_tl \scan_stop: @@ -1798,7 +1800,11 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\iow_now:Nn, \iow_now:Nx, \iow_now:cn, \iow_now:cx} +% \begin{macro} +% { +% \iow_now:Nn, \iow_now:NV, \iow_now:Nx, +% \iow_now:cn, \iow_now:cV, \iow_now:cx +% } % This routine writes the second argument onto the output stream without % expansion. If this stream isn't open, the output goes to the terminal % instead. If the first argument is no output stream at all, we get an @@ -1816,7 +1822,7 @@ \__kernel_iow_with:Nnn \tex_newlinechar:D { `\^^J } { \tex_immediate:D \tex_write:D #1 { \exp_not:n {#2} } } } -\cs_generate_variant:Nn \iow_now:Nn { c, Nx, cx } +\cs_generate_variant:Nn \iow_now:Nn { NV , Nx , c , cV , cx } % \end{macrocode} % \end{macro} % @@ -3308,7 +3314,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}[TF]{\file_if_exist:n} +% \begin{macro}[TF]{\file_if_exist:n, \file_if_exist:V} % The test for the existence of a file is a wrapper around the function to % add a path to a file. If the file was found, the path contains % something, whereas if the file was not located then the return value @@ -3320,6 +3326,7 @@ { \prg_return_true: } { \prg_return_false: } } +\prg_generate_conditional_variant:Nnn \file_if_exist:n { V } { T , F , TF } % \end{macrocode} % \end{macro} % @@ -3360,7 +3367,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\file_input:n} +% \begin{macro}{\file_input:n, \file_input:V} % \begin{macro}{\@@_input:n, \@@_input:V} % \begin{macro}{\@@_input_push:n, \__kernel_file_input_push:n} % \begin{macro}{\@@_input_pop:, \__kernel_file_input_pop:} @@ -3376,6 +3383,7 @@ { \@@_input:V \l_@@_full_name_tl } { \__kernel_file_missing:n {#1} } } +\cs_generate_variant:Nn \file_input:n { V } \cs_new_protected:Npx \@@_input:n #1 { \exp_not:N \clist_if_exist:NTF \exp_not:N \@filelist @@ -3751,7 +3759,7 @@ % \begin{macrocode} \tex_endinput:D } -% \begin{macrocode} +% \end{macrocode} % % Now define the actual error message: % \begin{macrocode} diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx index 16d7ad8cf4..3fb3930535 100644 --- a/macros/latex/contrib/l3kernel/l3flag.dtx +++ b/macros/latex/contrib/l3kernel/l3flag.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx index fd74adbb30..ecdd6ea31c 100644 --- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % \maketitle % % \begin{documentation} diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx index b79d221f38..1f6b333761 100644 --- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx index 2ce6f8c75a..6a8d6376fb 100644 --- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx index 6b9443ce09..bce0ddc8fd 100644 --- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx index 320c7ffa93..d9c8cf5685 100644 --- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx index fbc59aa01f..0a5ac448aa 100644 --- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx index ea21e32e9c..9f11464f29 100644 --- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -404,7 +404,7 @@ \exp:w \exp_end_continue_f:w \@@_parse:n {#3} } \cs_generate_variant:Nn \fp_step_function:nnnN { nnnc } -% \end{macrocode} +% \end{macrocode} % Only floating point numbers (not tuples) are allowed arguments. % Only \enquote{normal} floating points (not $\pm 0$, % $\pm\texttt{inf}$, \texttt{nan}) can be used as step; if positive, diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx index 76e511868f..86e2366f2d 100644 --- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx index 948b81b2cc..bb0e4b12f0 100644 --- a/macros/latex/contrib/l3kernel/l3fp-random.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx index d52675b87b..c0c656189f 100644 --- a/macros/latex/contrib/l3kernel/l3fp-round.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx index 725674b62c..9b59b1759d 100644 --- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % \maketitle % % \begin{documentation} diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx index aef546549a..f4cc0513ad 100644 --- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx index 9966e983e5..17193dd8af 100644 --- a/macros/latex/contrib/l3kernel/l3fp.dtx +++ b/macros/latex/contrib/l3kernel/l3fp.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx index 75a307ea9d..e3693f0a41 100644 --- a/macros/latex/contrib/l3kernel/l3fparray.dtx +++ b/macros/latex/contrib/l3kernel/l3fparray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx index 64919d9e46..5bb880ead3 100644 --- a/macros/latex/contrib/l3kernel/l3int.dtx +++ b/macros/latex/contrib/l3kernel/l3int.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -688,7 +688,7 @@ % Integers can be placed into the output stream with formatting. These % conversions apply to any integer expressions. % -% \begin{function}[updated = 2011-10-22, EXP]{\int_to_arabic:n} +% \begin{function}[updated = 2011-10-22, EXP]{\int_to_arabic:n, \int_to_arabic:v} % \begin{syntax} % \cs{int_to_arabic:n} \Arg{int expr} % \end{syntax} @@ -2024,11 +2024,12 @@ % % \subsection{Formatting integers} % -% \begin{macro}{\int_to_arabic:n} +% \begin{macro}{\int_to_arabic:n, \int_to_arabic:v} % \UnitTested % Nothing exciting here. % \begin{macrocode} \cs_new_eq:NN \int_to_arabic:n \int_eval:n +\cs_generate_variant:Nn \int_to_arabic:n { v } % \end{macrocode} % \end{macro} % diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx index c9f97c6304..cdbf71784c 100644 --- a/macros/latex/contrib/l3kernel/l3intarray.dtx +++ b/macros/latex/contrib/l3kernel/l3intarray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx index 876aabdddd..c2d442f183 100644 --- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx +++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx index d84b56eee0..8a78f8cd7c 100644 --- a/macros/latex/contrib/l3kernel/l3keys.dtx +++ b/macros/latex/contrib/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -985,7 +985,8 @@ % \end{verbatim} % are treated identically. % -% \begin{function}[rEXP, added=2020-12-19, updated = 2021-05-10]{\keyval_parse:nnn} +% \begin{function}[rEXP, added=2020-12-19, updated = 2021-05-10] +% {\keyval_parse:nnn, \keyval_parse:nnV, \keyval_parse:nnv} % \begin{syntax} % \cs{keyval_parse:nnn} \Arg{code_1} \Arg{code_2} \Arg{key--value list} % \end{syntax} @@ -1023,7 +1024,8 @@ % \end{texnote} % \end{function} % -% \begin{function}[rEXP, updated = 2021-05-10]{\keyval_parse:NNn} +% \begin{function}[rEXP, updated = 2021-05-10] +% {\keyval_parse:NNn, \keyval_parse:NNV, \keyval_parse:NNv} % \begin{syntax} % \cs{keyval_parse:NNn} \meta{function_1} \meta{function_2} \Arg{key--value list} % \end{syntax} @@ -1114,7 +1116,11 @@ { % \end{macrocode} % -% \begin{macro}[EXP]{\keyval_parse:nnn, \keyval_parse:NNn} +% \begin{macro}[EXP] +% { +% \keyval_parse:nnn, \keyval_parse:nnV, \keyval_parse:nnv, +% \keyval_parse:NNn, \keyval_parse:NNV, \keyval_parse:NNv +% } % The main function starts the first of two loops. The outer loop splits the % key--value list at active commas, the inner loop will do so at other commas. % The use of \cs{s_@@_mark} here prevents loss of braces from the key @@ -1379,6 +1385,8 @@ \char_set_catcode_active:n { `\= } \@@_tmp:w , = \group_end: +\cs_generate_variant:Nn \keyval_parse:NNn { NNV , NNv } +\cs_generate_variant:Nn \keyval_parse:nnn { nnV , nnv } % \end{macrocode} % % \begin{macro}[EXP]{\@@_pair:nnnn, \@@_key:nn} diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx index acb2ad3cbd..4142ac4658 100644 --- a/macros/latex/contrib/l3kernel/l3legacy.dtx +++ b/macros/latex/contrib/l3kernel/l3legacy.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx index 079f23e3c1..4e1f6a5bb8 100644 --- a/macros/latex/contrib/l3kernel/l3luatex.dtx +++ b/macros/latex/contrib/l3kernel/l3luatex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx index 7e80cf5665..82092523fa 100644 --- a/macros/latex/contrib/l3kernel/l3msg.dtx +++ b/macros/latex/contrib/l3kernel/l3msg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -103,7 +103,11 @@ % although in general this may be confusing; simply writing the messages % using |~| characters is the method favored by the team. % -% \begin{function}[updated = 2011-08-16]{\msg_new:nnnn, \msg_new:nnn} +% \begin{function}[updated = 2011-08-16] +% { +% \msg_new:nnnn, \msg_new:nnxx, +% \msg_new:nnn, \msg_new:nnx +% } % \begin{syntax} % \cs{msg_new:nnnn} \Arg{module} \Arg{message} \Arg{text} \Arg{more text} % \end{syntax} @@ -312,9 +316,15 @@ % \msg_fatal:nnnn , % \msg_fatal:nnn , % \msg_fatal:nn , +% \msg_fatal:nnVV , +% \msg_fatal:nnVn , +% \msg_fatal:nnnV , +% \msg_fatal:nnV , % \msg_fatal:nnxxxx , % \msg_fatal:nnxxx , +% \msg_fatal:nnnxx , % \msg_fatal:nnxx , +% \msg_fatal:nnnx , % \msg_fatal:nnx % } % \begin{syntax} @@ -333,9 +343,15 @@ % \msg_critical:nnnn , % \msg_critical:nnn , % \msg_critical:nn , +% \msg_critical:nnVV , +% \msg_critical:nnVn , +% \msg_critical:nnnV , +% \msg_critical:nnV , % \msg_critical:nnxxxx , % \msg_critical:nnxxx , +% \msg_critical:nnnxx , % \msg_critical:nnxx , +% \msg_critical:nnnx , % \msg_critical:nnx % } % \begin{syntax} @@ -360,9 +376,15 @@ % \msg_error:nnnn , % \msg_error:nnn , % \msg_error:nn , +% \msg_error:nnVV , +% \msg_error:nnVn , +% \msg_error:nnnV , +% \msg_error:nnV , % \msg_error:nnxxxx , % \msg_error:nnxxx , +% \msg_error:nnnxx , % \msg_error:nnxx , +% \msg_error:nnnx , % \msg_error:nnx % } % \begin{syntax} @@ -380,10 +402,17 @@ % \msg_warning:nnnnn , % \msg_warning:nnnn , % \msg_warning:nnn , +% \msg_warning:nnn , % \msg_warning:nn , +% \msg_warning:nnVV , +% \msg_warning:nnVn , +% \msg_warning:nnnV , +% \msg_warning:nnV , % \msg_warning:nnxxxx , % \msg_warning:nnxxx , +% \msg_warning:nnnxx , % \msg_warning:nnxx , +% \msg_warning:nnnx , % \msg_warning:nnx % } % \begin{syntax} @@ -402,18 +431,30 @@ % \msg_note:nnnn , % \msg_note:nnn , % \msg_note:nn , +% \msg_note:nnVV , +% \msg_note:nnVn , +% \msg_note:nnnV , +% \msg_note:nnV , % \msg_note:nnxxxx , % \msg_note:nnxxx , +% \msg_note:nnnxx , % \msg_note:nnxx , +% \msg_note:nnnx , % \msg_note:nnx , % \msg_info:nnnnnn , % \msg_info:nnnnn , % \msg_info:nnnn , % \msg_info:nnn , % \msg_info:nn , +% \msg_info:nnVV , +% \msg_info:nnVn , +% \msg_info:nnnV , +% \msg_info:nnV , % \msg_info:nnxxxx , % \msg_info:nnxxx , +% \msg_info:nnnxx , % \msg_info:nnxx , +% \msg_info:nnnx , % \msg_info:nnx % } % \begin{syntax} @@ -435,18 +476,30 @@ % \msg_term:nnnn , % \msg_term:nnn , % \msg_term:nn , +% \msg_term:nnVV , +% \msg_term:nnVn , +% \msg_term:nnnV , +% \msg_term:nnV , % \msg_term:nnxxxx , % \msg_term:nnxxx , +% \msg_term:nnnxx , % \msg_term:nnxx , +% \msg_term:nnnx , % \msg_term:nnx , % \msg_log:nnnnnn , % \msg_log:nnnnn , % \msg_log:nnnn , % \msg_log:nnn , % \msg_log:nn , +% \msg_log:nnVV , +% \msg_log:nnVn , +% \msg_log:nnnV , +% \msg_log:nnV , % \msg_log:nnxxxx , % \msg_log:nnxxx , +% \msg_log:nnnxx , % \msg_log:nnxx , +% \msg_log:nnnx , % \msg_log:nnx % } % \begin{syntax} @@ -468,9 +521,15 @@ % \msg_none:nnnn , % \msg_none:nnn , % \msg_none:nn , +% \msg_none:nnVV , +% \msg_none:nnVn , +% \msg_none:nnnV , +% \msg_none:nnV , % \msg_none:nnxxxx , % \msg_none:nnxxx , +% \msg_none:nnnxx , % \msg_none:nnxx , +% \msg_none:nnnx , % \msg_none:nnx % } % \begin{syntax} @@ -489,9 +548,15 @@ % \msg_show:nnnn , % \msg_show:nnn , % \msg_show:nn , +% \msg_show:nnVV , +% \msg_show:nnVn , +% \msg_show:nnnV , +% \msg_show:nnV , % \msg_show:nnxxxx , % \msg_show:nnxxx , +% \msg_show:nnnxx , % \msg_show:nnxx , +% \msg_show:nnnx , % \msg_show:nnx % } % \begin{syntax} @@ -740,7 +805,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\msg_new:nnnn, \msg_new:nnn} +% \begin{macro}{\msg_new:nnnn, \msg_new:nnxx, \msg_new:nnn, \msg_new:nnx} % \begin{macro}{\msg_gset:nnnn, \msg_gset:nnn} % \begin{macro}{\msg_set:nnnn, \msg_set:nnn} % Setting a message simply means saving the appropriate text @@ -751,8 +816,10 @@ \@@_chk_free:nn {#1} {#2} \msg_gset:nnnn {#1} {#2} } +\cs_generate_variant:Nn \msg_new:nnnn { nnxx } \cs_new_protected:Npn \msg_new:nnn #1#2#3 { \msg_new:nnnn {#1} {#2} {#3} { } } +\cs_generate_variant:Nn \msg_new:nnn { nnx } \cs_new_protected:Npn \msg_set:nnnn #1#2#3#4 { \cs_set:cpn { \c_@@_text_prefix_tl #1 / #2 } @@ -1113,6 +1180,9 @@ { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} { } { } { } } \cs_new_protected:cpx { msg_ #1 :nn } ##1##2 { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} { } { } { } { } } + \cs_generate_variant:cn { msg_ #1 :nnn } { nnV } + \cs_generate_variant:cn { msg_ #1 :nnnn } { nnVV , nnVn , nnnV , nnnx } + \cs_generate_variant:cn { msg_ #1 :nnnnn } { nnnxx } \cs_new_protected:cpx { msg_ #1 :nnxxxx } ##1##2##3##4##5##6 { \use:x @@ -1139,9 +1209,15 @@ % \msg_fatal:nnnn , % \msg_fatal:nnn , % \msg_fatal:nn , +% \msg_fatal:nnVV , +% \msg_fatal:nnVn , +% \msg_fatal:nnnV , +% \msg_fatal:nnV , % \msg_fatal:nnxxxx , % \msg_fatal:nnxxx , +% \msg_fatal:nnnxx , % \msg_fatal:nnxx , +% \msg_fatal:nnnx , % \msg_fatal:nnx % } % \begin{macro}{\@@_fatal_exit:} @@ -1173,9 +1249,15 @@ % \msg_critical:nnnn , % \msg_critical:nnn , % \msg_critical:nn , +% \msg_critical:nnVV , +% \msg_critical:nnVn , +% \msg_critical:nnnV , +% \msg_critical:nnV , % \msg_critical:nnxxxx , % \msg_critical:nnxxx , +% \msg_critical:nnnxx , % \msg_critical:nnxx , +% \msg_critical:nnnx , % \msg_critical:nnx % } % Not quite so bad: just end the current file. @@ -1198,9 +1280,15 @@ % \msg_error:nnnn , % \msg_error:nnn , % \msg_error:nn , +% \msg_error:nnVV , +% \msg_error:nnVn , +% \msg_error:nnnV , +% \msg_error:nnV , % \msg_error:nnxxxx , % \msg_error:nnxxx , +% \msg_error:nnnxx , % \msg_error:nnxx , +% \msg_error:nnnx , % \msg_error:nnx % } % For an error, the interrupt routine is called. We check if there is @@ -1229,27 +1317,45 @@ % \msg_warning:nnnn , % \msg_warning:nnn , % \msg_warning:nn , +% \msg_warning:nnVV , +% \msg_warning:nnVn , +% \msg_warning:nnnV , +% \msg_warning:nnV , % \msg_warning:nnxxxx , % \msg_warning:nnxxx , +% \msg_warning:nnnxx , % \msg_warning:nnxx , +% \msg_warning:nnnx , % \msg_warning:nnx , % \msg_note:nnnnnn , % \msg_note:nnnnn , % \msg_note:nnnn , % \msg_note:nnn , % \msg_note:nn , +% \msg_note:nnVV , +% \msg_note:nnVn , +% \msg_note:nnnV , +% \msg_note:nnV , % \msg_note:nnxxxx , % \msg_note:nnxxx , +% \msg_note:nnnxx , % \msg_note:nnxx , +% \msg_note:nnnx , % \msg_note:nnx , % \msg_info:nnnnnn , % \msg_info:nnnnn , % \msg_info:nnnn , % \msg_info:nnn , % \msg_info:nn , +% \msg_info:nnVV , +% \msg_info:nnVn , +% \msg_info:nnnV , +% \msg_info:nnV , % \msg_info:nnxxxx , % \msg_info:nnxxx , +% \msg_info:nnnxx , % \msg_info:nnxx , +% \msg_info:nnnx , % \msg_info:nnx , % } % Warnings and information messages have no decoration. Warnings are @@ -1303,18 +1409,30 @@ % \msg_log:nnnn , % \msg_log:nnn , % \msg_log:nn , +% \msg_log:nnVV , +% \msg_log:nnVn , +% \msg_log:nnnV , +% \msg_log:nnV , % \msg_log:nnxxxx , % \msg_log:nnxxx , +% \msg_log:nnnxx , % \msg_log:nnxx , +% \msg_log:nnnx , % \msg_log:nnx , % \msg_term:nnnnnn , % \msg_term:nnnnn , % \msg_term:nnnn , % \msg_term:nnn , % \msg_term:nn , +% \msg_term:nnVV , +% \msg_term:nnVn , +% \msg_term:nnnV , +% \msg_term:nnV , % \msg_term:nnxxxx , % \msg_term:nnxxx , +% \msg_term:nnnxx , % \msg_term:nnxx , +% \msg_term:nnnx , % \msg_term:nnx , % } % \enquote{Log} data is very similar to information, but with no extras @@ -1345,9 +1463,15 @@ % \msg_none:nnnn , % \msg_none:nnn , % \msg_none:nn , +% \msg_none:nnVV , +% \msg_none:nnVn , +% \msg_none:nnnV , +% \msg_none:nnV , % \msg_none:nnxxxx , % \msg_none:nnxxx , +% \msg_none:nnnxx , % \msg_none:nnxx , +% \msg_none:nnnx , % \msg_none:nnx % } % The \texttt{none} message type is needed so that input can be gobbled. @@ -1363,9 +1487,15 @@ % \msg_show:nnnn , % \msg_show:nnn , % \msg_show:nn , +% \msg_show:nnVV , +% \msg_show:nnVn , +% \msg_show:nnnV , +% \msg_show:nnV , % \msg_show:nnxxxx , % \msg_show:nnxxx , +% \msg_show:nnnxx , % \msg_show:nnxx , +% \msg_show:nnx , % \msg_show:nnx % } % \begin{macro}{\@@_show:n, \@@_show:w, \@@_show_dot:w, \@@_show:nn} diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx index 1db4aaa806..f3f56f7f72 100644 --- a/macros/latex/contrib/l3kernel/l3names.dtx +++ b/macros/latex/contrib/l3kernel/l3names.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -533,7 +533,6 @@ \@@_primitive:NN \pdfcompresslevel \tex_pdfcompresslevel:D \@@_primitive:NN \pdfcolorstack \tex_pdfcolorstack:D \@@_primitive:NN \pdfcolorstackinit \tex_pdfcolorstackinit:D - \@@_primitive:NN \pdfcreationdate \tex_pdfcreationdate:D \@@_primitive:NN \pdfdecimaldigits \tex_pdfdecimaldigits:D \@@_primitive:NN \pdfdest \tex_pdfdest:D \@@_primitive:NN \pdfdestmargin \tex_pdfdestmargin:D @@ -627,6 +626,7 @@ \@@_primitive:NN \pdfadjustspacing \tex_adjustspacing:D \@@_primitive:NN \pdfappendkern \tex_appendkern:D \@@_primitive:NN \pdfcopyfont \tex_copyfont:D + \@@_primitive:NN \pdfcreationdate \tex_creationdate:D \@@_primitive:NN \pdfdraftmode \tex_draftmode:D \@@_primitive:NN \pdfeachlinedepth \tex_eachlinedepth:D \@@_primitive:NN \pdfeachlineheight \tex_eachlineheight:D diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf Binary files differindex 5a24e8b46e..7ebec4848a 100644 --- a/macros/latex/contrib/l3kernel/l3news.pdf +++ b/macros/latex/contrib/l3kernel/l3news.pdf diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf Binary files differindex 9951afa47d..fe4f64501c 100644 --- a/macros/latex/contrib/l3kernel/l3news01.pdf +++ b/macros/latex/contrib/l3kernel/l3news01.pdf diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf Binary files differindex 1b78bf3492..3b36d8a341 100644 --- a/macros/latex/contrib/l3kernel/l3news02.pdf +++ b/macros/latex/contrib/l3kernel/l3news02.pdf diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf Binary files differindex a05ce9a5a9..f3031cb0d8 100644 --- a/macros/latex/contrib/l3kernel/l3news03.pdf +++ b/macros/latex/contrib/l3kernel/l3news03.pdf diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf Binary files differindex e75b8011f3..d7155a9049 100644 --- a/macros/latex/contrib/l3kernel/l3news04.pdf +++ b/macros/latex/contrib/l3kernel/l3news04.pdf diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf Binary files differindex a17cb861b5..788ded7ff1 100644 --- a/macros/latex/contrib/l3kernel/l3news05.pdf +++ b/macros/latex/contrib/l3kernel/l3news05.pdf diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf Binary files differindex 5d30d5f234..9778f1dd95 100644 --- a/macros/latex/contrib/l3kernel/l3news06.pdf +++ b/macros/latex/contrib/l3kernel/l3news06.pdf diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf Binary files differindex a6990b3d02..84e2f2c9f2 100644 --- a/macros/latex/contrib/l3kernel/l3news07.pdf +++ b/macros/latex/contrib/l3kernel/l3news07.pdf diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf Binary files differindex fe9cbd8b2c..e91e2d344b 100644 --- a/macros/latex/contrib/l3kernel/l3news08.pdf +++ b/macros/latex/contrib/l3kernel/l3news08.pdf diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf Binary files differindex 9e20ff1ab4..83832c3237 100644 --- a/macros/latex/contrib/l3kernel/l3news09.pdf +++ b/macros/latex/contrib/l3kernel/l3news09.pdf diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf Binary files differindex 62699d7546..acbefc90b5 100644 --- a/macros/latex/contrib/l3kernel/l3news10.pdf +++ b/macros/latex/contrib/l3kernel/l3news10.pdf diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf Binary files differindex 39a7cdb5a6..132979c8a7 100644 --- a/macros/latex/contrib/l3kernel/l3news11.pdf +++ b/macros/latex/contrib/l3kernel/l3news11.pdf diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf Binary files differindex 7b96788d94..c1ed0ffaca 100644 --- a/macros/latex/contrib/l3kernel/l3news12.pdf +++ b/macros/latex/contrib/l3kernel/l3news12.pdf diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/contrib/l3kernel/l3pdf.dtx index dd275751db..ebfdc9115b 100644 --- a/macros/latex/contrib/l3kernel/l3pdf.dtx +++ b/macros/latex/contrib/l3kernel/l3pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf Binary files differindex b733ee4921..89ba420517 100644 --- a/macros/latex/contrib/l3kernel/l3prefixes.pdf +++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx index fe88bac05d..ec778817d3 100644 --- a/macros/latex/contrib/l3kernel/l3prg.dtx +++ b/macros/latex/contrib/l3kernel/l3prg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx index e7ef6d11f8..2d5fc3edcc 100644 --- a/macros/latex/contrib/l3kernel/l3prop.dtx +++ b/macros/latex/contrib/l3kernel/l3prop.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -167,16 +167,16 @@ % { % \prop_put:Nnn, \prop_put:NnV, \prop_put:Nno, \prop_put:Nne, \prop_put:Nnx, % \prop_put:NVn, \prop_put:NVV, \prop_put:NVx, \prop_put:Nvx, -% \prop_put:Non, \prop_put:Noo, \prop_put:Nxx, +% \prop_put:Non, \prop_put:Nxn, \prop_put:NxV, \prop_put:Noo, \prop_put:Nxx, % \prop_put:cnn, \prop_put:cnV, \prop_put:cno, \prop_put:cne, \prop_put:cnx, % \prop_put:cVn, \prop_put:cVV, \prop_put:cVx, \prop_put:cvx, -% \prop_put:con, \prop_put:coo, \prop_put:cxx, +% \prop_put:con, \prop_put:cxn, \prop_put:cxV, \prop_put:coo, \prop_put:cxx, % \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx, % \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVx, \prop_gput:Nvx, -% \prop_gput:Non, \prop_gput:Noo, \prop_gput:Nxx, +% \prop_gput:Non, \prop_gput:Nxn, \prop_gput:NxV, \prop_gput:Noo, \prop_gput:Nxx, % \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx, % \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx, -% \prop_gput:con, \prop_gput:coo, \prop_gput:cxx +% \prop_gput:con, \prop_gput:cxn, \prop_gput:cxV, \prop_gput:coo, \prop_gput:cxx % } % \begin{syntax} % \cs{prop_put:Nnn} \meta{property list} \Arg{key} \Arg{value} @@ -250,8 +250,9 @@ % % \begin{function}[updated = 2011-08-28] % { -% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, -% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, +% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN, +% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN, +% \prop_get:cnc % } % \begin{syntax} % \cs{prop_get:NnN} \meta{property list} \Arg{key} \meta{tl var} @@ -294,7 +295,11 @@ % the \meta{token list variable} is local. See also \cs{prop_gpop:NnNTF}. % \end{function} % -% \begin{function}[added = 2014-07-17, EXP]{\prop_item:Nn, \prop_item:cn} +% \begin{function}[added = 2014-07-17, EXP] +% { +% \prop_item:Nn, \prop_item:NV, \prop_item:No, \prop_item:Ne, +% \prop_item:cn, \prop_item:cV, \prop_item:co, \prop_item:ce +% } % \begin{syntax} % \cs{prop_item:Nn} \meta{property list} \Arg{key} % \end{syntax} @@ -399,8 +404,9 @@ % % \begin{function}[updated = 2012-05-19, TF] % { -% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, -% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN +% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN, +% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN, +% \prop_get:cnc % } % \begin{syntax} % \cs{prop_get:NnNTF} \meta{property list} \Arg{key} \meta{token list variable} \\ @@ -982,8 +988,9 @@ % % \begin{macro}[tested = m3prop002] % { -% \prop_get:NnN, \prop_get:NVN, \prop_get:NoN, -% \prop_get:cnN, \prop_get:cVN, \prop_get:coN +% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN, +% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN, +% \prop_get:cnc % } % Getting an item from a list is very easy: after splitting, % if the key is in the property list, just set the token list variable @@ -995,8 +1002,8 @@ { \tl_set:Nn #3 {##2} } { \tl_set:Nn #3 { \q_no_value } } } -\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , No } -\cs_generate_variant:Nn \prop_get:NnN { c , cV , cv , co } +\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , No , Nx } +\cs_generate_variant:Nn \prop_get:NnN { c , cV , cv , co , cx , cnc } % \end{macrocode} % \end{macro} % @@ -1035,7 +1042,11 @@ % \end{macro} % \end{macro} % -% \begin{macro}[EXP]{\prop_item:Nn, \prop_item:cn} +% \begin{macro}[EXP] +% { +% \prop_item:Nn, \prop_item:NV, \prop_item:No, \prop_item:Ne, +% \prop_item:cn, \prop_item:cV, \prop_item:co, \prop_item:ce +% } % \begin{macro}[EXP]{\@@_item:nnn} % Getting the value corresponding to a key in a property list in an % expandable fashion simply uses \cs{prop_map_tokens:Nn} to go through @@ -1053,7 +1064,7 @@ \str_if_eq:eeT {#1} {#2} { \prop_map_break:n { \exp_not:n {#3} } } } -\cs_generate_variant:Nn \prop_item:Nn { c } +\cs_generate_variant:Nn \prop_item:Nn { NV , No , Ne , c , cV , co , ce } % \end{macrocode} % \end{macro} % \end{macro} @@ -1154,19 +1165,19 @@ % { % \prop_put:Nnn, \prop_put:NnV, \prop_put:Nno, \prop_put:Nne, \prop_put:Nnx, % \prop_put:NVn, \prop_put:NVV, \prop_put:NVx, \prop_put:Nvx, -% \prop_put:Non, \prop_put:Noo, \prop_put:Nxx, +% \prop_put:Non, \prop_put:Nxn, \prop_put:NxV, \prop_put:Noo, \prop_put:Nxx, % \prop_put:cnn, \prop_put:cnV, \prop_put:cno, \prop_put:cne, \prop_put:cnx, % \prop_put:cVn, \prop_put:cVV, \prop_put:cVx, \prop_put:cvx, -% \prop_put:con, \prop_put:coo, \prop_put:cxx +% \prop_put:con, \prop_put:cxn, \prop_put:cxV, \prop_put:coo, \prop_put:cxx % } % \begin{macro}[tested = m3prop002] % { % \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx, -% \prop_gput:NVn, \prop_gput:NVV, \prop_hput:NVx, \prop_hput:Nvx, -% \prop_gput:Non, \prop_gput:Noo, \prop_gput:Nxx, +% \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVx, \prop_hput:Nvx, +% \prop_gput:Non, \prop_gput:Nxn, \prop_pgut:NxV, \prop_gput:Noo, \prop_gput:Nxx, % \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx, % \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx, -% \prop_gput:con, \prop_gput:coo, \prop_gput:cxx +% \prop_gput:con, \prop_gput:cxn, \prop_gput:cxV, \prop_gput:coo, \prop_gput:cxx % } % \begin{macro}{\@@_put:NNnn} % Since the branches of \cs{@@_split:NnTF} are used as the replacement @@ -1196,13 +1207,13 @@ { #1 #2 { \exp_not:o {#2} \l_@@_internal_tl } } } \cs_generate_variant:Nn \prop_put:Nnn - { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx } + { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx } \cs_generate_variant:Nn \prop_put:Nnn - { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx } + { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx } \cs_generate_variant:Nn \prop_gput:Nnn - { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx } + { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx } \cs_generate_variant:Nn \prop_gput:Nnn - { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx } + { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx } % \end{macrocode} % \end{macro} % \end{macro} @@ -1307,8 +1318,9 @@ % % \begin{macro}[TF, tested = m3prop004] % { -% \prop_get:NnN, \prop_get:NVN, \prop_get:NoN, -% \prop_get:cnN, \prop_get:cVN, \prop_get:coN +% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN, +% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN, +% \prop_get:cnc % } % Getting the value corresponding to a key, keeping track of whether % the key was present or not, is implemented as a conditional (with @@ -1324,7 +1336,7 @@ { \prg_return_false: } } \prg_generate_conditional_variant:Nnn \prop_get:NnN - { NV , Nv , No , c , cV , cv , co } { T , F , TF } + { NV , Nv , No , Nx , c , cV , cv , co , cx , cnc } { T , F , TF } % \end{macrocode} % \end{macro} % diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx index 41c61be838..e05b5369e1 100644 --- a/macros/latex/contrib/l3kernel/l3quark.dtx +++ b/macros/latex/contrib/l3kernel/l3quark.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx index 6aef0742a0..3d342960ac 100644 --- a/macros/latex/contrib/l3kernel/l3regex.dtx +++ b/macros/latex/contrib/l3kernel/l3regex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -587,7 +587,11 @@ % while the later require a compiled expression as generated by % \cs{regex_set:Nn}. % -% \begin{function}[TF, added = 2017-05-26]{\regex_match:nn, \regex_match:Nn} +% \begin{function}[TF, added = 2017-05-26] +% { +% \regex_match:nn, \regex_match:nV, +% \regex_match:Nn, \regex_match:NV +% } % \begin{syntax} % \cs{regex_match:nnTF} \Arg{regex} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} @@ -600,7 +604,11 @@ % leaves \texttt{TRUE} then \texttt{FALSE} in the input stream. % \end{function} % -% \begin{function}[added = 2017-05-26]{\regex_count:nnN, \regex_count:NnN} +% \begin{function}[added = 2017-05-26] +% { +% \regex_count:nnN, \regex_count:nVN, +% \regex_count:NnN, \regex_count:NVN +% } % \begin{syntax} % \cs{regex_count:nnN} \Arg{regex} \Arg{token list} \meta{int var} % \end{syntax} @@ -657,7 +665,10 @@ % \section{Submatch extraction} % % \begin{function}[noTF, added = 2017-05-26] -% {\regex_extract_once:nnN, \regex_extract_once:NnN} +% { +% \regex_extract_once:nnN, \regex_extract_once:nVN, +% \regex_extract_once:NVN, \regex_extract_once:NVN +% } % \begin{syntax} % \cs{regex_extract_once:nnN} \Arg{regex} \Arg{token list} \meta{seq~var} % \cs{regex_extract_once:nnNTF} \Arg{regex} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code} @@ -688,7 +699,10 @@ % \end{function} % % \begin{function}[noTF, added = 2017-05-26] -% {\regex_extract_all:nnN, \regex_extract_all:NnN} +% { +% \regex_extract_all:nnN, \regex_extract_all:nVN, +% \regex_extract_all:NnN, \regex_extract_all:NVN +% } % \begin{syntax} % \cs{regex_extract_all:nnN} \Arg{regex} \Arg{token list} \meta{seq~var} % \cs{regex_extract_all:nnNTF} \Arg{regex} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code} @@ -711,7 +725,11 @@ % and the \texttt{true} branch is left in the input stream. % \end{function} % -% \begin{function}[noTF, added = 2017-05-26]{\regex_split:nnN, \regex_split:NnN} +% \begin{function}[noTF, added = 2017-05-26] +% { +% \regex_split:nnN, \regex_split:nVN, +% \regex_split:NnN, \regex_split:NVN, +% } % \begin{syntax} % \cs{regex_split:nnN} \Arg{regular expression} \Arg{token list} \meta{seq~var} % \cs{regex_split:nnNTF} \Arg{regular expression} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code} @@ -740,7 +758,10 @@ % \section{Replacement} % % \begin{function}[noTF, added = 2017-05-26] -% {\regex_replace_once:nnN,\regex_replace_once:NnN} +% { +% \regex_replace_once:nnN,\regex_replace_once:nVN, +% \regex_replace_once:NnN,\regex_replace_once:NVN +% } % \begin{syntax} % \cs{regex_replace_once:nnN} \Arg{regular expression} \Arg{replacement} \meta{tl~var} % \cs{regex_replace_once:nnNTF} \Arg{regular expression} \Arg{replacement} \meta{tl~var} \Arg{true code} \Arg{false code} @@ -754,7 +775,10 @@ % \end{function} % % \begin{function}[noTF, added = 2017-05-26] -% {\regex_replace_all:nnN, \regex_replace_all:NnN} +% { +% \regex_replace_all:nnN,\regex_replace_all:nVN, +% \regex_replace_all:NnN,\regex_replace_all:NVN +% } % \begin{syntax} % \cs{regex_replace_all:nnN} \Arg{regular expression} \Arg{replacement} \meta{tl~var} % \cs{regex_replace_all:nnNTF} \Arg{regular expression} \Arg{replacement} \meta{tl~var} \Arg{true code} \Arg{false code} @@ -6518,7 +6542,11 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}[TF]{\regex_match:nn, \regex_match:Nn} +% \begin{macro}[TF] +% { +% \regex_match:nn, \regex_match:nV, +% \regex_match:Nn, \regex_match:NV +% } % Those conditionals are based on a common auxiliary defined % later. Its first argument builds the \textsc{nfa} corresponding to % the regex, and the second argument is the query token list. Once we @@ -6530,21 +6558,26 @@ \@@_if_match:nn { \@@_build:n {#1} } {#2} \@@_return: } +\prg_generate_conditional_variant:Nnn \regex_match:nn { nV } { T , F , TF } \prg_new_protected_conditional:Npnn \regex_match:Nn #1#2 { T , F , TF } { \@@_if_match:nn { \@@_build:N #1 } {#2} \@@_return: } +\prg_generate_conditional_variant:Nnn \regex_match:Nn { NV } { T , F , TF } % \end{macrocode} % \end{macro} % -% \begin{macro}{\regex_count:nnN, \regex_count:NnN} +% \begin{macro} +% {\regex_count:nnN, \regex_count:nVN, \regex_count:NnN, \regex_count:NVN} % Again, use an auxiliary whose first argument builds the \textsc{nfa}. % \begin{macrocode} \cs_new_protected:Npn \regex_count:nnN #1 { \@@_count:nnN { \@@_build:n {#1} } } \cs_new_protected:Npn \regex_count:NnN #1 { \@@_count:nnN { \@@_build:N #1 } } +\cs_generate_variant:Nn \regex_count:nnN { nV } +\cs_generate_variant:Nn \regex_count:NnN { NV } % \end{macrocode} % \end{macro} % @@ -6573,11 +6606,16 @@ % % \begin{macro}[noTF] % { -% \regex_extract_once:nnN, \regex_extract_once:NnN, -% \regex_extract_all:nnN, \regex_extract_all:NnN, -% \regex_replace_once:nnN, \regex_replace_once:NnN, -% \regex_replace_all:nnN, \regex_replace_all:NnN, -% \regex_split:nnN, \regex_split:NnN +% \regex_extract_once:nnN, \regex_extract_once:nVN, +% \regex_extract_once:NnN, \regex_extract_once:NVN, +% \regex_extract_all:nnN, \regex_extract_all:nVN, +% \regex_extract_all:NnN, \regex_extract_all:NVN, +% \regex_replace_once:nnN, \regex_replace_once:nVN, +% \regex_replace_once:NnN, \regex_replace_once:NVN, +% \regex_replace_all:nnN, \regex_replace_all:nVN, +% \regex_replace_all:NnN, \regex_replace_all:NVN, +% \regex_split:NnN, \regex_split:NVN, +% \regex_split:nnN, \regex_split:nVN % } % We define here $40$ user functions, following a common pattern in % terms of \texttt{:nnN} auxiliaries, defined in the coming @@ -6595,6 +6633,11 @@ { #1 { \@@_build:n {##1} } {##2} ##3 \@@_return: } \prg_new_protected_conditional:Npnn #3 ##1##2##3 { T , F , TF } { #1 { \@@_build:N ##1 } {##2} ##3 \@@_return: } + \cs_generate_variant:Nn #2 { nV } + \prg_generate_conditional_variant:Nnn #2 { nV } { T , F , TF } + \cs_generate_variant:Nn #3 { NV } + \prg_generate_conditional_variant:Nnn #3 { NV } { T , F , TF } + } \@@_tmp:w \@@_extract_once:nnN \regex_extract_once:nnN \regex_extract_once:NnN diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx index ad14896d42..d523320f4e 100644 --- a/macros/latex/contrib/l3kernel/l3seq.dtx +++ b/macros/latex/contrib/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -126,8 +126,12 @@ % % \begin{function}[added = 2011-08-15, updated = 2012-07-02] % { -% \seq_set_split:Nnn , \seq_set_split:NnV , -% \seq_gset_split:Nnn, \seq_gset_split:NnV +% \seq_set_split:Nnn , +% \seq_set_split:NVn , \seq_set_split:NnV , \seq_set_split:NVV , +% \seq_set_split:Nnx , \seq_set_split:Nxx , +% \seq_gset_split:Nnn, +% \seq_gset_split:NVn , \seq_gset_split:NnV, \seq_gset_split:NVV, +% \seq_gset_split:Nnx , \seq_gset_split:Nxx % } % \begin{syntax} % \cs{seq_set_split:Nnn} \meta{seq~var} \Arg{delimiter} \Arg{token list} @@ -304,7 +308,11 @@ % the special marker \cs{q_no_value}. % \end{function} % -% \begin{function}[added = 2014-07-17, EXP]{\seq_item:Nn, \seq_item:cn} +% \begin{function}[added = 2014-07-17, EXP] +% { +% \seq_item:Nn, \seq_item:NV, \seq_item:Ne, +% \seq_item:cn, \seq_item:cV, \seq_item:ce +% } % \begin{syntax} % \cs{seq_item:Nn} \meta{seq~var} \Arg{integer expression} % \end{syntax} @@ -463,8 +471,10 @@ % % \begin{function} % { -% \seq_remove_all:Nn , \seq_remove_all:cn, -% \seq_gremove_all:Nn, \seq_gremove_all:cn +% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Nx, +% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:cx, +% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Nx, +% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:cx % } % \begin{syntax} % \cs{seq_remove_all:Nn} \meta{seq~var} \Arg{item} @@ -1266,8 +1276,12 @@ % % \begin{macro} % { -% \seq_set_split:Nnn , \seq_set_split:NnV , -% \seq_gset_split:Nnn, \seq_gset_split:NnV +% \seq_set_split:Nnn , +% \seq_set_split:NVn , \seq_set_split:NnV , \seq_set_split:NVV , +% \seq_set_split:Nnx , \seq_set_split:Nxx , +% \seq_gset_split:Nnn, +% \seq_gset_split:NVn , \seq_gset_split:NnV, \seq_gset_split:NVV, +% \seq_gset_split:Nnx, \seq_gset_split:Nxx % } % \begin{macro} % { @@ -1340,8 +1354,8 @@ } \cs_new:Npn \@@_set_split:w #1 \@@_set_split_end: { \@@_wrap_item:n {#1} } -\cs_generate_variant:Nn \seq_set_split:Nnn { NnV } -\cs_generate_variant:Nn \seq_gset_split:Nnn { NnV } +\cs_generate_variant:Nn \seq_set_split:Nnn { NV , NnV , NVV , Nnx , Nxx } +\cs_generate_variant:Nn \seq_gset_split:Nnn { NV , NnV , NVV , Nnx , Nxx } \cs_generate_variant:Nn \seq_set_split_keep_spaces:Nnn { NnV } \cs_generate_variant:Nn \seq_gset_split_keep_spaces:Nnn { NnV } % \end{macrocode} @@ -1499,9 +1513,17 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\seq_remove_all:Nn, \seq_remove_all:cn} +% \begin{macro} +% { +% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Nx, +% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:cx +% } % \UnitTested -% \begin{macro}{\seq_gremove_all:Nn, \seq_gremove_all:cn} +% \begin{macro} +% { +% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Nx, +% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:cx +% } % \UnitTested % \begin{macro}{\@@_remove_all_aux:NNn} % The idea of the code here is to avoid a relatively expensive addition of @@ -1542,8 +1564,8 @@ #1 #2 {#2} \@@_pop_item_def: } -\cs_generate_variant:Nn \seq_remove_all:Nn { c } -\cs_generate_variant:Nn \seq_gremove_all:Nn { c } +\cs_generate_variant:Nn \seq_remove_all:Nn { NV , Nx , c , cV , cx } +\cs_generate_variant:Nn \seq_gremove_all:Nn { NV , Nx , c , cV , cx } % \end{macrocode} % \end{macro} % \end{macro} @@ -2047,7 +2069,8 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\seq_item:Nn, \seq_item:cn} +% \begin{macro} +% {\seq_item:Nn, \seq_item:NV, \seq_item:Ne, \seq_item:cn, \seq_item:cV, \seq_item:ce} % \begin{macro}{\@@_item:wNn, \@@_item:nN, \@@_item:nwn} % The idea here is to find the offset of the item from the left, then use % a loop to grab the correct item. If the resulting offset is too large, @@ -2077,7 +2100,7 @@ { \prg_break:n { \exp_not:n {#3} } } { \exp_args:Nf \@@_item:nwn { \int_eval:n { #1 - 1 } } } } -\cs_generate_variant:Nn \seq_item:Nn { c } +\cs_generate_variant:Nn \seq_item:Nn { NV , Ne , c , cV , ce } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx index 35d380e58b..7ce22afb7e 100644 --- a/macros/latex/contrib/l3kernel/l3skip.dtx +++ b/macros/latex/contrib/l3kernel/l3skip.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx index 99efb3e9c2..b92eddbb35 100644 --- a/macros/latex/contrib/l3kernel/l3sort.dtx +++ b/macros/latex/contrib/l3kernel/l3sort.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx index 6bb0b39f85..6c0b2145e2 100644 --- a/macros/latex/contrib/l3kernel/l3str-convert.dtx +++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx index ed7e39d816..c2498436cb 100644 --- a/macros/latex/contrib/l3kernel/l3str.dtx +++ b/macros/latex/contrib/l3kernel/l3str.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -283,7 +283,10 @@ % \end{function} % % \begin{function}[added = 2013-07-24, updated = 2022-03-21, EXP, noTF] -% {\str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:nV, \str_case:nv} +% { +% \str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:en, +% \str_case:nV, \str_case:nv +% } % \begin{syntax} % \cs{str_case:nnTF} \Arg{test string} \\ % ~~|{| \\ @@ -1228,7 +1231,10 @@ % \end{macro} % % \begin{macro}[EXP, noTF] -% {\str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:nV, \str_case:nv, \str_case_e:nn} +% { +% \str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:en, \str_case:nV, \str_case:nv, +% \str_case_e:nn +% } % \begin{macro}[EXP]{\@@_case:nnTF, \@@_case_e:nnTF} % \begin{macro}[EXP] % {\@@_case:nw, \@@_case_e:nw, \@@_case_end:nw} @@ -1257,7 +1263,7 @@ } \cs_new:Npn \@@_case:nnTF #1#2#3#4 { \@@_case:nw {#1} #2 {#1} { } \s_@@_mark {#3} \s_@@_mark {#4} \s_@@_stop } -\cs_generate_variant:Nn \str_case:nn { V , o , nV , nv } +\cs_generate_variant:Nn \str_case:nn { V , o , e , nV , nv } \prg_generate_conditional_variant:Nnn \str_case:nn { V , o , nV , nv } { T , F , TF } \cs_new_eq:NN \str_case:Nn \str_case:Vn diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf Binary files differindex a8a44d7cfc..c3025741c6 100644 --- a/macros/latex/contrib/l3kernel/l3styleguide.pdf +++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex index dbb84004aa..d241392fb9 100644 --- a/macros/latex/contrib/l3kernel/l3styleguide.tex +++ b/macros/latex/contrib/l3kernel/l3styleguide.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2023-08-11} +\date{Released 2023-08-29} \begin{document} diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf Binary files differindex dbf641ceaf..ebc9bcab2a 100644 --- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf +++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex index 18a715e578..42e1b4c263 100644 --- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex +++ b/macros/latex/contrib/l3kernel/l3syntax-changes.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2023-08-11} +\date{Released 2023-08-29} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx index 5ff23b4775..5717e60e73 100644 --- a/macros/latex/contrib/l3kernel/l3sys.dtx +++ b/macros/latex/contrib/l3kernel/l3sys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -79,6 +79,11 @@ % \end{texnote} % \end{variable} % +% \begin{variable}[added = 2023-08-27]{\c_sys_timestamp_str} +% The timestamp for the current job: the format is as described for +% \cs{file_timestamp:n}. +% \end{variable} +% % \section{Engine} % % \begin{function}[added = 2015-09-07, EXP, pTF] @@ -928,6 +933,23 @@ end % \end{macrocode} % \end{variable} % +% \begin{variable}{\c_sys_timestamp_str} +% A simple expansion: Lua\TeX{} chokes if we use \tn{pdffeedback} here, +% hence the direct use of Lua. Notice that the function there is in the +% \texttt{pdf} library but isn actually tied to PDF. +% \begin{macrocode} +\@@_everyjob:n + { + \str_const:Nx \c_sys_timestamp_str + { + \cs_if_exist:NTF \tex_directlua:D + { \tex_directlua:D { tex.print(pdf.getcreationdate()) } } + { \tex_creationdate:D } + } + } +% \end{macrocode} +% \end{variable} +% % \subsubsection{Random numbers} % % \begin{macro}[EXP]{\sys_rand_seed:} diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf Binary files differindex 23f7fa7394..c34ddb6bd8 100644 --- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf +++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex index 9258e215a0..e0a5780cb8 100644 --- a/macros/latex/contrib/l3kernel/l3term-glossary.tex +++ b/macros/latex/contrib/l3kernel/l3term-glossary.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2023-08-11} +\date{Released 2023-08-29} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx index 245ea5b4fa..07a79e2bb0 100644 --- a/macros/latex/contrib/l3kernel/l3text-case.dtx +++ b/macros/latex/contrib/l3kernel/l3text-case.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3text-map.dtx b/macros/latex/contrib/l3kernel/l3text-map.dtx index 9d083adf04..b2372d446f 100644 --- a/macros/latex/contrib/l3kernel/l3text-map.dtx +++ b/macros/latex/contrib/l3kernel/l3text-map.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx index 450c5b748f..35d180d042 100644 --- a/macros/latex/contrib/l3kernel/l3text-purify.dtx +++ b/macros/latex/contrib/l3kernel/l3text-purify.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx index a946fad845..016c5579a1 100644 --- a/macros/latex/contrib/l3kernel/l3text.dtx +++ b/macros/latex/contrib/l3kernel/l3text.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx index 1a484457db..385b3db8ac 100644 --- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx +++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx index 08ed9216ef..06226fd7ba 100644 --- a/macros/latex/contrib/l3kernel/l3tl.dtx +++ b/macros/latex/contrib/l3kernel/l3tl.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -177,10 +177,10 @@ % % \begin{function} % { -% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:No, \tl_put_left:Nx, -% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:co, \tl_put_left:cx, -% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:No, \tl_gput_left:Nx, -% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:co, \tl_gput_left:cx +% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:No, \tl_put_left:Nx, +% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:co, \tl_put_left:cx, +% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:No, \tl_gput_left:Nx, +% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:co, \tl_gput_left:cx % } % \begin{syntax} % \cs{tl_put_left:Nn} \meta{tl~var} \Arg{tokens} @@ -191,12 +191,10 @@ % % \begin{function} % { -% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:No, \tl_put_right:Nx, -% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:co, \tl_put_right:cx, -% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:No, -% \tl_gput_right:Nx, -% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:co, -% \tl_gput_right:cx +% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:No, \tl_put_right:Nx, +% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:co, \tl_put_right:cx, +% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:No, \tl_gput_right:Nx, +% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:co, \tl_gput_right:cx % } % \begin{syntax} % \cs{tl_put_right:Nn} \meta{tl~var} \Arg{tokens} @@ -230,7 +228,7 @@ % \end{function} % % \begin{function}[added = 2012-05-24, updated = 2012-06-05, EXP,pTF] -% {\tl_if_empty:n, \tl_if_empty:V, \tl_if_empty:o} +% {\tl_if_empty:n, \tl_if_empty:V, \tl_if_empty:o, \tl_if_empty:e} % \begin{syntax} % \cs{tl_if_empty_p:n} \Arg{token list} % \cs{tl_if_empty:nTF} \Arg{token list} \Arg{true code} \Arg{false code} @@ -270,7 +268,8 @@ % category codes are not important. % \end{function} % -% \begin{function}[TF]{\tl_if_eq:nn} +% \begin{function}[TF] +% {\tl_if_eq:nn, \tl_if_eq:Vn, \tl_if_eq:nV, \tl_if_eq:xn, \tl_if_eq:nx} % \begin{syntax} % \cs{tl_if_eq:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code} % \end{syntax} @@ -281,7 +280,7 @@ % or \cs{str_if_eq:nnTF} if category codes are not important. % \end{function} % -% \begin{function}[TF]{\tl_if_in:Nn, \tl_if_in:cn} +% \begin{function}[TF]{\tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:cn, \tl_if_in:cV} % \begin{syntax} % \cs{tl_if_in:NnTF} \meta{tl~var} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} @@ -293,7 +292,7 @@ % \end{function} % % \begin{function}[TF] -% {\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:no} +% {\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:nV, \tl_if_in:on, \tl_if_in:no} % \begin{syntax} % \cs{tl_if_in:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code} % \end{syntax} @@ -438,7 +437,8 @@ % % \subsection{Using token lists} % -% \begin{function}[EXP]{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v} +% \begin{function}[EXP] +% {\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v, \tl_to_str:e} % \begin{syntax} % \cs{tl_to_str:n} \Arg{token list} % \end{syntax} @@ -536,7 +536,7 @@ % \end{function} % % \begin{function}[updated = 2012-01-08, EXP] -% {\tl_reverse:n, \tl_reverse:V, \tl_reverse:o} +% {\tl_reverse:n, \tl_reverse:V, \tl_reverse:o, \tl_reverse:f, \tl_reverse:e} % \begin{syntax} % \cs{tl_reverse:n} \Arg{token list} % \end{syntax} @@ -1073,10 +1073,14 @@ % % \begin{function}[updated = 2011-08-11] % { -% \tl_replace_once:Nnn, \tl_replace_once:Nxx, -% \tl_replace_once:cnn, \tl_replace_once:cxx, -% \tl_greplace_once:Nnn, \tl_greplace_once:Nxx -% \tl_greplace_once:cnn, \tl_greplace_once:cxx +% \tl_replace_once:Nnn, \tl_replace_once:NVn, \tl_replace_once:NnV, +% \tl_replace_once:Nxn, \tl_replace_once:Nnx, \tl_replace_once:Nxx, +% \tl_replace_once:cnn, \tl_replace_once:cVn, \tl_replace_once:cnV, +% \tl_replace_once:cxn, \tl_replace_once:cnx, \tl_replace_once:cxx, +% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_rgeplace_once:NnV, +% \tl_greplace_once:Nxn, \tl_greplace_once:Nnx, \tl_greplace_once:Nxx, +% \tl_greplace_once:cnn, \tl_greplace_once:cVn, \tl_greplace_once:cnV, +% \tl_greplace_once:cxn, \tl_greplace_once:cnx, \tl_greplace_once:cxx % } % \begin{syntax} % \cs{tl_replace_once:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens} @@ -1090,10 +1094,14 @@ % % \begin{function}[updated = 2011-08-11] % { -% \tl_replace_all:Nnn, \tl_replace_all:Nxx, -% \tl_replace_all:cnn, \tl_replace_all:cxx -% \tl_greplace_all:Nnn, \tl_greplace_all:Nxx, -% \tl_greplace_all:cnn, \tl_greplace_all:cxx +% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV, +% \tl_replace_all:Nxn, \tl_replace_all:Nnx, \tl_replace_all:Nxx, +% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV, +% \tl_replace_all:cxn, \tl_replace_all:cnx, \tl_replace_all:cxx, +% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:cnV, +% \tl_greplace_all:Nxn, \tl_greplace_all:Nnx, \tl_greplace_all:Nxx, +% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV, +% \tl_greplace_all:cxn, \tl_greplace_all:cnx, \tl_greplace_all:cxx % } % \begin{syntax} % \cs{tl_replace_all:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens} @@ -1111,10 +1119,10 @@ % % \begin{function}[updated = 2011-08-11] % { -% \tl_remove_once:Nn, \tl_remove_once:Nx, -% \tl_remove_once:cn, \tl_remove_once:cx, -% \tl_gremove_once:Nn, \tl_gremove_once:Nx -% \tl_gremove_once:cn, \tl_gremove_once:cx +% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Nx, +% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:cx, +% \tl_gremove_once:Nn, \tl_gremove_once:NV, \tl_gremove_once:Nx +% \tl_gremove_once:cn, \tl_gremove_once:cV, \tl_gremove_once:cx % } % \begin{syntax} % \cs{tl_remove_once:Nn} \meta{tl~var} \Arg{tokens} @@ -1127,10 +1135,10 @@ % % \begin{function}[updated = 2011-08-11] % { -% \tl_remove_all:Nn, \tl_remove_all:Nx, -% \tl_remove_all:cn, \tl_remove_all:cx, -% \tl_gremove_all:Nn, \tl_gremove_all:Nx -% \tl_gremove_all:cn, \tl_gremove_all:cx +% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Nx, +% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:cx, +% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Nx +% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:cx % } % \begin{syntax} % \cs{tl_remove_all:Nn} \meta{tl~var} \Arg{tokens} @@ -1161,10 +1169,10 @@ % % \begin{function}[updated = 2015-08-11] % { -% \tl_set_rescan:Nnn, \tl_set_rescan:Nno, \tl_set_rescan:Nnx, -% \tl_set_rescan:cnn, \tl_set_rescan:cno, \tl_set_rescan:cnx, -% \tl_gset_rescan:Nnn, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx, -% \tl_gset_rescan:cnn, \tl_gset_rescan:cno, \tl_gset_rescan:cnx +% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nno, \tl_set_rescan:Nnx, +% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cno, \tl_set_rescan:cnx, +% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx, +% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cno, \tl_gset_rescan:cnx % } % \begin{syntax} % \cs{tl_set_rescan:Nnn} \meta{tl~var} \Arg{setup} \Arg{tokens} @@ -1488,13 +1496,13 @@ % % \begin{macro} % { -% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:No, \tl_put_left:Nx, -% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:co, \tl_put_left:cx +% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:No, \tl_put_left:Nx, +% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:co, \tl_put_left:cx % } % \begin{macro} % { -% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:No, \tl_gput_left:Nx, -% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:co, \tl_gput_left:cx +% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:No, \tl_gput_left:Nx, +% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:co, \tl_gput_left:cx % } % Adding to the left is done directly to gain a little performance. % \begin{macrocode} @@ -1508,6 +1516,11 @@ \__kernel_tl_set:Nx #1 { \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} } } +\cs_new_protected:Npn \tl_put_left:Nv #1#2 + { + \__kernel_tl_set:Nx #1 + { \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} } + } \cs_new_protected:Npn \tl_put_left:No #1#2 { \__kernel_tl_set:Nx #1 @@ -1528,6 +1541,11 @@ \__kernel_tl_gset:Nx #1 { \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} } } +\cs_new_protected:Npn \tl_gput_left:Nv #1#2 + { + \__kernel_tl_gset:Nx #1 + { \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} } + } \cs_new_protected:Npn \tl_gput_left:No #1#2 { \__kernel_tl_gset:Nx #1 @@ -1540,10 +1558,12 @@ { \__kernel_tl_gset:Nx #1 { #2 \__kernel_exp_not:w \exp_after:wN {#1} } } \cs_generate_variant:Nn \tl_put_left:Nn { c } \cs_generate_variant:Nn \tl_put_left:NV { c } +\cs_generate_variant:Nn \tl_put_left:Nv { c } \cs_generate_variant:Nn \tl_put_left:No { c } \cs_generate_variant:Nn \tl_put_left:Nx { c } \cs_generate_variant:Nn \tl_gput_left:Nn { c } \cs_generate_variant:Nn \tl_gput_left:NV { c } +\cs_generate_variant:Nn \tl_gput_left:NV { c } \cs_generate_variant:Nn \tl_gput_left:No { c } \cs_generate_variant:Nn \tl_gput_left:Nx { c } % \end{macrocode} @@ -1552,14 +1572,14 @@ % % \begin{macro} % { -% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:No, \tl_put_right:Nx, -% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:co, \tl_put_right:cx +% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:No, \tl_put_right:Nx, +% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:co, \tl_put_right:cx % } % \begin{macro} % { -% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:No, +% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:No, % \tl_gput_right:Nx, -% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:co, +% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:co, % \tl_gput_right:cx % } % The same on the right. @@ -1571,6 +1591,11 @@ \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 } } +\cs_new_protected:Npn \tl_put_right:Nv #1#2 + { + \__kernel_tl_set:Nx #1 + { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} } + } \cs_new_protected:Npn \tl_put_right:No #1#2 { \__kernel_tl_set:Nx #1 @@ -1588,6 +1613,11 @@ \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 } } +\cs_new_protected:Npn \tl_gput_right:Nv #1#2 + { + \__kernel_tl_gset:Nx #1 + { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} } + } \cs_new_protected:Npn \tl_gput_right:No #1#2 { \__kernel_tl_gset:Nx #1 @@ -1600,10 +1630,12 @@ { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} #2 } } \cs_generate_variant:Nn \tl_put_right:Nn { c } \cs_generate_variant:Nn \tl_put_right:NV { c } +\cs_generate_variant:Nn \tl_put_right:Nv { c } \cs_generate_variant:Nn \tl_put_right:No { c } \cs_generate_variant:Nn \tl_put_right:Nx { c } \cs_generate_variant:Nn \tl_gput_right:Nn { c } \cs_generate_variant:Nn \tl_gput_right:NV { c } +\cs_generate_variant:Nn \tl_gput_right:Nv { c } \cs_generate_variant:Nn \tl_gput_right:No { c } \cs_generate_variant:Nn \tl_gput_right:Nx { c } % \end{macrocode} @@ -1653,13 +1685,13 @@ % % \begin{macro} % { -% \tl_set_rescan:Nnn, \tl_set_rescan:Nno, \tl_set_rescan:Nnx, -% \tl_set_rescan:cnn, \tl_set_rescan:cno, \tl_set_rescan:cnx +% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nno, \tl_set_rescan:Nnx, +% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cno, \tl_set_rescan:cnx % } % \begin{macro} % { -% \tl_gset_rescan:Nnn, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx, -% \tl_gset_rescan:cnn, \tl_gset_rescan:cno, \tl_gset_rescan:cnx +% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx, +% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cno, \tl_gset_rescan:cnx % } % \begin{macro}{\tl_rescan:nn, \tl_rescan:nV} % \begin{macro}{\@@_rescan_aux:} @@ -1758,10 +1790,10 @@ \group_end: #1 #2 {#3} } -\cs_generate_variant:Nn \tl_set_rescan:Nnn { Nno , Nnx } -\cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cno , cnx } -\cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nno , Nnx } -\cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cno } +\cs_generate_variant:Nn \tl_set_rescan:Nnn { NnV , Nno , Nnx } +\cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cnV , cno , cnx } +\cs_generate_variant:Nn \tl_gset_rescan:Nnn { NnV , Nno , Nnx } +\cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cnV , cno , cnx } % \end{macrocode} % \end{macro} % \end{macro} @@ -1879,10 +1911,34 @@ % % \subsection{Modifying token list variables} % -% \begin{macro}{\tl_replace_all:Nnn, \tl_replace_all:cnn} -% \begin{macro}{\tl_greplace_all:Nnn, \tl_greplace_all:cnn} -% \begin{macro}{\tl_replace_once:Nnn, \tl_replace_once:cnn} -% \begin{macro}{\tl_greplace_once:Nnn, \tl_greplace_once:cnn} +% \begin{macro} +% { +% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV, +% \tl_replace_all:Nxn, \tl_replace_all:Nnx, \tl_replace_all:Nxx, +% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV, +% \tl_replace_all:cxn, \tl_replace_all:cnx, \tl_replace_all:cxx +% } +% \begin{macro} +% { +% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:NnV, +% \tl_greplace_all:Nxn, \tl_greplace_all:Nnx, \tl_greplace_all:Nxx, +% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV, +% \tl_greplace_all:cxn, \tl_greplace_all:cnx, \tl_greplace_all:cxx +% } +% \begin{macro} +% { +% \tl_replace_once:Nnn, \tl_replace_once:NVn, \tl_replace_once:NnV, +% \tl_replace_once:Nxn, \tl_replace_once:Nnx, \tl_replace_once:Nxx, +% \tl_replace_once:cnn, \tl_replace_once:cVn, \tl_replace_once:cnV, +% \tl_replace_once:cxn, \tl_replace_once:cnx, \tl_replace_once:cxx +% } +% \begin{macro} +% { +% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_replace_once:NnV, +% \tl_greplace_once:Nxn, \tl_greplace_once:Nnx, \tl_greplace_once:Nxx, +% \tl_greplace_once:cnn, \tl_greplace_once:cVn, \tl_replace_once:cnV, +% \tl_greplace_once:cxn, \tl_greplace_once:cnx, \tl_greplace_once:cxx +% } % All of the \texttt{replace} functions call \cs{@@_replace:NnNNNnn} % with appropriate arguments. The first two arguments are explained % later. The next controls whether the replacement function calls @@ -1902,10 +1958,14 @@ { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_set:Nx } \cs_new_protected:Npn \tl_greplace_all:Nnn { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_gset:Nx } -\cs_generate_variant:Nn \tl_replace_once:Nnn { Nxx , c , cxx } -\cs_generate_variant:Nn \tl_greplace_once:Nnn { Nxx , c , cxx } -\cs_generate_variant:Nn \tl_replace_all:Nnn { Nxx , c , cxx } -\cs_generate_variant:Nn \tl_greplace_all:Nnn { Nxx , c , cxx } +\cs_generate_variant:Nn \tl_replace_once:Nnn + { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx } +\cs_generate_variant:Nn \tl_greplace_once:Nnn + { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx } +\cs_generate_variant:Nn \tl_replace_all:Nnn + { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx } +\cs_generate_variant:Nn \tl_greplace_all:Nnn + { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx } % \end{macrocode} % \end{macro} % \end{macro} @@ -2090,30 +2150,46 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\tl_remove_once:Nn, \tl_remove_once:cn} -% \begin{macro}{\tl_gremove_once:Nn, \tl_gremove_once:cn} +% \begin{macro} +% { +% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Nx, +% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:cx +% } +% \begin{macro} +% { +% \tl_gremove_once:Nn, \tl_gremove_once:NV, \tl_gremove_once:Nx, +% \tl_gremove_once:cn, \tl_gremove_once:cV, \tl_gremove_once:cx +% } % Removal is just a special case of replacement. % \begin{macrocode} \cs_new_protected:Npn \tl_remove_once:Nn #1#2 { \tl_replace_once:Nnn #1 {#2} { } } \cs_new_protected:Npn \tl_gremove_once:Nn #1#2 { \tl_greplace_once:Nnn #1 {#2} { } } -\cs_generate_variant:Nn \tl_remove_once:Nn { Nx , c , cx } -\cs_generate_variant:Nn \tl_gremove_once:Nn { Nx , c , cx } +\cs_generate_variant:Nn \tl_remove_once:Nn { NV , Nx , c , cV , cx } +\cs_generate_variant:Nn \tl_gremove_once:Nn { NV , Nx , c , cV , cx } % \end{macrocode} % \end{macro} % \end{macro} % -% \begin{macro}{\tl_remove_all:Nn, \tl_remove_all:cn} -% \begin{macro}{\tl_gremove_all:Nn, \tl_gremove_all:cn} +% \begin{macro} +% { +% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Nx, +% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:cx +% } +% \begin{macro} +% { +% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Nx, +% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:cx +% } % Removal is just a special case of replacement. % \begin{macrocode} \cs_new_protected:Npn \tl_remove_all:Nn #1#2 { \tl_replace_all:Nnn #1 {#2} { } } \cs_new_protected:Npn \tl_gremove_all:Nn #1#2 { \tl_greplace_all:Nnn #1 {#2} { } } -\cs_generate_variant:Nn \tl_remove_all:Nn { Nx , c , cx } -\cs_generate_variant:Nn \tl_gremove_all:Nn { Nx , c , cx } +\cs_generate_variant:Nn \tl_remove_all:Nn { NV , Nx , c , cV , cx } +\cs_generate_variant:Nn \tl_gremove_all:Nn { NV , Nx , c , cV , cx } % \end{macrocode} % \end{macro} % \end{macro} @@ -2137,7 +2213,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}[pTF]{\tl_if_empty:n, \tl_if_empty:V} +% \begin{macro}[pTF]{\tl_if_empty:n, \tl_if_empty:V, \tl_if_empty:e} % The \cs{if:w} triggers the expansion of \cs{tl_to_str:n} which converts the % argument to a string: this is empty if and only if the argument is. Then % |\if:w \scan_stop: ... \scan_stop:| is \texttt{true} if and only if the @@ -2155,7 +2231,7 @@ \fi: } \prg_generate_conditional_variant:Nnn \tl_if_empty:n - { V } { p , TF , T , F } + { V , e } { p , TF , T , F } % \end{macrocode} % \end{macro} % @@ -2252,7 +2328,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}[TF]{\tl_if_eq:nn} +% \begin{macro}[TF]{\tl_if_eq:nn, \tl_if_eq:Vn, \tl_if_eq:nV, \tl_if_eq:xn, \tl_if_eq:nx} % A simple store and compare routine. % \begin{macrocode} \prg_new_protected_conditional:Npnn \tl_if_eq:nn #1#2 { T , F , TF } @@ -2268,10 +2344,11 @@ \prg_return_false: \fi: } +\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { V , nV , x , nx } { TF , T , F } % \end{macrocode} % \end{macro} % -% \begin{macro}[TF]{\tl_if_in:Nn, \tl_if_in:cn} +% \begin{macro}[TF]{\tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:cn, \tl_if_in:cV} % See \cs{tl_if_in:nnTF} for further comments. Here we simply % expand the token list variable and pass it to \cs{tl_if_in:nnTF}. % \begin{macrocode} @@ -2279,11 +2356,11 @@ \cs_new_protected:Npn \tl_if_in:NnF { \exp_args:No \tl_if_in:nnF } \cs_new_protected:Npn \tl_if_in:NnTF { \exp_args:No \tl_if_in:nnTF } \prg_generate_conditional_variant:Nnn \tl_if_in:Nn - { c } { T , F , TF } + { NV , c , cV } { T , F , TF } % \end{macrocode} % \end{macro} % -% \begin{macro}[TF]{\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:no} +% \begin{macro}[TF]{\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:nV, \tl_if_in:no} % Once more, the test relies on the emptiness test for robustness. % The function \cs{@@_tmp:w} removes tokens until the first occurrence % of |#2|. If this does not appear in |#1|, then the final |#2| is removed, @@ -2313,7 +2390,7 @@ \if_false: } \fi: } \prg_generate_conditional_variant:Nnn \tl_if_in:nn - { V , o , no } { T , F , TF } + { V , o , nV , no } { T , F , TF } % \end{macrocode} % \end{macro} % @@ -2557,10 +2634,10 @@ % % \subsection{Using token lists} % -% \begin{macro}{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v} +% \begin{macro}{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v, \tl_to_str:e} % Another name for a primitive: defined in \pkg{l3basics}. % \begin{macrocode} -\cs_generate_variant:Nn \tl_to_str:n { o , V , v } +\cs_generate_variant:Nn \tl_to_str:n { o , V , v , e } % \end{macrocode} % \end{macro} % @@ -3228,7 +3305,8 @@ % \end{macro} % \end{macro} % -% \begin{macro}[EXP]{\tl_reverse:n, \tl_reverse:o, \tl_reverse:V} +% \begin{macro}[EXP] +% {\tl_reverse:n, \tl_reverse:o, \tl_reverse:V, \tl_reverse:f, \tl_reverse:e} % \begin{macro}[EXP]{\@@_reverse_normal:nN} % \begin{macro}[EXP]{\@@_reverse_group_preserve:nn} % \begin{macro}[EXP]{\@@_reverse_space:n} @@ -3250,7 +3328,7 @@ {#1} } } -\cs_generate_variant:Nn \tl_reverse:n { o , V } +\cs_generate_variant:Nn \tl_reverse:n { o , V , f , e } \cs_new:Npn \@@_reverse_normal:N { \@@_act_reverse_output:n } \cs_new:Npn \@@_reverse_group_preserve:n #1 diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx index 832205cd70..ce274f9583 100644 --- a/macros/latex/contrib/l3kernel/l3token.dtx +++ b/macros/latex/contrib/l3kernel/l3token.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % @@ -1603,6 +1603,7 @@ \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: } \char_set_catcode_letter:n { 0 } \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: } +% \end{macrocode} % For making spaces, there needs to be an |o|-type expansion of a |\use:n| % (or some other tokenization) to avoid dropping the space. % \begin{macrocode} diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx index dc95aad698..f79fc63e5a 100644 --- a/macros/latex/contrib/l3kernel/l3unicode.dtx +++ b/macros/latex/contrib/l3kernel/l3unicode.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-11} +% \date{Released 2023-08-29} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf Binary files differindex 31040f07f5..458c832be3 100644 --- a/macros/latex/contrib/l3kernel/source3.pdf +++ b/macros/latex/contrib/l3kernel/source3.pdf diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex index 97bb54971a..ee6efdcc7a 100644 --- a/macros/latex/contrib/l3kernel/source3.tex +++ b/macros/latex/contrib/l3kernel/source3.tex @@ -53,7 +53,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2023-08-11} +\date{Released 2023-08-29} \pagenumbering{roman} \maketitle diff --git a/macros/latex/contrib/l3packages/CHANGELOG.md b/macros/latex/contrib/l3packages/CHANGELOG.md index b82dd0c198..de080e8d41 100644 --- a/macros/latex/contrib/l3packages/CHANGELOG.md +++ b/macros/latex/contrib/l3packages/CHANGELOG.md @@ -7,6 +7,10 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2023-08-29] + +- Re-add `\GetDocumentCommandArgSpec`, etc., to `xparse` stub + ## [2023-02-02] ### Changed @@ -227,7 +231,8 @@ this project uses date-based 'snapshot' version identifiers. - Switch to ISO date format - Improve cross-module use of internal functions -[Unreleased]: https://github.com/latex3/latex3/compare/2023-02-02...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2023-08-29...HEAD +[2023-08-29]: https://github.com/latex3/latex3/compare/2023-02-02...2023-08-29 [2023-02-02]: https://github.com/latex3/latex3/compare/2023-02-01...2023-02-02 [2023-02-01]: https://github.com/latex3/latex3/compare/2023-01-16...2023-02-01 [2023-01-16]: https://github.com/latex3/latex3/compare/2022-12-17...2023-01-16 diff --git a/macros/latex/contrib/l3packages/README.md b/macros/latex/contrib/l3packages/README.md index 1fad88a499..e1f195b332 100644 --- a/macros/latex/contrib/l3packages/README.md +++ b/macros/latex/contrib/l3packages/README.md @@ -1,7 +1,7 @@ LaTeX3 High-Level Concepts ========================== -Release 2023-02-02 +Release 2023-08-29 Overview -------- @@ -34,7 +34,7 @@ and class options with LaTeX2e. This is tied to the method the existing kernel uses for processing options, and so it is likely that a stand-alone LaTeX3 kernel will use a very different approach. -`xfp` +`xfp` (deprecated) ----- The `xfp` package provides a document-level interface for the LaTeX3 @@ -42,7 +42,8 @@ FPU. As such, it is a wrapper around the core `\fp_eval:n` function but does not require code syntax. It provides the expandable command `\fpeval`, which can be used inside for example `\edef` or contexts where TeX requires a number. -From 2022-06-01 release if LaTeX this will be included in the format + +From 2022-06-01 release of LaTeX this will be included in the format so that the package doesn't need loading any longer. `xfrac` @@ -73,20 +74,6 @@ functions using a key=val syntax. This is designed to be "self-documenting", with the key definitions providing information on how they are to be used. -Discussion ----------- - -Discussion concerning the approach, suggestions for improvements, -changes, additions, _etc._ should be addressed to the list -[LaTeX-L](https://listserv.uni-heidelberg.de/cgi-bin/wa?A0=LATEX-L). - -You can subscribe to this list by sending mail to - - listserv@urz.uni-heidelberg.de - -with the body containing - - subscribe LATEX-L <Your-First-Name> <Your-Second-Name> Issues ------ @@ -94,8 +81,6 @@ Issues The issue tracker for LaTeX3 is currently located [on GitHub](https://github.com/latex3/latex3/issues). -Please report specific issues with LaTeX3 code there; more general -discussion should be directed to the [LaTeX-L list](#Discussion). The LaTeX Project ------------------ diff --git a/macros/latex/contrib/l3packages/l3keys2e.dtx b/macros/latex/contrib/l3packages/l3keys2e.dtx index 2cd7f89e10..13fd652eaa 100644 --- a/macros/latex/contrib/l3packages/l3keys2e.dtx +++ b/macros/latex/contrib/l3packages/l3keys2e.dtx @@ -62,7 +62,7 @@ % }^^A % } % -% \date{Released 2023-02-02} +% \date{Released 2023-08-29} % % \maketitle % @@ -143,7 +143,7 @@ % %\begin{implementation} % -%\subsection{\pkg{l3keys2e} Implementation} +%\subsection{\pkg{l3keys2e} implementation} % % \begin{macrocode} %<*package> @@ -154,7 +154,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3keys2e}{2023-02-02}{} +\ProvidesExplPackage{l3keys2e}{2023-08-29}{} {LaTeX2e option processing using LaTeX3 keys} % \end{macrocode} % diff --git a/macros/latex/contrib/l3packages/l3keys2e.pdf b/macros/latex/contrib/l3packages/l3keys2e.pdf Binary files differindex 674d39db04..754439a4ca 100644 --- a/macros/latex/contrib/l3packages/l3keys2e.pdf +++ b/macros/latex/contrib/l3packages/l3keys2e.pdf diff --git a/macros/latex/contrib/l3packages/xfp.dtx b/macros/latex/contrib/l3packages/xfp.dtx index c2d14aadff..44fccd9271 100644 --- a/macros/latex/contrib/l3packages/xfp.dtx +++ b/macros/latex/contrib/l3packages/xfp.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2023-02-02} +% \date{Released 2023-08-29} % % \maketitle % @@ -171,7 +171,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfp}{2023-02-02}{} +\ProvidesExplPackage{xfp}{2023-08-29}{} {L3 Floating point unit} % \end{macrocode} % diff --git a/macros/latex/contrib/l3packages/xfp.pdf b/macros/latex/contrib/l3packages/xfp.pdf Binary files differindex f68a2b225d..be5ed0387f 100644 --- a/macros/latex/contrib/l3packages/xfp.pdf +++ b/macros/latex/contrib/l3packages/xfp.pdf diff --git a/macros/latex/contrib/l3packages/xfrac.dtx b/macros/latex/contrib/l3packages/xfrac.dtx index e12131e9e0..70981e871a 100644 --- a/macros/latex/contrib/l3packages/xfrac.dtx +++ b/macros/latex/contrib/l3packages/xfrac.dtx @@ -65,7 +65,7 @@ % }^^A % } % -% \date{Released 2023-02-02} +% \date{Released 2023-08-29} % % \maketitle % @@ -524,7 +524,7 @@ % % \begin{implementation} % -% \section{\pkg{xfrac} Implementation} +% \section{\pkg{xfrac} implementation} % % \begin{macrocode} %<*package> @@ -535,7 +535,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfrac}{2023-02-02}{} +\ProvidesExplPackage{xfrac}{2023-08-29}{} {L3 Experimental split-level fractions} % \end{macrocode} % diff --git a/macros/latex/contrib/l3packages/xfrac.pdf b/macros/latex/contrib/l3packages/xfrac.pdf Binary files differindex 961c5b052e..7b124a040f 100644 --- a/macros/latex/contrib/l3packages/xfrac.pdf +++ b/macros/latex/contrib/l3packages/xfrac.pdf diff --git a/macros/latex/contrib/l3packages/xparse.dtx b/macros/latex/contrib/l3packages/xparse.dtx index b5adb20dae..72a31e6871 100644 --- a/macros/latex/contrib/l3packages/xparse.dtx +++ b/macros/latex/contrib/l3packages/xparse.dtx @@ -67,7 +67,7 @@ % }^^A % } % -% \date{Released 2023-02-02} +% \date{Released 2023-08-29} % % \maketitle % @@ -1064,7 +1064,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xparse}{2023-02-02}{} +\ProvidesExplPackage{xparse}{2023-08-29}{} {L3 Experimental document command parser} % \end{macrocode} % @@ -1380,6 +1380,149 @@ % \end{macrocode} % \end{macro} % +% \subsection{Access to the argument specification} +% +% At one point this was included in the kernel, so we have to use +% \texttt{gset} (or similar) throughout this subsection. +% +% \begin{macro}{\@@_get_arg_spec_error:N, \@@_get_arg_spec_error:n} +% \begin{macro}{\@@_get_arg_spec_error_aux:n} +% Provide an informative error when trying to get the argument +% specification of a non-\pkg{xparse} command or environment. +% \begin{macrocode} +\cs_gset_protected:Npn \@@_get_arg_spec_error:N #1 + { + \bool_set_false:N \l_@@_environment_bool + \tl_set:Nn \l_@@_fn_tl {#1} + \@@_get_arg_spec_error_aux:n { \cs_if_exist:NTF #1 } + } +\cs_gset_protected:Npn \@@_get_arg_spec_error:n #1 + { + \bool_set_true:N \l_@@_environment_bool + \str_set:Nx \l_@@_environment_str {#1} + \@@_get_arg_spec_error_aux:n + { \cs_if_exist:cTF { \l_@@_environment_str } } + } +\cs_gset_protected:Npn \@@_get_arg_spec_error_aux:n #1 + { + #1 + { + \msg_error:nnx { cmd } { non-xparse } + { \@@_environment_or_command: } + } + { + \msg_error:nnx { cmd } { unknown } + { \@@_environment_or_command: } + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@_get_arg_spec:NTF} +% If the command is not an \pkg{xparse} command, complain. If it is, +% its second \enquote{item} is the argument specification. +% \begin{macrocode} +\cs_gset_protected:Npn \@@_get_arg_spec:NTF #1#2#3 + { + \__kernel_cmd_if_xparse:NTF #1 + { + \tl_set:Nx \ArgumentSpecification { \tl_item:Nn #1 { 2 } } + #2 + } + {#3} + } +% \end{macrocode} +% \end{macro} +% +% \begin{variable}{\ArgumentSpecification} +% \begin{macrocode} +\tl_clear_new:N \ArgumentSpecification +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\@@_get_arg_spec:N} +% \begin{macro}{\@@_get_arg_spec:n} +% Recovering the argument specification is now trivial. +% \begin{macrocode} +\cs_gset_protected:Npn \@@_get_arg_spec:N #1 + { + \@@_get_arg_spec:NTF #1 { } + { \@@_get_arg_spec_error:N #1 } + } +\cs_gset_protected:Npn \@@_get_arg_spec:n #1 + { + \exp_args:Nc \@@_get_arg_spec:NTF + { environment~ \tl_to_str:n {#1} } + { } + { \@@_get_arg_spec_error:n {#1} } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@_show_arg_spec:N} +% \begin{macro}{\@@_show_arg_spec:n} +% Showing the argument specification simply means finding it and then +% calling the \cs{tl_show:N} function. +% \begin{macrocode} +\cs_gset_protected:Npn \@@_show_arg_spec:N #1 + { + \@@_get_arg_spec:NTF #1 + { \tl_show:N \ArgumentSpecification } + { \@@_get_arg_spec_error:N #1 } + } +\cs_gset_protected:Npn \@@_show_arg_spec:n #1 + { + \exp_args:Nc \@@_get_arg_spec:NTF + { environment~ \tl_to_str:n {#1} } + { \tl_show:N \ArgumentSpecification } + { \@@_get_arg_spec_error:n {#1} } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\GetDocumentCommandArgSpec} +% \begin{macro}{\GetDocumentEnvironmentArgSpec} +% \begin{macro}{\ShowDocumentCommandArgSpec} +% \begin{macro}{\ShowDocumentEnvironmentArgSpec} +% Simple mappings, with a check that the argument is a single +% control sequence or active character. +% \begin{macrocode} +\cs_gset_protected:Npn \GetDocumentCommandArgSpec #1 + { + \@@_check_definable:nNT {#1} \GetDocumentCommandArgSpec + { \@@_get_arg_spec:N #1 } + } +\cs_gset_eq:NN \GetDocumentEnvironmentArgSpec \@@_get_arg_spec:n +\cs_gset_protected:Npn \ShowDocumentCommandArgSpec #1 + { + \@@_check_definable:nNT {#1} \ShowDocumentCommandArgSpec + { \@@_show_arg_spec:N #1 } + } +\cs_gset_eq:NN \ShowDocumentEnvironmentArgSpec \@@_show_arg_spec:n +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +\msg_set:nnnn { cmd } { non-xparse } + { \str_uppercase:n #1~not~defined~using~xparse. } + { + You~have~asked~for~the~argument~specification~for~the~#1,~ + but~this~was~not~defined~using~xparse. + } +\msg_set:nnnn { cmd } { unknown } + { Unknown~document~#1. } + { + You~have~asked~for~the~argument~specification~for~the~#1,~ + but~it~is~not~defined. + } +% \end{macrocode} +% % \begin{macrocode} %</package> % \end{macrocode} diff --git a/macros/latex/contrib/l3packages/xparse.pdf b/macros/latex/contrib/l3packages/xparse.pdf Binary files differindex 6e009e3cd4..dffaa1ae59 100644 --- a/macros/latex/contrib/l3packages/xparse.pdf +++ b/macros/latex/contrib/l3packages/xparse.pdf diff --git a/macros/latex/contrib/l3packages/xtemplate.dtx b/macros/latex/contrib/l3packages/xtemplate.dtx index 86b6ecc14a..8386be5d98 100644 --- a/macros/latex/contrib/l3packages/xtemplate.dtx +++ b/macros/latex/contrib/l3packages/xtemplate.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2023-02-02} +% \date{Released 2023-08-29} % % \maketitle % @@ -700,7 +700,7 @@ % % \begin{implementation} % -% \section{\pkg{xtemplate} Implementation} +% \section{\pkg{xtemplate} implementation} % % \begin{macrocode} %<*package> @@ -711,7 +711,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xtemplate}{2023-02-02}{} +\ProvidesExplPackage{xtemplate}{2023-08-29}{} {L3 Experimental prototype document functions} % \end{macrocode} % diff --git a/macros/latex/contrib/l3packages/xtemplate.pdf b/macros/latex/contrib/l3packages/xtemplate.pdf Binary files differindex fbac0e820e..31258f27de 100644 --- a/macros/latex/contrib/l3packages/xtemplate.pdf +++ b/macros/latex/contrib/l3packages/xtemplate.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md index edbe215b55..a507ced869 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md +++ b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md @@ -5,7 +5,15 @@ first release 0.95a, 2021-02-23 will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), this project uses date-based 'snapshot' version identifiers. +## [2023-08-29] + +### Changed + - a SOURCE_DATE_EPOCH setting is honored. This requires a l3backend version from XXXX + - \pdfmeta_set_regression_data: not longer sets dates manually, but expects that if + SOURCE_DATE_EPOCH is honored that it is used. + ## [2023-08-20] +Version: 2023-08-20, 0.95y ### Added - l3pdftools: \pdf_bdc_shipout:ee which makes use of the new shipout keyword diff --git a/macros/latex/contrib/pdfmanagement-testphase/README.md b/macros/latex/contrib/pdfmanagement-testphase/README.md index 0642ac06b9..f512b294d6 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/README.md +++ b/macros/latex/contrib/pdfmanagement-testphase/README.md @@ -1,6 +1,6 @@ # LaTeX PDF management testphase bundle -Version: 0.95y, 2023-08-20 +Version: 0.95z, 2023-08-29 This package is used during a test phase to load the new PDF management code of LaTeX. diff --git a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty index 53218fe6aa..ff7305d34b 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty @@ -24,7 +24,7 @@ %% This file has the LPPL maintenance status "maintained". %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{color-ltx}[2023-08-20 v0.95y +\ProvidesPackage{color-ltx}[2023-08-29 v0.95z Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2022/01/06 v1.3d) (DPC)] \edef\Gin@codes{% \catcode`\noexpand\^^A\the\catcode`\^^A\relax diff --git a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty index 698922d100..fc7f93841b 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty @@ -19,7 +19,7 @@ % % for those people who are interested. \NeedsTeXFormat{LaTeX2e}[2020/10/01] -\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-08-20}{0.95y} +\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-08-29}{0.95z} {temporay patches to for the colorspace package to test pdfresource management ... UF} % colorspace can define more models, that l3color can't yet handle. diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx index a0eff9a0db..4d68f49b6d 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx @@ -82,7 +82,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -956,7 +956,7 @@ %<@@=hyp> % \end{macrocode} % \begin{macrocode} -\ProvidesFile{hgeneric-testphase.def}[2023-08-20 v0.95y % +\ProvidesFile{hgeneric-testphase.def}[2023-08-29 v0.95z % generic Hyperref driver for the LaTeX PDF management testphase bundle] \RequirePackage{etoolbox} %why? diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf Binary files differindex d9133bcfaa..c640c4c15c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx index da0aa971fd..ebf9ede282 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx @@ -45,7 +45,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % @@ -56,27 +56,27 @@ % \begin{macrocode} %<drivers>\ProvidesExplFile %<*dvipdfmx> - {l3backend-testphase-dvipdfmx.def}{2023-08-20}{} + {l3backend-testphase-dvipdfmx.def}{2023-08-29}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx} %</dvipdfmx> %<*dvips> - {l3backend-testphase-dvips.def}{2023-08-20}{} + {l3backend-testphase-dvips.def}{2023-08-29}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvips} %</dvips> %<*dvisvgm> - {l3backend-testphase-dvisvgm.def}{2023-08-20}{} + {l3backend-testphase-dvisvgm.def}{2023-08-29}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm} %</dvisvgm> %<*luatex> - {l3backend-testphase-luatex.def}{2023-08-20}{} + {l3backend-testphase-luatex.def}{2023-08-29}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)} %</luatex> %<*pdftex> - {l3backend-testphase-pdftex.def}{2023-08-20}{} + {l3backend-testphase-pdftex.def}{2023-08-29}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)} %</pdftex> %<*xdvipdfmx> - {l3backend-testphase-xetex.def}{2023-08-20}{} + {l3backend-testphase-xetex.def}{2023-08-29}{} {LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX} %</xdvipdfmx> % \end{macrocode} @@ -2084,6 +2084,15 @@ \AddToHook{begindocument}{\pdfmanagement_add:nnn{Info}{Producer}{(pdfTeX+dvips)}} \__kernel_backend_literal:e{!~<</DocumentUUID~(DocumentUUID)>>~setpagedevice} \__kernel_backend_literal:e{!~<</InstanceUUID~(InstanceUUID)>>~setpagedevice} + \str_if_exist:NTF\c_sys_timestamp_str + { + \pdfmanagement_add:nnx{Info}{CreationDate}{(\c_sys_timestamp_str)} + \pdfmanagement_add:nnx{Info}{ModDate}{(\c_sys_timestamp_str)} + } + { + \pdfmanagement_add:nnn{Info}{CreationDate}{(D:20010101205959-00'00')} + \pdfmanagement_add:nnn{Info}{ModDate}{(D:20010101205959-00'00')} + } %</dvips> %<*dvipdfmx> \pdfmanagement_add:nnn{Info}{Producer}{(dvipdfmx)} @@ -2116,12 +2125,15 @@ ]} %</luatex> %<*drivers> - \pdfmanagement_add:nnn{Info}{CreationDate}{(D:20010101205959-00'00')} - \pdfmanagement_add:nnn{Info}{ModDate}{(D:20010101205959-00'00')} - \AddToDocumentProperties[document]{creationdate}{D:20010101205959-00'00'} - \AddToDocumentProperties[document]{moddate}{D:20010101205959-00'00'} - \AddToDocumentProperties[hyperref]{pdfmetadate}{D:20010101205959-00'00'} - \AddToDocumentProperties[hyperref]{pdfdate}{D:20010101205959-00'00'} + \str_if_exist:NF\c_sys_timestamp_str + { + \pdfmanagement_add:nnn{Info}{CreationDate}{(D:20010101205959-00'00')} + \pdfmanagement_add:nnn{Info}{ModDate}{(D:20010101205959-00'00')} + \AddToDocumentProperties[document]{creationdate}{D:20010101205959-00'00'} + \AddToDocumentProperties[document]{moddate}{D:20010101205959-00'00'} + \AddToDocumentProperties[hyperref]{pdfmetadate}{D:20010101205959-00'00'} + \AddToDocumentProperties[hyperref]{pdfdate}{D:20010101205959-00'00'} + } \AddToDocumentProperties[hyperref]{pdfinstanceid}{uuid:0a57c455-157a-4141-8c19-6237d832fc80} \AddToDocumentProperties[hyperref]{pdfproducer}{\c_sys_engine_exec_str-NN.NN.NN} } diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf Binary files differindex cb9604b4b4..0149e6d72f 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx index 15e5bdc9b4..b3076aaf26 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -432,7 +432,7 @@ % \begin{macrocode} %<@@=pdfannot> %<*header> -\ProvidesExplPackage{l3pdfannot}{2023-08-20}{0.95y} +\ProvidesExplPackage{l3pdfannot}{2023-08-29}{0.95z} {PDF-annotations} \RequirePackage{l3pdfdict} %</header> diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf Binary files differindex 2df2bd9043..bad7119c10 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx index 7b8eb4d5d8..ed7406fe1c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -208,7 +208,7 @@ % \begin{macrocode} %<@@=pdfdict> %<*header> -\ProvidesExplPackage{l3pdfdict}{2023-08-20}{0.95y} +\ProvidesExplPackage{l3pdfdict}{2023-08-29}{0.95z} {Tools for PDF dictionaries (LaTeX PDF management testphase bundle)} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf Binary files differindex d3cd1dad08..d8bc405fbe 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx index bce57aac58..0479ecdae5 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf Binary files differindex c6ece9e4e1..be1e521cc0 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx index 9ece0e36e0..9421dac34a 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx @@ -64,7 +64,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf Binary files differindex a213e7ef34..603d83c9f8 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx index e73bb073ff..69858349ff 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf Binary files differindex 976ddb1bda..f73e10a44d 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx index ac43173242..ad43c11bb5 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx @@ -55,7 +55,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf Binary files differindex e6f6dffc75..908fe64652 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx index 19a9f91425..b9737a39c1 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx @@ -83,7 +83,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf Binary files differindex ec6f6f9077..8516331911 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx index 3b82017300..e8fe7cb11c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf Binary files differindex da290f2e24..8b58cee341 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx index bc570f29e8..fa5e3dade4 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx @@ -69,7 +69,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -972,7 +972,7 @@ %<*package> %<@@=pdffield> \NeedsTeXFormat{LaTeX2e} -\ProvidesExplPackage{l3pdffield-testphase}{2023-08-20}{0.95y}% +\ProvidesExplPackage{l3pdffield-testphase}{2023-08-29}{0.95z}% {form fields} % \end{macrocode} % \subsection{hyperref specific command} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf Binary files differindex 4e1abae41e..370b92c1f4 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx index 6642eb3024..b55f0a3710 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -398,7 +398,7 @@ % % \begin{macrocode} %<*header> -\ProvidesExplPackage{l3pdffile}{2023-08-20}{0.95y} +\ProvidesExplPackage{l3pdffile}{2023-08-29}{0.95z} {embedding and referencing files in PDF---LaTeX PDF management testphase bundle} \RequirePackage{l3pdftools} %temporarly!! %</header> diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf Binary files differindex 4f7c9df5bc..61075ae365 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx index d7e5dcc346..377178a516 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx @@ -57,7 +57,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -632,7 +632,7 @@ %<@@=pdfmanagement> %<*header> % -\ProvidesExplPackage{l3pdfmanagement}{2023-08-20}{0.95y} +\ProvidesExplPackage{l3pdfmanagement}{2023-08-29}{0.95z} {Management of core PDF dictionaries (LaTeX PDF management testphase bundle)} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf Binary files differindex 24350d7fc1..cf7efbed96 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx index d3e88eeb31..cc9430e5e2 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -349,6 +349,9 @@ % This sets various metadata to values needed by the \LaTeX{} % regression tests. % It also sets the seed for random functions. +% If a current l3backend is used and \cs{c_sys_timestamp_str} is available, +% the command does not set dates, but +% assumes that the environment variable \verb+SOURCE_DATE_EPOCH+ is used. % \end{function} % % \section{XMP-metadata} @@ -563,7 +566,7 @@ % \begin{macrocode} %<@@=pdfmeta> %<*header> -\ProvidesExplPackage{l3pdfmeta}{2023-08-20}{0.95y} +\ProvidesExplPackage{l3pdfmeta}{2023-08-29}{0.95z} {PDF-Standards---LaTeX PDF management testphase bundle} %</header> % \end{macrocode} @@ -1996,13 +1999,13 @@ {publicationName} {Text} {external} - {Publication name} + {Publication~name} \@@_xmp_property_new:nnnnn {prism} {aggregationType} {Text} {external} - {Publication type} + {Publication~type} \@@_xmp_property_new:nnnnn {prism} {bookEdition} @@ -2044,7 +2047,7 @@ {isbn} {Text} {external} - {ISBN for the publication in which the document was published} + {ISBN~for~the~publication~in~which~the~document~was~published} \@@_xmp_property_new:nnnnn {prism} {doi} @@ -2074,7 +2077,7 @@ {subtitle} {Text} {external} - {Document's subtitle} + {Document's~subtitle} % \end{macrocode} % \end{macro} % \item[iptc] @@ -2585,7 +2588,13 @@ { \bool_if:NT\g_@@_xmp_bool { - \file_get_timestamp:nN{\jobname.log}\l_@@_xmp_currentdate_tl + \str_if_exist:NTF\c_sys_timestamp_str + { + \tl_set_eq:NN \l_@@_xmp_currentdate_tl \c_sys_timestamp_str + } + { + \file_get_timestamp:nN{\jobname.log}\l_@@_xmp_currentdate_tl + } \@@_xmp_date_split:VN\l_@@_xmp_currentdate_tl\l_@@_xmp_currentdate_seq \@@_xmp_build_packet: \exp_args:No diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf Binary files differindex 8b585d669a..8cd52b4dbf 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx index 9f1ddc8e78..c403d50ffc 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -231,7 +231,7 @@ % % \begin{macrocode} %<*header> -\ProvidesExplPackage{l3pdftools}{2023-08-20}{0.95y} +\ProvidesExplPackage{l3pdftools}{2023-08-29}{0.95z} {candidate commands for l3pdf---LaTeX PDF management testphase bundle} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf Binary files differindex 5dd3e36004..b08cd7c6ae 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx index d9271f3523..bb3ae298cb 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -132,7 +132,7 @@ % \begin{macrocode} %<@@=pdf> %<*header> -\ProvidesExplPackage{l3pdfxform}{2023-08-20}{0.95y} +\ProvidesExplPackage{l3pdfxform}{2023-08-29}{0.95z} {command to create xforms (beta)---LaTeX PDF management testphase bundle} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf Binary files differindex aa8d8e18b5..306c2f34e6 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx index 63ce91e990..37dfc04cc2 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -220,7 +220,7 @@ % \begin{macrocode} %<@@=pdfmanagement> %<*header> -\ProvidesExplPackage{ltdocinit}{2023-08-20}{0.95y} +\ProvidesExplPackage{ltdocinit}{2023-08-29}{0.95z} {Initialize document metadata} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf Binary files differindex 19cf28e478..63ad14c84e 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf b/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf Binary files differnew file mode 100644 index 0000000000..dc8d376f76 --- /dev/null +++ b/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx index 3a7dee37b0..a64f84cc72 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -63,7 +63,7 @@ % |debug={firstaidoff={name1,name2,...},...}|. % \begin{macrocode} %<*package> -\ProvidesExplPackage{pdfmanagement-firstaid}{2023-08-20}{0.95y} +\ProvidesExplPackage{pdfmanagement-firstaid}{2023-08-29}{0.95z} {LaTeX PDF management testphase bundle / firstaid-patches} %<@@=pdfmanagement> diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf Binary files differindex d9a5a53bf5..1138f50d57 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx index 8085bbc5df..6208eaa379 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95y, released 2023-08-20} +% \date{Version 0.95z, released 2023-08-29} % % \maketitle % \begin{documentation} @@ -395,7 +395,7 @@ % \begin{macrocode} %<@@=pdf> %<*package> -\ProvidesExplPackage{pdfmanagement-testphase}{2023-08-20}{0.95y} +\ProvidesExplPackage{pdfmanagement-testphase}{2023-08-29}{0.95z} {LaTeX PDF management testphase bundle} \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} \IfFormatAtLeastTF{2020-10-01}{}{ @@ -423,7 +423,7 @@ % to allow to set it in the document. % \begin{macrocode} %<*header> -\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-08-20}{0.95y} +\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-08-29}{0.95z} {PDF~management~code~(testphase)} % \end{macrocode} % We define a boolean for the new delayed shipout. This is temporary. At some diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf Binary files differindex 42536d3849..f57b489f4e 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/update-metadata.txt b/macros/latex/contrib/pdfmanagement-testphase/update-metadata.txt new file mode 100644 index 0000000000..2a172b29cd --- /dev/null +++ b/macros/latex/contrib/pdfmanagement-testphase/update-metadata.txt @@ -0,0 +1,15 @@ +% this are tests that needs to be recreated if the xmp metadata changes. + + l3build save -eluatex,pdftex,xetex formtextfields colorprofile-standard annot embedstream formfield-old xform-preamble bdc-properties radiobuttons pageattr mixpageattr linkmargin metadata-new active-colon linktoc pgfpatches test-pdfA-4 linkbordercolor ismap pagesattr xform-appearance viewerpreferences thispageattr transition textfield disable-links tag-checkbox infodict ap-names pagelabels ocproperties annot-dict ocgcolorlinks checkbox pdffilelink colorprofile1 metadata-new-no-hyperref pdflscape embedfile xform destination-options infodict-new + + l3build save -e xetex pagelabels-log version-compare show annot-last dict_if_empty + + l3build save -eluatex,pdftex -c config-noxetex pdfa2b-test extgstate-patches test-new-transparent calculationsortorder metadata pgfpatches colorspace transparent-tikz + + l3build save -c config-luatex stop-link luacolor fontspec-spotcolor structure-destination catalogAF linkhook non-ascii-links calculate-textfield + + l3build save -c config-dvips nopdfmanage metadata-new + + l3build save -c config-pdftex structure-destination metadata-dates metadata-ansi linkhook stop-link catalogAF calculate-textfield + + l3build save -c config-xetex structure-destination metadata-newpage calculate-textfield linkhook stop-link catalogAF diff --git a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty index 2e2fb2edab..c5a9a8daeb 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty @@ -1,6 +1,6 @@ %% LaTeX2e file `xcolor-patches.sty' %% -\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-08-20 v0.95y patch xcolor for l3color] +\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-08-29 v0.95z patch xcolor for l3color] \@ifundefined{color_set:nn}{\RequirePackage{l3color}}{} \ExplSyntaxOn diff --git a/macros/latex/contrib/ppt-slides/DEPENDS.txt b/macros/latex/contrib/ppt-slides/DEPENDS.txt index 74961c7a1d..6607b6fe61 100644 --- a/macros/latex/contrib/ppt-slides/DEPENDS.txt +++ b/macros/latex/contrib/ppt-slides/DEPENDS.txt @@ -1,20 +1,49 @@ -hard pgfopts -hard xcolor + +hard anyfontsize +hard changepage +hard crumbs +hard enumitem +hard fontsize +hard hardwrap hard href-ul +hard ifoddpage +hard lastpage hard pagecolor -hard varwidth -hard qrcode hard pgf -hard tikzpagenodes -hard enumitem -hard crumbs +hard pgfopts +hard qrcode hard seqsplit -hard hardwrap -hard ifoddpage -hard textpos -hard anyfontsize -hard fontsize -hard changepage hard soul -hard lastpage -hard titling
\ No newline at end of file +hard textpos +hard tikzpagenodes +hard titling +hard varwidth +hard xcolor +soft acmart +soft biber +soft biblatex +soft booktabs +soft caption +soft clicks +soft cmap +soft comment +soft crumbs +soft docshots +soft ffcode +soft hypdoc +soft hyperxmp +soft ifmtarg +soft l3build +soft libertine +soft libertine +soft microtype +soft newtx +soft pdfcrop +soft qrcode +soft scheme-basic +soft setspace +soft standalone +soft textcase +soft tools +soft totpages +soft xetex diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.dtx b/macros/latex/contrib/ppt-slides/ppt-slides.dtx index 8aca5a1bee..ba92737063 100644 --- a/macros/latex/contrib/ppt-slides/ppt-slides.dtx +++ b/macros/latex/contrib/ppt-slides/ppt-slides.dtx @@ -1,7 +1,7 @@ % \iffalse meta-comment % (The MIT License) % -% Copyright (c) 2021-2022 Yegor Bugayenko +% Copyright (c) 2021-2023 Yegor Bugayenko % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the 'Software'), to deal @@ -50,7 +50,7 @@ %<package>\NeedsTeXFormat{LaTeX2e} %<package>\ProvidesPackage{ppt-slides} %<*package> -[2022-12-04 0.2.1 Slide Decks a la Power Point] +[2023-08-29 0.2.2 Slide Decks a la Power Point] %</package> %<*driver> \documentclass{ltxdoc} @@ -482,11 +482,16 @@ % \end{macro} % \begin{macro}{\pptTitle} -% Then, we define the |\pptTitle| command: +% Then, we define the |\pptTitle| command, which prints the |title| and |subtitle| on the +% first page. The first argument is the title, the second is the subtitle. If the second +% argument is empty, it won't be printed: % \begin{macrocode} \newcommand\pptTitle[2]{% {\pptBanner{\Huge #1}}% - {\pptBanner{\large #2}}% + \def\param{#1}% + \ifx\param\empty\else% + {\pptBanner{\large #2}}% + \fi% } % \end{macrocode} % \end{macro} diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.ins b/macros/latex/contrib/ppt-slides/ppt-slides.ins index 5dfdeca0b5..a5f87589b0 100644 --- a/macros/latex/contrib/ppt-slides/ppt-slides.ins +++ b/macros/latex/contrib/ppt-slides/ppt-slides.ins @@ -1,6 +1,6 @@ %% (The MIT License) %% -%% Copyright (c) 2021-2022 Yegor Bugayenko +%% Copyright (c) 2021-2023 Yegor Bugayenko %% %% Permission is hereby granted, free of charge, to any person obtaining a copy %% of this software and associated documentation files (the 'Software'), to deal @@ -26,7 +26,7 @@ \preamble (The MIT License) -Copyright (c) 2021-2022 Yegor Bugayenko +Copyright (c) 2021-2023 Yegor Bugayenko Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.pdf b/macros/latex/contrib/ppt-slides/ppt-slides.pdf Binary files differindex 3293f9a60e..b1097df20e 100644 --- a/macros/latex/contrib/ppt-slides/ppt-slides.pdf +++ b/macros/latex/contrib/ppt-slides/ppt-slides.pdf diff --git a/macros/latex/contrib/schooldocs/README.md b/macros/latex/contrib/schooldocs/README.md index ecb91d93da..38c16f1a87 100644 --- a/macros/latex/contrib/schooldocs/README.md +++ b/macros/latex/contrib/schooldocs/README.md @@ -3,12 +3,10 @@ ## Presentation -The purpose of this package is to provide several layout styles for school documents. -It is usefull for exercices sheets, exams, course materials. -The package sets the page geometry (dimensions of text and margins) -and the title typesetting; -the various styles define the header, footer and title formatting, -Many features are freely configurable. +The aim of this package is to offer diverse layout styles for school-related documents. +It serves well in creating exercices sheets, exams, course materials. +The package defines page geometry (text and margins dimensions) and the title formatting. +Various styles are available defining settings for headers, footers or alternative title formatting, providing many customizable features. ## Installation diff --git a/macros/latex/contrib/schooldocs/schooldocs-examples.pdf b/macros/latex/contrib/schooldocs/schooldocs-examples.pdf Binary files differindex e214571230..ec6210a259 100644 --- a/macros/latex/contrib/schooldocs/schooldocs-examples.pdf +++ b/macros/latex/contrib/schooldocs/schooldocs-examples.pdf diff --git a/macros/latex/contrib/schooldocs/schooldocs.dtx b/macros/latex/contrib/schooldocs/schooldocs.dtx index 9aed8e6cf8..04c468b3dd 100644 --- a/macros/latex/contrib/schooldocs/schooldocs.dtx +++ b/macros/latex/contrib/schooldocs/schooldocs.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2020-2021 by Antoine Missier <antoine.missier@ac-toulouse.fr> +% Copyright (C) 2020-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr> % ---------------------------------------------------------------------- % % This file may be distributed and/or modified under the @@ -22,7 +22,7 @@ %<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01] %<package>\ProvidesPackage{schooldocs} %<*package> - [2023/01/25 v1.2 .dtx schooldocs file] + [2023/08/28 v1.3 .dtx schooldocs file] %</package> % %<*driver> @@ -32,12 +32,11 @@ \usepackage[english]{babel} \usepackage{charter} \usepackage{lipsum} -\usepackage{hyperref} \usepackage{boxedminipage2e} \usepackage{sectsty} \usepackage{spacingtricks} -\usepackage{centeredline} \usepackage{schooldocs} +\usepackage{hyperref} %\usepackage{geometry} \geometry{textwidth=355pt,vmarginratio=1:1,hmarginratio=3:2} % modified by schoodocs loading, very close from the default geometry used by ltxdoc @@ -112,6 +111,8 @@ % \changes{v1.2}{2023/01/24}{ % Small changes in documentation (charter font is now used) % and examples files (with several fonts)} +% \changes{v1.3}{2023/08/28}{ +% - English documentation corrections} % % \GetFileInfo{schooldocs.dtx} % @@ -119,97 +120,101 @@ % % \section{Introduction} % -% The purpose of this package is to provide several layout styles for school documents. -% It can be used for exercises sheets, exams, course materials. -% The package sets the page geometry (dimensions of text and margins) -% and the title typesetting; -% various \emph{styles} define header, footer and title formatting, -% Many features are freely configurable. -% Six different styles are proposed which are named: +% The aim of this package is to offer diverse layout styles +% for school-related documents. +% It serves well in creating exercise sheets, exams, and course materials. +% The package defines page geometry (text and margins dimensions) +% and title formatting. +% Various \emph{styles} are available defining settings for headers, footers +% or alternative title formatting, providing many customizable features. +% Six different styles are proposed that are named: % \begin{center} \bfseries % \hfill classic \hfill elegant \hfill modern \hfill soft % \hfill exam \hfill collection \hfill \mbox{} % \end{center} -% If the document is an exam subject to be completed and returned, -% we have a particular style, \textbf{identity}, in which -% left part of the header is replaced by -% ``\identityname'', whereas center and right parts are empty. +% Furthermore, a specific style named \textbf{identity} is provided +% for documents like exam sheets that need to be completed and returned. +% This style replaces the left header with ``\identityname'', +% while keeping the center and right parts empty. % % \medskip -% The styles are presented in paragraph \ref{par:styles} -% and the file \href{run:schooldocs-examples.pdf}{\textsf{schooldocs-examples.pdf}} -% shows the result of each. +% An overview of these styles is presented in section \ref{par:styles} +% and you can observe the visual outcomes of each style in the file +% \href{run:schooldocs-examples.pdf}{\textsf{schooldocs-examples.pdf}}. % % \section{Usage} % % \subsection{Choosing a style} % After loading the package with |\usepackage{schooldocs}|, % the style is defined by placing |\pagestyle|\marg{style} in the preamble. -% This command comes from the package \textsf{fancyhdr} by Piet van Oostrum. -% It can be placed before of after entering information described in the next subsection. +% This command comes from the \textsf{fancyhdr} package by Piet van Oostrum. +% It can be placed before of after entering the information described in the next subsection. % % \medskip -% In the text body, you can change the style of a particular page by placing -% |\thispagestyle|\marg{style} at the page you want. -% For example, you can place the command |\thispagestyle{identity}| -% in an appendix page to render. +% You can change the style of a particular page by placing +% |\thispagestyle|\marg{style} on the page you desire. +% For example, on an appendix page that needs to be rendered +% you can use the command |\thispagestyle{identity}|. +% % \subsection{Information fields} % % \DescribeMacro{\title} -% Usually a \LaTeX\ document title is made up of information -% provided by the macros -% |\title|, |\date| and |\author|. -% The |\title| macro has been redefined with an enriched syntax: +% Typically a \LaTeX\ document title is assembled using information +% from the macros |\title|, |\date|, and |\author|. +% The |\title| macro has been extended with an enriched syntax: % |\title|\oarg{head}\marg{title}. % The optional parameter \meta{head} corresponds to the text displayed in the header % instead of \meta{title}. % When not provided, the mandatory argument \meta{title} will be used in headers. % -% The macros |\date| and |\author| have not been redefined but information provided +% The macros |\date| and |\author| have not been altered, but the provided information % is also used in titles, headers or footers -% (depending on the style used) +% (depending on the chosen style) % \footnote{The macro \texttt{\bslash and}, -% sometimes used in \texttt{\bslash author} -% to typeset a title with several authors, doesn't work here, -% except in the \textbf{collection} style. It produces a compilation error. -% The macro \texttt{\bslash thanks} also doesn't work but without producing error.}. +% which can be employed in the \texttt{\bslash author} command +% to typeset a title with several authors, does not function here, +% except in the \textbf{collection} style. Attempting to use it will result +% in a compilation error. The \texttt{\bslash thanks} macro also +% doesn't work, although it does not generate an error.}. % % \pagebreak % \medskip % \DescribeMacro{\subject} \DescribeMacro{\school} \DescribeMacro{\institute} -% In addition to the previous ones, two other information macros are provided, -% used in the title, headers or footers, depending on the style: +% Two additional information macros +% are provided for use in titles, headers or footers, depending on the style: % |\subject| and |\school| (or its alias |\institute|). -% The macro |\subject| has an optional argument, like in |\title|: -% |\subject|\oarg{head}\marg{title} which allows to place an alternative text -% in header, different from the one displayed in the title. +% The |\subject| macro includes an optional argument, similar to |\title|: +% |\subject|\oarg{head}\marg{title}. This enables the placement of an alternative text +% in the header, distinct from the text displayed in the title. % % \medskip -% Information macros have to be called in the preamble -% \footnote{Nevertheless, the macros \texttt{\bslash date} and \texttt{\bslash author} -% can be used in the document body.}, -% they are optional. If omitted, the corresponding field will be empty, -% except for the date which will display today's date. -% So, if you do not want any date, just write |\date{}|. -% When title elements like subject or date are missing, the title height +% Information macros must be invoked in the preamble +% \footnote{However, the macros \texttt{\bslash date} and \texttt{\bslash author} +% can be used within the document body.}, +% they are optional. In cases of omission, the corresponding field will remain empty -- +% except for the date field, which will display today's date. +% Therefore, if you wish to exclude the date, you can simply enter |\date{}|. +% If certain title elements, such as subject or date, are absent, the title height % will be reduced accordingly. % -% Except for |\date|, all these information macros accept multi-line arguments, -% for example |\school{Royal College of Pataphysics\\London}|. -% To typeset the main title on two (or more) lines, use |\\[1ex]| -% for a good vertical spacing. -% -% When using the \textsf{hyperref} package (by Sebastian Rahtz and Heiko Oberdiek) -% to produce a pdf output, information provided by |\title|, |\subject| and |\author| -% (and |\school| -% \footnote{The \emph{author} field of the pdf properties will be filled -% like this: \textsf{author (school)}, -% but \texttt{\bs author} should be called before \texttt{\bs school} in the preamble. +% All of these information macros, except for |\date|, accept multi-line arguments, \eg +% |\school{Royal College of Pataphysics\\London}|. +% Within the |\title| macro, if you wish to typeset two (or more) lines, use |\\[1ex]| +% for a proper vertical spacing. +% +% When employing the \textsf{hyperref} package +% (developed by Sebastian Rahtz and Heiko Oberdiek), +% the information provided via |\title|, |\subject|, and |\author| +% (as well as |\school| +% \footnote{The \emph{author} field of the PDF properties will be filled +% as follows: \textsf{author (school)}. +% However \texttt{\bs author} should be called before \texttt{\bs school} in the preamble. % }) -% will be written in the pdf properties also. +% will also be included in the PDF properties. % % \medskip -% The file \textsf{schooldocs-examples.pdf} uses the examples of the following table. +% The file \textsf{schooldocs-examples.pdf} utilizes the information fields +% outlined in the following table. % \begin{center} % \begin{tabular}{ll} % \hline @@ -225,84 +230,85 @@ % \end{center} % % \DescribeMacro{\subtitle} -% In the \textbf{exam} style, the title uses an additional field -% provided by the macro |\subtitle|\marg{text}. The parameter \meta{text} -% will be placed under the other title elements and before the separation rule, -% if there is one. For instance |\subtitle{Duration of the test: 2\,h}|. -% For a multi-line argument, the line break instruction must be -% |\par| and not |\\|. +% Within the \textbf{exam} style, the title includes an additional field +% provided by the macro |\subtitle|\marg{text}. The \meta{text} argument +% will be positioned beneath the other title elements and above the separation rule, +% if present. For instance, |\subtitle{Duration of the test: 2\,h}|. +% For a multi-line argument, use |\par| for line breaks instead of |\\|. % % \subsection{Making the title} % % \DescribeMacro{\maketitle} -% As in \LaTeX\ standard classes, the title is produced -% by the macro |\maketitle|, which should be placed after |\begin{document}|. -% This command has been redefined by the package. -% Indeed, the standard title produced by the \LaTeX\ class \texttt{article}, -% seems inappropriate for school documents like exercise sheets for example. -% Vertical space before the title is reduced and -% an horizontal rule is typeset to separate the title from the following text. -% By default, the title is centered but one can change this, -% as presented in section \ref{par:title-set}, to get -% a left or right-aligned title (an also boxed). -% Various titles are presented in the file +% Just like in the standard \LaTeX\ classes, the title is generated +% using the |\maketitle| macro, which is placed after |\begin{document}|. +% This macro has been redefined by the package. +% In fact, the default title produced by the \LaTeX\ \texttt{article} class +% appears unsuitable for school documents such as exercise sheets. +% Vertical spacing before the title has been reduced and, +% a horizontal rule is inserted to separate the title from the subsequent text. +% By default, the title is centered, but this can be altered, +% as demonstrated in section \ref{par:title-set}, to achieve +% a left or right alignment (or even boxing). +% Various title examples can be found in the file % \href{run:schooldocs-examples.pdf}{\textsf{schooldocs-examples.pdf}}. % % The macro has on optional parameter |\maketitle|\oarg{rulelength} -% to set the length of the separation rule, by default 2.5\,cm. -% The rule can be totally removed by setting the -% optional argument to 0\,cm; you can also typeset a rule of -% whole line width with |\maketitle[\linewidth]| or |\maketitle[\textwidth]|. +% to define the length of the separation rule, which is 2.5\,cm by default. +% The rule can be completely removed by setting the +% optional argument to 0\,cm. Alternatively, you can typeset a rule spanning +% the entire line using |\maketitle[\linewidth]|. ^^A or |\maketitle[\textwidth]|. % -% Each style has its own title formatting. Nevertheless the package provides -% a ``standard'' title when no style is loaded or with +% Each style has its own title formatting. Nevertheless the package offers +% a ``standard'' title formatting when no specific style is loaded or when using % the \LaTeX\ styles \textbf{empty} or \textbf{plain}. -% The \textbf{elegant} style keeps also this ``standard'' title style. +% The \textbf{elegant} style also retains this ``standard'' title formatting. % % \medskip % \DescribeMacro{\seprule} -% As in the title, a rule can also be used in the text body to make separations. -% This is done by the macro |\seprule|\oarg{length} which -% produces an horizontal centered rule of (optional) \meta{length}, by default 2.5\,cm. +% Just like in the title, a rule can also be used within +% the text body for creating separations. +% This is achieved using the |\seprule|\oarg{length} macro, +% producing a horizontal and centered rule of optional \meta{length}, +% with a default of 2.5\,cm. % % \medskip % \DescribeMacro{\correct} -% For typesetting a correct version of an exercise sheet, we provide the macro |\correct|, -% which adds ``-- Correct Version'' to the title. +% To typeset a correct version of an exercise sheet, we provide the |\correct| macro, +% which adds `` -- Correct Version'' to the title. % It should be placed in the preamble. -% Combined with packages that deal with multiple versions of a document, -% this macro avoids to define different titles for a an exercise sheet an its correct version. +% When used with packages that manage multiple versions of a document, +% this macro eliminates the need to define distinct titles for an exercise sheet +% an its correct version. % However in the \textbf{exam} style, the text ``Correct version'' -% will not be added in the title (except in headers), but will be substituted for -% the subtitle. +% replaces the subtitle instead of being added in the main title (except in headers). % % \medskip % \DescribeMacro{\makesmalltitle} -% As in the package \textsf{phfnote} by Philippe Faist, it seems wisely -% to propose a compact title, where information -% provided by |\title|, |\subject| and |\date| are presented -% on a single line, depending on the selected style (see \textsf{schooldocs-examples.pdf}). -% The rule is always displayed and expands on the whole line width. +% Inspired by the package \textsf{phfnote} by Philippe Faist, we also offer +% a compact title format. This format combines the details from +% |\title|, |\subject| and |\date| into a single line, +% depending on the chosen style (see \textsf{schooldocs-examples.pdf}). +% The rule is always displayed and spans the entire line width. % % \subsection{Style layouts} \label{par:styles} % -% According to good typographic practice, the header on the title page should be empty +% In accordance with typographic good practices, +% the header on the title page is usually left empty % (see The \LaTeX\ Companion). -% This ``rule'' is seldom observed in school documents, -% and, on the first page, we find often information (author, school, etc.) -% on top left and the date on top right, as for a letter. -% Except for the \textbf{classic} style, that we present first, -% we wanted to comply with good practice, -% but we keep some information in the footer yet. -% -% We present below miniature views to show the layout of the different styles. +% However, this ``rule'' is often disregarded in school documents. +% On the first page, it is common to find information such as author, school, etc., +% at the top left and the date at the top right, resembling the layout of a letter. +% While we adhere to good practices for the headers (except in the \textbf{classic} style), +% we still include certain information in the footer. +% +% Below, we present miniature previews illustrating the six styles layout. % The file \href{run:schooldocs-examples.pdf}{\textsf{schooldocs-examples.pdf}} -% gives a real view of them. -% For several styles, a rule is typeset under the header. -% It can be displayed or discarded by setting its width, and likewise for a rule -% over the footer. -% The format of each element and also some space settings -% are freely configurable, see section \ref{par:head-settings}. +% provides an actual representation. +% In several styles, a rule is placed below the header. +% It can be displayed or removed by setting its width, and the same applies to a rule +% above the footer. +% The formatting of each element, as well as specific spacing settings, +% can be freely customized as detailed in \ref{par:head-settings}. % % \medskip % \begin{stylex} @@ -423,63 +429,66 @@ % \end{stylex} % \bigskip % -% The \textbf{collection} style is useful for longer documents. -% In it the name of the current section appears in the right header -% and changes as things progress, as in the \LaTeX\ \textbf{book} class. +% The \textbf{collection} style is well-suited for longer documents. +% In this style the name of the current section is displayed in the right header +% and updates as the content progresses, similar to the behavior +% in the \LaTeX\ \textbf{book} class. % % \section{Settings} % % \subsection{Page layout} % -% The page layout is set in the same way, for all styles. -% It is defined by the macro |\geometry| of the package +% The page layout is set in the same way for all styles. +% It is defined by the |\geometry| macro of the package % \textsf{geometry} (by Hideo Umeki and David Carlisle). -% According to good typographic practice (see the \LaTeX\ Companion, -% the \textsf{typearea} package or \textsf{KOMA-Script} bundle documentation) -% the ratio between the text body (the type area as named by typographers) +% Following good typographic practice (see the \LaTeX\ Companion, +% the \textsf{typearea} package or the \textsf{KOMA-Script} bundle documentation), +% the ratio between the text body (referred to as the ``type area'' by typographers) % and the page size must be the same horizontally and vertically. % This ratio gauges the ``shade of gray'' of a page. % The default scale in the \textsf{geometry} package is 0.7. -% For school documents, it seems that this setting leaves too much white -% space in margins, thus this ratio has been set to 0.75. -% It can be redefined with the |\newgeometry| command +% However, for school documents, this setting seems to result in excessive white +% space in the margins. Thus we have adjusted this ratio to 0.75. +% You can modify it using the |\newgeometry| command % \footnote{You can also call \textsf{geometry} before \textsf{schooldocs}. % Setting the scale factor several times doesn't work.}. -% Furthermore, according to ``canons of page construction'', in a one-sided document, +% +% Moreover, in accordance with ``canons of page construction'', in a one-sided document, % the ratio between the left and right margins should be 1:1, % while the ratio between top and bottom margins should be 1:2. -% It seems that this recommended ratio of 1:2 is seldom observed -% and it produces a very wide bottom margin. -% Besides, when loading the \textsf{geometry} package, the default vertical -% ratio is 2:3 and not 1:2. -% To get more balanced margins, we have prefer to set it at 3:4: +% It appears that this recommended 1:2 ratio is rarely observed, +% as it results in an overly wide bottom margin. +% Additionally, when loading the \textsf{geometry} package, the default vertical +% ratio is set at 2:3 and not 1:2. +% To achieve more balanced margins, we have preferred to set it at 3:4, using % |\geometry{scale=0.75,vmarginratio=3:4,heightrounded}| -% \footnote{The option \texttt{heightrounded} rounds text height to $n$-times -% ($n$ an integer) the height of a line, to avoid ``underfull vbox'' in some cases.}. +% \footnote{The \texttt{heightrounded} option rounds text height to a multiple of $n$ times +% the height of a line (where $n$ is an integer), preventing occurrences +% of ``underfull vbox'' at times.}. % % \subsection{Title settings} \label{par:title-set} % -% Several parameters allow to customize the title composition. -% They are presented in the following table with their default settings. -% Colors can be changed with |\definecolor|, macros with |\renewcommand| -% and lengths with |\setlength|. -% Most of command names are explicit and don't need to give any information about their use. -% |\titleflush| manages the alignment: -% centered by default, it can be left-aligned with -% |\renewcommand{\titleflush}{flushleft}| or right-aligned with -% |\renewcommand{\titleflush}{flushright}| +% Several parameters allow for customizing the title composition. +% They are presented in the table below along with their default settings. +% Colors can be altered using |\definecolor|, macros using |\renewcommand| +% and lengths using |\setlength|. +% Most command names are self-explanatory and don't require additional information +% about their usage. +% The |\titleflush| command handles alignment: +% it is centered by default, but can be left-aligned using +% |\renewcommand{\titleflush}{flushleft}| (\texttt{flushright} for right alignment) % \footnote{This macro has no effect % with the \textbf{exam} and \textbf{collection} styles, -% the title is always centered.}. +% where the title is always centered.}. % -% The length |\titlesep| sets the vertical spacing between the fields \emph{title} -% and \emph{subject}, except for the \textbf{classic} and \textbf{soft} styles, -% witch contain only the field \emph{title}, or if the field \emph{subject} -% is not given. -% Vertical space between other title fields is defined in relation to +% The length |\titlesep| determines the vertical spacing between the \emph{title} +% and \emph{subject} fields, except for the \textbf{classic} and \textbf{soft} styles, +% witch contain only the \emph{title} field, or when the \emph{subject} field +% is not provided. +% Vertical space between other title fields is defined relative to % |\titlesep| (|0.5\titlesep| for most). % -% Unless otherwise stated, the column ``special settings'' of the following table +% Unless specified otherwise, the ``special settings'' column in the following table % applies to the \textbf{exam} and \textbf{collection} styles. % % \begin{center} \small @@ -506,44 +515,47 @@ % \DescribeMacro{\subtitlestyle}\DescribeMacro{\titlecorrectstyle} % The \textbf{exam} style has two additional setting macros: % |\subtitlestyle|, set by default to |\large\slshape|, -% and |\titlecorrectstyle|, for the composition of \textsf{Correct Version} -% produced by |\correct|, set by default to |\color{red}\large\scshape|. +% and |\titlecorrectstyle|, for the ``\textsf{Correct Version}'' composition +% via |\correct|, with the default being |\color{red}\large\scshape|. % -% In the \textbf{collection} style, the fields -% \emph{school} and \emph{author} are included into the title. Their features are then -% controlled by |\authorstyle| -% \footnote{For other styles, the macro \texttt{\bs authorstyle} -% belongs to headers or footers parameters.} set to |\Large|. +% \DescribeMacro{\authorstyle} +% In the \textbf{collection} style, the +% \emph{school} and \emph{author} fields are incorporated into the title. +% Their attributes are governed by |\authorstyle| +% \footnote{In other styles, the \texttt{\bs authorstyle} macro +% (set to \texttt{\bs textnormal}) +% is utilized within header or footer.} which is set to |\Large|. % -% To create a separate page for the title -% (in particular for \textbf{exam} or \textbf{collection}), you can place |\maketitle| into -% an environment |titlepage| provided by \LaTeX. +% To create a separate title page +% (especially for the \textbf{exam} or \textbf{collection} styles), +% you can enclose |\maketitle| within the |titlepage| environment provided by \LaTeX. % % \medskip % \DescribeMacro{\boxedshape} -% A particular formatting has been predefined to produce a slightly +% A specific formatting has been predefined to create a lightly % shaded box around the title: |\boxedshape|\marg{text} % (thanks to the \textsf{fancybox} package by Timothy Van Zandt). -% It can be used within the -% command |\titlestyle| if we want to get this kind of effect, \eg +% It can be used within the command |\titlestyle| +% if you want to achieve this kind of effect, for instance: % \centeredline{|\renewcommand{\titlestyle}{\LARGE\sffamily\bfseries\boxedshape}|.} % % \subsection{Headers and footers} \label{par:head-settings} % -% The typeset of headers and footers is produced thanks to dedicated macros -% \footnote{The \textsf{fancyhdr} package -% provides the commands \texttt{\bs lhead}, \texttt{\bs chead}, \texttt{\bs rhead} -% for the left, center and right parts of the header, and the same for the footer: +% The typesetting of headers and footers is achieved using specialized macros +% \footnote{The \textsf{fancyhdr} package offers +% the commands \texttt{\bs lhead}, \texttt{\bs chead}, \texttt{\bs rhead} +% for the left, center and right portions of the header, and similarly for the footer: % \texttt{\bs lfoot}, \texttt{\bs cfoot} and \texttt{\bs rfoot}.} -% of the \textsf{fancyhdr} package. -% As for the title, several macros allow to customize some settings. -% They are presented in the table below. -% Let us specify that |\pagenamestyle| defines the format of the word ``\emph{page}'' -% used in front of the page number. -% -% The |\headstyle| and |\footstyle| commands are generic for all elements -% of headers and footers. They are combined with macros giving -% specific settings for each field. +% from the \textsf{fancyhdr} package. +% Similar to the title, various macros enable customization of specific settings. +% They are outlined in the table below. +% Note that |\pagenamestyle| determines the format of the word ``\emph{page}'' +% displayed preceding the page number. +% +% The |\headstyle| and |\footstyle| commands are common for all +% headers and footers components, respectively. +% These commands are combined with macros that provide +% distinct settings for each individual field. % \begin{center} % \begin{tabular}{cc} % \hline @@ -563,33 +575,33 @@ % \end{center} % % The \textbf{exam} and \textbf{collection} styles have a specific setting for -% |\headtitlestyle|, defined by |\renewcommand{\headtitlestyle}{\MakeUppercase}|. +% |\headtitlestyle|, which is defined by |\renewcommand{\headtitlestyle}{\MakeUppercase}|. % % \medskip -% Macros that allow to display (or remove) the rule in the header -% \footnote{Indeed we have redefined the \texttt{\bs headrule} macro -% such that the rule never appears on the first page.} -% or the footer -% come from the \textsf{fancyhdr} package. For example, in any style, -% the rule in the header is removed with: +% Macros that enable the display (or removal) of the rule in the header +% \footnote{In fact, we have redefined the \texttt{\bs headrule} macro +% so that the rule never appears on the first page.} +% or the footer are provided +% by the \textsf{fancyhdr} package. For example, in any style, +% the header rule can be removed using: % |\renewcommand{\headrulewidth}{0pt}|, -% and displayed in the footer with: -% |\renewcommand\footrulewidth{0.4pt}| +% and it can be displayed in the footer with: +% |\renewcommand\footrulewidth{0.4pt}|. % % \subsection{Internationalization} -% Three keywords are used by the package: \emph{page}, \emph{Correct version}, +% Three keywords are utilized by the package: \emph{page}, \emph{Correct version}, % and \emph{Name}, % defined by the macros |\pagename|, |\correctname| and |\identityname|. -% |\pagename| is used in the header or the footer, |\correctname| by the macro |\correct| -% and |\identityname| by the \textbf{identity} style. -% These keywords get automatic translation in a few languages -% \footnote{Translation is currently integrated into the package +% |\pagename| is used in the header or footer, |\correctname| by the |\correct| +% macro and |\identityname| by the \textbf{identity} style. +% These keywords are automatically translated into a few languages +% \footnote{Translation is currently built into the package % for the following languages: % French, German, Spanish, Italian, Portuguese.} -% according to the selected language by the \textsf{babel} or \textsf{polyglossia} package. -% They can be redefined, with |\renewcommand|, -% or else you can use macros from the \textsf{translations} package by Clemens Niederberger -% (allowing dynamic language change), \eg +% based on the selected language using the \textsf{babel} or \textsf{polyglossia} package. +% They can be redefined using |\renewcommand|, +% or you can also utilize macros from Clemens Niederberger's \textsf{translations} package +% (allowing dynamic language changes), such as % |\DeclareTranslation{romanian}{pagin\u{a}}| (in the preamble). % % @@ -601,7 +613,7 @@ % % \begin{macrocode} \@ifpackageloaded{geometry}{}{\RequirePackage{geometry}} -\let\footruleskip\relax % because memoir class uses it +\let\footruleskip\relax % because the memoir class uses it \RequirePackage{fancyhdr} \RequirePackage{ifthen} \RequirePackage{lastpage} @@ -612,11 +624,11 @@ \geometry{scale=0.75,vmarginratio=3:4,heightrounded} % \end{macrocode} -% If the \textsf{geometry} package has been loaded before, -% we don't load it to avoid option clash. +% If the \textsf{geometry} package has been previously loaded, +% we do not load it again to prevent conflict with options. % -% To change the scale factor, use |\newgeometry| because -% the |\geometry| command will not do it when the scale is already defined. +% To modify the scale factor, utilize |\newgeometry| as the +% |\geometry| command will not function when the scale is already set. %\medskip % \subsection{Internationalization} % @@ -657,8 +669,8 @@ % % \subsection{Information fields} % -% After being defined, information fields are set to empty, -% to make tests with them work well. +% Once defined, information fields are initially set to empty +% to ensure that tests for empty fields work correctly. % % \begin{macrocode} \renewcommand{\title}[2][]{\long\def\@title{#2} @@ -683,10 +695,11 @@ \def\@subject{} \def\@headsubject{} % \end{macrocode} -% Because \textsf{KOMA-Script} package also uses the |\subject| macro, -% we make a |\relax| on this command. +% Due to the usage of the |\subject| macro by the \textsf{KOMA-Script} package, +% we include a |\relax| command before defining this macro. % -% |\subject{}| doesn't work with the |\@empty| test used below in |\maketitle|, thus +% The |\subject{}| command doesn't function properly with the |\@empty| test +% employed below in the |\maketitle| command. Consequently, % we define |\@subject| and |\@headsubject| as empty by default. % % \subsection{Settings} @@ -714,11 +727,11 @@ } % \end{macrocode} -% Default value for |\fboxsep| is 3\,pt and for |\shadowsize| is 4\,pt. -% These settings are local. +% The default value for |\fboxsep| is 3\,pt and for |\shadowsize| it's 4\,pt. +% These settings have a local scope. % % \medskip -% Next the headers and footers settings. +% Then, we move on to the settings for headers and footers. % \begin{macrocode} \definecolor{headingcolor}{named}{black} \newcommand{\headstyle}{\small\color{headingcolor}} @@ -736,11 +749,12 @@ } % \end{macrocode} -% The |\headrule| macro redefinition allow to remove the rule on the first page. +% The redefinition of the |\headrule| macro allows for the removal +% of the rule on the first page. % -% The header height is set to |\baselineskip| to avoid +% The header height is set to |\baselineskip| to prevent % error messages (``\texttt{headheight too small}'') when the text size is -% greater than or equal to |\small|. +% equal to or greater than |\small|. % % \subsection{Title composition} % @@ -789,18 +803,18 @@ \raisebox{0.25\baselineskip}{\rule{#1}{\seprulewidth}}\end{center}} % \end{macrocode} -% |\AtBeginDocument| is necessary in the |\correct| macro because -%|\correctname| can be redefined by \textsf{babel} at |\begin{document}|. +% The use of |\AtBeginDocument| is necessary in the |\correct| macro because +% |\correctname| could be redefined by \textsf{babel} at |\begin{document}|. % -% \medskip +% \bigskip % \subsection{Basic styles} % -% The header in the \textbf{classic} style is displayed on two lines, therefore we have to increase the height -% |\headheight|. +% In the \textbf{classic} style, the header is displayed on two lines, +% thus requiring an increase in the |\headheight|. % -% If we want to include header or footer in the total body, -% we can add the command |\geometry{includehead}| respectively -% |\geometry{includefoot}| in the preamble. +% To include the header or footer into the total body, +% add |\geometry{includehead}| or |\geometry{includefoot}| +% in the preamble. % \begin{macrocode} \fancypagestyle{classic}{% \renewcommand{\headrulewidth}{0pt} @@ -1022,14 +1036,14 @@ % \end{macrocode} % % In the \textbf{collection} style, -% we redefine |\sectionmark| with |\AtBeginDocument| to prevent |\MakeUppercase| -% from eliminating the section number -% (or you can use |\nouppercase| here). +% we redefine |\sectionmark| using |\AtBeginDocument| to prevent |\MakeUppercase| +% from removing the section number +% (alternatively, you can use |\nouppercase| here). % -% |\ifthenelse| doesn't work when |\and| is used within |\author|. +% The |\ifthenelse| command doesn't function properly when |\and| is used within |\author|. % -% Notice the |\pagestyle{empty}| in |\maketitle| which prevents -% any header on the first page. +% Note the |\pagestyle{empty}| command in |\maketitle|, which ensures that there is +% no header on the first page. % % \Finale \endinput diff --git a/macros/latex/contrib/schooldocs/schooldocs.ins b/macros/latex/contrib/schooldocs/schooldocs.ins index cc1b62e92c..ec68fae155 100644 --- a/macros/latex/contrib/schooldocs/schooldocs.ins +++ b/macros/latex/contrib/schooldocs/schooldocs.ins @@ -1,5 +1,5 @@ %% -%% Copyright (C) 2020-2021 by Antoine Missier <antoine.missier@ac-toulouse.fr> +%% Copyright (C) 2020-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr> %% %% This file may be distributed and/or modified under the conditions of %% the LaTeX Project Public License, either version 1.3 of this license @@ -21,7 +21,7 @@ This is a generated file. -Copyright (C) 2020-2021 by Antoine Missier <antoine.missier@ac-toulouse.fr> +Copyright (C) 2020-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr> This file may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 of this license diff --git a/macros/latex/contrib/schooldocs/schooldocs.pdf b/macros/latex/contrib/schooldocs/schooldocs.pdf Binary files differindex a15ad07bf3..f46c1774f3 100644 --- a/macros/latex/contrib/schooldocs/schooldocs.pdf +++ b/macros/latex/contrib/schooldocs/schooldocs.pdf diff --git a/macros/latex/required/babel/base/README.md b/macros/latex/required/babel/base/README.md index f57a55cf41..a94ed0408f 100644 --- a/macros/latex/required/babel/base/README.md +++ b/macros/latex/required/babel/base/README.md @@ -1,6 +1,6 @@ -## Babel 3.92 +s## Babel 3.93 -2023-07-15 +2023-08-29 This package manages culturally-determined typographical (and other) rules, and hyphenation patterns for a wide range of languages. Many @@ -10,9 +10,9 @@ is a set of ini files for about 250 languages. The latest stable version is available on <https://ctan.org/pkg/babel>. -Changes in version 3.92 are described in: +Changes in version 3.93 are described in: -https://latex3.github.io/babel/news/whats-new-in-babel-3.92.html +https://latex3.github.io/babel/news/whats-new-in-babel-3.93.html Apart from the manual, you can find information on some aspects of babel at: @@ -48,21 +48,15 @@ respective authors. ### Summary of latest changes ``` -3.92 2023-07-15 - * The fix for #240 in version 3.90, related to `\normalsfcodes`, - broke the `onchar` mechanism in some cases and some other - things. A different fix has been devised. - * Weird behavior when declaring the same font for two families - (#178). - -3.91 2023-07-09 - * Transform for transliterated Hebrew, based on cjhebrew. +3.93 2023-08-29 + * More Hebrew numerals (also Yiddish). + * Chinese calendar. * Fixes: - - alignat and alignat* (amsmath) should now work in RTL mode (#208). - - The package option `layout=extras` was severely broken (#246). - - English and Arabic documents broken when using paracol (#241). - * Experimental: transforming strings with - `\localeprehyphenation`. + - Table with Arabic text corrupted when trying to colour cells (#252). + - Bold small caps were wrong in some cases (#92). + - Missing numerals in 'sanskri'`. + * Added a few ‘bare minimum locales’: Southern Altai, Divehi, + Ancient Egyptian, Egyptian Arabic, Phoenician, Newari. ``` ### Previous changes diff --git a/macros/latex/required/babel/base/babel-code.pdf b/macros/latex/required/babel/base/babel-code.pdf Binary files differindex 2c8615ff4e..1902f1390c 100644 --- a/macros/latex/required/babel/base/babel-code.pdf +++ b/macros/latex/required/babel/base/babel-code.pdf diff --git a/macros/latex/required/babel/base/babel.dtx b/macros/latex/required/babel/base/babel.dtx index d7a77ac1de..55b6e0c26f 100644 --- a/macros/latex/required/babel/base/babel.dtx +++ b/macros/latex/required/babel/base/babel.dtx @@ -32,7 +32,7 @@ % % \iffalse %<*filedriver> -\ProvidesFile{babel.dtx}[2023/07/15 v3.92 The Babel package] +\ProvidesFile{babel.dtx}[2023/08/29 v3.93 The Babel package] \documentclass{ltxdoc} \GetFileInfo{babel.dtx} \usepackage{fontspec} @@ -2989,10 +2989,10 @@ which is not recommended). \Describe{\localenumeral}{\marg{style}\marg{number}} \DescribeOther{\localecounter}{\marg{style}\marg{counter}} -\New{3.41} Many `ini` locale files has been extended with information +\New{3.41} Many `ini` locale files provide information about non-positional numerical systems, based on those predefined in CSS. They only work with \xetex{} and \luatex{} and are fully -expendable (even inside an unprotected |\edef|). Currently, they are +expandable (even inside an unprotected |\edef|). Currently, they are limited to numbers below 10000. There are several ways to use them (for the availabe styles in each @@ -3044,7 +3044,8 @@ The styles are: \item[Greek] |lower.modern|, |upper.modern|, |lower.ancient|, |upper.ancient| (all with keraia) -\item[Hebrew] |letters| (neither geresh nor gershayim yet) +\item[Hebrew] |letters| (\New{3.93} if the language is loaded +explicitly, also |letters.plain|, |letters.gershayim|, |letters.final|) \item[Hindi] |alphabetic| @@ -3091,7 +3092,9 @@ with the following command. {\marg{year}\marg{month}\marg{day}}} By default the calendar is the Gregorian, but an |ini| file may define -strings for other calendars (currently |ar|, |ar-|*, |he|, |fa|, |hi|). +strings for other calendars: |am| (|ethiopic|), |ar| and +|ar-|* (|islamic|), |cop| (|coptic|), |fa| (|islamic|, |persian|), |he| +(|hebrew|), |hi| (|indian|), |th| (|buddhist|). In the latter case, the three arguments are the year, the month, and the day in those in the corresponding calendar. They are \textit{not} the Gregorian data to be converted (which means, say, 13 is a valid @@ -3103,6 +3106,32 @@ Even with a certain calendar there may be variants. In Kurmanji the default variant prints something like \textit{30. Çileya Pêşîn 2019}, but with |variant=izafa| it prints \textit{31’ê Çileya Pêşînê 2019}. +The default calendar for a language can be set in |\babelprovide|, with +the key |calendar| (an empty value is the same as |gregorian|). In this +case, |\today| always converts the date. Variants are preceded by a +dot, so that |calendar = .genitive| in |serbian| |\today| selects the +date in this variant (more explicitly is |gregorian.genitive|). + +\begin{example} + By default, |thai| prints the date with |\today| in the Buddhist + calendar, but if you need a date in the Gregorian one, write: +\begin{verbatim} + \localedate[calendar=gregorian]{\year}{\month}{\day} +\end{verbatim} +(Remember |\year|, |\month| and |\day| is the current Gregorian date, +so no conversion is necessary.) +\end{example} + +\begin{example} + On the other hand (and following the CLDR), the preferred calendar in + most locales for Arabic is |gregorian| (in |ar-SA| is + |islamic-umalqura|), so to set |islamic-civil| as the + default one: +\begin{verbatim} + \babelprovide[import, calendar=islamic-civil]{arabic} +\end{verbatim} +\end{example} + \Describe{\babelcalendar}{\oarg{date}% \marg{calendar}\marg{year-macro}\m{month-macro}\m{day-macro}} @@ -3111,12 +3140,12 @@ package should be able to, at least, generate correctly the current date in the way users would expect in their own culture. Currently, |\localedate| can print dates in a few calendars (provided the \textsf{ini} locale file has been imported), but year, month and day -had to be entered by hand, which is very inconvenient. With this macro, +had to be entered by hand, which is inconvenient. With this macro, the current date is converted and stored in the three last arguments, -which must be macros. -Allowed calendars are +which must be macros. Allowed calendars are: \begin{multicols}{4} |buddhist|\\ + |chinese| (strings in locales pending) \New{3.93}\\ |coptic|\\ |ethiopic|\\ |hebrew|\\ @@ -3124,10 +3153,10 @@ Allowed calendars are |islamic-umalqura|\\ |persian| \end{multicols} -The optional -argument converts the given date, in the form -‘\m{year}-\m{month}-\m{day}’. Please, refer to the page on the news for -3.76 in the \babel{} site for further details. +The optional argument converts the given date, in the form +‘\m{year}-\m{month}-\m{day}’, although for practical reasons most +calendars accept only a restricted range of years. Please, refer to the +page on the news for 3.76 in the \babel{} site for further details. \subsection{Accessing language info} @@ -3493,6 +3522,10 @@ convert the sigma at the end of a word (on purpose). This transforms does it. To prevent the conversion (an abbreviation, for example), write |"s|.} +\trans{Hebrew, Yiddish}{transliteration.cj}{A transliteration system +based on that devised by Christian Justen for `cjhebrew`. Final letters +are not converted, and the furtive patah is not shifted.} + \trans{Hindi, Sanskrit}{transliteration.hk}{The Harvard-Kyoto system to romanize Devanagari.} @@ -5466,8 +5499,8 @@ wouldn’t exist. % \section{Tools} % % \begin{macrocode} -%<<version=3.92>> -%<<date=2023/07/15>> +%<<version=3.93>> +%<<date=2023/08/29>> % \end{macrocode} % % \textbf{Do not use the following macros in \texttt{ldf} files. They @@ -13425,6 +13458,15 @@ wouldn’t exist. % |\bbl@mapselect| because |\selectfont| is called internally when a % font is defined. % +% For historical reasons, \LaTeX{} can select two different series +% (|bx| and |b|), for what is conceptually a single one. This can +% lead to problems when a single family requires several fonts, +% depending on the language, mainly because ‘subtitutions’ with some +% combinations are not done consistently -- sometimes |bx/sc| is the +% correct font, but sometimes points to |b/n|, even if |b/sc| exists. +% So, some subtitutions are redefined (in a somewhat hackish way, by +% inspecting if the variant declaration contains |>ssub*|). +% % \begin{macrocode} \def\bbl@font@set#1#2#3{% eg \bbl@rmdflt@lang \rmdefault \rmfamily \bbl@xin@{<>}{#1}% @@ -13467,7 +13509,17 @@ wouldn’t exist. \begingroup #4% \xdef#1{\f@family}% eg, \bbl@rmdflt@lang{FreeSerif(0)} - \endgroup + \endgroup % TODO. Find better tests: + \bbl@xin@{\string>\string s\string s\string u\string b\string*}% + {\expandafter\meaning\csname TU/#1/bx/sc\endcsname}% + \ifin@ + \global\bbl@ccarg\let{TU/#1/bx/sc}{TU/#1/b/sc}% + \fi + \bbl@xin@{\string>\string s\string s\string u\string b\string*}% + {\expandafter\meaning\csname TU/#1/bx/scit\endcsname}% + \ifin@ + \global\bbl@ccarg\let{TU/#1/bx/scit}{TU/#1/b/scit}% + \fi \let#4\bbl@temp@fam \bbl@exp{\let\<\bbl@stripslash#4\space>}\bbl@temp@pfam \let\bbl@mapselect\bbl@tempe}% @@ -14433,6 +14485,10 @@ end % % \subsection{Arabic justification} % +% WIP. |\bbl@arabicjust| is executed with both elongated an kashida. +% This must be fine tuned. The attribute kashida is set by transforms +% with |kashida|- +% % \begin{macrocode} \ifnum\bbl@bidimode>100 \ifnum\bbl@bidimode<200 \def\bblar@chars{% @@ -14461,13 +14517,17 @@ end luatexbase.add_to_callback('hpack_filter', Babel.arabic.justify_hbox, 'Babel.arabic.justify_hbox') }}% +% \end{macrocode} +% % Save both node lists to make replacement. TODO. Save also widths to -% make computations +% make computations. +% +% \begin{macrocode} \def\bblar@fetchjalt#1#2#3#4{% \bbl@exp{\\\bbl@foreach{#1}}{% \bbl@ifunset{bblar@JE@##1}% - {\setbox\z@\hbox{^^^^200d\char"##1#2}}% - {\setbox\z@\hbox{^^^^200d\char"\@nameuse{bblar@JE@##1}#2}}% + {\setbox\z@\hbox{\textdir TRT ^^^^200d\char"##1#2}}% + {\setbox\z@\hbox{\textdir TRT ^^^^200d\char"\@nameuse{bblar@JE@##1}#2}}% \directlua{% local last = nil for item in node.traverse(tex.box[0].head) do @@ -14477,10 +14537,14 @@ end end end Babel.arabic.#3['##1#4'] = last.char - }}} -% Brute force. No rules at all, yet. The ideal: look at jalt table. And -% perhaps other tables (falt?, cswh?). What about kaf? And diacritic -% positioning? + }}} +% \end{macrocode} +% +% Elongated forms. Brute force. No rules at all, yet. The ideal: look +% at jalt table. And perhaps other tables (falt?, cswh?). What about +% kaf? And diacritic positioning? +% +% \begin{macrocode} \gdef\bbl@parsejalt{% \ifx\addfontfeature\@undefined\else \bbl@xin@{/e}{/\bbl@cl{lnbrk}}% @@ -14516,7 +14580,11 @@ end end }% \endgroup} +% \end{macrocode} % +% The actual justification (inspired by \textsc{chickenize}). +% +% \begin{macrocode} \begingroup \catcode`#=11 \catcode`~=11 @@ -14644,6 +14712,9 @@ function Babel.arabic.justify_hlist(head, line, gc, size, pack) node.remove(line.head, new) % Better compute before break end + if Babel.fix_diacr then + Babel.fix_diacr(k_item.next) + end width = width_new end if k_curr == 1 then @@ -14685,7 +14756,7 @@ function Babel.arabic.justify_hlist(head, line, gc, size, pack) end } \endgroup -\fi\fi % Arabic just block +\fi\fi % ends Arabic just block: \ifnum\bbl@bidimode>100... % \end{macrocode} % % \subsection{Common stuff} @@ -15485,8 +15556,8 @@ end {\IfBabelLayout{notabular}% {\chardef\bbl@tabular@mode\z@}% {\chardef\bbl@tabular@mode\@ne}}% Mixed, with LTR cols -\ifnum\bbl@bidimode>\@ne % Any bidi= except default=1 - \ifnum\bbl@tabular@mode=\@ne +\ifnum\bbl@bidimode>\@ne % Any lua bidi= except default=1 + \ifcase\bbl@tabular@mode\or % 1 \let\bbl@parabefore\relax \AddToHook{para/before}{\bbl@parabefore} \AtBeginDocument{% @@ -15510,7 +15581,18 @@ end \\\bbl@sreplace\\\@classz {\\\do@row@strut\<fi>}{\\\do@row@strut\<fi>\egroup}}}% {}}% - \fi} + \fi}% + \or % 2 + \let\bbl@parabefore\relax + \AddToHook{para/before}{\bbl@parabefore}% + \AtBeginDocument{% + \@ifpackageloaded{colortbl}% + {\bbl@replace\@tabular{$}{$% + \def\bbl@insidemath{0}% + \def\bbl@parabefore{\localerestoredirs}}% + \bbl@sreplace\@classz + {\hbox\bgroup\bgroup}{\hbox\bgroup\bgroup\localerestoredirs}}% + {}}% \fi % \end{macrocode} % @@ -15576,7 +15658,10 @@ end \let\bbl@NL@@tabular\@tabular \AtBeginDocument{% \ifx\bbl@NL@@tabular\@tabular\else - \bbl@replace\@tabular{$}{\bbl@nextfake$}% + \bbl@exp{\\\in@{\\\bbl@nextfake}{\[@tabular]}}% + \ifin@\else + \bbl@replace\@tabular{$}{\bbl@nextfake$}% + \fi \let\bbl@NL@@tabular\@tabular \fi}} {} @@ -23997,6 +24082,77 @@ Babel.cjk_breaks = { \edef#5{#2}% \edef#6{#3}} %</ca-buddhist> +% +% \subsection{Chinese} +% +% Brute force, with the Julian day of first day of each month. The +% table has been computed with the help of \textsf{python-lunardate} by +% Ricky Yeung, GPLv2 (but the code itself has not been used). The range +% is 2015-2044. +% +% \begin{macrocode} +%<*ca-chinese> +\ExplSyntaxOn +<@Compute Julian day@> +\def\bbl@ca@chinese#1-#2-#3\@@#4#5#6{% + \edef\bbl@tempd{\fp_eval:n{% + \bbl@cs@jd{#1}{#2}{#3} - 2457072.5 }}% + \count@\z@ + \@tempcnta=2015 + \bbl@foreach\bbl@cs@chinese@data{% + \ifnum##1>\bbl@tempd\else + \advance\count@\@ne + \ifnum\count@>12 + \count@\@ne + \advance\@tempcnta\@ne\fi + \bbl@xin@{,##1,}{,\bbl@cs@chinese@leap,}% + \ifin@ + \advance\count@\m@ne + \edef\bbl@tempe{\the\numexpr\count@+12\relax}% + \else + \edef\bbl@tempe{\the\count@}% + \fi + \edef\bbl@tempb{##1}% + \fi}% + \edef#4{\the\@tempcnta}% + \edef#5{\bbl@tempe}% + \edef#6{\the\numexpr\bbl@tempd-\bbl@tempb+1\relax}} +\def\bbl@cs@chinese@leap{% + 885,1920,2953,3809,4873,5906,6881,7825,8889,9893,10778} +\def\bbl@cs@chinese@data{0,29,59,88,117,147,176,206,236,266,295,325, + 354,384,413,443,472,501,531,560,590,620,649,679,709,738,% + 768,797,827,856,885,915,944,974,1003,1033,1063,1093,1122,% + 1152,1181,1211,1240,1269,1299,1328,1358,1387,1417,1447,1477,% + 1506,1536,1565,1595,1624,1653,1683,1712,1741,1771,1801,1830,% + 1860,1890,1920,1949,1979,2008,2037,2067,2096,2126,2155,2185,% + 2214,2244,2274,2303,2333,2362,2392,2421,2451,2480,2510,2539,% + 2569,2598,2628,2657,2687,2717,2746,2776,2805,2835,2864,2894,% + 2923,2953,2982,3011,3041,3071,3100,3130,3160,3189,3219,3248,% + 3278,3307,3337,3366,3395,3425,3454,3484,3514,3543,3573,3603,% + 3632,3662,3691,3721,3750,3779,3809,3838,3868,3897,3927,3957,% + 3987,4016,4046,4075,4105,4134,4163,4193,4222,4251,4281,4311,% + 4341,4370,4400,4430,4459,4489,4518,4547,4577,4606,4635,4665,% + 4695,4724,4754,4784,4814,4843,4873,4902,4931,4961,4990,5019,% + 5049,5079,5108,5138,5168,5197,5227,5256,5286,5315,5345,5374,% + 5403,5433,5463,5492,5522,5551,5581,5611,5640,5670,5699,5729,% + 5758,5788,5817,5846,5876,5906,5935,5965,5994,6024,6054,6083,% + 6113,6142,6172,6201,6231,6260,6289,6319,6348,6378,6408,6437,% + 6467,6497,6526,6556,6585,6615,6644,6673,6703,6732,6762,6791,% + 6821,6851,6881,6910,6940,6969,6999,7028,7057,7087,7116,7146,% + 7175,7205,7235,7264,7294,7324,7353,7383,7412,7441,7471,7500,% + 7529,7559,7589,7618,7648,7678,7708,7737,7767,7796,7825,7855,% + 7884,7913,7943,7972,8002,8032,8062,8092,8121,8151,8180,8209,% + 8239,8268,8297,8327,8356,8386,8416,8446,8475,8505,8534,8564,% + 8593,8623,8652,8681,8711,8740,8770,8800,8829,8859,8889,8918,% + 8948,8977,9007,9036,9066,9095,9124,9154,9183,9213,9243,9272,% + 9302,9331,9361,9391,9420,9450,9479,9508,9538,9567,9597,9626,% + 9656,9686,9715,9745,9775,9804,9834,9863,9893,9922,9951,9981,% + 10010,10040,10069,10099,10129,10158,10188,10218,10247,10277,% + 10306,10335,10365,10394,10423,10453,10483,10512,10542,10572,% + 10602,10631,10661,10690,10719,10749,10778,10807,10837,10866,% + 10896,10926,10956,10986,11015,11045,11074,11103} +\ExplSyntaxOff +%</ca-chinese> % \end{macrocode} % % \section{Support for Plain \TeX\ (\texttt{plain.def})} diff --git a/macros/latex/required/babel/base/babel.ins b/macros/latex/required/babel/base/babel.ins index 0bd796ff02..e5cb9bcd5a 100644 --- a/macros/latex/required/babel/base/babel.ins +++ b/macros/latex/required/babel/base/babel.ins @@ -26,7 +26,7 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. %% -\def\filedate{2023/07/15} +\def\filedate{2023/08/29} \def\batchfile{babel.ins} \input docstrip.tex @@ -167,6 +167,7 @@ \file{babel-ca-hebrew.tex}{\from{babel.dtx}{ca-hebrew}} \file{babel-ca-islamic.tex}{\from{babel.dtx}{ca-islamic}} \file{babel-ca-persian.tex}{\from{babel.dtx}{ca-persian}} + \file{babel-ca-chinese.tex}{\from{babel.dtx}{ca-chinese}} \file{xebabel.def}{\from{babel.dtx}{xetex}} \file{luababel.def}{\from{babel.dtx}{luatex}} \file{txtbabel.def}{\from{babel.dtx}{texxet}} diff --git a/macros/latex/required/babel/base/babel.pdf b/macros/latex/required/babel/base/babel.pdf Binary files differindex 39ea9b89e9..eea2d0ba2a 100644 --- a/macros/latex/required/babel/base/babel.pdf +++ b/macros/latex/required/babel/base/babel.pdf diff --git a/macros/latex/required/babel/base/bbcompat.dtx b/macros/latex/required/babel/base/bbcompat.dtx index 9f926505d5..0f958a13e2 100644 --- a/macros/latex/required/babel/base/bbcompat.dtx +++ b/macros/latex/required/babel/base/bbcompat.dtx @@ -30,7 +30,7 @@ % % \iffalse %<*dtx> -\ProvidesFile{bbcompat.dtx}[2023/07/15 v3.92] +\ProvidesFile{bbcompat.dtx}[2023/08/29 v3.93] %</dtx> % %% File 'bbcompat.dtx' |