From 9b68a8eb56e7238f2d6c14c19c0a6f3789762cf4 Mon Sep 17 00:00:00 2001 From: LogCreative Date: Wed, 1 Dec 2021 22:27:27 +0800 Subject: [PATCH 01/42] feat: add usemytheme & getcontribpath/dir command --- .vscode/sjtubeamer.code-snippets | 22 ++++++++++++-- beamerthemesjtubeamer.sty | 3 ++ sjtuvi.sty | 27 +++++++++-------- src/source/beamerthemesjtubeamer.dtx | 10 +++++++ src/source/sjtuvi.dtx | 45 ++++++++++++++++++++-------- 5 files changed, 80 insertions(+), 27 deletions(-) diff --git a/.vscode/sjtubeamer.code-snippets b/.vscode/sjtubeamer.code-snippets index 6c26dcf3..44ffc9b6 100644 --- a/.vscode/sjtubeamer.code-snippets +++ b/.vscode/sjtubeamer.code-snippets @@ -185,6 +185,12 @@ "body": "\\sjtubeamer@logopos", "description": "Choose the override outer logo position. No default option will get executed since it has already been executed by the selection of \\sjtubeamer@cover.\n" }, + "usemytheme": { + "scope": "doctex,tex,latex", + "prefix": "\\usemytheme", + "body": "\\usemytheme{$1}", + "description": "When using my option, you could load other contrib sub-themes by this command. The \\getcontribpath is defined in sjtuvi package loaded in inner theme.\n" + }, "DefineOption": { "scope": "doctex,tex", "prefix": "\\DefineOption", @@ -197,11 +203,23 @@ "body": "\\EqualOption", "description": "To check if the option on package, key is equal to value.\n\nHere, a dummy trick is used to pass the if condition.\nSince LaTeX handles \\if differently.\n\\iftrue will eliminate the nearest \\else and \\fi but remains other extra \\fi and throws errors.\nTo avoid this, if the macro is expanded after \\if, T=T, the condition holds and finish the current pair. And continues to process the real defined macro. This solution is somehow to combat against the \\LaTeX compiler. In modern \\LaTeX 3, it is not so nasty to deal with neseted conditions. \n\\iffalse doesn't need to be considered.\n" }, + "getcontribdir": { + "scope": "doctex,tex,latex", + "prefix": "\\getcontribdir", + "body": "\\getcontribdir{$1}", + "description": "Get the contrib directory for #1 sub-theme.\ncontrib/#1 is returned.\n" + }, + "getcontribpath": { + "scope": "doctex,tex,latex", + "prefix": "\\getcontribpath", + "body": "\\getcontribpath{$1}{$2}", + "description": "Get the contrib directory filepath for #1 sub-theme and #2 filename.\ncontrib/#1/#2 is returned.\n" + }, "definelogo": { "scope": "doctex,tex,latex", "prefix": "\\definelogo", - "body": "\\definelogo{$1}{$2}{$3}", - "description": "Define a mask picture to make its different color variants.\nThe first argument assigns the file name and the second sets the horizontal cropping and the third sets the vertical cropping. Notice that the cropping is symmetrical (double the length). When the horizontal cropping is greater than the vertical cropping, the mask will be placed by its height, otherwise by its width. The domain for both cropping parameters is 0 to 1.\nYou should define a logo \\definelogo{mylogo}{}{} then use it in the contents like:\n\\mylogo[white], where the optional parameter could be the override color beyond the control of main logo color system or opacity=... to identify the opacity you want or any other parameter for a TikZ node.\nRemember, the picture should be in the vi/ folder.\nThe externalization will be disabled when using this system to generate logos, locally.\n" + "body": "\\definelogo[${1:vi}]{$2}{$3}{$4}", + "description": "Define a mask picture to make its different color variants.\nThe first argument assigns the file name and the second sets the horizontal cropping and the third sets the vertical cropping. Notice that the cropping is symmetrical (double the length). When the horizontal cropping is greater than the vertical cropping, the mask will be placed by its height, otherwise by its width. The domain for both cropping parameters is 0 to 1.\nYou should define a logo \\definelogo{mylogo}{}{} then use it in the contents like:\n\\mylogo[white], where the optional parameter could be the override color beyond the control of main logo color system or opacity=... to identify the opacity you want or any other parameter for a TikZ node.\nRemember, the picture should be in the vi/ folder by default. If you want to use some other file in other folder, add an optional paramter like \\definelogo[folder]{file}{0}{0} will get the folder/file.\nThe externalization will be disabled when using this system to generate logos, locally.\n" }, "sjtubeamer@compatible": { "scope": "doctex,tex", diff --git a/beamerthemesjtubeamer.sty b/beamerthemesjtubeamer.sty index eb43bea7..8f356861 100644 --- a/beamerthemesjtubeamer.sty +++ b/beamerthemesjtubeamer.sty @@ -72,6 +72,9 @@ \usefonttheme{sjtubeamer} \useinnertheme{sjtubeamer} \useoutertheme{sjtubeamer} +\newrobustcmd*\usemytheme[1]{ + \input{\getcontribpath{#1}{beamertheme#1.ltx}} +} \endinput %% %% End of file `beamerthemesjtubeamer.sty'. diff --git a/sjtuvi.sty b/sjtuvi.sty index fe7fbdcb..592a68de 100644 --- a/sjtuvi.sty +++ b/sjtuvi.sty @@ -36,6 +36,8 @@ \ifx\tempvar\tempvalue\tempiftrue\else\tempiffalse\fi \iftempif } +\providecommand{\getcontribdir}[1]{contrib/#1} +\providecommand{\getcontribpath}[2]{\getcontribdir{#1}/#2} \RequirePackage{tikz} \usetikzlibrary{fadings} \usetikzlibrary{decorations.pathmorphing} @@ -46,29 +48,30 @@ \definecolor{sjtuBluePrimary}{RGB}{0,64,152} %problue \definecolor{sjtuBlueSecondary}{RGB}{51,141,39} %lightgreen \definecolor{sjtuBlueTertiary}{RGB}{0,81,78} %lightgray -\newcommand{\definelogo}[3]{ - % #1: file from vi/ folder - % #2: horizontal clip (0~1) - % #3: vertical clip (0~1) - \pgfmathparse{notgreater(#2,#3)} +\newcommand{\definelogo}[4][vi]{ + % #1: folder + % #2: file from #1 folder + % #3: horizontal clip (0~1) + % #4: vertical clip (0~1) + \pgfmathparse{notgreater(#3,#4)} \ifnum\pgfmathresult=1 - \begin{tikzfadingfrompicture}[name=#1] + \begin{tikzfadingfrompicture}[name=#2] \fill[black] (-1,-1) rectangle (1,1); - \node {\includegraphics[width=1.5cm]{vi/#1}}; + \node {\includegraphics[width=1.5cm]{#1/#2}}; \end{tikzfadingfrompicture} \else - \begin{tikzfadingfrompicture}[name=#1] + \begin{tikzfadingfrompicture}[name=#2] \fill[black] (-1,-1) rectangle (1,1); - \node {\includegraphics[height=1.5cm]{vi/#1}}; + \node {\includegraphics[height=1.5cm]{#1/#2}}; \end{tikzfadingfrompicture} \fi - \expandafter\providecommand\csname #1\endcsname[1][\sjtubeamer@logocolor]{ + \expandafter\providecommand\csname #2\endcsname[1][\sjtubeamer@logocolor]{ % ##1: override color, or opacity=... (optional) \tikzexternaldisable \begin{tikzpicture} \begin{scope} - \clip ({-1.0+#2},{-1.0+#3}) rectangle ({1.0-#2},{1.0-#3}); - \fill [\sjtubeamer@logocolor, ##1, path fading=#1] + \clip ({-1.0+#3},{-1.0+#4}) rectangle ({1.0-#3},{1.0-#4}); + \fill [\sjtubeamer@logocolor, ##1, path fading=#2] (-1,-1) rectangle (1,1); \end{scope} \end{tikzpicture} diff --git a/src/source/beamerthemesjtubeamer.dtx b/src/source/beamerthemesjtubeamer.dtx index e2a03650..9effffa9 100644 --- a/src/source/beamerthemesjtubeamer.dtx +++ b/src/source/beamerthemesjtubeamer.dtx @@ -189,6 +189,16 @@ \useoutertheme{sjtubeamer} % \end{macrocode} % +% \begin{macro}{\usemytheme} +% When using \verb"my" option, you could load other contrib sub-themes by this command. The \verb"\getcontribpath" is defined in \verb"sjtuvi" package loaded in inner theme. +% \begin{macrocode} +\newrobustcmd*\usemytheme[1]{ + \input{\getcontribpath{#1}{beamertheme#1.ltx}} +} +% \end{macrocode} +% +% \end{macro} +% % \iffalse % % ------------------------------------------------------------------------ \fi diff --git a/src/source/sjtuvi.dtx b/src/source/sjtuvi.dtx index 92d8daf2..8341a66a 100644 --- a/src/source/sjtuvi.dtx +++ b/src/source/sjtuvi.dtx @@ -25,6 +25,8 @@ % \subsection{SJTU VI Library} % This library provides the definition of basic elements in SJTU VI, including color, logo and some shapes. % +% \subsubsection{Utilities} +% % \begin{macro}{\DefineOption} % Define the beamer option on the corresponding package, key and value. % \begin{macrocode} @@ -60,6 +62,22 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\getcontribdir} +% Get the contrib directory for #1 sub-theme. +% contrib/#1 is returned. +% \begin{macrocode} +\providecommand{\getcontribdir}[1]{contrib/#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\getcontribpath} +% Get the contrib directory filepath for #1 sub-theme and #2 filename. +% contrib/#1/#2 is returned. +% \begin{macrocode} +\providecommand{\getcontribpath}[2]{\getcontribdir{#1}/#2} +% \end{macrocode} +% \end{macro} +% % \subsubsection{Load TikZ} % Load TikZ package and its related library: % \verb"pattern.meta" provides the interface to define a pattern; @@ -95,32 +113,33 @@ % The first argument assigns the file name and the second sets the horizontal cropping and the third sets the vertical cropping. Notice that the cropping is symmetrical (double the length). When the horizontal cropping is greater than the vertical cropping, the mask will be placed by its height, otherwise by its width. The domain for both cropping parameters is 0 to 1. % You should define a logo \verb"\definelogo{mylogo}{}{}" then use it in the contents like: % \verb"\mylogo[white]", where the optional parameter could be the override color beyond the control of main logo color system or \verb"opacity=..." to identify the opacity you want or any other parameter for a TikZ node. -% Remember, the picture should be in the vi/ folder. +% Remember, the picture should be in the vi/ folder by default. If you want to use some other file in other folder, add an optional paramter like \verb"\definelogo[folder]{file}{0}{0}" will get the folder/file. % The externalization will be disabled when using this system to generate logos, locally. % \begin{macrocode} -\newcommand{\definelogo}[3]{ - % #1: file from vi/ folder - % #2: horizontal clip (0~1) - % #3: vertical clip (0~1) - \pgfmathparse{notgreater(#2,#3)} +\newcommand{\definelogo}[4][vi]{ + % #1: folder + % #2: file from #1 folder + % #3: horizontal clip (0~1) + % #4: vertical clip (0~1) + \pgfmathparse{notgreater(#3,#4)} \ifnum\pgfmathresult=1 - \begin{tikzfadingfrompicture}[name=#1] + \begin{tikzfadingfrompicture}[name=#2] \fill[black] (-1,-1) rectangle (1,1); - \node {\includegraphics[width=1.5cm]{vi/#1}}; + \node {\includegraphics[width=1.5cm]{#1/#2}}; \end{tikzfadingfrompicture} \else - \begin{tikzfadingfrompicture}[name=#1] + \begin{tikzfadingfrompicture}[name=#2] \fill[black] (-1,-1) rectangle (1,1); - \node {\includegraphics[height=1.5cm]{vi/#1}}; + \node {\includegraphics[height=1.5cm]{#1/#2}}; \end{tikzfadingfrompicture} \fi - \expandafter\providecommand\csname #1\endcsname[1][\sjtubeamer@logocolor]{ + \expandafter\providecommand\csname #2\endcsname[1][\sjtubeamer@logocolor]{ % ##1: override color, or opacity=... (optional) \tikzexternaldisable \begin{tikzpicture} \begin{scope} - \clip ({-1.0+#2},{-1.0+#3}) rectangle ({1.0-#2},{1.0-#3}); - \fill [\sjtubeamer@logocolor, ##1, path fading=#1] + \clip ({-1.0+#3},{-1.0+#4}) rectangle ({1.0-#3},{1.0-#4}); + \fill [\sjtubeamer@logocolor, ##1, path fading=#2] (-1,-1) rectangle (1,1); \end{scope} \end{tikzpicture} From 0ee41eb03b8b053ad4676a754678eb5569f44371 Mon Sep 17 00:00:00 2001 From: LogCreative Date: Wed, 1 Dec 2021 22:29:18 +0800 Subject: [PATCH 02/42] contrib: add sjtug template --- contrib/sjtug/beamerthemesjtug.ltx | 13 +++++++++++++ contrib/sjtug/vi/sjtug.pdf | Bin 0 -> 54590 bytes contrib/sjtug/vi/sjtugtext.pdf | Bin 0 -> 43436 bytes 3 files changed, 13 insertions(+) create mode 100644 contrib/sjtug/beamerthemesjtug.ltx create mode 100644 contrib/sjtug/vi/sjtug.pdf create mode 100644 contrib/sjtug/vi/sjtugtext.pdf diff --git a/contrib/sjtug/beamerthemesjtug.ltx b/contrib/sjtug/beamerthemesjtug.ltx new file mode 100644 index 00000000..e0cc10a2 --- /dev/null +++ b/contrib/sjtug/beamerthemesjtug.ltx @@ -0,0 +1,13 @@ +\usepackage{sjtuvi} +\usepackage{sjtucover} +\logo{\resizebox{1cm}{!}{\includegraphics{\getcontribpath{sjtug}{vi/sjtug.pdf}}}} +\titlegraphic{\includegraphics{sjtuphoto}} +\definecolor{cprimary}{RGB}{225,111,11} +\definelogo[\getcontribdir{sjtug}/vi]{sjtugtext}{0}{0} +\setbeamertemplate{background}{ + \bgcenterbox{ + \sjtugtext[opacity=0.15] + } +} +\defbeamertemplatealias{title page}{my}{maxplus} +\defbeamertemplatealias{bottom page}{my}{min} \ No newline at end of file diff --git a/contrib/sjtug/vi/sjtug.pdf b/contrib/sjtug/vi/sjtug.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0334b10462c5f7690b4a91fc605ffbcdaa2e6f76 GIT binary patch literal 54590 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%0D&~^VAuYK$Ns*No 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

dg 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 literal 0 HcmV?d00001 From 20565cff6fca9d2cb4718cd44a2c31fcf96df46c Mon Sep 17 00:00:00 2001 From: LogCreative Date: Wed, 1 Dec 2021 22:29:28 +0800 Subject: [PATCH 03/42] feat: add my test case --- my.tex | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 my.tex diff --git a/my.tex b/my.tex new file mode 100644 index 00000000..4f8fe13b --- /dev/null +++ b/my.tex @@ -0,0 +1,14 @@ +\documentclass{ctexbeamer} +\usetheme[my]{sjtubeamer} +\usemytheme{sjtug} +\begin{document} + \title{自定主题} + \subtitle{My theme} + \author{作者} + \date{\today} + \maketitle + \begin{frame} + 使用自定义的样式 + \end{frame} + \makebottom +\end{document} \ No newline at end of file From c418703194bb68f42e3747bcc7aa77097cb3f1fd Mon Sep 17 00:00:00 2001 From: LogCreative Date: Fri, 3 Dec 2021 10:09:12 +0800 Subject: [PATCH 04/42] Revert "feat: add my test case" This reverts commit f39a811a96934a3ec1353184402c61c6bf83bb41. --- my.tex | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 my.tex diff --git a/my.tex b/my.tex deleted file mode 100644 index 4f8fe13b..00000000 --- a/my.tex +++ /dev/null @@ -1,14 +0,0 @@ -\documentclass{ctexbeamer} -\usetheme[my]{sjtubeamer} -\usemytheme{sjtug} -\begin{document} - \title{自定主题} - \subtitle{My theme} - \author{作者} - \date{\today} - \maketitle - \begin{frame} - 使用自定义的样式 - \end{frame} - \makebottom -\end{document} \ No newline at end of file From bf35dbb1514ee7e9e3f1860f2c611d65e8c42cac Mon Sep 17 00:00:00 2001 From: LogCreative Date: Fri, 3 Dec 2021 10:18:47 +0800 Subject: [PATCH 05/42] docs: fix dtx # --- src/build.lua | 21 +++++---------------- src/source/sjtuvi.dtx | 8 ++++---- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/build.lua b/src/build.lua index 1f293ac0..8bd10bfe 100644 --- a/src/build.lua +++ b/src/build.lua @@ -64,27 +64,16 @@ end -- Compiling file in a certain receipe: tex -> biber(-) -> tex(+) -- by assigning different symbols in the filename. -- This will patch l3build compilation "tex" command. -function compile_file(dir, cmd, filename, native) +function compile_file(dir, cmd, filename) local errorlevel = 0 - if os.type == "windows" then - native = false - end - if native then - errorlevel = tex(filename, dir, cmd) - else - errorlevel = run(dir, cmd .. " " .. filename) - end + errorlevel = run(dir, cmd .. " " .. filename) if string.find(filename,"+") ~= nil then if string.find(filename,"-") ~= nil then -- biber after compiling the first time if it is marked as "-" errorlevel = biber(string.gsub(filename,".tex",""),dir) end -- compile the second time if it is marked as "+" - if native then - errorlevel = tex(filename, dir, cmd) - else - errorlevel = run(dir,cmd .. " " .. filename) - end + errorlevel = run(dir,cmd .. " " .. filename) end return errorlevel end @@ -149,7 +138,7 @@ function typeset_demo_tasks() cachedfile:close() stepfile:close() - errorlevel = compile_file(tutorialdir, typesetcommand, cachedfilename, false) + errorlevel = compile_file(tutorialdir, typesetcommand, cachedfilename) if errorlevel ~= 0 then print(pdffilename .. " compilation failed.") return errorlevel @@ -157,7 +146,7 @@ function typeset_demo_tasks() errorlevel = ren(tutorialdir, "tmp" .. pdffilename, pdffilename) else -- fallback to standard compilation. - errorlevel = compile_file(tutorialdir, typesetcommand, p, true) + errorlevel = compile_file(tutorialdir, typesetcommand, p) if errorlevel ~= 0 then print(pdffilename .. " compilation failed.") return errorlevel diff --git a/src/source/sjtuvi.dtx b/src/source/sjtuvi.dtx index 8341a66a..f5865396 100644 --- a/src/source/sjtuvi.dtx +++ b/src/source/sjtuvi.dtx @@ -63,16 +63,16 @@ % \end{macro} % % \begin{macro}{\getcontribdir} -% Get the contrib directory for #1 sub-theme. -% contrib/#1 is returned. +% Get the contrib directory for \verb"#1" sub-theme. +% \verb"contrib/#1" is returned. % \begin{macrocode} \providecommand{\getcontribdir}[1]{contrib/#1} % \end{macrocode} % \end{macro} % % \begin{macro}{\getcontribpath} -% Get the contrib directory filepath for #1 sub-theme and #2 filename. -% contrib/#1/#2 is returned. +% Get the contrib directory filepath for \verb"#1" sub-theme and \verb"#2" filename. +% \verb"contrib/#1/#2" is returned. % \begin{macrocode} \providecommand{\getcontribpath}[2]{\getcontribdir{#1}/#2} % \end{macrocode} From cb47fdb91121ccb056126c63844f8d79d0a9b760 Mon Sep 17 00:00:00 2001 From: LogCreative Date: Fri, 3 Dec 2021 14:59:08 +0800 Subject: [PATCH 06/42] feat: add test case for contrib --- .gitignore | 3 ++- contrib/sjtug/beamerthemesjtug.ltx | 5 ++--- contrib/sjtug/sjtug.tex | 13 +++++++++++++ 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 contrib/sjtug/sjtug.tex diff --git a/.gitignore b/.gitignore index c2281bb9..7a3b3244 100644 --- a/.gitignore +++ b/.gitignore @@ -266,4 +266,5 @@ cover.pdf sjtubeamer*.pdf cover-*.pdf basis-*.tex -step*.pdf \ No newline at end of file +step*.pdf +contrib/*/*.pdf \ No newline at end of file diff --git a/contrib/sjtug/beamerthemesjtug.ltx b/contrib/sjtug/beamerthemesjtug.ltx index e0cc10a2..543d7667 100644 --- a/contrib/sjtug/beamerthemesjtug.ltx +++ b/contrib/sjtug/beamerthemesjtug.ltx @@ -1,13 +1,12 @@ -\usepackage{sjtuvi} -\usepackage{sjtucover} \logo{\resizebox{1cm}{!}{\includegraphics{\getcontribpath{sjtug}{vi/sjtug.pdf}}}} \titlegraphic{\includegraphics{sjtuphoto}} \definecolor{cprimary}{RGB}{225,111,11} -\definelogo[\getcontribdir{sjtug}/vi]{sjtugtext}{0}{0} +\definelogo[\getcontribdir{sjtug}/vi]{sjtugtext}{0}{0.8} \setbeamertemplate{background}{ \bgcenterbox{ \sjtugtext[opacity=0.15] } } +\institute[SJTU Linux User Group]{上海交通大学 Linux 用户组} \defbeamertemplatealias{title page}{my}{maxplus} \defbeamertemplatealias{bottom page}{my}{min} \ No newline at end of file diff --git a/contrib/sjtug/sjtug.tex b/contrib/sjtug/sjtug.tex new file mode 100644 index 00000000..b267dec9 --- /dev/null +++ b/contrib/sjtug/sjtug.tex @@ -0,0 +1,13 @@ +\documentclass{ctexbeamer} +\usetheme[my]{sjtubeamer} +\renewcommand{\getcontribdir}[1]{.} % +\renewcommand{\getcontribpath}[2]{#2} % +\usemytheme{sjtug} +\begin{document} + \maketitle + \begin{frame} + \frametitle{\sjtugtext 主题} + 这个主题采用了 SJTUG 的 logo。 + \end{frame} + \makebottom +\end{document} \ No newline at end of file From 416a34f80fa1a34d94efb0b8b70cd24e8a2f15b5 Mon Sep 17 00:00:00 2001 From: LogCreative Date: Fri, 3 Dec 2021 16:09:08 +0800 Subject: [PATCH 07/42] feat: current path & multiple mytheme --- .../{beamerthemesjtug.ltx => sjtubeamerthemesjtug.ltx} | 0 contrib/sjtug/sjtug.tex | 2 -- src/source/beamerthemesjtubeamer.dtx | 10 +++++++++- 3 files changed, 9 insertions(+), 3 deletions(-) rename contrib/sjtug/{beamerthemesjtug.ltx => sjtubeamerthemesjtug.ltx} (100%) diff --git a/contrib/sjtug/beamerthemesjtug.ltx b/contrib/sjtug/sjtubeamerthemesjtug.ltx similarity index 100% rename from contrib/sjtug/beamerthemesjtug.ltx rename to contrib/sjtug/sjtubeamerthemesjtug.ltx diff --git a/contrib/sjtug/sjtug.tex b/contrib/sjtug/sjtug.tex index b267dec9..17a59760 100644 --- a/contrib/sjtug/sjtug.tex +++ b/contrib/sjtug/sjtug.tex @@ -1,7 +1,5 @@ \documentclass{ctexbeamer} \usetheme[my]{sjtubeamer} -\renewcommand{\getcontribdir}[1]{.} % -\renewcommand{\getcontribpath}[2]{#2} % \usemytheme{sjtug} \begin{document} \maketitle diff --git a/src/source/beamerthemesjtubeamer.dtx b/src/source/beamerthemesjtubeamer.dtx index 9effffa9..c0940b29 100644 --- a/src/source/beamerthemesjtubeamer.dtx +++ b/src/source/beamerthemesjtubeamer.dtx @@ -191,9 +191,17 @@ % % \begin{macro}{\usemytheme} % When using \verb"my" option, you could load other contrib sub-themes by this command. The \verb"\getcontribpath" is defined in \verb"sjtuvi" package loaded in inner theme. +% This command will first check the root directory for dependency. % \begin{macrocode} \newrobustcmd*\usemytheme[1]{ - \input{\getcontribpath{#1}{beamertheme#1.ltx}} + \def\sjtubeamer@mythemelist{#1} + \@for\sjtubeamer@mythemename:=\sjtubeamer@mythemelist\do{ + \def\sjtubeamer@mythemefile{sjtubeamertheme\sjtubeamer@mythemename.ltx} + \IfFileExists{\sjtubeamer@mythemefile}{ + \renewcommand{\getcontribdir}[1]{.} + }{} + \input{\getcontribpath{\sjtubeamer@mythemename}{\sjtubeamer@mythemefile}} + } } % \end{macrocode} % From 1e455a0b5173a44cf5af5d455cf902bac4ddc798 Mon Sep 17 00:00:00 2001 From: LogCreative Date: Fri, 3 Dec 2021 23:04:01 +0800 Subject: [PATCH 08/42] docs: minor tweak --- .vscode/sjtubeamer.code-snippets | 4 ++-- beamerthemesjtubeamer.sty | 18 ++++++++++++++++-- src/source/beamerthemesjtubeamer.dtx | 18 +++++++++++++----- src/source/sjtuvi.dtx | 4 ++-- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/.vscode/sjtubeamer.code-snippets b/.vscode/sjtubeamer.code-snippets index 44ffc9b6..53e16b3d 100644 --- a/.vscode/sjtubeamer.code-snippets +++ b/.vscode/sjtubeamer.code-snippets @@ -189,7 +189,7 @@ "scope": "doctex,tex,latex", "prefix": "\\usemytheme", "body": "\\usemytheme{$1}", - "description": "When using my option, you could load other contrib sub-themes by this command. The \\getcontribpath is defined in sjtuvi package loaded in inner theme.\n" + "description": "When using my option, you could load other contrib sub-themes by this command. Use comma-seperated list to load multiple sub-themes in one line. The \\getcontribpath is defined in sjtuvi package loaded in inner theme.\n\nIf debug option is given to this command, it will first check the root directory for dependency. If it exists, the \\getcontribdir macro will be redefined. \nRemember the contrib directory is permantly modified and the directory for other dependency may be missing due to this debug config. You may need to modify to \\renewcommand{\\getcontribdir}[1]{\\sjtubeamer@contribdir/#1} manually to recover to the standard configuration. We didn't put the last command into this since we only expect you to only use the debug option for only one contrib dependency -- the one needs to be documented. And you should run l3build install in the src folder for making the sjtubeamer main part into your texmf path. If you want to combine multiple dependencies, you should write and compile your documentation in the root folder. And our CI will move your documentation to the root first before checking.\n" }, "DefineOption": { "scope": "doctex,tex", @@ -201,7 +201,7 @@ "scope": "doctex,tex", "prefix": "\\EqualOption", "body": "\\EqualOption", - "description": "To check if the option on package, key is equal to value.\n\nHere, a dummy trick is used to pass the if condition.\nSince LaTeX handles \\if differently.\n\\iftrue will eliminate the nearest \\else and \\fi but remains other extra \\fi and throws errors.\nTo avoid this, if the macro is expanded after \\if, T=T, the condition holds and finish the current pair. And continues to process the real defined macro. This solution is somehow to combat against the \\LaTeX compiler. In modern \\LaTeX 3, it is not so nasty to deal with neseted conditions. \n\\iffalse doesn't need to be considered.\n" + "description": "To check if the option on package, key is equal to value.\n\nHere, a dummy trick is used to pass the if condition.\nSince \\LaTeX\\ handles \\if differently.\n\\iftrue will eliminate the nearest \\else and \\fi but remains other extra \\fi and throws errors.\nTo avoid this, if the macro is expanded after \\if, T=T, the condition holds and finish the current pair. And continues to process the real defined macro. This solution is somehow to combat against the \\LaTeX\\ compiler. In modern \\LaTeX3, it is not so nasty to deal with neseted conditions. \n\\iffalse doesn't need to be considered.\n" }, "getcontribdir": { "scope": "doctex,tex,latex", diff --git a/beamerthemesjtubeamer.sty b/beamerthemesjtubeamer.sty index 8f356861..55072393 100644 --- a/beamerthemesjtubeamer.sty +++ b/beamerthemesjtubeamer.sty @@ -72,8 +72,22 @@ \usefonttheme{sjtubeamer} \useinnertheme{sjtubeamer} \useoutertheme{sjtubeamer} -\newrobustcmd*\usemytheme[1]{ - \input{\getcontribpath{#1}{beamertheme#1.ltx}} +\newrobustcmd*\usemytheme[2][]{ + \def\sjtubeamer@mytheme@option{#1} + \def\sjtubeamer@mythemelist{#2} + \@for\sjtubeamer@mythemename:=\sjtubeamer@mythemelist\do{ + \def\sjtubeamer@mythemefile{sjtubeamertheme\sjtubeamer@mythemename.ltx} + \if\EqualOption{mytheme}{option}{debug} + \IfFileExists{\sjtubeamer@mythemefile}{ + \PackageWarning{\sjtubeamer@mythemename}{ + Local ltx file is found. For documentation use only. \MessageBreak + Move to \getcontribdir{\sjtubeamer@mythemename} for release. + Unexpected error in other ltx may occur} + \renewcommand{\getcontribdir}[1]{.} + }{} + \fi + \input{\getcontribpath{\sjtubeamer@mythemename}{\sjtubeamer@mythemefile}} + } } \endinput %% diff --git a/src/source/beamerthemesjtubeamer.dtx b/src/source/beamerthemesjtubeamer.dtx index c0940b29..3ad85d44 100644 --- a/src/source/beamerthemesjtubeamer.dtx +++ b/src/source/beamerthemesjtubeamer.dtx @@ -190,16 +190,24 @@ % \end{macrocode} % % \begin{macro}{\usemytheme} -% When using \verb"my" option, you could load other contrib sub-themes by this command. The \verb"\getcontribpath" is defined in \verb"sjtuvi" package loaded in inner theme. -% This command will first check the root directory for dependency. +% When using \verb"my" option, you could load other contrib sub-themes by this command. Use comma-seperated list to load multiple sub-themes in one line. The \verb"\getcontribpath" is defined in \verb"sjtuvi" package loaded in inner theme. +% +% If \verb"debug" option is given to this command, it will first check the root directory for dependency. If it exists, the \verb"\getcontribdir" macro will be redefined. +% Remember the contrib directory is permantly modified and the directory for other dependency may be missing due to this debug config. You may need to modify to \verb"\renewcommand{\getcontribdir}[1]{\sjtubeamer@contribdir/#1}" manually to recover to the standard configuration. We didn't put the last command into this since we only expect you to only use the debug option for only one contrib dependency -- the one needs to be documented. And you should run \verb"l3build install" in the \verb"src" folder for making the sjtubeamer main part into your texmf path. If you want to combine multiple dependencies, you should write and compile your documentation in the root folder. And our CI will move your documentation to the root first before checking. % \begin{macrocode} \newrobustcmd*\usemytheme[1]{ \def\sjtubeamer@mythemelist{#1} \@for\sjtubeamer@mythemename:=\sjtubeamer@mythemelist\do{ \def\sjtubeamer@mythemefile{sjtubeamertheme\sjtubeamer@mythemename.ltx} - \IfFileExists{\sjtubeamer@mythemefile}{ - \renewcommand{\getcontribdir}[1]{.} - }{} + \if\EqualOption{mytheme}{option}{debug} + \IfFileExists{\sjtubeamer@mythemefile}{ + \PackageWarning{\sjtubeamer@mythemename}{ + Local ltx file is found. For documentation use only. \MessageBreak + Move to \getcontribdir{\sjtubeamer@mythemename} for release. + Unexpected error in other ltx may occur} + \renewcommand{\getcontribdir}[1]{.} + }{} + \fi \input{\getcontribpath{\sjtubeamer@mythemename}{\sjtubeamer@mythemefile}} } } diff --git a/src/source/sjtuvi.dtx b/src/source/sjtuvi.dtx index f5865396..501d9562 100644 --- a/src/source/sjtuvi.dtx +++ b/src/source/sjtuvi.dtx @@ -43,9 +43,9 @@ % To check if the option on package, key is equal to value. % % Here, a dummy trick is used to pass the if condition. -% Since LaTeX handles \verb"\if" differently. +% Since \LaTeX\ handles \verb"\if" differently. % \verb"\iftrue" will eliminate the nearest \verb"\else" and \verb"\fi" but remains other extra \verb"\fi" and throws errors. -% To avoid this, if the macro is expanded after \verb"\if", \verb"T=T", the condition holds and finish the current pair. And continues to process the real defined macro. This solution is somehow to combat against the \LaTeX compiler. In modern \LaTeX 3, it is not so nasty to deal with neseted conditions. +% To avoid this, if the macro is expanded after \verb"\if", \verb"T=T", the condition holds and finish the current pair. And continues to process the real defined macro. This solution is somehow to combat against the \LaTeX\ compiler. In modern \LaTeX3, it is not so nasty to deal with neseted conditions. % \verb"\iffalse" doesn't need to be considered. % \begin{macrocode} \def\EqualOption{TT\fi\ifEqualOption} % dummy trick to pass the condition test From 9faa7ff0f70758ec69b3982055f9c475af63146f Mon Sep 17 00:00:00 2001 From: LogCreative Date: Fri, 3 Dec 2021 23:32:55 +0800 Subject: [PATCH 09/42] feat: pass options to mytheme --- .vscode/sjtubeamer.code-snippets | 2 +- beamerthemesjtubeamer.sty | 21 ++++++++++--------- contrib/sjtug/sjtubeamerthemesjtug.ltx | 5 ++++- src/source/beamerthemesjtubeamer.dtx | 28 ++++++++++++++------------ 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/.vscode/sjtubeamer.code-snippets b/.vscode/sjtubeamer.code-snippets index 53e16b3d..7ac5cd43 100644 --- a/.vscode/sjtubeamer.code-snippets +++ b/.vscode/sjtubeamer.code-snippets @@ -189,7 +189,7 @@ "scope": "doctex,tex,latex", "prefix": "\\usemytheme", "body": "\\usemytheme{$1}", - "description": "When using my option, you could load other contrib sub-themes by this command. Use comma-seperated list to load multiple sub-themes in one line. The \\getcontribpath is defined in sjtuvi package loaded in inner theme.\n\nIf debug option is given to this command, it will first check the root directory for dependency. If it exists, the \\getcontribdir macro will be redefined. \nRemember the contrib directory is permantly modified and the directory for other dependency may be missing due to this debug config. You may need to modify to \\renewcommand{\\getcontribdir}[1]{\\sjtubeamer@contribdir/#1} manually to recover to the standard configuration. We didn't put the last command into this since we only expect you to only use the debug option for only one contrib dependency -- the one needs to be documented. And you should run l3build install in the src folder for making the sjtubeamer main part into your texmf path. If you want to combine multiple dependencies, you should write and compile your documentation in the root folder. And our CI will move your documentation to the root first before checking.\n" + "description": "When using my option, you could load other contrib sub-themes by this command. Use comma-seperated list to load multiple sub-themes in one line. The \\getcontribpath is defined in sjtuvi package loaded in inner theme.\n\nThis command will first check the root directory for dependency. If it exists, the \\getcontribdir macro will be redefined. \nRemember the contrib directory is permantly modified and the directory for other dependency may be missing due to this debug config. You may need to modify to \\renewcommand{\\getcontribdir}[1]{\\sjtubeamer@contribdir/#1} manually to recover to the standard configuration. We didn't put the last command into this since we only expect you to only use the debug option for only one contrib dependency --- the one needs to be documented. And you should run l3build install in the src folder for making the sjtubeamer main part into your texmf path. If you want to combine multiple dependencies, you should write and compile your documentation in the root folder. And our CI will move your documentation to the root first before checking.\n" }, "DefineOption": { "scope": "doctex,tex", diff --git a/beamerthemesjtubeamer.sty b/beamerthemesjtubeamer.sty index 55072393..158c6321 100644 --- a/beamerthemesjtubeamer.sty +++ b/beamerthemesjtubeamer.sty @@ -73,19 +73,20 @@ \useinnertheme{sjtubeamer} \useoutertheme{sjtubeamer} \newrobustcmd*\usemytheme[2][]{ - \def\sjtubeamer@mytheme@option{#1} + \def\sjtubeamer@mythemeoptions{#1} \def\sjtubeamer@mythemelist{#2} \@for\sjtubeamer@mythemename:=\sjtubeamer@mythemelist\do{ + \@for\sjtubeamer@mythemeoption:=\sjtubeamer@mythemeoptions\do{ + \expandafter\def\csname sjtubeamer@\sjtubeamer@mythemename @\sjtubeamer@mythemeoption\endcsname{true} + } \def\sjtubeamer@mythemefile{sjtubeamertheme\sjtubeamer@mythemename.ltx} - \if\EqualOption{mytheme}{option}{debug} - \IfFileExists{\sjtubeamer@mythemefile}{ - \PackageWarning{\sjtubeamer@mythemename}{ - Local ltx file is found. For documentation use only. \MessageBreak - Move to \getcontribdir{\sjtubeamer@mythemename} for release. - Unexpected error in other ltx may occur} - \renewcommand{\getcontribdir}[1]{.} - }{} - \fi + \IfFileExists{\sjtubeamer@mythemefile}{ + \PackageWarning{\sjtubeamer@mythemename}{ + Local ltx file is found. For documentation use only. \MessageBreak + Move to \getcontribdir{\sjtubeamer@mythemename} for release. + Unexpected error in other ltx may occur} + \renewcommand{\getcontribdir}[1]{.} + }{} \input{\getcontribpath{\sjtubeamer@mythemename}{\sjtubeamer@mythemefile}} } } diff --git a/contrib/sjtug/sjtubeamerthemesjtug.ltx b/contrib/sjtug/sjtubeamerthemesjtug.ltx index 543d7667..ce28091a 100644 --- a/contrib/sjtug/sjtubeamerthemesjtug.ltx +++ b/contrib/sjtug/sjtubeamerthemesjtug.ltx @@ -9,4 +9,7 @@ } \institute[SJTU Linux User Group]{上海交通大学 Linux 用户组} \defbeamertemplatealias{title page}{my}{maxplus} -\defbeamertemplatealias{bottom page}{my}{min} \ No newline at end of file +\defbeamertemplatealias{bottom page}{my}{min} +\if\EqualOption{sjtug}{debug}{true} + \PackageWarning{sjtug}{You are debugging sjtug subtheme} +\fi \ No newline at end of file diff --git a/src/source/beamerthemesjtubeamer.dtx b/src/source/beamerthemesjtubeamer.dtx index 3ad85d44..e56ab74f 100644 --- a/src/source/beamerthemesjtubeamer.dtx +++ b/src/source/beamerthemesjtubeamer.dtx @@ -192,22 +192,24 @@ % \begin{macro}{\usemytheme} % When using \verb"my" option, you could load other contrib sub-themes by this command. Use comma-seperated list to load multiple sub-themes in one line. The \verb"\getcontribpath" is defined in \verb"sjtuvi" package loaded in inner theme. % -% If \verb"debug" option is given to this command, it will first check the root directory for dependency. If it exists, the \verb"\getcontribdir" macro will be redefined. -% Remember the contrib directory is permantly modified and the directory for other dependency may be missing due to this debug config. You may need to modify to \verb"\renewcommand{\getcontribdir}[1]{\sjtubeamer@contribdir/#1}" manually to recover to the standard configuration. We didn't put the last command into this since we only expect you to only use the debug option for only one contrib dependency -- the one needs to be documented. And you should run \verb"l3build install" in the \verb"src" folder for making the sjtubeamer main part into your texmf path. If you want to combine multiple dependencies, you should write and compile your documentation in the root folder. And our CI will move your documentation to the root first before checking. +% This command will first check the root directory for dependency. If it exists, the \verb"\getcontribdir" macro will be redefined. +% Remember the contrib directory is permantly modified and the directory for other dependency may be missing due to this debug config. You may need to modify to \verb"\renewcommand{\getcontribdir}[1]{\sjtubeamer@contribdir/#1}" manually to recover to the standard configuration. We didn't put the last command into this since we only expect you to only use the debug option for only one contrib dependency --- the one needs to be documented. And you should run \verb"l3build install" in the \verb"src" folder for making the sjtubeamer main part into your texmf path. If you want to combine multiple dependencies, you should write and compile your documentation in the root folder. And our CI will move your documentation to the root first before checking. % \begin{macrocode} -\newrobustcmd*\usemytheme[1]{ - \def\sjtubeamer@mythemelist{#1} +\newrobustcmd*\usemytheme[2][]{ + \def\sjtubeamer@mythemeoptions{#1} + \def\sjtubeamer@mythemelist{#2} \@for\sjtubeamer@mythemename:=\sjtubeamer@mythemelist\do{ + \@for\sjtubeamer@mythemeoption:=\sjtubeamer@mythemeoptions\do{ + \expandafter\def\csname sjtubeamer@\sjtubeamer@mythemename @\sjtubeamer@mythemeoption\endcsname{true} + } \def\sjtubeamer@mythemefile{sjtubeamertheme\sjtubeamer@mythemename.ltx} - \if\EqualOption{mytheme}{option}{debug} - \IfFileExists{\sjtubeamer@mythemefile}{ - \PackageWarning{\sjtubeamer@mythemename}{ - Local ltx file is found. For documentation use only. \MessageBreak - Move to \getcontribdir{\sjtubeamer@mythemename} for release. - Unexpected error in other ltx may occur} - \renewcommand{\getcontribdir}[1]{.} - }{} - \fi + \IfFileExists{\sjtubeamer@mythemefile}{ + \PackageWarning{\sjtubeamer@mythemename}{ + Local ltx file is found. For documentation use only. \MessageBreak + Move to \getcontribdir{\sjtubeamer@mythemename} for release. + Unexpected error in other ltx may occur} + \renewcommand{\getcontribdir}[1]{.} + }{} \input{\getcontribpath{\sjtubeamer@mythemename}{\sjtubeamer@mythemefile}} } } From 90b1e381a490b3cd4c3b3681906a72b8f64e5f9a Mon Sep 17 00:00:00 2001 From: LogCreative Date: Fri, 3 Dec 2021 23:36:31 +0800 Subject: [PATCH 10/42] docs: passing options --- .vscode/sjtubeamer.code-snippets | 2 +- src/source/beamerthemesjtubeamer.dtx | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.vscode/sjtubeamer.code-snippets b/.vscode/sjtubeamer.code-snippets index 7ac5cd43..513082e8 100644 --- a/.vscode/sjtubeamer.code-snippets +++ b/.vscode/sjtubeamer.code-snippets @@ -189,7 +189,7 @@ "scope": "doctex,tex,latex", "prefix": "\\usemytheme", "body": "\\usemytheme{$1}", - "description": "When using my option, you could load other contrib sub-themes by this command. Use comma-seperated list to load multiple sub-themes in one line. The \\getcontribpath is defined in sjtuvi package loaded in inner theme.\n\nThis command will first check the root directory for dependency. If it exists, the \\getcontribdir macro will be redefined. \nRemember the contrib directory is permantly modified and the directory for other dependency may be missing due to this debug config. You may need to modify to \\renewcommand{\\getcontribdir}[1]{\\sjtubeamer@contribdir/#1} manually to recover to the standard configuration. We didn't put the last command into this since we only expect you to only use the debug option for only one contrib dependency --- the one needs to be documented. And you should run l3build install in the src folder for making the sjtubeamer main part into your texmf path. If you want to combine multiple dependencies, you should write and compile your documentation in the root folder. And our CI will move your documentation to the root first before checking.\n" + "description": "When using my option, you could load other contrib sub-themes by this command. Use comma-seperated list to load multiple sub-themes in one line. The \\getcontribpath is defined in sjtuvi package loaded in inner theme.\n\nYou could pass options to all the sub-themes by writing in the square brackets. Then, in your sub-theme, you could use \\if\\EqualOption{}{