summaryrefslogtreecommitdiff
path: root/macros/luatex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-07-18 03:01:14 +0000
committerNorbert Preining <norbert@preining.info>2024-07-18 03:01:14 +0000
commit3ce3d19f5ec8a431281019a114993df9289cb032 (patch)
treef13f90e8aedf5f170a14565745bbda1fe18f8576 /macros/luatex
parent7f670cc0d3cf52e69f647a46bb7330b774ac0a7d (diff)
CTAN sync 202407180301
Diffstat (limited to 'macros/luatex')
-rw-r--r--macros/luatex/generic/luamplib/NEWS7
-rw-r--r--macros/luatex/generic/luamplib/luamplib.dtx391
-rw-r--r--macros/luatex/generic/luamplib/luamplib.pdfbin234171 -> 239222 bytes
-rw-r--r--macros/luatex/generic/luamplib/test-luamplib-latex.tex29
-rw-r--r--macros/luatex/generic/luamplib/test-luamplib-plain.tex14
-rw-r--r--macros/luatex/latex/tango/README13
-rw-r--r--macros/luatex/latex/tango/doc/tango-en.pdfbin160181 -> 160307 bytes
-rw-r--r--macros/luatex/latex/tango/doc/tango-en.tex32
-rw-r--r--macros/luatex/latex/tango/doc/tango-fr.pdfbin170145 -> 169741 bytes
-rw-r--r--macros/luatex/latex/tango/doc/tango-fr.tex45
-rw-r--r--macros/luatex/latex/tango/lualatex/tango.cls (renamed from macros/luatex/latex/tango/latex/tango.cls)255
11 files changed, 611 insertions, 175 deletions
diff --git a/macros/luatex/generic/luamplib/NEWS b/macros/luatex/generic/luamplib/NEWS
index 57324895f8..c97974fc20 100644
--- a/macros/luatex/generic/luamplib/NEWS
+++ b/macros/luatex/generic/luamplib/NEWS
@@ -1,8 +1,13 @@
History of the luamplib package
+2024/07/17 2.34.0
+ * support transparency group with metafun format
+ * fix regarding default value in circular fading mode
+ * fix regarging the scope of graphics state
+
2024/07/14 2.33.1
* refactor the manual, including some minor items undocumented so far
- * improve fade routine to get possibly smaller pdf file
+ * improve fading routine to get possibly smaller pdf file
2024/07/08 2.33.0
* provide a new metapost operator 'withfademethod' and related macros,
diff --git a/macros/luatex/generic/luamplib/luamplib.dtx b/macros/luatex/generic/luamplib/luamplib.dtx
index a7e44a487e..44500e957c 100644
--- a/macros/luatex/generic/luamplib/luamplib.dtx
+++ b/macros/luatex/generic/luamplib/luamplib.dtx
@@ -85,7 +85,7 @@ See source file '\inFileName' for licencing and contact information.
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{luamplib.drv}%
- [2024/07/14 v2.33.1 Interface for using the mplib library]%
+ [2024/07/17 v2.34.0 Interface for using the mplib library]%
\documentclass{ltxdoc}
\usepackage{metalogo,multicol,mdwlist,fancyvrb,xspace}
\usepackage[x11names]{xcolor}
@@ -153,7 +153,7 @@ See source file '\inFileName' for licencing and contact information.
% \author{Hans Hagen, Taco Hoekwater, Elie Roux, Philipp Gesang and Kim Dohyun\\
% Current Maintainer: Kim Dohyun\\
% Support: \url{https://github.com/lualatex/luamplib}}
-% \date{2024/07/14 v2.33.1}
+% \date{2024/07/17 v2.34.0}
%
% \maketitle
%
@@ -219,14 +219,14 @@ See source file '\inFileName' for licencing and contact information.
% the lua table containing metapost code
% which will
% be automatically inserted at the beginning and ending of each metapost code chunk.
-% \begin{verbatim}
+%\begin{verbatim}
% \everymplib{ beginfig(0); }
% \everyendmplib{ endfig; }
% \begin{mplibcode}
% % beginfig/endfig not needed
% draw fullcircle scaled 1cm;
% \end{mplibcode}
-% \end{verbatim}
+%\end{verbatim}
%
% \paragraph{\cs{mplibsetformat\{plain\char"7C metafun\}}}
% There are (basically) two formats for metapost: \emph{plain} and
@@ -236,15 +236,24 @@ See source file '\inFileName' for licencing and contact information.
%
% \textsc{n.b.} As \emph{metafun} is such a complicated format,
% we cannot support all the functionalities producing special effects provided by \emph{metafun}.
-% At least, however, transparency (actually opacity) and shading (gradient colors) effects
+% At least, however, transparency (actually opacity), transparency group, and shading (gradient colors)
% are fully supported,
% and outlinetext is supported by our own alternative |mpliboutlinetext| (see below \S\,1.2).
%
% \leavevmode\llap{\textcolor{red}{☞}\kern1.2\parindent}\relax
% Among these, transparency is so simple that you can apply it to an object,
% even with the \emph{plain} format,
-% just by appending |withprescript "tr_transparency=|\emph{<number>}|"|, where
-% $0 \le \hbox{\emph{<number>}} \le 1$, to the sentence.
+% just by appending |withprescript "tr_transparency=|\emph{<number>}|"| to the sentence.
+% ($0 \le \hbox{\emph{<number>}} \le 1$)
+%
+% As for transparency group, the current \emph{metafun} document \S\,8.8 is not correct.
+% The true syntax is:
+%\begin{verbatim}
+% draw <picture>|<path> asgroup <string>
+%\end{verbatim}
+% where \emph{<string>} should be |""| (empty), |"isolated"|, |"knockout"|, or |"isolated,knockout"|.
+% Beware that currently many of the PDF rendering applications, except Adobe Acrobat Reader,
+% cannot properly render the isolated or knockout effect.
%
% One thing worth mentioning about shading is:
% when a color expression is given in string type,
@@ -277,14 +286,14 @@ See source file '\inFileName' for licencing and contact information.
% each figure box can be freely moved horizontally or vertically.
% Also, a box number can be assigned to a figure box, allowing it to be
% reused later.
-% \begin{verbatim}
+%\begin{verbatim}
% \mplibcode
% verbatimtex \moveright 3cm etex; beginfig(0); ... endfig;
% verbatimtex \leavevmode etex; beginfig(1); ... endfig;
% verbatimtex \leavevmode\lower 1ex etex; beginfig(2); ... endfig;
% verbatimtex \endgraf\moveright 1cm etex; beginfig(3); ... endfig;
% \endmplibcode
-% \end{verbatim}
+%\end{verbatim}
% \textsc{n.b.} \cs{endgraf} should be used instead of \cs{par} inside
% |verbatimtex ... etex|.
%
@@ -292,7 +301,7 @@ See source file '\inFileName' for licencing and contact information.
% between |beginfig()| and |endfig| will be inserted
% after flushing out the metapost figure.
% As shown in the example below, |VerbatimTeX()| is a synonym of |verbatimtex| |...| |etex|.
-% \begin{verbatim}
+%\begin{verbatim}
% \mplibcode
% D := sqrt(2)**7;
% beginfig(0);
@@ -301,7 +310,7 @@ See source file '\inFileName' for licencing and contact information.
% endfig;
% \endmplibcode
% diameter: \Dia bp.
-% \end{verbatim}
+%\end{verbatim}
%
% By contrast,
% when |\mpliblegacybehavior{disabled}| is declared, any
@@ -309,7 +318,7 @@ See source file '\inFileName' for licencing and contact information.
% sequentially one by one.
% So, some \TeX\ code in |verbatimtex ... etex| will have effects on
% following |btex| |...| |etex| codes.
-% \begin{verbatim}
+%\begin{verbatim}
% \begin{mplibcode}
% beginfig(0);
% draw btex ABC etex;
@@ -318,7 +327,7 @@ See source file '\inFileName' for licencing and contact information.
% draw btex GHI etex shifted (2cm,0); % bold face
% endfig;
% \end{mplibcode}
-% \end{verbatim}
+%\end{verbatim}
%
% \paragraph{\cs{mplibtextextlabel\{enable\char"7C disable\}}}
% Default: |disable|.
@@ -347,11 +356,11 @@ See source file '\inFileName' for licencing and contact information.
% in \LaTeX{} |mplibcode| environment.
% Plain \TeX\ users also can use this functionality.
% The syntax for \LaTeX\ is:
-% \begin{verbatim}
+%\begin{verbatim}
% \begin{mplibcode}[instanceName]
% % some mp code
% \end{mplibcode}
-% \end{verbatim}
+%\end{verbatim}
% The behavior is as follows.
% \begin{itemize}
% \item All the variables and functions are shared
@@ -371,10 +380,10 @@ See source file '\inFileName' for licencing and contact information.
% Unnamed \cs{everymplib} affects not only those instances with no name,
% but also those with name but with no corresponding \cs{everymplib}.
% The syntax is:
-% \begin{verbatim}
+%\begin{verbatim}
% \everymplib[instanceName]{...}
% \everyendmplib[instanceName]{...}
-% \end{verbatim}
+%\end{verbatim}
%
% \paragraph{\cs{mplibglobaltextext\{enable\char"7C disable\}}}
% Default: |disable|.
@@ -382,8 +391,8 @@ See source file '\inFileName' for licencing and contact information.
% it was necessary to declare \cs{mplibglobaltextext\{enable\}} in advance.
% But from v2.27, this is implicitly enabled when \cs{mplibcodeinherit}
% is enabled.
-% This optinal command still remains mostly for backward compatibility.
-% \begin{verbatim}
+% This optional command still remains mostly for backward compatibility.
+%\begin{verbatim}
% \mplibcodeinherit{enable}
% %\mplibglobaltextext{enable}
% \everymplib{ beginfig(0);} \everyendmplib{ endfig;}
@@ -395,7 +404,7 @@ See source file '\inFileName' for licencing and contact information.
% \mplibcode
% currentpicture := pic scaled 2;
% \endmplibcode
-% \end{verbatim}
+%\end{verbatim}
%
% \paragraph{\cs{mplibverbatim\{enable\char"7C disable\}}}
% Default: |disable|.
@@ -409,14 +418,14 @@ See source file '\inFileName' for licencing and contact information.
% Besides other \TeX\ commands, \cs{mpdim} is specially allowed
% in the mplibcode environment. This feature is inpired by \textsf{gmp} package authored by
% Enrico Gregorio. Please refer to the manual of \textsf{gmp} package for details.
-% \begin{verbatim}
+%\begin{verbatim}
% \begin{mplibcode}
% beginfig(1)
% draw origin--(.6\mpdim{\linewidth},0) withpen pencircle scaled 4
% dashed evenly scaled 4 withcolor \mpcolor{orange};
% endfig;
% \end{mplibcode}
-% \end{verbatim}
+%\end{verbatim}
%
% \paragraph{\cs{mpcolor[...]\{...\}}}
% With \cs{mpcolor} command, color names or expressions of
@@ -435,7 +444,7 @@ See source file '\inFileName' for licencing and contact information.
% we also provide unexpandable \TeX\ macros |\mpfig ... \endmpfig| and its starred version
% |\mpfig* ... \endmpfig| to save typing toil.
% The former is roughly the same as follows:
-% \begin{verbatim}
+%\begin{verbatim}
% \begin{mplibcode}[@mpfig]
% beginfig(0)
% token list declared by \everymplib[@mpfig]
@@ -443,24 +452,24 @@ See source file '\inFileName' for licencing and contact information.
% token list declared by \everyendmplib[@mpfig]
% endfig;
% \end{mplibcode}
-% \end{verbatim}
+%\end{verbatim}
% and the starred version is roughly the same as follows:
-% \begin{verbatim}
+%\begin{verbatim}
% \begin{mplibcode}[@mpfig]
% ...
% \end{mplibcode}
-% \end{verbatim}
+%\end{verbatim}
% In these macros |\mpliblegacybehavior{disable}|
% is forcibly declared.
% Again, as both share the same instance name, metapost codes are inherited among them.
% A simple example:
-% \begin{verbatim}
+%\begin{verbatim}
% \everymplib[@mpfig]{ drawoptions(withcolor .5[red,white]); }
% \mpfig* input boxes \endmpfig
% \mpfig
% circleit.a(btex Box 1 etex); drawboxed(a);
% \endmpfig
-% \end{verbatim}
+%\end{verbatim}
% The instance name (default: |@mpfig|) can be changed by redefining
% \cs{mpfiginstancename}, after which a new mplib instance will start and
% code inheritance too will begin anew. |\let\mpfiginstancename\empty| will
@@ -523,10 +532,10 @@ See source file '\inFileName' for licencing and contact information.
% to a MetaPost color expression, that can be used anywhere color expression is expected
% as well as after the |withcolor| operator.
% For instance:
-% \begin{verbatim}
+%\begin{verbatim}
% color col;
% col := mplibtexcolor "olive!50";
-% \end{verbatim}
+%\end{verbatim}
% But the result may vary in its color model (gray/rgb/cmyk)
% according to the given \TeX\ color. (Spot colors are forced to
% cmyk model, so this operator is not recommended for spot colors.)
@@ -538,11 +547,11 @@ See source file '\inFileName' for licencing and contact information.
% |mplibgraphictext| is a metapost operator, the effect of which is similar to that of
% \ConTeXt's |graphictext| or our own |mpliboutlinetext| (see below).
% However the syntax is somewhat different.
-% \begin{verbatim}
+%\begin{verbatim}
% mplibgraphictext "Funny"
% fakebold 2.3 % fontspec option
% drawcolor .7blue fillcolor "red!50" % color expressions
-% \end{verbatim}
+%\end{verbatim}
% |fakebold|, |drawcolor| and |fillcolor| are optional;
% default values are |2|, |"black"| and |"white"| respectively.
% When the color expressions are given in string type, they are regarded as
@@ -567,13 +576,13 @@ See source file '\inFileName' for licencing and contact information.
% From v2.30, we provide a new metapost operator |mplibglyph|, which returns a metapost picture
% containing outline paths of a glyph in opentype, truetype or type1 fonts.
% When a type1 font is specified, metapost primitive |glyph| will be called.
-% \begin{verbatim}
+%\begin{verbatim}
% mplibglyph 50 of \fontid\font % slot 50 of current font
% mplibglyph "Q" of "TU/TeXGyrePagella(0)/m/n/10" % font csname
% mplibglyph "Q" of "texgyrepagella-regular.otf" % raw filename
% mplibglyph "Q" of "Times.ttc(2)" % subfont number
% mplibglyph "Q" of "SourceHanSansK-VF.otf[Regular]" % instance name
-% \end{verbatim}
+%\end{verbatim}
% Both arguments before and after of ``|of|'' can be either a number or a string.
% Number arguments are regarded as a glyph slot (GID) and a font id number, repectively.
% String argument at the left side is regarded as a glyph name in the font or a unicode character.
@@ -601,12 +610,12 @@ See source file '\inFileName' for licencing and contact information.
% From v2.31, a new metapost operator |mpliboutlinetext| is available, which mimicks
% metafun's |outlinetext|. So the syntax is the same as metafun's. See the metafun
% manual \S\,8.7 (|texdoc metafun|). A simple example:
-% \begin{verbatim}
+%\begin{verbatim}
% draw mpliboutlinetext.b ("$\sqrt{2+\alpha}$")
% (withcolor \mpcolor{red!50})
% (withpen pencircle scaled .2 withcolor red)
% scaled 2 ;
-% \end{verbatim}
+%\end{verbatim}
% After the process, |mpliboutlinepic[]|
% and |mpliboutlinenum| will be preserved as global variables;
% |mpliboutlinepic[1]| \ldots{} |mpliboutlinepic[mpliboutlinenum]|
@@ -624,7 +633,7 @@ See source file '\inFileName' for licencing and contact information.
% the given path with a tiling pattern of the |<name>|
% by replicating it horizontally and vertically.
% An example:
-% \begin{verbatim}
+%\begin{verbatim}
% \mppattern{mypatt} % or \begin{mppattern}{mypatt}
% [ % options: see below
% xstep = 10, ystep = 12,
@@ -645,7 +654,7 @@ See source file '\inFileName' for licencing and contact information.
% withpattern "mypatt"
% withpostscript "evenodd" ;
% \endmpfig
-% \end{verbatim}
+%\end{verbatim}
%
% The available options are listed in Table~\ref{tab:mppatternoptions}.
% \begin{table}
@@ -681,7 +690,7 @@ See source file '\inFileName' for licencing and contact information.
% Option |colored=false| (|coloured| is a synonym of |colored|) will generate an uncolored pattern which shall have no color at all.
% Uncolored pattern will be painted later by the color of a metapost object.
% An example:
-% \begin{verbatim}
+%\begin{verbatim}
% \begin{mppattern}{pattuncolored}
% [
% colored = false,
@@ -710,7 +719,7 @@ See source file '\inFileName' for licencing and contact information.
% endfor
% endfig;
% \end{mplibcode}
-% \end{verbatim}
+%\end{verbatim}
%
% \paragraph{\texttt{... withfademethod ...}, and related macros}
% |withfademethod| is a metapost operator which makes the color of an object gradiently transparent.
@@ -743,7 +752,7 @@ See source file '\inFileName' for licencing and contact information.
% explicitly control the bounding box.
% \end{description}
% An example:
-% \begin{verbatim}
+%\begin{verbatim}
% \mpfig
% picture mill;
% mill = btex \includegraphics[width=100bp]{mill} etex;
@@ -754,7 +763,7 @@ See source file '\inFileName' for licencing and contact information.
% withfadeopacity (1, 0)
% ;
% \endmpfig
-% \end{verbatim}
+%\end{verbatim}
%
% \subsection{Lua}
%
@@ -778,7 +787,7 @@ See source file '\inFileName' for licencing and contact information.
% as documented in Lua\TeX{} manual \S\,11.2.8.4 (|texdoc luatex|).
% The following will print |false|, |3.0|, |MetaPost| and
% the knots and the cyclicity of the path |unitsquare|, consecutively.
-% \begin{verbatim}
+%\begin{verbatim}
% \begin{mplibcode}[instance1]
% boolean b; b = 1 > 2;
% numeric n; n = 3;
@@ -796,13 +805,13 @@ See source file '\inFileName' for licencing and contact information.
% print(k, type(v)=='table' and table.concat(v,' ') or v)
% end
% }
-% \end{verbatim}
+%\end{verbatim}
%
% \paragraph{Lua function \texttt{luamplib.process\_mplibcode}}
% Users can execute a MetaPost code chunk from Lua side by using this function:
-% \begin{verbatim}
+%\begin{verbatim}
% luamplib.process_mplibcode (<string> metapost code, <string> instance name)
-% \end{verbatim}
+%\end{verbatim}
% The second argument cannot be absent, but can be an empty string (|""|) which
% means that it has no instance name.
%
@@ -841,8 +850,8 @@ See source file '\inFileName' for licencing and contact information.
luatexbase.provides_module {
name = "luamplib",
- version = "2.33.1",
- date = "2024/07/14",
+ version = "2.34.0",
+ date = "2024/07/17",
description = "Lua package to typeset Metapost with LuaTeX's MPLib.",
}
@@ -1655,7 +1664,7 @@ luamplib.shadecolor = function (str)
if res:find" cs " or res:find"@pdf.obj" then -- spot color shade: l3 only
% \end{macrocode}
% An example of spot color shading:
-% \begin{verbatim}
+%\begin{verbatim}
% \documentclass{article}
% \usepackage{luamplib}
% \mplibsetformat{metafun}
@@ -1701,9 +1710,9 @@ luamplib.shadecolor = function (str)
% endfig;
% \end{mplibcode}
% \end{document}
-% \end{verbatim}
+%\end{verbatim}
% another one: user-defined DeviceN colorspace
-% \begin{verbatim}
+%\begin{verbatim}
% \DocumentMetadata{ }
% \documentclass{article}
% \usepackage{luamplib}
@@ -1731,7 +1740,7 @@ luamplib.shadecolor = function (str)
% ;
% \endmpfig
% \end{document}
-% \end{verbatim}
+%\end{verbatim}
% \begin{macrocode}
run_tex_code({
[[\color_export:nnN{]], str, [[}{backend}\mplib_@tempa]],
@@ -2509,7 +2518,15 @@ vardef mplibtransformmatrix (text e) =
& "}");
enddef;
primarydef p withfademethod s =
- p withprescript "mplibfadetype=" & s
+ if picture p:
+ image(
+ draw p;
+ draw center p withprescript "mplibfadestate=stop";
+ )
+ else:
+ p withprescript "mplibfadestate=stop"
+ fi
+ withprescript "mplibfadetype=" & s
withprescript "mplibfadebbox=" &
decimal xpart llcorner p & ":" &
decimal ypart llcorner p & ":" &
@@ -2863,6 +2880,7 @@ else
"\\special{pdf:obj @MPlibCS<<>>}",
"\\special{pdf:obj @MPlibPt<<>>}",
}
+ pdfetcs.resadded = { }
end
% \end{macrocode}
@@ -2909,23 +2927,29 @@ local function add_extgs_resources (on, new)
end
if not pdfmode and not pdfmanagement and not is_defined(pdfetcs.pgfextgs) then
texsprint"\\special{pdf:put @resources <</ExtGState @MPlibTr>>}"
+ pdfetcs.resadded.ExtGState = "@MPlibTr"
end
return key
end
local function do_preobj_TR(object,prescript)
if object.postscript == "collect" then return end
local opaq = prescript and prescript.tr_transparency
- local on
if opaq then
+ local key, on, os, new
local mode = prescript.tr_alternative or 1
- mode = transparancy_modes[tonumber(mode)]
- local os, new = format("<</BM /%s/ca %.3f/CA %.3f/AIS false>>",mode,opaq,opaq)
- on, new = update_pdfobjs(os)
- local key = add_extgs_resources(on,new)
- start_pdf_code()
- pdf_literalcode("/%s gs",key)
+ mode = transparancy_modes[tonumber(mode)] or mode
+ for i,v in ipairs{ {mode,opaq},{"Normal",1} } do
+ mode, opaq = v[1], v[2]
+ os = format("<</BM /%s/ca %.3f/CA %.3f/AIS false>>",mode,opaq,opaq)
+ on, new = update_pdfobjs(os)
+ key = add_extgs_resources(on,new)
+ if i == 1 then
+ pdf_literalcode("/%s gs",key)
+ else
+ return format("/%s gs",key)
+ end
+ end
end
- return on
end
% \end{macrocode}
@@ -2981,6 +3005,7 @@ local function sh_pdfpageresources(shtype,domain,colorspace,ca,cb,coordinates,st
end
if not pdfmode and not pdfmanagement then
texsprint"\\special{pdf:put @resources <</Shading @MPlibSh>>}"
+ pdfetcs.resadded.Shading = "@MPlibSh"
end
return on
end
@@ -3131,6 +3156,64 @@ end
% \begin{macrocode}
pdfetcs.patterns = { }
local patterns = pdfetcs.patterns
+local function gather_resources (do_pattern, optres)
+ local t = { }
+ local names = {"ExtGState","ColorSpace","Shading"}
+ if do_pattern then
+ names[#names+1] = "Pattern"
+ end
+ if pdfmode then
+ if pdfmanagement then
+ for _,v in ipairs(names) do
+ local pp = get_macro(format("g__pdfdict_/g__pdf_Core/Page/Resources/%s_prop",v))
+ if pp and pp:find"__prop_pair" then
+ t[#t+1] = format("/%s %s 0 R", v, ltx.pdf.object_id("__pdf/Page/Resources/"..v))
+ end
+ end
+ else
+ local res = pdfetcs.getpageres() or ""
+ run_tex_code[[\mplibtmptoks\expandafter{\the\pdfvariable pageresources}]]
+ res = (res .. texgettoks'mplibtmptoks'):explode()
+ res = tableconcat(res," "):explode"/+"
+ for _,v in ipairs(res) do
+ if do_pattern or not v:find"Pattern" and not optres:find(v) then
+ t[#t+1] = "/" .. v
+ end
+ end
+ end
+ else
+ if pdfmanagement then
+ for _,v in ipairs(names) do
+ local pp = get_macro(format("g__pdfdict_/g__pdf_Core/Page/Resources/%s_prop",v))
+ if pp and pp:find"__prop_pair" then
+ run_tex_code {
+ "\\mplibtmptoks\\expanded{{",
+ format("/%s \\csname pdf_object_ref:n\\endcsname{__pdf/Page/Resources/%s}",v,v),
+ "}}",
+ }
+ t[#t+1] = texgettoks'mplibtmptoks'
+ end
+ end
+ elseif is_defined(pdfetcs.pgfextgs) then
+ run_tex_code ({
+ "\\mplibtmptoks\\expanded{{",
+ "\\ifpgf@sys@pdf@extgs@exists /ExtGState @pgfextgs\\fi",
+ "\\ifpgf@sys@pdf@colorspaces@exists /ColorSpace @pgfcolorspaces\\fi",
+ do_pattern and "\\ifpgf@sys@pdf@patterns@exists /Pattern @pgfpatterns \\fi" or "",
+ "}}",
+ }, catat11)
+ t[#t+1] = texgettoks'mplibtmptoks'
+ elseif do_pattern then
+ for _,v in ipairs(names) do
+ local vv = pdfetcs.resadded[v]
+ if vv then
+ t[#t+1] = format("/%s %s", v, vv)
+ end
+ end
+ end
+ end
+ return t
+end
function luamplib.registerpattern ( boxid, name, opts )
local box = texgetbox(boxid)
local wd = format("%.3f",box.width/factor)
@@ -3163,27 +3246,10 @@ function luamplib.registerpattern ( boxid, name, opts )
format("/YStep %s", opts.ystep or hd),
format("/Matrix [%s %s %s]", opts.matrix or "1 0 0 1", opts.xshift or 0, opts.yshift or 0),
}
+ local optres = opts.resources or ""
+ local t = gather_resources(false, optres)
+ optres = optres .. tableconcat(t)
if pdfmode then
- local optres, t = opts.resources or "", { }
- if pdfmanagement then
- for _,v in ipairs{"ExtGState","ColorSpace","Shading"} do
- local pp = get_macro(format("g__pdfdict_/g__pdf_Core/Page/Resources/%s_prop",v))
- if pp and pp:find"__prop_pair" then
- t[#t+1] = format("/%s %s 0 R", v, ltx.pdf.object_id("__pdf/Page/Resources/"..v))
- end
- end
- else
- local res = pdfetcs.getpageres() or ""
- run_tex_code[[\mplibtmptoks\expandafter{\the\pdfvariable pageresources}]]
- res = (res .. texgettoks'mplibtmptoks'):explode()
- res = tableconcat(res," "):explode"/+"
- for _,v in ipairs(res) do
- if not v:find"Pattern" and not optres:find(v) then
- t[#t+1] = "/" .. v
- end
- end
- end
- optres = optres .. tableconcat(t)
if opts.bbox then
attr[#attr+1] = format("/BBox [%s]", opts.bbox)
end
@@ -3192,29 +3258,6 @@ function luamplib.registerpattern ( boxid, name, opts )
else
local objname = "@mplibpattern"..name
local metric = format("bbox %s", opts.bbox or format("0 0 %s %s",wd,hd))
- local optres, t = opts.resources or "", { }
- if pdfmanagement then
- for _,v in ipairs{"ExtGState","ColorSpace","Shading"} do
- local pp = get_macro(format("g__pdfdict_/g__pdf_Core/Page/Resources/%s_prop",v))
- if pp and pp:find"__prop_pair" then
- run_tex_code {
- "\\mplibtmptoks\\expanded{{",
- format("/%s \\csname pdf_object_ref:n\\endcsname{__pdf/Page/Resources/%s}",v,v),
- "}}",
- }
- t[#t+1] = texgettoks'mplibtmptoks'
- end
- end
- elseif is_defined(pdfetcs.pgfextgs) then
- run_tex_code ({
- "\\mplibtmptoks\\expanded{{",
- "\\ifpgf@sys@pdf@extgs@exists /ExtGState @pgfextgs\\fi",
- "\\ifpgf@sys@pdf@colorspaces@exists /ColorSpace @pgfcolorspaces\\fi",
- "}}",
- }, catat11)
- t[#t+1] = texgettoks'mplibtmptoks'
- end
- optres = optres .. tableconcat(t)
texsprint {
[[\ifvmode\nointerlineskip\fi]],
format([[\hbox to0pt{\vbox to0pt{\hsize=\wd %i\vss\noindent]], boxid), -- force horiz mode?
@@ -3251,6 +3294,7 @@ local function pattern_colorspace (cs)
end
if not pdfmode and not pdfmanagement and not is_defined(pdfetcs.pgfcolorspace) then
texsprint"\\special{pdf:put @resources <</ColorSpace @MPlibCS>>}"
+ pdfetcs.resadded.ColorSpace = "@MPlibCS"
end
return on
end
@@ -3305,6 +3349,7 @@ local function do_preobj_PAT(object, prescript)
end
if not pdfmode and not pdfmanagement and not is_defined(pdfetcs.pgfpattern) then
texsprint"\\special{pdf:put @resources <</Pattern @MPlibPt>>}"
+ pdfetcs.resadded.Pattern = "@MPlibPt"
end
patt.done = true
end
@@ -3313,22 +3358,29 @@ end
%
% Fading
% \begin{macrocode}
+pdfetcs.fading = { }
local function do_preobj_FADE (object, prescript)
- if object.postscript == "collect" then return end
local fd_type = prescript and prescript.mplibfadetype
- if not fd_type then return end
+ local fd_stop = prescript and prescript.mplibfadestate
+ if not fd_type then
+ return fd_stop -- returns "stop" (if picture) or nil
+ end
local bbox = prescript.mplibfadebbox:explode":"
- local width, height = bbox[3]-bbox[1], bbox[4]-bbox[2]
- local vec = prescript.mplibfadevector
- vec = vec and vec:explode":"
- or fd_type == "linear" and {bbox[1], bbox[2], bbox[3], bbox[2]} -- left to right
- or {width/2, height/2, width/2, height/2} -- center for both circles
local dx, dy = -bbox[1], -bbox[2]
- bbox = format("0 0 %f %f", bbox[3]+dx, bbox[4]+dy)
+ local vec = prescript.mplibfadevector; vec = vec and vec:explode":"
+ if not vec then
+ if fd_type == "linear" then
+ vec = {bbox[1], bbox[2], bbox[3], bbox[2]} -- left to right
+ else
+ local centerx, centery = (bbox[1]+bbox[3])/2, (bbox[2]+bbox[4])/2
+ vec = {centerx, centery, centerx, centery} -- center for both circles
+ end
+ end
local coords = { vec[1]+dx, vec[2]+dy, vec[3]+dx, vec[4]+dy }
if fd_type == "linear" then
coords = format("%f %f %f %f", tableunpack(coords))
elseif fd_type == "circular" then
+ local width, height = bbox[3]-bbox[1], bbox[4]-bbox[2]
local radius = (prescript.mplibfaderadius or "0:"..math.sqrt(width^2+height^2)/2):explode":"
tableinsert(coords, 3, radius[1])
tableinsert(coords, radius[2])
@@ -3336,6 +3388,7 @@ local function do_preobj_FADE (object, prescript)
else
err("unknown fading method '%s'", fd_type)
end
+ bbox = format("0 0 %f %f", bbox[3]+dx, bbox[4]+dy)
fd_type = fd_type == "linear" and 2 or 3
local opaq = (prescript.mplibfadeopacity or "1:0"):explode":"
local on, os, new
@@ -3360,7 +3413,76 @@ local function do_preobj_FADE (object, prescript)
local key = add_extgs_resources(on,new)
start_pdf_code()
pdf_literalcode("/%s gs", key)
- return on
+ if fd_stop then return "standalone" end
+ return "start"
+end
+
+% \end{macrocode}
+%
+% Transparency Group
+% \begin{macrocode}
+pdfetcs.tr_group = { }
+local function do_preobj_GRP (object, prescript)
+ local grstate = prescript and prescript.gr_state
+ if not grstate then return end
+ local trgroup = pdfetcs.tr_group
+ if grstate == "start" then
+ trgroup.isolated, trgroup.knockout = false, false
+ for _,v in ipairs(prescript.gr_type:explode",+") do
+ trgroup[v] = true
+ end
+ local p = object.path
+ trgroup.bbox = {
+ math.min(p[1].x_coord, p[2].x_coord, p[3].x_coord, p[4].x_coord),
+ math.min(p[1].y_coord, p[2].y_coord, p[3].y_coord, p[4].y_coord),
+ math.max(p[1].x_coord, p[2].x_coord, p[3].x_coord, p[4].x_coord),
+ math.max(p[1].y_coord, p[2].y_coord, p[3].y_coord, p[4].y_coord),
+ }
+ put2output[[\begingroup\setbox\mplibscratchbox\hbox\bgroup]]
+ elseif grstate == "stop" then
+ local llx,lly,urx,ury = tableunpack(trgroup.bbox)
+ local grattr = format("/Group<</S/Transparency/I %s/K %s>>",trgroup.isolated,trgroup.knockout)
+ local res = tableconcat(gather_resources(true))
+ put2output(tableconcat{
+ "\\egroup",
+ format("\\wd\\mplibscratchbox %fbp", urx-llx),
+ format("\\ht\\mplibscratchbox %fbp", ury-lly),
+ "\\dp\\mplibscratchbox 0pt",
+ })
+ if pdfmode then
+ put2output(tableconcat{
+ "\\saveboxresource type 2 attr{/Type/XObject/Subtype/Form/FormType 1",
+ format("/BBox[%f %f %f %f]", llx,lly,urx,ury),
+ grattr, "} resources{", res, "}\\mplibscratchbox",
+ [[\setbox\mplibscratchbox\hbox{\useboxresource\lastsavedboxresourceindex}]],
+ [[\wd\mplibscratchbox 0pt\ht\mplibscratchbox 0pt\dp\mplibscratchbox 0pt]],
+ [[\box\mplibscratchbox\endgroup]],
+ })
+ else
+ trgroup.cnt = (trgroup.cnt or 0) + 1
+ local objname = format("@mplibtrgr%s", trgroup.cnt)
+ put2output(tableconcat{
+ "\\special{pdf:bxobj ", objname, " bbox ", format("%f %f %f %f", llx,lly,urx,ury), "}",
+ "\\unhbox\\mplibscratchbox",
+ "\\special{pdf:put @resources <<", res, ">>}",
+ "\\special{pdf:exobj <<", grattr, ">>}",
+ "\\special{pdf:uxobj ", objname, "}\\endgroup",
+ })
+ end
+ end
+ return grstate
+end
+
+local function stop_special_effects(fade,opaq,over)
+ if fade then -- fading
+ stop_pdf_code()
+ end
+ if opaq then -- opacity
+ pdf_literalcode(opaq)
+ end
+ if over then -- color
+ put2output"\\special{pdf:ec}"
+ end
end
% \end{macrocode}
@@ -3488,11 +3610,11 @@ function luamplib.flush (result,flusher)
% luamplib silently ignores this invalid figure for those
% that do not contain |beginfig ... endfig|. (issue \#70)
% Original code of ConTeXt general was:
-% \begin{verbatim}
+%\begin{verbatim}
% -- invalid
% pdf_startfigure(fignum,0,0,0,0)
% pdf_stopfigure()
-% \end{verbatim}
+%\end{verbatim}
% \begin{macrocode}
else
% \end{macrocode}
@@ -3510,7 +3632,7 @@ function luamplib.flush (result,flusher)
local object = objects[o]
local objecttype = object.type
% \end{macrocode}
-% The following 7 lines are part of |btex...etex| patch.
+% The following 8 lines are part of |btex...etex| patch.
% Again, colors are processed at this stage.
% \begin{macrocode}
local prescript = object.prescript
@@ -3518,6 +3640,7 @@ function luamplib.flush (result,flusher)
local cr_over = do_preobj_CR(object,prescript) -- color
local tr_opaq = do_preobj_TR(object,prescript) -- opacity
local fading_ = do_preobj_FADE(object,prescript) -- fading
+ local trgroup = do_preobj_GRP(object,prescript) -- transparency group
if prescript and prescript.mplibtexboxid then
put_tex_boxes(object,prescript)
elseif objecttype == "start_bounds" or objecttype == "stop_bounds" then --skip
@@ -3543,7 +3666,7 @@ function luamplib.flush (result,flusher)
pdf_literalcode("%f %f %f %f %f %f cm",ot[3],ot[4],ot[5],ot[6],ot[1],ot[2])
pdf_textfigure(object.font,object.dsize,object.text,object.width,object.height,object.depth)
stop_pdf_code()
- else
+ elseif not trgroup and fading_ ~= "stop" then
local evenodd, collect, both = false, false, false
local postscript = object.postscript
if not object.istext then
@@ -3569,10 +3692,7 @@ function luamplib.flush (result,flusher)
else
% \end{macrocode}
% Removed from ConTeXt general: color stuff.
-% Added instead : shading stuff
% \begin{macrocode}
- local shade_no = do_preobj_SH(object,prescript) -- shading
- local pattern_ = do_preobj_PAT(object,prescript) -- pattern
local ml = object.miterlimit
if ml and ml ~= miterlimit then
miterlimit = ml
@@ -3599,6 +3719,11 @@ function luamplib.flush (result,flusher)
pdf_literalcode("[] 0 d")
dashed = false
end
+% \end{macrocode}
+% Added : shading and pattern
+% \begin{macrocode}
+ local shade_no = do_preobj_SH(object,prescript) -- shading
+ local pattern_ = do_preobj_PAT(object,prescript) -- pattern
local path = object.path
local transformed, penwidth = false, 1
local open = path and path[1].left_type and path[#path].right_type
@@ -3688,21 +3813,29 @@ function luamplib.flush (result,flusher)
end
end
% \end{macrocode}
-% Added to ConTeXt general: post-object color and shading stuff.
+% Added to ConTeXt general: post-object colors and shading stuff.
+% We should beware the |q ... Q| scope.
% \begin{macrocode}
if shade_no then -- shading
pdf_literalcode("W n /MPlibSh%s sh Q",shade_no)
end
end
end
- if fading_ then -- fading
- stop_pdf_code()
- end
- if tr_opaq then -- opacity
- stop_pdf_code()
+ if fading_ == "start" then
+ pdfetcs.fading.specialeffects = {fading_, tr_opaq, cr_over}
+ elseif trgroup == "start" then
+ pdfetcs.tr_group.specialeffects = {fading_, tr_opaq, cr_over}
+ elseif fading_ == "stop" then
+ local se = pdfetcs.fading.specialeffects
+ if se then stop_special_effects(se[1], se[2], se[3]) end
+ elseif trgroup == "stop" then
+ local se = pdfetcs.tr_group.specialeffects
+ if se then stop_special_effects(se[1], se[2], se[3]) end
+ else
+ stop_special_effects(fading_, tr_opaq, cr_over)
end
- if cr_over then -- color
- put2output"\\special{pdf:ec}"
+ if fading_ or trgroup then -- extgs resetted
+ miterlimit, linecap, linejoin, dashed = -1, -1, -1, false
end
end
end
@@ -3761,7 +3894,7 @@ end
\else
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{luamplib}
- [2024/07/14 v2.33.1 mplib package for LuaTeX]
+ [2024/07/17 v2.34.0 mplib package for LuaTeX]
\ifx\newluafunction\@undefined
\input ltluatex
\fi
diff --git a/macros/luatex/generic/luamplib/luamplib.pdf b/macros/luatex/generic/luamplib/luamplib.pdf
index a8bea32e1a..d59201ed00 100644
--- a/macros/luatex/generic/luamplib/luamplib.pdf
+++ b/macros/luatex/generic/luamplib/luamplib.pdf
Binary files differ
diff --git a/macros/luatex/generic/luamplib/test-luamplib-latex.tex b/macros/luatex/generic/luamplib/test-luamplib-latex.tex
index 50a5778870..b2f2f63cb7 100644
--- a/macros/luatex/generic/luamplib/test-luamplib-latex.tex
+++ b/macros/luatex/generic/luamplib/test-luamplib-latex.tex
@@ -287,7 +287,7 @@ draw mpliboutlinetext.b ("$\displaystyle\frac{1}{1-x^2}$")
endfor
endfor
\endmpfig
-\par
+\par\leavevmode
\mpfig
picture mill; mill = btex \includegraphics[width=100bp]{mill} etex;
draw mill;
@@ -299,6 +299,33 @@ draw mpliboutlinetext.b ("$\displaystyle\frac{1}{1-x^2}$")
withfadeopacity (1, 0)
;
\endmpfig
+\par
+\def\test#1{%
+ \mpfig
+ fill unitsquare shifted -center unitsquare scaled 200
+ withshademethod "linear"
+ withshadecolors (.3[red,white], .3[blue,white])
+ ;
+ label( btex MetaPost etex scaled 3, origin) ;
+ draw image(
+ fill fullcircle scaled 100 shifted 25left
+ withcolor .8white
+ withtransparency (2,1)
+ ;
+ fill fullcircle scaled 100 shifted 25right
+ withcolor .8white
+ withtransparency (2,1)
+ ;
+ )
+ asgroup "#1"
+ withtransparency (1,.5)
+ ;
+ currentpicture := currentpicture scaled 3/4;
+ \endmpfig
+}%
+\hbox{\test{isolated,knockout}\,\test{isolated}\vbox to\MPheight{\vss\hbox{~isolated}\vss}}%
+\hbox{\test{knockout}\,\test{}}%
+\hbox to\MPwidth{\hss knockout\hss}%
\tracingcommands0
\vskip 2\baselineskip
diff --git a/macros/luatex/generic/luamplib/test-luamplib-plain.tex b/macros/luatex/generic/luamplib/test-luamplib-plain.tex
index dde6fbfb10..622932ca10 100644
--- a/macros/luatex/generic/luamplib/test-luamplib-plain.tex
+++ b/macros/luatex/generic/luamplib/test-luamplib-plain.tex
@@ -280,6 +280,20 @@ draw mpliboutlinetext.b ("$\overbrace{x+\cdots+x}^k$")
endfor
endfor
\endmpfig
+\mpfig
+fill fullcircle scaled 125 withcolor 2/3[blue,white];
+draw image(
+ draw (left--right) rotated 45 scaled 50
+ withpen pencircle scaled 20
+ ;
+ draw (left--right) rotated -45 scaled 50
+ withpen pencircle scaled 20
+ ;
+ )
+ asgroup ""
+ withprescript "tr_transparency=.3"
+ ;
+\endmpfig
\tracingcommands0
\vskip 2\baselineskip
diff --git a/macros/luatex/latex/tango/README b/macros/luatex/latex/tango/README
index 1d62186710..014ae456a2 100644
--- a/macros/luatex/latex/tango/README
+++ b/macros/luatex/latex/tango/README
@@ -1,12 +1,19 @@
Tango is a LaTeX document class for use by mathematics teachers. It requires lualatex, some LaTeX packages (see the complete documentation for details), and a recent version of LaTeX (see paragraph 4 below).
+Author: Michel Bovani <Michel.Bovani@icloud.com>
+Tango Web Page: https://tango.mathriochka.net
+
1 Versions history
-This version number is 0.7.2
+0.8.0 (2024-07-17) This version
+New: Language complete support for
+french, english, british, american, canadian, australian, newzealand, german, ngerman, naustrian, nswissgerman, italian, spanish.
+
+0.7.2 (2024-07-12)
New in this version
• correction of the countername in subparagraph definition for titlesec.
• fix incorrect vertical space in the \exo command.
-0.7.1 First release
+0.7.1 First release (2024-07-08)
2 License
Tango is released under Latex public project licence (LPPL), version 1.3c
@@ -14,7 +21,7 @@ See https://www.latex-project.org/lppl/lppl-1-3c/
3 Installation
Just put the tango.cls file in a latex directory of a texmf tree, for example:
-TEXMF/tex/latex/tango/tango.cls
+TEXMF/tex/lualatex/tango/tango.cls
4 Usage
\documentclass[<options>]{tango}
diff --git a/macros/luatex/latex/tango/doc/tango-en.pdf b/macros/luatex/latex/tango/doc/tango-en.pdf
index 3447817ff1..d7969f1cb5 100644
--- a/macros/luatex/latex/tango/doc/tango-en.pdf
+++ b/macros/luatex/latex/tango/doc/tango-en.pdf
Binary files differ
diff --git a/macros/luatex/latex/tango/doc/tango-en.tex b/macros/luatex/latex/tango/doc/tango-en.tex
index 99a6399dce..bf7995ef17 100644
--- a/macros/luatex/latex/tango/doc/tango-en.tex
+++ b/macros/luatex/latex/tango/doc/tango-en.tex
@@ -26,8 +26,9 @@
\renewcommand{\arraystretch}{1.1}
\title{\textcolor{ColorOne}{\floweroneleft}\,The tango document class\,\textcolor{ColorOne}{\floweroneright}}
-\author{\href{mailto:michel.bovani@icloud.com}{Michel \textsc{Bovani}}}
-\date{\today\\v. 0.7.2}
+\author{\href{mailto:michel.bovani@icloud.com}{Michel \textsc{Bovani}}\\
+Tango web page: \href{https://tango.mathriochka.net}{https://tango.mathriochka.net}}
+\date{\today\\v. 0.8.0}
{\sffamily
\maketitle
@@ -63,13 +64,11 @@ Default values are in bold red. Bold options marked with a \TO{\textbf{star*}} c
\hline\endhead
\hline\multicolumn{2}{r}{\emph{Continued next page}}\endfoot
\hline\endlastfoot
-\TO{french}&\TO{french=true/\DO{false}}. Adaptation to the French language and reserved names for the tango class (theorem gives \emph{e.g.} théorème). Mandatory use for French-speaking users. This option is also passed to the babel package.\\
+
\hline
-\TO{<language options>}& Tango will pass other language options to the \TO{babel} package. Note that
-\begin{itemize}
-\item Only English and French languages are fully implemented.
-\item Even English-speaking people must pass a language option (\TO{english, british, UKenglish, USenglish} or \TO{american}) for \TO{babel} to the tango class.
-\end{itemize}
+\TO{%
+french, english, british, american, canadian, australian, newzealand, german, ngerman, naustrian, nswissgerman, italian, spanish}.& Tango will transmit all language options to the \TO{babel} package. However, the translation of specific names used by tango (such as theorem, exercise, etc.) is only guaranteed for the languages listed opposite. Please note that even English speakers must \emph{imperatively} pass a language option to tango.
+
See section~\ref{lang} below.\\
\hline
\TO{no-statement}&\TO{no-statement=true/\DO{false}}. The \TO{thm}, \TO{defin}, \TO{lem}, \TO{coro}, \TO{propo} environments (for theorems, definitions, lemmas, corollaries, propositions) are defined by default. The no-statement option allows you to define them later, on request (see \verb=\newstatement= and \verb=\renewstatement= commands in section~\ref{st-section} page~\pageref{st-section}).\\
@@ -262,8 +261,7 @@ Provided commands are:
\section{Language settings}\label{lang}
A language option \emph{must} be passed to the \TO{babel} package via the tango class: this is true \emph{even} for English-speaking people. A class error message will be generated otherwise. If you ignore this message you will get no hyphenation patterns at all!
-For now, only the English and French languages are fully supported. With other languages, you benefit from the \TO{babel} facilities, but the \enquote{tango words} will remain defined by:
-\begin{verbatim}
+Tango also has some reserved words, which are (when an english language option is passed to tango):\begin{verbatim}
\newcommand\TgoTheoremName{Theorem}
\newcommand\TgoDefinitionName{Definition}
\newcommand\TgoPropositionName{Proposition}
@@ -276,7 +274,19 @@ For now, only the English and French languages are fully supported. With other l
\newcommand\TgoExercisesSubsectionName{Exercises}
\newcommand\TgoExercisesSectionName{Exercises}
\end{verbatim}
-If you want to use tango with a new language, here is what you can do:
+
+Although any language option recognized by babel will (in principle) be taken into account as soon as it is passed to tango, the translation of these reserved words only happens for the following languages:
+\begin{itemize}
+\item\TO{french};
+\item\TO{english, british, american, canadian, australian, newzealand};
+\item\TO{german, ngerman, naustrian, nswissgerman};
+\item\TO{italian};
+\item\TO{spanish}.
+\end{itemize}
+
+Other languages benefit from babel's facilities, but tango's reserved words are not translated.
+So here's what concerned users can do.
+
\begin{enumerate}
\item Translate these names in your language (for now it is done only for the french language), using \verb+\renewcommand+.
\item (Better) Mail me all the necessary information (at least babel language option used and your translation of the tango names) and I will adapt the tango class to your language.
diff --git a/macros/luatex/latex/tango/doc/tango-fr.pdf b/macros/luatex/latex/tango/doc/tango-fr.pdf
index 08767d9155..a4438d58de 100644
--- a/macros/luatex/latex/tango/doc/tango-fr.pdf
+++ b/macros/luatex/latex/tango/doc/tango-fr.pdf
Binary files differ
diff --git a/macros/luatex/latex/tango/doc/tango-fr.tex b/macros/luatex/latex/tango/doc/tango-fr.tex
index 06cd61f378..1ed1a70abf 100644
--- a/macros/luatex/latex/tango/doc/tango-fr.tex
+++ b/macros/luatex/latex/tango/doc/tango-fr.tex
@@ -26,8 +26,9 @@
\renewcommand{\arraystretch}{1.1}
\title{\textcolor{ColorOne}{\floweroneleft}\,La classe de documents tango\,\textcolor{ColorOne}{\floweroneright}}
-\author{\href{mailto:michel.bovani@icloud.com}{Michel \textsc{Bovani}}}
-\date{\today\\v. 0.7.2}
+\author{\href{mailto:michel.bovani@icloud.com}{Michel \textsc{Bovani}}\\
+Page internet de tango: \href{https://tango.mathriochka.net}{https://tango.mathriochka.net}}
+\date{\today\\v. 0.8.0}
{\sffamily
\maketitle
@@ -59,14 +60,9 @@ Les valeurs par défaut sont présentées en bleu gras. Les options en gras, mar
\hline\endhead
\hline\multicolumn{2}{r}{\emph{Voir page suivante}}\endfoot
\hline\endlastfoot
-\hline\endlastfoot
-\TO{french}&\TO{french=true/\DO{false}}. Adaptation à la langue française et noms définis par la classe tango (\frquote{Theorem} donne par exemple \frquote{Théorème}). Usage indispensable pour les utilisateurs de langue française. Cette option est également passée au package babel.\\
-\hline
-\TO{<options de langue>}& Tango transmettra au package \TO{babel} toutes les options de langue. Notez bien que :
-\begin{itemize}
-\item Seuls l'anglais et le français sont complètement implémentés.
-\item Même les locuteurs anglais doivent passer une option de langue pour \TO{babel} (\TO{english, british, UKenglish, USenglish} ou \TO{american}) à la classe tango.
-\end{itemize}
+\TO{%
+french, english, british, american, canadian, australian, newzealand, german, ngerman, naustrian, nswissgerman, italian, spanish}.& Tango transmettra au package \TO{babel} toutes les options de langue. En revanche, la traduction des noms spécifiques employés par tango (comme théorème, exercice, etc.) n'est assurée que pour les langues listées ci-contre. Notez bien que même les locuteurs anglais doivent \emph{impérativement} passer une option de langue à tango.
+
Voir la section~\ref{lang} plus loin.\\
\hline
\TO{no-statement}&\TO{no-statement=true/\DO{false}}. Des environnements \TO{thm}, \TO{defin}, \TO{lem}, \TO{coro}, \TO{propo} (pour présenter les théorèmes, définitions, lemmes, corollaires et propositions) sont définis par défaut. L'option \DO{no-statement} vous permet de définir ces environnements vous-même avec une configuration plus personnelle (voir les commandes \verb=\newstatement= and \verb=\renewstatement= dans la section~\ref{st-section} page~\pageref{st-section}).\\
@@ -275,24 +271,8 @@ Les commandes proposées par tango sont :
\section{Sélection de la langue}\label{lang}
Il est impératif de passer une option de langue à babel par l'intermédiaire de la classe tango : cela est vrai même pour les personnes de langue anglaise. Un message d'erreur sera généré par la classe tango si celle-ci n'a reçu aucune option de langue à transmettre à \TO{babel} ; si vous ignorez ce message, vous devrez travailler sans aucun motif de césure.
-Tango possède également certains mots réservés qui sont:
-\begin{tcolorbox}
-\begin{verbatim}
-\newcommand\TgoTheoremName{Theorem}
-\newcommand\TgoDefinitionName{Definition}
-\newcommand\TgoPropositionName{Proposition}
-\newcommand\TgoLemmaName{Lemma}
-\newcommand\TgoCorollaryName{Corollary}
-\newcommand\TgoRemarkName{Remark}
-\newcommand\TgoExampleName{Example}
-\newcommand\TgoContentsName{Contents}
-\newcommand\TgoExerciseName{Exercise}
-\newcommand\TgoExercisesSubsectionName{Exercises}
-\newcommand\TgoExercisesSectionName{Exercises}
-\end{verbatim}
-\end{tcolorbox}
+Tango possède également certains mots réservés qui sont (lorsque l'option french est passée à tango) :
-Au chargement du français par babel (déclenché par l'option french), les traductions suivantes sont effectuées:
\begin{tcolorbox}
\begin{verbatim}
\renewcommand\TgoTheoremName{Théorème}
@@ -309,7 +289,16 @@ Au chargement du français par babel (déclenché par l'option french), les trad
\end{verbatim}
\end{tcolorbox}
-Pour l'instant seules les langues anglaise et française sont pleinement supportées par tango. Les autres langues bénéficient des facilités offertes par babel, mais les mots réservés de tango ne sont pas traduits.
+Même si toute option de langue reconnue par babel sera (en principe) prise en compte dès lors qu'elle est passée à tango, la traduction de ces mots réservés n'a lieu que pour les langues suivantes :
+\begin{itemize}
+\item\TO{french};
+\item\TO{english, british, american, canadian, australian, newzealand};
+\item\TO{german, ngerman, naustrian, nswissgerman};
+\item\TO{italian};
+\item\TO{spanish}.
+\end{itemize}
+
+Les autres langues bénéficient des facilités offertes par babel, mais les mots réservés de tango ne sont pas traduits.
Voici donc ce que peuvent faire les utilisateurs concernés.
\begin{enumerate}
\item Utiliser \verb+\renewcommand+ pour faire ces traductions eux-mêmes.
diff --git a/macros/luatex/latex/tango/latex/tango.cls b/macros/luatex/latex/tango/lualatex/tango.cls
index 7fad8c30d8..f188200b4c 100644
--- a/macros/luatex/latex/tango/latex/tango.cls
+++ b/macros/luatex/latex/tango/lualatex/tango.cls
@@ -1,6 +1,6 @@
\NeedsTeXFormat{LaTeX2e}%
\ProvidesClass{tango}%
-[2024/07/11 v0.7.2 tango document class. Michel Bovani]% %
+[2024/07/15 v0.8.0 tango document class. Michel Bovani]% %
%
% Ensure luatex engine
\RequirePackage{iftex}[2019/10/24]
@@ -28,6 +28,18 @@
\newcommand\TgoPublicationClass{article}
\newcommand\TgoStatementIndent{\indent}
\newif\ifTgoFrenchLanguage
+\newif\ifTgoNGermanLanguage
+\newif\ifTgoGermanLanguage
+\newif\ifTgoNAustrianLanguage
+\newif\ifTgoNSwissGermanLanguage
+\newif\ifTgoItalianLanguage
+\newif\ifTgoSpanishLanguage
+\newif\ifTgoEnglishLanguage
+\newif\ifTgoBritishLanguage
+\newif\ifTgoAmericanLanguage
+\newif\ifTgoCanadianLanguage
+\newif\ifTgoAustralianLanguage
+\newif\ifTgoNewZealandLanguage
\newif\ifTgoNoStatement
\newif\ifTgoBook
\newif\ifTgoOneSide\TgoOneSidetrue
@@ -70,6 +82,42 @@
\TgoFrenchLanguagetrue
\TgoTitleIndentZerofalse
},
+ ngerman.code= {%
+ \TgoNGermanLanguagetrue
+ },
+ german.code= {%
+ \TgoGermanLanguagetrue
+ },
+naustrian.code= {%
+ \TgoNAustrianLanguagetrue
+ },
+nswissgerman.code= {%
+ \TgoNSwissGermanLanguagetrue
+ },
+ italian.code= {%
+ \TgoItalianLanguagetrue
+ },
+ spanish.code= {%
+ \TgoSpanishLanguagetrue
+ },
+english.code= {%
+ \TgoEnglishLanguagetrue
+ },
+british.code= {%
+ \TgoBritishLanguagetrue
+ },
+american.code= {%
+ \TgoAmericanLanguagetrue
+ },
+canadian.code= {%
+ \TgoCanadianLanguagetrue
+ },
+australian.code= {%
+ \TgoAustralianLanguagetrue
+ },
+newzealand.code= {%
+ \TgoNewZealandLanguagetrue
+ },
%%%%%% Default Statements %%%%%%%%%%%%%%%%%%%%%%%%
no-statement.if = TgoNoStatement,
%%%%%% No Hyperref %%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -834,6 +882,209 @@ CustomiseFigTabCaptions=false}
\renewcommand\TgoExercisesSectionName{Exercices}
}
\fi
+%%%
+\ifTgoNGermanLanguage
+\addto\captionsngerman{%
+\renewcommand\TgoTheoremName{Satz}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Korollar}%% ????
+\renewcommand\TgoRemarkName{Bemerkung}
+\renewcommand\TgoExampleName{Beispiel}
+\renewcommand\TgoContentsName{Inhaltsverzeichnis}
+\renewcommand\TgoExerciseName{Übung}
+\renewcommand\TgoExercisesSubsectionName{Übungen}
+\renewcommand\TgoExercisesSectionName{Übungen}
+}
+\fi
+%
+%%%
+\ifTgoGermanLanguage
+\addto\captionsgerman{%
+\renewcommand\TgoTheoremName{Satz}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Korollar}%% ????
+\renewcommand\TgoRemarkName{Bemerkung}
+\renewcommand\TgoExampleName{Beispiel}
+\renewcommand\TgoContentsName{Inhaltsverzeichnis}
+\renewcommand\TgoExerciseName{Übung}
+\renewcommand\TgoExercisesSubsectionName{Übungen}
+\renewcommand\TgoExercisesSectionName{Übungen}
+}
+\fi
+%
+%%%
+\ifTgoNAustrianLanguage
+\addto\captionsnaustrian{%
+\renewcommand\TgoTheoremName{Satz}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Korollar}%% ????
+\renewcommand\TgoRemarkName{Bemerkung}
+\renewcommand\TgoExampleName{Beispiel}
+\renewcommand\TgoContentsName{Inhaltsverzeichnis}
+\renewcommand\TgoExerciseName{Übung}
+\renewcommand\TgoExercisesSubsectionName{Übungen}
+\renewcommand\TgoExercisesSectionName{Übungen}
+}
+\fi
+%
+%%%
+\ifTgoNSwissGermanLanguage
+\addto\captionsnswissgerman{%
+\renewcommand\TgoTheoremName{Satz}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Korollar}%% ????
+\renewcommand\TgoRemarkName{Bemerkung}
+\renewcommand\TgoExampleName{Beispiel}
+\renewcommand\TgoContentsName{Inhaltsverzeichnis}
+\renewcommand\TgoExerciseName{Übung}
+\renewcommand\TgoExercisesSubsectionName{Übungen}
+\renewcommand\TgoExercisesSectionName{Übungen}
+}
+\fi
+%
+%%%
+\ifTgoItalianLanguage
+\addto\captionsitalian{%
+\renewcommand\TgoTheoremName{Teorema}
+\renewcommand\TgoDefinitionName{Definizione}
+\renewcommand\TgoPropositionName{Proposizione}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollario}
+\renewcommand\TgoRemarkName{Nota}%%????
+\renewcommand\TgoExampleName{Esempio}
+\renewcommand\TgoContentsName{Sommario}%%Contenuti????
+\renewcommand\TgoExerciseName{Esercizio}
+\renewcommand\TgoExercisesSubsectionName{Esercizi}
+\renewcommand\TgoExercisesSectionName{Esercizi}
+}
+\fi
+%
+%%%
+\ifTgoSpanishLanguage
+\addto\captionsspanish{%
+\renewcommand\TgoTheoremName{Teorema}
+\renewcommand\TgoDefinitionName{Definición}
+\renewcommand\TgoPropositionName{Proposición}
+\renewcommand\TgoLemmaName{Lema}
+\renewcommand\TgoCorollaryName{Corolario}
+\renewcommand\TgoRemarkName{Osservación}%%????
+\renewcommand\TgoExampleName{Ejemplo}
+\renewcommand\TgoContentsName{Sumario}%%????
+\renewcommand\TgoExerciseName{Ejercicio}
+\renewcommand\TgoExercisesSubsectionName{Ejercicios}
+\renewcommand\TgoExercisesSectionName{Ejercicios}
+}
+\fi
+%
+%%%
+\ifTgoEnglishLanguage
+\addto\captionsenglish{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
+%
+%%%
+\ifTgoBritishLanguage
+\addto\captionsbritish{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
+%
+%%%
+\ifTgoAmericanLanguage
+\addto\captionsamerican{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
+%
+%%%
+\ifTgoCanadianLanguage
+\addto\captionscanadian{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
+%
+%%%
+\ifTgoAustralianLanguage
+\addto\captionsaustralian{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
+%
+%%%
+\ifTgoNewZealandLanguage
+\addto\captionsnewzealand{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
%
%%% Last package
\ifTgoNoHyperref
@@ -1005,7 +1256,7 @@ labelwidth=0.75\TgoStandardMargin, labelsep=0.25\TgoStandardMargin, itemindent=!
\ifTgoBook
\newcommand\TgoChapterBox[1]{%
{\filright\sffamily\addfontfeature{RawFeature=-onum}\fontseries{eb}\selectfont\HUGE\hspace*{-0.06em}\thechapter}%
-\quad\parbox[b]{0.75\textwidth}{\filright#1}
+\quad\parbox{0.75\textwidth}{\filright#1}
}
\titleformat{\part}[display]{\centering\color{ColorOne}\sffamily
\addfontfeature{RawFeature=-onum}\fontseries{eb}\selectfont\Huge}