summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2025-01-21 20:47:44 +0000
committerKarl Berry <karl@freefriends.org>2025-01-21 20:47:44 +0000
commit6d503719b274ea30f482a1c3c2180bb7748bda61 (patch)
tree8e1654f5a5347eeed4985e6e589b4bd9d188736d
parentaf9bd3251ad0ce31598ab362592f85a6ea344702 (diff)
bibcop (21jan25)
git-svn-id: svn://tug.org/texlive/trunk@73552 c570f23f-e606-0410-a88d-b1316a301751
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/bibcop/bibcop.pl111
-rw-r--r--Master/texmf-dist/doc/bibtex/bibcop/LICENSE.txt2
-rw-r--r--Master/texmf-dist/doc/bibtex/bibcop/README.md2
-rw-r--r--Master/texmf-dist/doc/bibtex/bibcop/bibcop.pdfbin266502 -> 266504 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/bibcop.12
-rw-r--r--Master/texmf-dist/doc/man/man1/bibcop.man1.pdfbin14456 -> 14234 bytes
-rwxr-xr-xMaster/texmf-dist/scripts/bibcop/bibcop.pl111
-rw-r--r--Master/texmf-dist/source/bibtex/bibcop/bibcop.dtx4
-rw-r--r--Master/texmf-dist/source/bibtex/bibcop/bibcop.ins4
-rw-r--r--Master/texmf-dist/tex/latex/bibcop/bibcop.sty4
10 files changed, 145 insertions, 95 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/bibcop/bibcop.pl b/Build/source/texk/texlive/linked_scripts/bibcop/bibcop.pl
index 48049e8b35e..828d2ed3a3a 100755
--- a/Build/source/texk/texlive/linked_scripts/bibcop/bibcop.pl
+++ b/Build/source/texk/texlive/linked_scripts/bibcop/bibcop.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# (The MIT License)
#
-# Copyright (c) 2022-2024 Yegor Bugayenko
+# Copyright (c) 2022-2025 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
@@ -21,7 +21,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-# 2024/11/13 0.0.23
+# 2025/01/21 0.0.24
package bibcop;
use warnings;
@@ -39,13 +39,14 @@ my %args = map { $_ => 1 } @ARGV;
my %blessed = (
'article' => ['doi', 'year', 'title', 'author', 'journal', 'volume', 'number', 'month?', 'publisher?', 'pages?'],
'inproceedings' => ['doi', 'booktitle', 'title', 'author', 'year', 'pages?', 'month?', 'organization?', 'volume?'],
- 'book' => ['title', 'author', 'year', 'publisher', 'doi?'],
+ 'incollection' => ['doi', 'booktitle', 'title', 'author', 'year', 'editor', 'pages?', 'month?', 'volume?', 'publisher?'],
+ 'book' => ['title', 'author', 'year', 'publisher', 'doi?', 'edition?'],
'phdthesis' => ['title', 'author', 'year', 'school', 'doi?'],
- 'misc' => ['title', 'author', 'year', 'eprint?', 'archiveprefix?', 'primaryclass?', 'month?', 'publisher?', 'organization?', 'doi?', 'howpublished?', 'note?', 'pages?', 'number?', 'volume?'],
+ 'misc' => ['title', 'author', 'year', 'eprint?', 'archiveprefix?', 'primaryclass?', 'month?', 'publisher?', 'organization?', 'doi?', 'howpublished?', 'note?'],
);
# See https://research.arizona.edu/faq/what-do-you-mean-when-you-say-use-title-case-proposalproject-titles
-my %minors = map { $_ => 1 } qw/in of at to by the a an and or as if up via yet nor but off on for into vs/;
+my %minors = map { $_ => 1 } qw/in of at to by the a an and or as if up via yet nor but off on for into vs versus/;
# Check the presence of mandatory tags.
sub check_mandatory_tags {
@@ -137,42 +138,45 @@ sub check_capitalization {
# Check that the 'author' is formatted correctly.
sub check_author {
my (%entry) = @_;
- if (not exists $entry{'author'}) {
- return;
- }
- if ($entry{'author'} =~ /^\{.+\}$/) {
- return;
- }
- my $author = clean_tex($entry{'author'});
- my @authors = split(/\s+and\s+/, $author);
- my $pos = 0;
- for my $a (@authors) {
- $pos += 1;
- if ($a eq 'others') {
+ my @tags = qw/author editor/;
+ foreach my $tag (@tags) {
+ if (not exists $entry{$tag}) {
next;
}
- if (index($a, ' ') != -1 and index($a, ',') == -1) {
- return "The last name should go first, all other names must follow, after a comma in @{[as_position($pos)]} 'author', as in 'Knuth, Donald E.'";
+ if ($entry{$tag} =~ /^\{.+\}$/) {
+ next;
}
- my $npos = 0;
- for my $name (split(/[ ,]+/, $a)) {
- $npos += 1;
- if (index($name, '{') != -1) {
- next;
- }
- if ($name =~ /^[A-Z]\.$/) {
+ my $author = clean_tex($entry{$tag});
+ my @authors = split(/\s+and\s+/, $author);
+ my $pos = 0;
+ for my $a (@authors) {
+ $pos += 1;
+ if ($a eq 'others') {
next;
}
- if ($name =~ /^[A-Z][^.]+$/) {
- next
- }
- if ($name =~ /^(van|de|der|dos)$/) {
- next
+ if (index($a, ' ') != -1 and index($a, ',') == -1) {
+ return "The last name should go first, all other names must follow, after a comma in @{[as_position($pos)]} '$tag', as in 'Knuth, Donald E.'";
}
- if ($name =~ /^[A-Z]$/) {
- return "A shortened name must have a tailing dot in @{[as_position($pos)]} 'author', as in 'Knuth, Donald E.'";
+ my $npos = 0;
+ for my $name (split(/[ ,]+/, $a)) {
+ $npos += 1;
+ if (index($name, '{') != -1) {
+ next;
+ }
+ if ($name =~ /^[A-Z]\.$/) {
+ next;
+ }
+ if ($name =~ /^[A-Z][^.]+$/) {
+ next
+ }
+ if ($name =~ /^(van|de|der|dos)$/) {
+ next
+ }
+ if ($name =~ /^[A-Z]$/) {
+ return "A shortened name must have a tailing dot in @{[as_position($pos)]} '$tag', as in 'Knuth, Donald E.'";
+ }
+ return "In @{[as_position($pos)]} '$tag' @{[as_position($npos)]} name looks suspicious ($name), use something like 'Knuth, Donald E. and Duane, Bibby'";
}
- return "In @{[as_position($pos)]} 'author' @{[as_position($npos)]} name looks suspicious ($name), use something like 'Knuth, Donald E. and Duane, Bibby'";
}
}
}
@@ -274,6 +278,7 @@ sub check_org_in_booktitle {
sub check_typography {
my (%entry) = @_;
my %symbols = (
+ '...' => 'ellipses',
'.' => 'dot',
',' => 'comma',
';' => 'semi-colon',
@@ -288,12 +293,12 @@ sub check_typography {
'[' => 'opening square bracket',
']' => 'closing square bracket',
);
- my @spaces_around = ( '---' );
+ my @need_spaces_around = ( '---', '...' );
my @no_spaces_around = ( '--', '-' );
my @no_space_before = ( '.', ',', ';', ':', '?', '!', ')', ']' );
my @no_space_after = ( '(', '[' );
- my @space_before = ( '(', '[' );
- my @space_after = ( ')', ']' );
+ my @need_space_before = ( '(', '[' );
+ my @need_space_after = ( ')', ']', ',' );
my @good_tails = ( 'Inc.', 'Ltd.' );
my @bad_tails = ( '.', ',', ';', ':', '-' );
foreach my $tag (keys %entry) {
@@ -305,7 +310,7 @@ sub check_typography {
}
my $value = $entry{$tag};
foreach my $s (@bad_tails) {
- if ($s eq '.' and $tag eq 'author') {
+ if ($s eq '.' and ($tag eq 'author' or $tag eq 'editor')) {
next;
}
my $good = 0;
@@ -321,7 +326,7 @@ sub check_typography {
}
}
foreach my $s (@no_space_before) {
- if ($value =~ /^.*\s\Q$s\E.*$/) {
+ if ($value =~ /^.*\s\Q$s\E(?!\Q$s\E).*$/) {
return "In the '$tag', do not put a space before the $symbols{$s}"
}
}
@@ -330,18 +335,18 @@ sub check_typography {
return "In the '$tag', do not put a space after the $symbols{$s}"
}
}
- foreach my $s (@space_before) {
+ foreach my $s (@need_space_before) {
if ($value =~ /^.*[^\{\s\\]\Q$s\E.*$/) {
return "In the '$tag', put a space before the $symbols{$s}"
}
}
- foreach my $s (@space_after) {
+ foreach my $s (@need_space_after) {
my $p = join('', @no_space_before);
if ($value =~ /^.*[^\\]\Q$s\E[^\}\s\Q$p\E].*$/) {
return "In the '$tag', put a space after the $symbols{$s}"
}
}
- foreach my $s (@spaces_around) {
+ foreach my $s (@need_spaces_around) {
if ($value =~ /^.*[^\s]\Q$s\E.*$/ or $value =~ /^.*\Q$s\E[^\s].*$/) {
return "In the '$tag', put spaces around the $symbols{$s}"
}
@@ -435,6 +440,26 @@ sub check_doi {
}
}
+# Check the right format of the 'howpublished.'
+sub check_howpublished {
+ my (%entry) = @_;
+ if (exists $entry{'howpublished'}) {
+ my $how = $entry{'howpublished'};
+ if (not $how =~ /^\\url\{.+\}$/) {
+ return "The format of the 'howpublished' is wrong, use \\url{} inside"
+ }
+ my $url = substr($how, 5, -1);
+ if (not $url =~ /^https?:\/\/.+$/) {
+ return "The format of the URL in 'howpublished' is wrong, doesn't start with https://: '$url'"
+ }
+ my $max = 64;
+ my $len = length($url);
+ if ($len gt $max) {
+ return "The length of the URL in 'howpublished' is too big ($len > $max), use URL shoftener: '$url'"
+ }
+ }
+}
+
# Check the right format of the 'year.'
sub check_year {
my (%entry) = @_;
@@ -1084,7 +1109,7 @@ if (@ARGV+0 eq 0 or exists $args{'--help'} or exists $args{'-?'}) {
" --latex Report errors in LaTeX format using the \\PackageWarningNoLine command\n\n" .
"If any issues, please, report to GitHub: https://github.com/yegor256/bibcop");
} elsif (exists $args{'--version'} or exists $args{'-v'}) {
- info('0.0.23 2024/11/13');
+ info('0.0.24 2025/01/21');
} else {
my ($file) = grep { not($_ =~ /^-.*$/) } @ARGV;
if (not $file) {
diff --git a/Master/texmf-dist/doc/bibtex/bibcop/LICENSE.txt b/Master/texmf-dist/doc/bibtex/bibcop/LICENSE.txt
index be1f11a290c..5e9c18584ec 100644
--- a/Master/texmf-dist/doc/bibtex/bibcop/LICENSE.txt
+++ b/Master/texmf-dist/doc/bibtex/bibcop/LICENSE.txt
@@ -1,6 +1,6 @@
(The MIT License)
-Copyright (c) 2022-2024 Yegor Bugayenko
+Copyright (c) 2022-2025 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/Master/texmf-dist/doc/bibtex/bibcop/README.md b/Master/texmf-dist/doc/bibtex/bibcop/README.md
index 04e5f0810f6..5cc044327de 100644
--- a/Master/texmf-dist/doc/bibtex/bibcop/README.md
+++ b/Master/texmf-dist/doc/bibtex/bibcop/README.md
@@ -87,7 +87,7 @@ perl tests.pl
You should see the `GREAT!` message.
-Copyright (c) 2022-2024 Yegor Bugayenko, MIT License
+Copyright (c) 2022-2025 Yegor Bugayenko, MIT License
[BLOG]: https://www.yegor256.com/2023/09/05/style-checker-for-bibtex-files.html
[INSTALL]: https://en.wikibooks.org/wiki/LaTeX/Installing_Extra_Packages
diff --git a/Master/texmf-dist/doc/bibtex/bibcop/bibcop.pdf b/Master/texmf-dist/doc/bibtex/bibcop/bibcop.pdf
index 7f0a788ad6b..1e73a102951 100644
--- a/Master/texmf-dist/doc/bibtex/bibcop/bibcop.pdf
+++ b/Master/texmf-dist/doc/bibtex/bibcop/bibcop.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/bibcop.1 b/Master/texmf-dist/doc/man/man1/bibcop.1
index cabc15c2ba7..871b99a57e1 100644
--- a/Master/texmf-dist/doc/man/man1/bibcop.1
+++ b/Master/texmf-dist/doc/man/man1/bibcop.1
@@ -1,4 +1,4 @@
-.TH bibcop 1 "2024/11/13"
+.TH bibcop 1 "2025/01/21"
.SH NAME
bibcop \- Style Checker and Fixer of BibTeX Files (.bib)
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/bibcop.man1.pdf b/Master/texmf-dist/doc/man/man1/bibcop.man1.pdf
index 6e33ffa61b4..188bcf5d049 100644
--- a/Master/texmf-dist/doc/man/man1/bibcop.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/bibcop.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/scripts/bibcop/bibcop.pl b/Master/texmf-dist/scripts/bibcop/bibcop.pl
index 48049e8b35e..828d2ed3a3a 100755
--- a/Master/texmf-dist/scripts/bibcop/bibcop.pl
+++ b/Master/texmf-dist/scripts/bibcop/bibcop.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# (The MIT License)
#
-# Copyright (c) 2022-2024 Yegor Bugayenko
+# Copyright (c) 2022-2025 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
@@ -21,7 +21,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-# 2024/11/13 0.0.23
+# 2025/01/21 0.0.24
package bibcop;
use warnings;
@@ -39,13 +39,14 @@ my %args = map { $_ => 1 } @ARGV;
my %blessed = (
'article' => ['doi', 'year', 'title', 'author', 'journal', 'volume', 'number', 'month?', 'publisher?', 'pages?'],
'inproceedings' => ['doi', 'booktitle', 'title', 'author', 'year', 'pages?', 'month?', 'organization?', 'volume?'],
- 'book' => ['title', 'author', 'year', 'publisher', 'doi?'],
+ 'incollection' => ['doi', 'booktitle', 'title', 'author', 'year', 'editor', 'pages?', 'month?', 'volume?', 'publisher?'],
+ 'book' => ['title', 'author', 'year', 'publisher', 'doi?', 'edition?'],
'phdthesis' => ['title', 'author', 'year', 'school', 'doi?'],
- 'misc' => ['title', 'author', 'year', 'eprint?', 'archiveprefix?', 'primaryclass?', 'month?', 'publisher?', 'organization?', 'doi?', 'howpublished?', 'note?', 'pages?', 'number?', 'volume?'],
+ 'misc' => ['title', 'author', 'year', 'eprint?', 'archiveprefix?', 'primaryclass?', 'month?', 'publisher?', 'organization?', 'doi?', 'howpublished?', 'note?'],
);
# See https://research.arizona.edu/faq/what-do-you-mean-when-you-say-use-title-case-proposalproject-titles
-my %minors = map { $_ => 1 } qw/in of at to by the a an and or as if up via yet nor but off on for into vs/;
+my %minors = map { $_ => 1 } qw/in of at to by the a an and or as if up via yet nor but off on for into vs versus/;
# Check the presence of mandatory tags.
sub check_mandatory_tags {
@@ -137,42 +138,45 @@ sub check_capitalization {
# Check that the 'author' is formatted correctly.
sub check_author {
my (%entry) = @_;
- if (not exists $entry{'author'}) {
- return;
- }
- if ($entry{'author'} =~ /^\{.+\}$/) {
- return;
- }
- my $author = clean_tex($entry{'author'});
- my @authors = split(/\s+and\s+/, $author);
- my $pos = 0;
- for my $a (@authors) {
- $pos += 1;
- if ($a eq 'others') {
+ my @tags = qw/author editor/;
+ foreach my $tag (@tags) {
+ if (not exists $entry{$tag}) {
next;
}
- if (index($a, ' ') != -1 and index($a, ',') == -1) {
- return "The last name should go first, all other names must follow, after a comma in @{[as_position($pos)]} 'author', as in 'Knuth, Donald E.'";
+ if ($entry{$tag} =~ /^\{.+\}$/) {
+ next;
}
- my $npos = 0;
- for my $name (split(/[ ,]+/, $a)) {
- $npos += 1;
- if (index($name, '{') != -1) {
- next;
- }
- if ($name =~ /^[A-Z]\.$/) {
+ my $author = clean_tex($entry{$tag});
+ my @authors = split(/\s+and\s+/, $author);
+ my $pos = 0;
+ for my $a (@authors) {
+ $pos += 1;
+ if ($a eq 'others') {
next;
}
- if ($name =~ /^[A-Z][^.]+$/) {
- next
- }
- if ($name =~ /^(van|de|der|dos)$/) {
- next
+ if (index($a, ' ') != -1 and index($a, ',') == -1) {
+ return "The last name should go first, all other names must follow, after a comma in @{[as_position($pos)]} '$tag', as in 'Knuth, Donald E.'";
}
- if ($name =~ /^[A-Z]$/) {
- return "A shortened name must have a tailing dot in @{[as_position($pos)]} 'author', as in 'Knuth, Donald E.'";
+ my $npos = 0;
+ for my $name (split(/[ ,]+/, $a)) {
+ $npos += 1;
+ if (index($name, '{') != -1) {
+ next;
+ }
+ if ($name =~ /^[A-Z]\.$/) {
+ next;
+ }
+ if ($name =~ /^[A-Z][^.]+$/) {
+ next
+ }
+ if ($name =~ /^(van|de|der|dos)$/) {
+ next
+ }
+ if ($name =~ /^[A-Z]$/) {
+ return "A shortened name must have a tailing dot in @{[as_position($pos)]} '$tag', as in 'Knuth, Donald E.'";
+ }
+ return "In @{[as_position($pos)]} '$tag' @{[as_position($npos)]} name looks suspicious ($name), use something like 'Knuth, Donald E. and Duane, Bibby'";
}
- return "In @{[as_position($pos)]} 'author' @{[as_position($npos)]} name looks suspicious ($name), use something like 'Knuth, Donald E. and Duane, Bibby'";
}
}
}
@@ -274,6 +278,7 @@ sub check_org_in_booktitle {
sub check_typography {
my (%entry) = @_;
my %symbols = (
+ '...' => 'ellipses',
'.' => 'dot',
',' => 'comma',
';' => 'semi-colon',
@@ -288,12 +293,12 @@ sub check_typography {
'[' => 'opening square bracket',
']' => 'closing square bracket',
);
- my @spaces_around = ( '---' );
+ my @need_spaces_around = ( '---', '...' );
my @no_spaces_around = ( '--', '-' );
my @no_space_before = ( '.', ',', ';', ':', '?', '!', ')', ']' );
my @no_space_after = ( '(', '[' );
- my @space_before = ( '(', '[' );
- my @space_after = ( ')', ']' );
+ my @need_space_before = ( '(', '[' );
+ my @need_space_after = ( ')', ']', ',' );
my @good_tails = ( 'Inc.', 'Ltd.' );
my @bad_tails = ( '.', ',', ';', ':', '-' );
foreach my $tag (keys %entry) {
@@ -305,7 +310,7 @@ sub check_typography {
}
my $value = $entry{$tag};
foreach my $s (@bad_tails) {
- if ($s eq '.' and $tag eq 'author') {
+ if ($s eq '.' and ($tag eq 'author' or $tag eq 'editor')) {
next;
}
my $good = 0;
@@ -321,7 +326,7 @@ sub check_typography {
}
}
foreach my $s (@no_space_before) {
- if ($value =~ /^.*\s\Q$s\E.*$/) {
+ if ($value =~ /^.*\s\Q$s\E(?!\Q$s\E).*$/) {
return "In the '$tag', do not put a space before the $symbols{$s}"
}
}
@@ -330,18 +335,18 @@ sub check_typography {
return "In the '$tag', do not put a space after the $symbols{$s}"
}
}
- foreach my $s (@space_before) {
+ foreach my $s (@need_space_before) {
if ($value =~ /^.*[^\{\s\\]\Q$s\E.*$/) {
return "In the '$tag', put a space before the $symbols{$s}"
}
}
- foreach my $s (@space_after) {
+ foreach my $s (@need_space_after) {
my $p = join('', @no_space_before);
if ($value =~ /^.*[^\\]\Q$s\E[^\}\s\Q$p\E].*$/) {
return "In the '$tag', put a space after the $symbols{$s}"
}
}
- foreach my $s (@spaces_around) {
+ foreach my $s (@need_spaces_around) {
if ($value =~ /^.*[^\s]\Q$s\E.*$/ or $value =~ /^.*\Q$s\E[^\s].*$/) {
return "In the '$tag', put spaces around the $symbols{$s}"
}
@@ -435,6 +440,26 @@ sub check_doi {
}
}
+# Check the right format of the 'howpublished.'
+sub check_howpublished {
+ my (%entry) = @_;
+ if (exists $entry{'howpublished'}) {
+ my $how = $entry{'howpublished'};
+ if (not $how =~ /^\\url\{.+\}$/) {
+ return "The format of the 'howpublished' is wrong, use \\url{} inside"
+ }
+ my $url = substr($how, 5, -1);
+ if (not $url =~ /^https?:\/\/.+$/) {
+ return "The format of the URL in 'howpublished' is wrong, doesn't start with https://: '$url'"
+ }
+ my $max = 64;
+ my $len = length($url);
+ if ($len gt $max) {
+ return "The length of the URL in 'howpublished' is too big ($len > $max), use URL shoftener: '$url'"
+ }
+ }
+}
+
# Check the right format of the 'year.'
sub check_year {
my (%entry) = @_;
@@ -1084,7 +1109,7 @@ if (@ARGV+0 eq 0 or exists $args{'--help'} or exists $args{'-?'}) {
" --latex Report errors in LaTeX format using the \\PackageWarningNoLine command\n\n" .
"If any issues, please, report to GitHub: https://github.com/yegor256/bibcop");
} elsif (exists $args{'--version'} or exists $args{'-v'}) {
- info('0.0.23 2024/11/13');
+ info('0.0.24 2025/01/21');
} else {
my ($file) = grep { not($_ =~ /^-.*$/) } @ARGV;
if (not $file) {
diff --git a/Master/texmf-dist/source/bibtex/bibcop/bibcop.dtx b/Master/texmf-dist/source/bibtex/bibcop/bibcop.dtx
index c9cceb2423f..6f61bc99096 100644
--- a/Master/texmf-dist/source/bibtex/bibcop/bibcop.dtx
+++ b/Master/texmf-dist/source/bibtex/bibcop/bibcop.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
% (The MIT License)
%
-% Copyright (c) 2022-2024 Yegor Bugayenko
+% Copyright (c) 2022-2025 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{bibcop}
%<*package>
-[2024/11/13 0.0.23 Style Checker of Bibliography Files]
+[2025/01/21 0.0.24 Style Checker of Bibliography Files]
%</package>
%<*driver>
\documentclass{ltxdoc}
diff --git a/Master/texmf-dist/source/bibtex/bibcop/bibcop.ins b/Master/texmf-dist/source/bibtex/bibcop/bibcop.ins
index 0072e39b087..4a53c56ef75 100644
--- a/Master/texmf-dist/source/bibtex/bibcop/bibcop.ins
+++ b/Master/texmf-dist/source/bibtex/bibcop/bibcop.ins
@@ -1,6 +1,6 @@
%% (The MIT License)
%%
-%% Copyright (c) 2022-2024 Yegor Bugayenko
+%% Copyright (c) 2022-2025 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) 2022-2024 Yegor Bugayenko
+Copyright (c) 2022-2025 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/Master/texmf-dist/tex/latex/bibcop/bibcop.sty b/Master/texmf-dist/tex/latex/bibcop/bibcop.sty
index e9d5f2e2c30..d04a3722a36 100644
--- a/Master/texmf-dist/tex/latex/bibcop/bibcop.sty
+++ b/Master/texmf-dist/tex/latex/bibcop/bibcop.sty
@@ -7,7 +7,7 @@
%% bibcop.dtx (with options: `package')
%% (The MIT License)
%%
-%% Copyright (c) 2022-2024 Yegor Bugayenko
+%% Copyright (c) 2022-2025 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
@@ -31,7 +31,7 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{bibcop}
-[2024/11/13 0.0.23 Style Checker of Bibliography Files]
+[2025/01/21 0.0.24 Style Checker of Bibliography Files]