% \iffalse meta-comment % % Copyright (C) 2021 - 2022 % by Nanjing University Linux User Group % <git+nju-lug-email-3104-issue-@yaoge123.cn> % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this % license or (at your option) any later version. The latest version % of this license is in the file % % https://www.latex-project.org/lppl.txt % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is Yu Xiong. % % This work consists of the files njuvisual.dtx, % njuvisual-emblem.dtx, % njuvisual-name.dtx, % njuvisual-motto.dtx, % njuvisual-spirit.dtx, % njuvisual-ai.dtx, % njuvisual-chem.dtx, % njuvisual-cs.dtx, % njuvisual-dii.dtx, % njuvisual-eng.dtx, % njuvisual-physics.dtx, % njuvisual-software.dtx, % njuvisual-end.dtx, % and the derived files njuvisual.ins, % njuvisual.sty, % njuvisual.pdf, % njuvisual-emblem-nju.def, % njuvisual-emblem-ai.def, % njuvisual-emblem-chem.def, % njuvisual-emblem-cs.def, % njuvisual-emblem-dii.def, % njuvisual-emblem-eng.def, % njuvisual-emblem-eng.def, % njuvisual-emblem-software.def, % njuvisual-motto-nju.def, % njuvisual-name-zh-nju.def, % njuvisual-name-en-nju.def, % njuvisual-spirit-nju.def, % njuvisual-example.tex. % % ----------------------------------------------------------------------- % % The development version of the template can be found at % % https://github.com/nju-lug/NJUVisual % % for those people who are interested. % %<*internal> \begingroup \def\NameOfLaTeXe{LaTeX2e} \expandafter\endgroup\ifx\NameOfLaTeXe\fmtname\else \csname fi\endcsname %</internal> % %<*install> \input docstrip.tex \keepsilent \askforoverwritefalse \preamble Copyright (C) 2021 - 2022 by Nanjing University Linux User Group % <git+nju-lug-email-3104-issue-@yaoge123.cn> This file may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c of this license or (at your option) any later version. The latest version of this license is in: http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later. To produce the documentation run the original source files ending with `.dtx' through XeTeX. \endpreamble \generate{ \usedir{tex/latex/njuvisual} \file{\jobname-example.tex} {\from{\jobname.dtx}{example} \from{\jobname-emblem.dtx}{example} \from{\jobname-name.dtx}{example} \from{\jobname-motto.dtx}{example} \from{\jobname-spirit.dtx}{example} \from{\jobname-ai.dtx}{example} \from{\jobname-chem.dtx}{example} \from{\jobname-cs.dtx}{example} \from{\jobname-dii.dtx}{example} \from{\jobname-eng.dtx}{example} \from{\jobname-physics.dtx}{example} \from{\jobname-software.dtx}{example} \from{\jobname-end.dtx}{example}} \file{\jobname.sty} {\from{\jobname.dtx}{package} \from{\jobname-emblem.dtx}{color} \from{\jobname-ai.dtx}{color} \from{\jobname-chem.dtx}{color} \from{\jobname-cs.dtx}{color} \from{\jobname-dii.dtx}{color} \from{\jobname-eng.dtx}{color} \from{\jobname-physics.dtx}{color} \from{\jobname-software.dtx}{color}} \nopreamble\nopostamble \file{\jobname-emblem-nju.def} {\from{\jobname-emblem.dtx}{emblem-nju}} \file{\jobname-name-zh-nju.def} {\from{\jobname-name.dtx}{name-zh-nju}} \file{\jobname-name-en-nju.def} {\from{\jobname-name.dtx}{name-en-nju}} \file{\jobname-motto-nju.def} {\from{\jobname-motto.dtx}{motto-nju}} \file{\jobname-spirit-nju.def} {\from{\jobname-spirit.dtx}{spirit-nju}} \file{\jobname-emblem-ai.def} {\from{\jobname-ai.dtx}{emblem-ai}} \file{\jobname-emblem-chem.def} {\from{\jobname-chem.dtx}{emblem-chem}} \file{\jobname-emblem-cs.def} {\from{\jobname-cs.dtx}{emblem-cs}} \file{\jobname-emblem-dii.def} {\from{\jobname-dii.dtx}{emblem-dii}} \file{\jobname-emblem-eng.def} {\from{\jobname-eng.dtx}{emblem-eng}} \file{\jobname-emblem-physics.def} {\from{\jobname-physics.dtx}{emblem-physics}} \file{\jobname-emblem-software.def} {\from{\jobname-software.dtx}{emblem-software}} %<*internal> \usedir{source/latex/njuvisual} \file{\jobname.ins} {\from{\jobname.dtx}{install}} %</internal> } \obeyspaces \Msg{*************************************************************} \Msg{* *} \Msg{* To finish the installation you have to move the following *} \Msg{* files into a directory searched by TeX: *} \Msg{* *} \Msg{* The recommended directory is TDS:tex/latex/njuvisual *} \Msg{* *} \Msg{* njuvisual.ins *} \Msg{* njuvisual.sty *} \Msg{* njuvisual-emblem-nju.def, *} \Msg{* njuvisual-emblem-ai.def, *} \Msg{* njuvisual-emblem-chem.def, *} \Msg{* njuvisual-emblem-cs.def, *} \Msg{* njuvisual-emblem-dii.def, *} \Msg{* njuvisual-emblem-eng.def, *} \Msg{* njuvisual-emblem-eng.def, *} \Msg{* njuvisual-emblem-software.def, *} \Msg{* njuvisual-motto-nju.def, *} \Msg{* njuvisual-name-zh-nju.def, *} \Msg{* njuvisual-name-en-nju.def, *} \Msg{* njuvisual-spirit-nju.def, *} \Msg{* *} \Msg{* To produce the documentation, run the file njuvisual.dtx *} \Msg{* through XeLaTeX. *} \Msg{* *} \Msg{* Happy TeXing! *} \Msg{* *} \Msg{*************************************************************} \endbatchfile %</install> % %<*internal> \fi %</internal> % %<package>\NeedsTeXFormat{LaTeX2e} %<!(driver|example)>\GetIdInfo $Id: njuvisual.dtx 0.3.0 2022-12-13 18:00:00 %<!(driver|example)> +0800 NJU LUG <git+nju-lug-email-3104-issue-@yaoge123.cn>$ %<package> {Nanjing University Visual Identity} %<package>\ProvidesExplPackage{njuvisual} %<package> {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} % %<*driver> \documentclass[fontset=fandol]{ctxdoc} \usepackage{listings,njuvisual,tabularray,zhlineskip} \usepackage[firstpage=true]{background} \backgroundsetup{contents={\njuemblem[white!85!gray]{22cm}{!}},scale=1,angle=0,hshift=-4cm} \DeclareGraphicsExtensions{.pdf} \UseTblrLibrary{booktabs,siunitx,diagbox} \DefTblrTemplate{caption-tag}{default}{表\hspace{0.25em}\thetable} \SetTblrStyle{caption-tag}{font=\bfseries} \DefTblrTemplate{caption-sep}{default}{\quad} \setlist[1]{labelindent=0.5em} \hypersetup{ pdftitle={ The njuvisual package - Display logos related to Nanjing University }, citecolor = njublue, linkcolor = njuviolet, urlcolor = njumagenta } \SetTextEnvironmentSinglespace{1.112} \SetMathEnvironmentSinglespace{1.112} \setsansfont{LexendDeca} \setmonofont{Iosevka}[ UprightFont = Iosevka Light, ItalicFont = Iosevka Light Italic, BoldFont = Iosevka Semibold ] \setCJKmainfont{Source Han Serif SC}[ UprightFont = Source Han Serif SC SemiBold, ItalicFont = Source Han Serif SC Bold, BoldFont = Source Han Serif SC Heavy, Language = Chinese Simplified ] \setmathfont{XITSMath-Regular}[ BoldFont = XITSMath-Bold, Extension = .otf] \lstdefinestyle{style@base} { basewidth = 0.5 em, gobble = 3, lineskip = 3 pt, frame = l, framerule = 1 pt, framesep = 0 pt, xleftmargin = 2 em, xrightmargin = 3 em, escapeinside = {(*}{*)}, breaklines = true, basicstyle = \small\ttfamily, keywordstyle = \bfseries\color{njuviolet}, commentstyle = \itshape\color{white!50!gray}, stringstyle = \color{nju-chem-red}, backgroundcolor = \color{white!95!gray} } \lstdefinestyle{style@shell} { style = style@base, rulecolor = \color{njumagenta}, language = bash, alsoletter = {-}, emphstyle = \color{green} } \lstdefinestyle{style@latex} { style = style@base, rulecolor = \color{njublue}, language = [LaTeX]TeX, alsoletter = {*, -}, texcsstyle = *\color{njuviolet}, emphstyle = [1]\color{nju-ai-orange}, emphstyle = [2]\color{nju-cs-green}, } \lstnewenvironment{shellexample}[1][]{% \lstset{style=style@shell, #1}}{} \lstnewenvironment{latexexample}[1][]{% \lstset{style=style@latex, #1}}{} \ExplSyntaxOn \cs_new_protected:Npn \__njudoc_module_angle:Nn #1#2 { \group_begin: \color { gray } \ttfamily \textlangle \group_end: \group_begin: \sffamily #2 \group_end: \group_begin: \color { gray } #1 \ttfamily \textrangle \group_end: } \cs_set_protected:Npn \__ctxdoc_module_angle:n #1 { \__njudoc_module_angle:Nn \c_empty_tl {#1} } \ExplSyntaxOff \begin{document} \DocInput{njuvisual.dtx} \DocInput{njuvisual-emblem.dtx} \DocInput{njuvisual-name.dtx} \DocInput{njuvisual-motto.dtx} \DocInput{njuvisual-spirit.dtx} \DocInput{njuvisual-ai.dtx} \DocInput{njuvisual-chem.dtx} \DocInput{njuvisual-cs.dtx} \DocInput{njuvisual-dii.dtx} \DocInput{njuvisual-eng.dtx} \DocInput{njuvisual-physics.dtx} \DocInput{njuvisual-software.dtx} \DocInput{njuvisual-end.dtx} \PrintChanges \PrintIndex \end{document} %</driver> % % \fi % % \title{\color{njuviolet}{^^A % The \pkg{njuvisual} package \\ \textbf{å—京大å¦è§†è§‰å½¢è±¡è§„èŒƒåŒ–æ ‡å‡†}}} % % \author{^^A % å—äº¬å¤§å¦ Linux 用户组 % \thanks{E-mail: \href{mailto:git+nju-lug-email-3104-issue-@yaoge123.cn}{git+nju-lug-email-3104-issue-@yaoge123.cn}}} % % \date{v0.3.0 \quad 2022-12-13} % % \changes{v0.1}{2021/11/21}{å°† \pkg{njuvisual} 分离为独立å®åŒ…。} % \changes{v0.1}{2021/11/27}{å®Œæˆæ–‡æ¡£ç¼–写并å‘布至 CTAN。} % \changes{v0.1}{2021/11/28}{使用 GitHub Action 进行自动打包å‘布。} % \changes{v0.3}{2022/12/08}{å°†è´å¡žå°”曲线å˜å‚¨åˆ°å•独文件。} % % \maketitle % % \let\abstractname\relax % \begin{abstract} % å—京大å¦è§†è§‰å½¢è±¡è§„èŒƒåŒ–æ ‡å‡†ï¼ˆ\pkg{njuvisual})å®åŒ…负责收集å—京大å¦å®˜æ–¹ä»¥åŠä¸‹å±ž % å„院系制定的é…è‰²æ–¹æ¡ˆå’Œæ ‡è¯†ï¼Œå°†è¿™äº›çŸ¢é‡å›¾æ ‡é€šè¿‡ \pkg{tikz} 曲线进行å˜å‚¨ï¼Œå¹¶æ % 供简明的接å£ä»¥ä¾¿åœ¨æ–‡æ¡£å’Œå¹»ç¯ç‰‡ä¸ä½¿ç”¨ã€‚ % \end{abstract} % % \begin{abstract} % The \pkg{njuvisual} package collects standard colors and logos related to % Nanjing University, saves the vector logos as \pkg{tikz} pictures and % provides a user-friendly interface to display them in documents and beamers. % \end{abstract} % % \clearpage % % \tableofcontents % % % \begin{documentation} % % \section{å®åŒ…介ç»} % % \pkg{njuvisual} 用于收录å—京大å¦åŠå…¶å„é™¢ç³»åˆ¶å®šçš„æ ‡å‡†è‰²å½©åŠå›¾æ ‡ï¼Œå¹¶æä¾›ç®€æ´çš„绘制指令。 % % 本å®åŒ…è¡ç”Ÿè‡ª \cls{njuthesis},ä¾èµ– \hologo{LaTeX3} 项目 % ä¸çš„ \pkg{expl3}ã€\pkg{xparse} å’Œ \pkg{l3keys2e} å®åŒ…。 % 特别感谢 \cls{fduthesis} 与 \pkg{zhlipsum} æä¾›çš„å¤„ç†æ€è·¯ã€‚ % % 欲使用本å®åŒ…,在终端键入下述 \pkg{tlmgr} 的命令(很å¯èƒ½éœ€è¦ç®¡ç†å‘˜æƒé™ï¼‰ï¼š % \begin{shellexample}[morekeywords={tlmgr,install}] % tlmgr install njuvisual % \end{shellexample} % å³å¯å®Œæˆå®‰è£…。 % % % \section{å®åŒ…选项} % % \begin{function}{force} % 使用强制模å¼è½½å…¥å®åŒ…。 % \end{function} % % 在强制模å¼ä¸‹ï¼Œ\pkg{njuvisual} 将覆盖已有的 \cs{njuemblem}〠% \cs{njuname}ã€\cs{njuspirit}ã€\cs{njumotto} 命令定义。 % % % \section{使用方法} % % 本节æä¾›å‘½ä»¤çš„使用方法。关于绘制的内容,请å‚é˜…åŽæ–‡çš„ \ref{subsec:colors-and-curves}。 % % \subsection{æ ‡å‡†è‰²å½©} % % \begin{function}{\color} % \begin{syntax} % \tn{color}\Arg{颜色} % \end{syntax} % ä½¿ç”¨æ ‡å‡†è‰²å½©ã€‚ % \end{function} % % 本å®åŒ…å®šä¹‰çš„æ‰€æœ‰æ ‡å‡†è‰²å½©è§è¡¨~\ref{tab:pre-defined-colors}。 % \begingroup % \def\B#1{\color{#1}$\blacksquare\blacksquare\blacksquare\blacksquare\blacksquare$} % \begin{table}[htb] % \caption{é¢„å®šä¹‰æ ‡å‡†è‰²} \label{tab:pre-defined-colors} % \centering % \begin{tblr}[expand=\B]{cccc} % \toprule % åç§° & 颜色åç§° & CMYK 数值 & 示例 \\ % \midrule % \SetCell[r=5]{c} å—äº¬å¤§å¦ % & |njuviolet| & \SetCell[r=2]{c} % $0.50, 1 , 0 , 0.40$ & % \SetCell[r=2]{c} \B{njuviolet} \\ % & |njupurple| & & \\ % & |njumagenta| & $0.05, 1 , 0.55, 0 $ & \B{njumagenta} \\ % & |njublue| & $0.80, 0.50, 0 , 0 $ & \B{njublue} \\ % & |njuyellow| & $0 , 0.30, 1 , 0 $ & \B{njuyellow} \\ % \SetCell[r=2]{c} 人工智能å¦é™¢ % & |nju-ai-blue| & $0.75, 0.65, 0 , 0 $ & \B{nju-ai-blue} \\ % & |nju-ai-orange| & $0 , 0.75, 1 , 0 $ & \B{nju-ai-orange} \\ % \SetCell[r=2]{c} 计算机科å¦ä¸ŽæŠ€æœ¯ç³» % & |nju-cs-blue| & $0.89, 0.66, 0.13, 0 $ & \B{nju-cs-blue} \\ % & |nju-cs-green| & $0.60, 0.23, 1 , 0 $ & \B{nju-cs-green} \\ % \SetCell[r=2]{c} 化å¦åŒ–å·¥å¦é™¢ % & |nju-chem-red| & $0.28, 0.95, 0.84, 0 $ & \B{nju-chem-red} \\ % & |nju-chem-gold| & $0.40, 0.42, 0.60, 0 $ & \B{nju-chem-gold} \\ % 物ç†å¦é™¢ % & |nju-physics-blue| & $0.86, 0.57, 0 , 0 $ & \B{nju-physics-blue} \\ % \bottomrule % \end{tblr} % \end{table} % \endgroup % % % \subsection{æ ‡å‡†å›¾æ ‡} % % \begin{function}[added=2021-09-24,updated=2021-11-27]{\njuemblem} % \begin{syntax} % \tn{njuemblem}\oarg{选项}\Arg{宽度}\Arg{高度} % \end{syntax} % 生æˆå¾½æ ‡ï¼Œé»˜è®¤ç”Ÿæˆæ ¡å¾½ã€‚傿•° \oarg{选项} 是å¯é€‰çš„,详è§ä¸‹æ–‡è¯´æ˜Žã€‚注æ„å„ % 傿•°ä¹‹é—´ä¸å¯ä»¥æœ‰ç©ºæ ¼ã€‚ % \end{function} % % \begin{function}[added=2021-09-24,updated=2021-11-27]{\njuname,\njuname*} % \begin{syntax} % \tn{njuname}\oarg{选项}\Arg{宽度}\Arg{高度} % \tn{njuname*}\oarg{选项}\Arg{宽度}\Arg{高度} % \end{syntax} % 生æˆå称,带有å¯é€‰æ˜Ÿå·çš„命令会生æˆè‹±æ–‡åç§°ï¼Œé»˜è®¤ç”Ÿæˆæ ¡åã€‚è¦æ±‚åŒä¸Šã€‚ % \end{function} % % å¯é€‰å‚æ•° \meta{选项} å¯ä½¿ç”¨ä¸¤ç§æ–¹å¼ç»™å‡ºï¼š % \begin{itemize} % \item 颜色å称,使用颜色åç§°å³é»˜è®¤ç”Ÿæˆæ ¡å¾½ã€æ ¡å % \item 使用英文åŠè§’逗å·åˆ†éš”的键值列表 % \end{itemize} % % å…¶ä¸ï¼Œé”®å€¼åˆ—表支æŒçš„选项è§ä¸‹ã€‚ % % \begin{function}[added=2021-11-27]{color,color*} % \begin{syntax} % color = \meta{主è¦é¢œè‰²} % color* = \meta{辅助颜色} % \end{syntax} % å®šåˆ¶å›¾æ ‡é¢œè‰²ã€‚ % \end{function} % % 对于ç»å¤§å¤šæ•°å—京大å¦é™¢ç³»ï¼Œå…¶å›¾æ ‡ä»…使用两ç§ä»¥å†…çš„é¢œè‰²ï¼Œå› æ¤æœ¬å®åŒ…ä»…æä¾›ä¸¤ç§é¢œè‰²é€‰é¡¹ã€‚ % å…¶ä¸çš„ |color*| é€‰é¡¹ä¸€èˆ¬æ— éœ€ä¿®æ”¹ï¼ŒåŽŸå› åœ¨äºŽçŽ°æœ‰çš„å›¾æ ‡å¯è¢«æ€»ç»“ä¸ºä¸‹åˆ—è‹¥å¹²ç§æƒ…况: % \begin{description} % \item[纯色ã€é€æ˜Žåº•色] 如å—å¤§æ ¡åï¼Œæ— è¾…åŠ©é¢œè‰²ï¼Œ|color*| é€‰é¡¹æ— æ•ˆ % \item[纯色ã€ç™½è‰²åº•色] å¦‚çŽ°å·¥å¾½æ ‡ï¼Œè¾…åŠ©é¢œè‰²é»˜è®¤ä¸ºç™½è‰²ï¼Œæ— éœ€è¿›è¡Œä¿®æ”¹ % \item[åŒè‰²] å¦‚è®¡ç§‘å¾½æ ‡ï¼Œä¸»è¦é¢œè‰²ã€è¾…助颜色已预先进行定义,为美观考虑,修改主è¦é¢œè‰²æ—¶ä¼šå°†å›¾æ ‡é¢œè‰²ç»Ÿä¸€ä¸ºä¸€ç§ % \end{description} % 对于ä¸ç©ºçš„å›¾æ ‡ï¼Œæœ¬å®åŒ…默认在内部空间填充白色(å³ä¸Šè¿°ç¬¬äºŒç§æƒ…å†µï¼‰ï¼Œä»¥åœ¨å¤æ‚背景下ä¿è¯å›¾æ ‡çš„è¾¨è¯†åº¦ã€‚é—æ†¾çš„æ˜¯ï¼Œ\pkg{xcolor} å¹¶ä¸èƒ½å°†æŸç§é¢œè‰²è®¾ç½®ä¸ºé€æ˜Žã€‚å› æ¤ï¼Œå¦‚果希望实现类似于ä¸ç©ºçš„æ•ˆæžœï¼Œå¯ä»¥ä»ŽèƒŒæ™¯ä¸é€‰å–一ç§çªå‡ºçš„颜色设为 |color*|。 % % \begin{function}[added=2021-11-27]{department} % \begin{syntax} % department = \meta{院系åç§°} % \end{syntax} % 院系å称。 % \end{function} % % 为ä¿è¯æ— æ§ä¹‰ï¼Œ|department| 选项使用的åç§°æ¥è‡ªäºŽé™¢ç³»å®˜ç½‘域å。如化å¦åŒ–å·¥å¦é™¢åŸŸå为 \url{https://chem.nju.edu.cn/},其选项åç§°å³ä¸º |chem|。 % % ç›®å‰çš„æ”¯æŒæƒ…况如表~\ref{tab:supported-departments-list}æ‰€ç¤ºã€‚å¯¹äºŽä¸æ”¯æŒçš„院系,本å®åŒ…会抛出异常。 % \begingroup % \def\B{\bullet} % \begin{table}[htb] % \caption{收录院系列表} \label{tab:supported-departments-list} % \centering\small % \begin{tblr}[expand=\B]{cccccccc} % \toprule % åç§° & 选项åç§° & emblem & name & name* \\ % \midrule % 人工智能å¦é™¢ & |ai| & \B & & \\ % 计算机科å¦ä¸ŽæŠ€æœ¯ç³» & |cs| & \B & & \\ % 匡亚明å¦é™¢ & |dii| & \B & & \\ % 现代工程与应用科å¦å¦é™¢ & |eng| & \B & & \\ % 物ç†å¦é™¢ & |physics| & \B & & \\ % 软件å¦é™¢ & |software| & \B & & \\ % \bottomrule % \end{tblr} % \end{table} % \endgroup % % 对这两个命令的举例如下: % \begin{latexexample}[moretexcs={\njuemblem,\njuname,\njuname*}] % \njuemblem{!}{3cm} % ç”ŸæˆæŒ‡å®šå¤§å°çš„紫色å—å¤§æ ¡å¾½ % \njuname{4cm}{!} % ç”ŸæˆæŒ‡å®šå¤§å°çš„紫色å—大䏿–‡æ ¡å % \njuname*{4cm}{!} % ç”ŸæˆæŒ‡å®šå¤§å°çš„紫色å—å¤§è‹±æ–‡æ ¡å % \njuemblem[black]{!}{3cm} % 黑色的å—å¤§æ ¡å¾½ % \njuemblem[department=dii]{!}{4cm} % ç´«è‰²åŒ¡é™¢å¾½æ ‡ % \njuemblem[department=cs,color=blue]{!}{3cm} % 纯è“è‰²è®¡ç§‘å¾½æ ‡ % \end{latexexample} % % \begin{function}[added=2021-09-24]{\njumotto} % \begin{syntax} % \tn{njumotto}\oarg{颜色}\Arg{宽度}\Arg{高度} % \end{syntax} % ç”ŸæˆæŒ‡å®šé¢œè‰²å’Œå¤§å°çš„å—äº¬å¤§å¦æ ¡è®ã€‚ % \end{function} % % \begin{function}[added=2021-09-24]{\njuspirit} % \begin{syntax} % \tn{njuspirit}\oarg{颜色}\Arg{宽度}\Arg{高度} % \end{syntax} % ç”ŸæˆæŒ‡å®šé¢œè‰²å’Œå¤§å°çš„å—äº¬å¤§å¦æ ¡é£Žã€‚ % \end{function} % % % \subsection{导出图åƒ} % \changes{v0.2}{2021/12/04}{æä¾›å¯¼å‡º PNG 图åƒçš„æ–¹æ³•。} % % 为了便于å˜å‚¨ç‹¬ç«‹çš„图åƒï¼Œæœ¬å®åŒ…内置了 \file{njuvisual-example.tex},使用 \pkg{tikz} 的外置化功能生æˆç‹¬ç«‹çš„å›¾ç‰‡æ–‡ä»¶ã€‚ç¼–è¯‘æ¤æ–‡ä»¶æ—¶éœ€ä½¿ç”¨ |--shell-escape| 傿•°ã€‚ % % 对于大部分日常用途,PDF æ ¼å¼çš„矢é‡å›¾å¹¶æ²¡æœ‰å—到良好的支æŒã€‚åœ¨æ¤æä¾›å°†ä¸Šè¿°ç‹¬ç«‹å›¾åƒé€šè¿‡ inkscape 程åºè¿›è¡Œè½¬æ¢çš„æ–¹æ³•,相应的自动转æ¢è„šæœ¬è¯·ä»Žé¡¹ç›®ä»“åº“å†…èŽ·å–。关于命令行使用方法的请å‚考\href{https://inkscape.org/doc/inkscape-man.html}{官方手册}。 % \begin{description} % \item[|--export-type=|] æŒ‡å®šè¾“å‡ºæ ¼å¼ï¼Œ|"png"| å³å¯ï¼Œä¸æ”¯æŒ JPEG æ ¼å¼ã€‚ % \item[|-w|] 指定输出宽度。 % \item[|-h|] 指定输出高度。 % \end{description} % % 以下为在 Linux 系统ä¸å°†å½“å‰ç›®å½•下全部 PDF 文件转化为高度为1000åƒç´ çš„ PNG 图片的命令示例。 % \begin{shellexample}[morekeywords={inkscape}] % inkscape --export-type="png" nju-*.pdf -h 1000 % \end{shellexample} % % 以下为在 Windows 系统的 Powershell ä¸å°†å—å¤§æ ¡å转化为 PNG 图片的命令示例。 % \begin{shellexample} % & 'C:\Program Files (x86)\Inkscape\bin\inkscape.exe' --export-type="png" nju-name.pdf % \end{shellexample} % % \end{documentation} % % % \begin{implementation} % % \section{实现细节} % % \begin{macrocode} %<@@=njuvis> %<*package> % \end{macrocode} % % \subsection{载入å®åŒ…} % % 导入所需å®åŒ…ï¼Œå…¶ä¸ \pkg{tikz} å·²åŒ…å« \pkg{xcolor}ï¼Œæ— éœ€å•ç‹¬åŠ è½½ã€‚ % \begin{macrocode} \RequirePackage { l3keys2e, tikz} % \end{macrocode} % % \subsection{定义å˜é‡} % % \begin{macro}{\l_@@_color_a_tl,\l_@@_color_b_tl} % å˜å‚¨ä½¿ç”¨çš„颜色。 % \begin{macrocode} \tl_new:N \l_@@_color_a_tl \tl_new:N \l_@@_color_b_tl % \end{macrocode} % \end{macro} % % \begin{macro}{\l_@@_dept_tl} % å˜å‚¨é™¢ç³»ã€‚ % \begin{macrocode} \tl_new:N \l_@@_dept_tl % \end{macrocode} % \end{macro} % % \begin{macro}{\l_@@_curve_tl} % å˜å‚¨ä½¿ç”¨çš„è´å¡žå°”曲线路径。 % \begin{macrocode} \tl_new:N \l_@@_curve_tl % \end{macrocode} % \end{macro} % % \begin{variable}{\c_@@_cmds_clist} % 本å®åŒ…定义的全部用户命令。 % \begin{macrocode} \clist_const:Nn \c_@@_cmds_clist { emblem, name, motto, spirit } % \end{macrocode} % \end{variable} % % \begin{variable}{\c_@@_dept_all_clist} % 定义å—京大å¦å…¨ä½“院系åå•。 % \begin{macrocode} \clist_const:Nn \c_@@_dept_all_clist { nju, dii, eng, chin, history, philo, jc, law, nubs, sfs, im, sociology, math, physics, astronomy, chem, cs, software, ai, ese, hjxy, sgos, as, life, med, sme, hwxy, arch, marxism, art, edu } % \end{macrocode} % \end{variable} % % \begin{variable}{\c_@@_dept_emblem_clist} % 定义å—å›¾æ ‡æ”¯æŒçš„å—京大å¦é™¢ç³»åå•。 % \begin{macrocode} \clist_const:Nn \c_@@_dept_emblem_clist { nju, ai, cs, chem, dii, eng, physics, software } % \end{macrocode} % \end{variable} % % \begin{variable}{\c_@@_dept_name_clist} % 定义å—å称支æŒçš„å—京大å¦é™¢ç³»åå•。 % \begin{macrocode} \clist_const:Nn \c_@@_dept_name_clist { nju } % \end{macrocode} % \end{variable} % % \begin{variable}{\c_@@_dept_color_clist} % 定义å—色彩支æŒçš„å—京大å¦é™¢ç³»åå•。 % \begin{macrocode} \clist_const:Nn \c_@@_dept_color_clist { ai, cs, chem, physics } % \end{macrocode} % \end{variable} % % \subsection{错误信æ¯} % % 集ä¸å®šä¹‰é”™è¯¯ä¿¡æ¯ã€‚ % \begin{macrocode} \msg_new:nnn { njuvisual } { unsupported-department } { "#1"~ is~ not~ an~ available~ option~ currently.\\ Please~ refer~ to~ the~ package~ documentation~ for~ supported~ departments~ and~ check~ your~ spelling. } \msg_new:nnn { njuvisual } { force-mode } { Force~ mode~ on.\\ I~ am~ overwriting~ all~ existing~ commands. } \msg_new:nnn { njuvisual } { duplicate-command } { The~ command~ "\string#1"~ is~ already~ defined.\\ I~ am~ not~ going~ to~ redefine~ it~ anyway.~ Or~ you~ can~ use~ the~ package~ option~ "force"~ to~ overwrite~ existing~ definitions. } % \end{macrocode} % % \subsection{å®åŒ…选项} % % \changes{v0.1}{2022/03/01}{新增选项 \opt{force}。} % \begin{macrocode} \keys_define:nn { njuvisual } { % \end{macrocode} % \begin{macro}{force} % 是å¦å¼ºåˆ¶å®šä¹‰ã€‚ % \begin{macrocode} force .value_forbidden:n = true, force .code:n = { \msg_warning:nn { njuvisual } { force-mode } \clist_map_inline:Nn \c_@@_cmds_clist { \cs_undefine:c { nju ##1 } } } } % \end{macrocode} % \end{macro} % % \begin{macrocode} \ProcessKeysOptions { njuvisual } % \end{macrocode} % % \subsection{内部命令} % % \changes{v0.1}{2021/11/27}{使用键值对处ç†é™¢ç³»å’Œé¢œè‰²ã€‚} % \begin{macrocode} \keys_define:nn { njuvisual } { % \end{macrocode} % \begin{macro}{color,color*} % 颜色。设定主è¦è‰²å½©çš„åˆå§‹å€¼ä¸º |default|,辅助色彩的åˆå§‹å€¼ä¸ºç™½è‰²ã€‚ % \begin{macrocode} color .tl_set:N = \l_@@_color_a_tl, color .initial:n = default, color* .tl_set:N = \l_@@_color_b_tl, color* .initial:n = white, % \end{macrocode} % \end{macro} % % \begin{macro}{department} % 院系。设定院系选项åˆå§‹å€¼ä¸ºå¦æ ¡å®˜æ–¹ã€‚ % \begin{macrocode} department .tl_set:N = \l_@@_dept_tl, department .initial:n = nju, } % \end{macrocode} % \end{macro} % % \begin{macro}{\@@_set_color:} % \changes{v0.1}{2021/11/25}{完善设定颜色的方法。} % 设定颜色。 % \begin{macrocode} \cs_new_protected:Nn \@@_set_color: { \str_if_eq:VnTF \l_@@_color_a_tl { default } { % \end{macrocode} % 如果没有å•独设定,则使用默认颜色。 % \begin{macrocode} \clist_if_in:NVTF \c_@@_dept_color_clist \l_@@_dept_tl { \tl_set:Nn \l_@@_color_a_tl { \clist_item:cn { c_@@_color_ \l_@@_dept_tl _clist } { 1 } } \tl_set:Nn \l_@@_color_b_tl { \clist_item:cn { c_@@_color_ \l_@@_dept_tl _clist } { 2 } } } { \tl_set:Nn \l_@@_color_a_tl { njuviolet } } } { \clist_if_in:NVT \c_@@_dept_color_clist \l_@@_dept_tl % \end{macrocode} % å°†åŒè‰²å›¾æ ‡è®¾å®šä¸ºçº¯è‰²ã€‚ % \begin{macrocode} { \tl_set_eq:NN \l_@@_color_b_tl \l_@@_color_a_tl } } } % \end{macrocode} % \end{macro} % % \begin{macro}{\@@_tikz_wrapper:nnn,\@@_tikz_wrapper:Vnn} % å¯å˜å¤§å°çš„ tikz 容器。\footnote{æ¤å¤„手动调整了列表缩进,实际上\env{arguments}环境的缩进问题已在\href{https://github.com/CTeX-org/ctex-kit/commit/838ebab8378b6b0477f5aece81ace28ae2a8bcd9}{838ebab}æäº¤ä¸ä¿®å¤} % \begin{arguments} % \item 路径 % \item 宽度 % \item 高度 % \end{arguments} % å°è£… resizebox å’Œ tikzpicture 环境,å‡å°‘é‡å¤ã€‚ % ^^A 考虑转æ¢åˆ° \box_autosize_to_wd_and_ht:Nnn % \begin{macrocode} \cs_new_protected:Npn \@@_tikz_wrapper:nnn #1#2#3 { \resizebox { #2 } { #3 } { \begin{tikzpicture}[y=0.80pt, x=0.80pt, yscale=-1, xscale=1, inner~sep=0pt, outer~sep=0pt] #1 \end{tikzpicture} } } \cs_generate_variant:Nn \@@_tikz_wrapper:nnn { V } % \end{macrocode} % \end{macro} % % \begin{macro}{\@@_if_key_value_list:nTF} % åˆ¤æ–æ˜¯å¦ä¸ºé”®å€¼åˆ—è¡¨ï¼Œå³æ˜¯å¦å«æœ‰ |=|。 % \begin{macrocode} \cs_new_protected:Npn \@@_if_key_value_list:nTF #1 { \tl_if_in:nnTF {#1} {=} } % \end{macrocode} % \end{macro} % % \begin{macro}{\@@_check_cmd:NF} % 检查载入å®åŒ…å‰ç›¸å…³å‘½ä»¤æ˜¯å¦æœ‰å®šä¹‰ã€‚ % \begin{macrocode} \cs_new_protected:Npn \@@_check_cmd:NF #1 { \cs_if_exist:NTF #1 { \msg_warning:nnn { njuvisual } { duplicate-command } {#1} } } % \end{macrocode} % \end{macro} % % \begin{macro}{\@@_import_curve:nF,\@@_import_curve:n} % 从相应的 \file{njuvisual-*.def} 文件读å–内容,å˜å‚¨åˆ° \cs{l_@@_curve_tl}。 % \begin{macrocode} \cs_new:Npn \@@_import_curve:nF #1 { \file_get:nnNF { njuvisual- #1 .def } { \ExplSyntaxOn } \l_@@_curve_tl } \cs_new:Npn \@@_import_curve:n #1 { \@@_import_curve:nF {#1} { \BOOM } } % \end{macrocode} % \end{macro} % % \begin{macro}{\@@_print:nnnn} % 输出 \pkg{tikz} 曲线。 % \begin{arguments} % \item 类别 % \item 颜色或者键值对 % \item 宽度 % \item 高度 % \end{arguments} % \begin{macrocode} \cs_new_protected:Npn \@@_print:nnnn #1#2#3#4 { \group_begin: % \end{macrocode} % æ ¹æ®å‚数是å¦å«æœ‰ |=| æ¥åˆ¤æ–è¯¥å‚æ•°æ˜¯é¢œè‰²è¿˜æ˜¯é€‰é¡¹åˆ—表。 % \begin{macrocode} \@@_if_key_value_list:nTF { #2 } { \keys_set:nn { njuvisual } { #2 } % \end{macrocode} % 检查是å¦å—支æŒã€‚ % \begin{macrocode} \@@_import_curve:nF { #1 - \l_@@_dept_tl } { \msg_error:nnx { njuvisual } { unsupported-department } { \l_@@_dept_tl } } \@@_set_color: \@@_tikz_wrapper:Vnn \l_@@_curve_tl { #3 } { #4 } } % \end{macrocode} % å•ç‹¬è®¾ç½®é¢œè‰²æ—¶è¾“å‡ºå®˜æ–¹å¾½æ ‡ã€‚ % \begin{macrocode} { \tl_set:Nn \l_@@_color_a_tl { #2 } \@@_import_curve:n { #1 - nju } \@@_tikz_wrapper:Vnn \l_@@_curve_tl { #3 } { #4 } } \group_end: } % \end{macrocode} % \end{macro} % % \begin{macro}{\@@_name:nnnn} % 通过是å¦å«æœ‰å¯é€‰æ˜Ÿå·åŒºåˆ†è¾“出ä¸è‹±æ–‡å称。 % \begin{macrocode} \cs_new_protected:Npn \@@_name:nnnn #1 { \bool_if:NTF #1 { \@@_print:nnnn { name-en } } { \@@_print:nnnn { name-zh } } } % \end{macrocode} % \end{macro} % % % \subsection{用户接å£} % % \begin{macro}{\njuname,\njuname*} % 定义å—äº¬å¤§å¦æ ‡å‡†å称,分为ä¸è‹±æ–‡ä¸¤ç§ã€‚ % \begin{arguments} % \item å¯é€‰æ˜Ÿå· % \item 颜色或者键值对 % \item 宽度 % \item 高度 % \end{arguments} % \begin{macrocode} \@@_check_cmd:NF \njuname { \NewDocumentCommand \njuname { s O { njuviolet } m m } { \@@_name:nnnn { #1 } { #2 } { #3 } { #4 } } } % \end{macrocode} % \end{macro} % % \begin{macro}{\njuemblem} % \changes{v0.1}{2021/11/24}{将妿 ¡å’Œé™¢ç³»çš„å¾½æ ‡å’Œå称命令统一。} % 定义å—äº¬å¤§å¦æ ‡å‡†å¾½æ ‡ã€‚ % \begin{arguments} % \item 颜色或者键值对 % \item 宽度 % \item 高度 % \end{arguments} % \begin{macrocode} \@@_check_cmd:NF \njuemblem { \NewDocumentCommand \njuemblem { O { njuviolet } m m } { \@@_print:nnnn { emblem } { #1 } { #2 } { #3 } } } % \end{macrocode} % \end{macro} % % \begin{macro}{\njumotto} % 定义å—äº¬å¤§å¦æ ¡è®ã€‚傿•°å®šä¹‰åŒ \tn{njuemblem}。 % \begin{macrocode} \@@_check_cmd:NF \njumotto { \NewDocumentCommand \njumotto { O { black } m m } { \@@_print:nnnn { motto } { #1 } { #2 } { #3 } } } % \end{macrocode} % \end{macro} % % \begin{macro}{\njuspirit} % 定义å—äº¬å¤§å¦æ ¡é£Žã€‚傿•°å®šä¹‰åŒ \tn{njuemblem}。 % \begin{macrocode} \@@_check_cmd:NF \njuspirit { \NewDocumentCommand \njuspirit { O { black } m m } { \@@_print:nnnn { spirit } { #1 } { #2 } { #3 } } } %</package> % \end{macrocode} % \end{macro} % % % \subsection{ç”Ÿæˆæ–‡ä»¶} % \changes{v0.2}{2021/11/29}{æä¾›å¯¼å‡º PDF 图åƒçš„æ–¹æ³•。} % % 以下文件用于生æˆå„图案。 % 需è¦åœ¨ç¼–译命令ä¸åŠ å…¥ |--shell-escape| 傿•°ã€‚ % \DoNotIndex{\FIG} % \begin{macrocode} %<*example> \documentclass{article} \usepackage{njuvisual} % \end{macrocode} % 使用 \pkg{tikz} 库的外置化功能生æˆç‹¬ç«‹çš„ PDF æ ¼å¼çŸ¢é‡å›¾ã€‚æ¯ä¸ªå›¾æ ‡ä»…需绘制一次,å¯ä»¥å‡è½»ç¼–译负担。 % \begin{macrocode} \usetikzlibrary{backgrounds,external} \tikzexternalize[prefix=nju-] \let\FIG=\tikzsetnextfilename % \end{macrocode} % % \subsection{颜色与图形} % \label{subsec:colors-and-curves} % % æœ¬éƒ¨åˆ†å®šä¹‰æ ‡å‡†è‰²å½©ä»¥åŠç”¨äºŽç»˜å›¾çš„ \pkg{tikz} 路径。 % 由于路径本身长达数åƒè¡Œï¼Œæ•…åœ¨æ¤æ–‡æ¡£ä¸éšåŽ»ï¼Œä»…ä¿ç•™ä»‹ç»ã€‚ % 有兴趣的åŒå¦å¯ä»¥è‡ªè¡ŒæŸ¥é˜… \file{njuvisual-curves.dtx}。 % % æ¤å¤„为 \file{njuvisual-example.tex} æ–‡ä»¶æ£æ–‡çš„开始。 % ä»¥ä¸‹æ ‡æ³¨ |<example>| 的行将会进入该文件,供外置化使用。 % \begin{macrocode} \begin{document} %</example> % \end{macrocode} % % \end{implementation} %