diff options
author | Denis Bitouzé <dbitouze@wanadoo.fr> | 2021-02-25 18:23:07 +0000 |
---|---|---|
committer | Denis Bitouzé <dbitouze@wanadoo.fr> | 2021-02-25 18:23:07 +0000 |
commit | c6101f91d071883b48b1b4b51e5eba0f36d9a78d (patch) | |
tree | 1bf7f5a881d7a4f5c5bf59d0b2821943dd822372 /Build/source/texk/texlive/linked_scripts/latexpand | |
parent | 07ee7222e389b0777456b427a55c22d0e6ffd267 (diff) |
French translation for tlmgr updated
git-svn-id: svn://tug.org/texlive/trunk@57912 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/texlive/linked_scripts/latexpand')
-rwxr-xr-x | Build/source/texk/texlive/linked_scripts/latexpand/latexpand | 665 |
1 files changed, 0 insertions, 665 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/latexpand/latexpand b/Build/source/texk/texlive/linked_scripts/latexpand/latexpand deleted file mode 100755 index e7de1965f1c..00000000000 --- a/Build/source/texk/texlive/linked_scripts/latexpand/latexpand +++ /dev/null @@ -1,665 +0,0 @@ -#!/usr/bin/perl -# Inspired by latexpand by D. Musliner, University of Michigan -# 2012-2019: Matthieu Moy <git@matthieu-moy.fr> -# BSD License - -use strict; -use Cwd; -use Getopt::Long; -use IO::Handle; -use File::Spec; - -my $TEXINPUTS = $ENV{'TEXINPUTS'}; -# By default, search in current directory. We use '.' and not getcwd() -# to avoid issues if the working directory contains a ':' character. -if (!$TEXINPUTS) { $TEXINPUTS = '.'; } - -my $verbose; -my $keep_comments; -my $keep_includes; -my $empty_comments; -my $help; -my $long_help; -my $output; -my $explain; -my $show_graphics; -my $graphics_extensions = ":.pdf:.png:.jpg:.eps"; -my $expand_usepackage; -my $expand_bbl; -my $biber; -my $fatal; -my $version; -my $makeatletter; -my $inside_import; -my $in_enc = "bytes"; -my $out_enc = "bytes"; - -GetOptions ( - 'h' => \$help, - 'help' => \$long_help, - 'verbose|v' => \$verbose, - 'keep-comments' => \$keep_comments, - 'keep-includes' => \$keep_includes, - 'empty-comments' => \$empty_comments, - 'output|o=s' => \$output, - 'explain' => \$explain, - 'show-graphics' => \$show_graphics, - 'graphics-extensions' => \$graphics_extensions, - 'expand-usepackage' => \$expand_usepackage, - 'expand-bbl=s' => \$expand_bbl, - 'biber=s' => \$biber, - 'fatal' => \$fatal, - 'version' => \$version, - 'makeatletter' => \$makeatletter, - 'in-encoding=s' => \$in_enc, - 'out-encoding=s' => \$out_enc, -) or pod2usage_wrapper(2); -version() if $version; -pod2usage_wrapper(0) if $help; -pod2usage_wrapper(-exitstatus => 0, -output => \*STDOUT, -verbose => 2) if $long_help; - -sub pod2usage_wrapper -{ - # Like pod2usage, but fall back to a simpler implem in case - # pod2usage can't be found. - if (eval {require Pod::Usage;1;} ne 1) { - print "Please install perldoc and Pod::Usage to get proper help.\n"; - my $started = 0; - open (my $in, '<', "$0") or die $!; - while (<$in>) { - if ($started) { - print; - } - if (/^__END__$/) { - $started = 1; - } - } - } else { - Pod::Usage->import(); - pod2usage(@_); - } -} - -sub get_version -{ - # $VERSION's value will be substituted by 'make dist', but the - # next line won't (the string has to be broken to avoid it). - my $VERSION = 'v1.6'; - if ($VERSION eq '@LATEXPAND' . '_VERSION@') { - my($vol,$dir,$file) = File::Spec->splitpath($0); - chdir($dir); - $VERSION = `git describe --tags HEAD 2>/dev/null`; - } - if ($VERSION eq '') { - $VERSION = '<unknown version>'; - } - $VERSION =~ s/^\s+|\s+$//g; - return $VERSION; -} - -sub version -{ - print "latexpand version ". get_version() .".\n"; - exit(0); -} - -my $nl = ""; -if ($empty_comments) { - $nl = "%\n"; -} - -if ($output && $output ne "-") { - open (my $OUTPUT, '>', "$output") or die $!; - STDOUT->fdopen(\*$OUTPUT, 'w') or die $!; -} - -sub say -{ - if ($verbose) { - print STDERR "$_[0]"; - } -} - -my $makeatletter_found; -my $in_preamble; - -use open IN => ":$in_enc", OUT => ":$out_enc"; - -foreach my $file (@ARGV) -{ - say "processing $file\n"; - $makeatletter_found = 0; - $in_preamble = 1; - $inside_import = ""; - process_file($file, " "); -} - -sub cat_file -{ - my $file = shift; - open (my $INFILE, "<", $file) || die "could not open input file '$file'\n"; - while (<$INFILE>) { - print; - } - close ($INFILE); -} - -sub process_file -{ - my $file = shift; - my $prefix = (shift || ""); - my $in_comment = 0; - open(my $FILE, "<", $file) or die "could not open input file '$file'\n"; - my $commented_newline = 0; - while (my $line = <$FILE>) { - if ($line =~ /^[ \t]*\\endinput/) { - $line =~ s/(\\endinput.*)\n/% $1/; - $in_comment = 1; - process_line($line, $prefix, \$commented_newline); - last; - } - process_line($line, $prefix, \$commented_newline, $file); - if ($line =~ /^%.*[^\n]\z/ || $line =~ /[^\\]%.*[^\n]\z/) { - # file ends with a comment not ending with a newline - print "\n"; - } - # Garbage at end of line after \end{document} is - # ignored by LaTeX, but we don't allow anything before - # to avoid e.g. \verb|\end{document}| from terminating - # the file. - if (!$keep_comments && $line =~ /^[ \t]*\\end\{document\}/) { - last; - } - } - close($FILE); - return $in_comment; -} - -sub process_line -{ - my ($line, $prefix, $commented_newline, $file) = @_; - $_ = $line; - if ($$commented_newline) { - # Leading whitespaces after a comment is ignored. - # There's no space in: - # Line 1% - # Line 2. - # Match just space and tabs (\s would match \n) - s/^[ \t]*//; - if (/^$/) { - # Deal with: - # - # Line 1 % comment - # - # Line 2 - # - # The newline after Line 1 is commented, but we still - # want a new paragraph. We strip the comment together - # with its newline, but re-add a newline to chnge - # paragraph here if needed: - print "\n"; - } - } - $$commented_newline = 0; - # Consider \makeatletter only in preamble, because we do want - # to warn on \someCommand{\makeatletter\command@with@arobase}. - if ($in_preamble && /^[^%]*\\makeatletter/) { - $makeatletter_found = 1; - } - if ($in_preamble && /^[^%]*\\makeatother/) { - $makeatletter_found = 0; - } - my $command; - if (!$makeatletter && !$makeatletter_found - && (($command) = /^[^%]*(\\[[:alpha:]]*@[[:alpha:]]*)/) - && ($command ne '\@')) { - print STDERR "Warning: command $command containing @ found in\n"; - print STDERR "Warning: $file.\n"; - print STDERR "Warning: consider using --makeatletter if the result is not compilable.\n"; - } - - # non-comment is a sequence of: - # - escaped character (\\.), including \% and \\ - # - neither '%' nor '\'. - my $NON_COMMENT = '([^\\\\%]|\\\\.)*'; - - unless ($keep_comments) { - if (!$empty_comments) { - # Include \n in pattern to avoid matching - # comments at end of files - - # remove comments + whitespace-only lines completely - if (s/^\s*%.*\n//) { - $$commented_newline = 1; - } - - # Special-case commands at end of line. We - # don't want "\\foo%\nbar" to become - # "\\foobar" - if (s/^($NON_COMMENT\\[[:alpha:]@]+)%.*\n/$1 /) { - $$commented_newline = 1; - } elsif (s/^($NON_COMMENT)%.*\n/$1/) { - # remove only the comment if the line has actual content - $$commented_newline = 1; - } - } - # Apply the "empty comments" treatment unconditionally - # for comments not matched above (it doesn't harm to - # keep an empty comment sometimes, but it may harm to - # leave a real comment if the goal was to strip them). - s/^(([^\\%]|\\.)*)%.*$/$1%/; - } - - unless ($keep_includes) { - # \input{foo.tex} - my $ARGBRACES = '\{\\s*([^"}\\s][^}]*)(\\s*)\}'; - # \input{"foo bar.tex"} - my $ARGQUOTED = '\{\\s*"([^"]*)"(\\s*)\}'; - # \input foo.tex - my $ARGSPACES = '\\s([^\{\\s][^\\s]+?)\\s()'; - my $ARGUMENT = "\\s*?(?|$ARGBRACES|$ARGQUOTED|$ARGSPACES)"; - - if (my ($before, $ignored, $full_filename, $trailing, $after) - = /^($NON_COMMENT)\\include$ARGUMENT(.*)$/) { - $full_filename = find_tex_file($full_filename . ".tex"); - if ($full_filename) { - say $prefix . "Found include for file: $full_filename\n"; - print $before . $nl; - print '\clearpage{}' . $nl; - print "% start include $full_filename\n" if ($explain); - my $in_comment = process_file($full_filename, $prefix . " "); - if ($explain) { - print " % end include $full_filename\n"; - } elsif ($in_comment) { - print "\n"; - } - print '\clearpage{}' . $nl; - print $nl . $after . "\n"; - $_ = ""; - } - } elsif (my ($before, $ignored, $full_filename, $trailing, $after) - = /^($NON_COMMENT)\\input$ARGUMENT(.*)$/) { - if ($inside_import) { - $full_filename = $inside_import . $full_filename; - } - $full_filename = find_tex_file($full_filename, ":.tex"); - if ($full_filename) { - say $prefix . "Found input for file: $full_filename\n"; - # Surprisingly, space after filename - # in \input{foo.tex } is inserted - # _before_ the inclusion. Apply this - # rule in latexpand. - print $before . $trailing . $nl; - print "% start input $full_filename\n" if ($explain); - my $in_comment = process_file($full_filename, $prefix . " "); - if ($explain) { - print " % end input $full_filename\n"; - } elsif ($in_comment) { - print "\n"; - } - if ($after =~ /[^\s]/) { - # LaTeX produces this space, so let's do it also - print " " . $nl . $after . "\n"; - } else { - print " "; - } - $_ = ""; - } - } elsif (my ($before, $ignored, $dir, $ignored, $full_filename, $ignored, $after) - = /^($NON_COMMENT)\\(?:sub)?import$ARGUMENT$ARGUMENT(.*)$/) { - if ($explain) { - print "% dir " . $dir ."\n"; - print "% full_filename " . $full_filename ."\n"; - print "% after " . $after ."\n"; - print "% inside_import $inside_import\n"; - } - $full_filename = $dir . $full_filename; - if ($inside_import) { - $full_filename = $inside_import . $full_filename; - } - print "% cat(inside_import,dir,full_filename) " . $full_filename ."\n" if ($explain); - $full_filename = find_tex_file($full_filename, ":.tex"); - if ($full_filename) { - say $prefix . "Found input for file: $full_filename\n"; - print $before . $nl; - print "% start input $full_filename\n" if ($explain); - my $previous_import_dir = $inside_import; - $inside_import = $inside_import . $dir; - my $in_comment = process_file($full_filename, $prefix . " "); - $inside_import = $previous_import_dir; - if ($explain) { - print " % end input $full_filename\n"; - } elsif ($in_comment) { - print "\n"; - } - if ($after =~ /[^\s]/) { - # LaTeX produces this space, so let's do it also - print " " . $nl . $after . "\n"; - } else { - print " "; - } - $_ = ""; - } - } elsif (my ($before, $ignored, $args, $full_filename, $ignored, $after) - = /^($NON_COMMENT)\\includegraphics[\[\s]+(.*?)[\s\]]$ARGUMENT(.*)$/) { - if ($explain) { - print "% inside_import " . $inside_import ."\n"; - print "% before " . $before ."\n"; - print "% ignored " . $ignored ."\n"; - print "% args " . $args ."\n"; - print "% full_filename " . $full_filename ."\n"; - print "% after " . $after ."\n"; - } - if ($inside_import) { - $full_filename = $inside_import . $full_filename; - print "$before\\includegraphics[$args]{$full_filename}$after\n"; - $_ = ""; - } - } elsif (my ($before, $ignored, $args, $full_filename, $ignored, $after) - = /^($NON_COMMENT)\\lstinputlisting[\[\s]+(.*?)[\s\]]$ARGUMENT(.*)$/) { - if ($explain) { - print "% inside_import " . $inside_import ."\n"; - print "% before " . $before ."\n"; - print "% ignored " . $ignored ."\n"; - print "% args " . $args ."\n"; - print "% full_filename " . $full_filename ."\n"; - print "% after " . $after ."\n"; - } - if ($inside_import) { - $full_filename = $inside_import . $full_filename; - print "$before\\lstinputlisting[$args]{$full_filename}$after\n"; - $_ = ""; - } - } - } - if ($expand_usepackage) { - # Don't bother with before and after text, we just require the - # usepackage to be alone on its line. - if (my ($package_name) = /^\s*\\usepackage\{([^\}]*)\}\s*(%.*)?$/) { - my $full = find_file($package_name . ".sty", $TEXINPUTS); - if ($full) { - say $prefix . "Found package file: $full\n"; - process_file($full, $prefix . " "); - $_ = ""; - # Forget about any commented newline - # before the \usepackage: - $$commented_newline = 0; - } else { - say $prefix . "Not including external package $package_name\n"; - } - } - } - if ($expand_bbl) { - if (my ($before, $bib_name, $after) - = /^(.*)\\(?:bibliography|bibselect)\{([^\}]*)\}(.*)$/) { - # The BBL file is not necessarily $bib_name. - # Take it from the command-line. - print $before . $nl; - say $prefix . "Expanding BBL file: $expand_bbl\n"; - process_file($expand_bbl, $prefix . " "); - print " " . $nl . $after . "\n"; - $_ = ""; - } - } - if ($biber) { - if (my ($before, $after) - = /^(.*)\\(?:addbibresource)\{[^\}]*\}(.*)$/) { - # See https://tex.stackexchange.com/questions/166518/biblatex-include-bbl-problem-with-verb-field/166526#166526 - my $biber_noext = $biber; - $biber_noext =~ s/.bbl//; - print $before . $nl; - say $prefix . "Expanding Biber BBL file: $biber\n"; - print '\begin{filecontents*}{' . $biber . '}' . "\n"; - cat_file($biber); - print "\n"; - print '\end{filecontents*} - -\usepackage{xpatch} - -%Patch the biblatex input command. -%replace "testinput-bbl" if you change the name above. -%disable if you want to run biblatex/biber normally -\makeatletter -\patchcmd\blx@bblinput{\blx@blxinit} - {\blx@blxinit - \def\jobname{' . $biber_noext . '}%new jobname - }{}{\fail} -\makeatother - '; - say $prefix . "End expansion of Biber BBL file: $biber\n"; - print " " . $nl . $after . "\n"; - $_ = ""; - } - } - if ($show_graphics) { - if (/\\includegraphics(\[[^\]]*\])?{([^}]*)}/) { - my $full_filename = $2; - if ($inside_import) { - $full_filename = $inside_import . $full_filename; - } - my $full = find_tex_file($full_filename, $graphics_extensions); - say $prefix . "needs graphics file: "; - print STDERR "$full\n"; - } - } - if (/^[ \t]*\\begin\{document\}/) { - $in_preamble = 0; - if ($makeatletter) { - print '\makeatletter' . $nl; - } - } - print; -} - -sub unquote -{ - my $str = shift; - my $x = substr($str, 0, 1); - my $y = substr($str, -1, 1); - if ($x eq $y && ($x eq '"' || $x eq "'")) { - $str = substr($str, 1, -1); - } - # There's a weird LaTeX syntax: \include{"file\space - # with\space spaces"}, so remove these \space when unquoting. - $str =~ s/\\space / /g; - return $str; -} - -# search $1 in $TEXINPUTS, with possible extensions in $2 -sub find_tex_file -{ - my $file = unquote(shift); - my $extensions = (shift || ":"); - foreach my $ext (split(':', $extensions, -1)) { - my $full = find_file_global($file . $ext); - if ($full) { - return $full; - } - } - if ($fatal) { - die "ERROR: Could not find file [$file]\n"; - } else { - print STDERR "Warning: Could not find file [$file]\n"; - return; - } -} - -sub find_file_global -{ - my $file = shift; - if (open(my $fh, "-|", "kpsewhich", $file)) { - my $full = <$fh>; - $full =~ s/\s+$//; - close($fh); - if ($full) { - return $full; - } - } - # Should be useless, but fall-back in case kpsewhich fails (or is not installed, or ...): - return find_file($file, $TEXINPUTS); -} - -# Find files, not searching for global files (to allow not expanding global .sty packages) -sub find_file -{ - my ($file, $path) = @_; - if (File::Spec->file_name_is_absolute($file)) { - if (-e "$file" && ! -d "$file") { - return $file; - } else { - return; - } - } - - # TEXINPUTS=...: (trailing :) means "append default search - # directories". We don't want global directories here, but - # still add . that may be needed. - if (substr($path, -1) eq ':') { - $path .= '.'; - } - foreach my $dir (split(':', $path)) { - if (-e "$dir/$file" && ! -d "$dir/$file") { - return("$dir/$file"); - } - } - return; -} - - -__END__ - -=head1 NAME - -latexpand - Flatten LaTeX file by expanding \include and \input, ... and remove comments - -=head1 SYNOPSIS - -latexpand [options] FILE... - -=head2 Options: - - --verbose show what's going on - --keep-comments don't strip comments (comments are lines - starting with %, and anything below - \end{document}) - --empty-comments keep empty comments (i.e. % at end of lines) for clarity - --keep-includes don't expand \input and \include directives - --expand-usepackage - Expand \usepackage{...} directives if the - corresponding .sty file is found in - $TEXINPUTS (or the current directory if - $TEXINPUTS is not set) - --expand-bbl FILE - Expand the bibliography by inlining FILE - (should be a *.bbl file) - --biber FILE Include \bibliography{} with FILE's content, - as needed by biblatex with the biber backend. - (similar to --expand-bbl FILE, but for - biber+biblatex). - --help this help message - --output <file>, -o <file> - generate output in <file> - --explain generate explanatory comments in output - --show-graphics show included graphics - --graphics_extensions - colon-separated list of possible graphics extensions - (used by --show-graphics to find the actual graphics files) - --fatal Die in case a file can't be found. - --makeatletter Insert a \makeatletter in the preamble. In some - rare cases it may break your document, but it - may help fixing bad interactions between - @-commands and inclusion (see BUGS section). - --in-encoding FMT, --out-encoding FMT - File encoding used by input and output files. - This uses the same syntax as PerlIO's layers. - Example: - --in-encoding 'encoding(UTF-8)' - The default is 'bytes' and should always work. - -=head1 USES - -The most common use of latexpand is to simplify distribution of source -LaTeX files, typically to satisfy the requirement of editors and -archival sites (springer, arXiv.org, ...) who force the authors to -submit sources. One does not necessarily want to submit sources with -comments, and uploading a document made of several files including -each other is a bit painful. By default, latexpand answers both -problems by outputing a single LaTeX file that contain no comment. - -=head1 GETTING LATEXPAND - -The latest version of latexpand is available here: - - https://gitlab.com/latexpand/latexpand - -Versions are uploaded to ctan.org from time to time: - - http://www.ctan.org/pkg/latexpand - -=head1 BUGS - -Please, report bugs on the issue tracker on the project site: - - https://gitlab.com/latexpand/latexpand/issues - -=head2 Known bugs - -=head3 Verbatim - -latexpand currently ignores \begin{verbatim} ... \end{verbatim}, and -will therefore process any \include, \input, ... directives that -appear within verbatim environments (while it shouldn't). - -LaTeX comments inside verbatim environments are also incorrectly -stripped. You can use --keep-comments as a workaround to avoid this. - -=head3 Comment environment - -It would be nice to remove code between \begin{comment} and -\end{comment} too if \usepackage{comment} is used. - -Code like - - foo% - \begin{comment} - -will produce the incorrect - - foo\begin{comment} - -A workaround is to use --empty-comments when such tricky usage of the -comments package is done. - -=head3 \makeatletter and use with transfig/xfig with \scalebox{} - -If \input{} or \include{} appears as argument to a command, and the -file included contains \makeatletter, then after expansion, the -\makeatletter and the @-command appear as argument to the command, -which is forbidden because the argument is parsed (and the @-command -badly tokenized) before being executed. - -This happens with - - \scalebox{ \input{file-generated-by-xfig.pdf_t} } - -Workaround: add \makeatletter before the scalebox manually in your -code, like - - \makeatletter{} - \scalebox{ \input{file-generated-by-xfig.pdf_t} } - \makeatother{} - -In the case of xfig generated files, it is necessary only for the -first occurence. - -A more brute-force workaround is to use latexpand --makeatletter. - -=head1 SEE ALSO - -Instructions to include only the relevant .bib items (french): - -https://lacl.fr/~caubert/notes/portabilite-du-tex.html#dependances - -=head1 VERSION - -This is latexpand version v1.6. |