% \iffalse meta-comment % !TEX program = XeLaTeX %<*internal> \iffalse %</internal> %<*readme> Create code box and viewer based on tcolorbox and minted/listings ======= `codebox` is a LaTeX3 package developed based on tcolorbox and minted/listings, which provides environments `codebox` and `codeview` to typset with environment body, and macros `\codefile` and `\cvfile` to typeset programming source code from a file in a fancy box. The starred version of all environments and macros are provided at the same time, such as `codebox*`, `codeview*`, `\codefile*` and `\cvfile*` which adds comment at bottom of the fancy box. You can read the manual (in Chinese/English) for more details and examples. Contributing ------------ 1. github repository: 1. repository: [codebox](https://github.com/registor/codebox) 2. Issues and pull requests are welcome. [issue](https://github.com/registor/codebox/issues) or [pull request](https://github.com/registor/codebox/pulls). 2. gitee repository: 1. repository: [codebox](https://gitee.com/nwafu_nan/codebox) 2. Issues and pull requests are welcome. [issue](https://gitee.com/nwafu_nan/codebox/issues) or [pull request](https://gitee.com/nwafu_nan/codebox/pulls). 基于tcolorbox的终端模拟å®åŒ… ======= `codebox`是一个基于tcolorbox的用LaTeX3å¼€å‘的终端模拟LaTeXå®åŒ…,它æä¾›äº†ç”¨äºŽæŽ’ç‰ˆç¨‹åºæºä»£ç ç›’å的环境和命令。 å…¶ä¸`codebox`å’Œ`codeview`çŽ¯å¢ƒç”¨äºŽæ ¹æ®çŽ¯å¢ƒå†…å®¹æŽ’ç‰ˆä»£ç ,`\codefile`å’Œ`\cvfile`å‘½ä»¤ç”¨äºŽæ ¹æ®æ–‡ä»¶å†…容排版代ç 。 `codebox`åŒæ—¶æä¾›äº†å„环境和命令的星å·ç‰ˆæœ¬ï¼Œå¦‚`codebox*`å’Œ`codeview*`,`\codefile*`å’Œ`\cvfile*`,用于为代ç ç›’åæ·»åŠ åº•çº¿æ³¨é‡Šã€‚ å¯ä»¥é€šè¿‡é˜…读å®åŒ…手册(䏿–‡/英文)以也解该å®åŒ…æ›´å¤šçš„ä½¿ç”¨ç»†èŠ‚å’Œä½¿ç”¨æ ·ä¾‹ã€‚ ### å‚与贡献 --------------------- 1. github仓库: (1). 仓库地å€: [codebox](https://github.com/registor/codebox) (2). Issueså’ŒPR: [issue](https://github.com/registor/codebox/issues) or [pull request](https://github.com/registor/codebox/pulls). 2. gitee仓库: (1). 仓库地å€: [codebox](https://gitee.com/nwafu_nan/codebox) (2). Issues and PR: [issue](https://gitee.com/nwafu_nan/codebox/issues) or [pull request](https://gitee.com/nwafu_nan/codebox/pulls). Copyright and Licence --------------------- Copyright (C) 2020-2022 by Nan Geng <nangeng@nwafu.edu.cn> ---------------------------------------------------------------------- This work 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. This version of this license is in http://www.latex-project.org/lppl/lppl-1-3c.txt and 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. This work has the LPPL maintenance status "maintained". The Current Maintainer of this work is Nan Geng. This package consists of the file codebox.dtx, and the derived files codebox.sty, codebox.pdf, codebox.ins, README.md (this file). %</readme> %<*internal> \fi \begingroup \def\temp{LaTeX2e} \expandafter\endgroup\ifx\temp\fmtname\else \csname fi\endcsname %</internal> %<*install> \input ctxdocstrip % \let\MetaPrefix\relax \preamble Copyright (C) 2020-2022 by Nan Geng <nangeng@nwafu.edu.cn> -------------------------------------------------------------------------- This work 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. This version of this license is in http://www.latex-project.org/lppl/lppl-1-3c.txt and 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. This work has the LPPL maintenance status "maintained". The Current Maintainer of this work is Nan Geng. -------------------------------------------------------------------------- \endpreamble \postamble This package consists of the file codebox.dtx, and the derived files codebox.sty, codebox.pdf, codebox.ins, README.md. \endpostamble \declarepostamble\emptypostamble \endpostamble \def\MetaPrefix{-- } \let\MetaPrefix\DoubleperCent \generate { %</install> %<*internal> \usedir{source/xelatex/codebox} \file{codebox.ins} {\from{\jobname.dtx}{install}} %</internal> %<*install> \usedir{xetex/xelatex/codebox} \file{codebox.sty} {\from{\jobname.dtx}{package}} \nopreamble\nopostamble \usedir{doc/xelatex/codebox} \file{README.md} {\from{\jobname.dtx}{readme}} } \endbatchfile %</install> %<*internal> \fi %</internal> %<package>\NeedsTeXFormat{LaTeX2e}[2020/10/01] %<package>\RequirePackage{expl3} %<+package>\GetIdInfo$Id: codebox.dtx 1.0.4 2022-01-28 08:00:00 +0800 Nan Geng <nangeng@nwafu.edu.cn> $ %<package> {Code Box with tcolorbox and minted/listings.} %<package>\ProvidesExplPackage{\ExplFileName} %<package> {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} %<*driver> \documentclass{ctxdoc} \usepackage{minted} \usepackage{listings} \usepackage{xcolor} \usepackage{xcolor-material} \usepackage{codebox} \renewcommand*\marg[1]{\{\meta{#1}\}} \renewcommand*\oarg[1]{[\meta{#1}]} \renewcommand*\parg[1]{(\meta{#1})} \NewDocumentCommand{\init}{+v}{\hspace{\fill}åˆå§‹å€¼~=~\textcolor{blue}{\bfseries#1}} \DeclareDocumentCommand\opt{m}{\texttt{#1}} \DeclareDocumentCommand\kvopt{mm} {\texttt{#1\breakablethinspace=\breakablethinspace#2}} \def\breakablethinspace{\hskip 0.16667em\relax} \begin{document} %<!--CODEDOC--> \DisableImplementation \EnableImplementation \DocInput{\jobname.dtx} \IndexLayout \PrintChanges \PrintIndex \end{document} %</driver> % \fi % % \changes{v1.0.0}{2021/12/25}{开始编写模æ¿} % % \CheckSum{313} % \GetFileId{codebox.sty} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % % \title{\bfseries\pkg{codebox}:代ç ç›’åæŽ’版å®åŒ…\\ \bfseries\pkg{codebox}:progrmming source code box} % \author{è€¿æ¥ \\ \path{nangeng@nwafu.edu.cn}} % \date{\filedate\qquad\fileversion\thanks{\url{https://github.com/registor/codebox}}\thanks{\url{https://gitee.com/nwafu_nan/codebox}}} % \maketitle % % \begin{documentation} % % \begin{abstract} % % \pkg{codebox} 是一个基于\pkg{tcolorbox}用\LaTeX3 å¼€å‘çš„ \LaTeX å®åŒ…,它æä¾›ç”¨äºŽ % 排版æºä»£ç ç›’å的环境和命令。 % å…¶ä¸ï¼Œ\env{codebox}å’Œ\env{codeview}çŽ¯å¢ƒç”¨äºŽæ ¹æ®çŽ¯å¢ƒå†…å®¹æŽ’ç‰ˆä»£ç , % \tn{codefile}å’Œ\tn{cvfile}å‘½ä»¤ç”¨äºŽæ ¹æ®æ–‡ä»¶å†…容排版代ç 。 % åŒæ—¶ï¼Œ\pkg{codebox}还æä¾›äº†å„环境和命令的星å·ç‰ˆæœ¬ï¼Œ % 如\env{codebox*}å’Œ\env{codeview*},\tn{codefile*}å’Œ\tn{cvfile*}, % 用于为代ç ç›’åæ·»åŠ åº•çº¿æ³¨é‡Šã€‚ % % \end{abstract} % % \tableofcontents % % \section{简介} % % \pkg{codebox} 是一个基于\pkg{tcolorbox}用\LaTeX3 å¼€å‘çš„ \LaTeX å®åŒ…, % 它å¯ä»¥æ ¹æ®ç”¨æˆ·è®¾ç½®ä½¿ç”¨\pkg{minted}或\pkg{listings}å®åŒ…实现代ç ç›’åæŽ’版。 % % 该å®åŒ…æä¾›äº†\env{codebox}å’Œ\env{codeview}两个环境和 % \tn{codefile}å’Œ\tn{cvfile}两个命令以排版代ç ç›’å。 % % åŒæ—¶ï¼Œ\pkg{codebox}å®åŒ…还æä¾›çŽ¯å¢ƒå’Œå‘½ä»¤çš„æ˜Ÿå·ç‰ˆæœ¬ï¼Œ % 用于为代ç ç›’åæ·»åŠ åº•çº¿æ³¨é‡Šã€‚ % % \section{用户接å£} % % \subsection{\env{codebox}å’Œ\env{codebox*}环境} % % \begin{function}[added=2021-12-25,updated=2021-12-25]{codebox,codebox*} % \begin{syntax} % \tn{begin}\{codebox\}\oarg{外观选项}\Arg{ç›’åæ ‡é¢˜} % ..... % \tn{end}\{codebox\} % \tn{begin}\{codebox*\}\oarg{外观选项}\Arg{ç›’åæ ‡é¢˜} % ..... % \tn{end}\{codebox*\} % \end{syntax} % 使用环境内容排版代ç ç›’å。 % å¯ä»¥é€šè¿‡\Arg{ç›’åæ ‡é¢˜}为代ç ç›’åè®¾ç½®æ ‡é¢˜ã€‚ % % \oarg{外观选项}ä¸é€šè¿‡key-valueæ–¹å¼è®¾ç½®ä»£ç ç›’å外观。 % % 星å·çŽ¯å¢ƒ\texttt{codebox*}用于为代ç ç›’åæ·»åŠ åº•çº¿æ³¨é‡Šï¼Œ % æ¤æ—¶ï¼Œéœ€è¦åœ¨\oarg{外观选项}ä¸ç”¨ % \kvopt{\meta{comments}}{\meta{底线注释}}选项æä¾›\textbf{底线注释}内容。 % % 代ç ç›’å的外观也å¯ä»¥é€šè¿‡\tn{codeset}命令的逗å·åˆ†éš” % key-value列表进行设置。 % % \end{function} % \begin{Verbatim}[frame=none,numbers=left,gobble=5] % \centering % \begin{codebox}{ä»£ç æ ‡é¢˜} % #include <stdio.h> % #include <stdlib.h> % % int main(void) % { % printf("Hello World!\n"); % % return 0; % } % \end{codebox} % \end{Verbatim} % % \begin{center} % \begin{minipage}{0.85\textwidth} % \codefile{代ç ç›’åæ ‡é¢˜}{test.c} % \end{minipage} % \end{center} % % \subsection{\tn{codefile}å’Œ\tn{codefile*}命令} % % \begin{function}[added=2021-12-25,updated=2021-12-25]{\codefile,\codefile*} % \begin{syntax} % \tn{codefile} \oarg{外观选项} \Arg{ç›’åæ ‡é¢˜} \Arg{ä»£ç æ–‡ä»¶} % \tn{codefile*} \oarg{外观选项} \Arg{ç›’åæ ‡é¢˜} \Arg{ä»£ç æ–‡ä»¶} % \end{syntax} % % 用于排版代ç ç›’å,æºä»£ç æ¥è‡ªäºŽ\Arg{ä»£ç æ–‡ä»¶}, % å¯ä»¥é€šè¿‡\Arg{ç›’åæ ‡é¢˜}为代ç ç›’åè®¾ç½®æ ‡é¢˜ã€‚ % % \oarg{外观选项}ä¸é€šè¿‡key-valueæ–¹å¼è®¾ç½®ä»£ç ç›’å外观。 % % 星å·å‘½ä»¤\texttt{codefile*}用于为代ç ç›’åæ·»åŠ åº•çº¿æ³¨é‡Šï¼Œ % æ¤æ—¶ï¼Œéœ€è¦åœ¨\oarg{外观选项}ä¸ç”¨ % \kvopt{\meta{comments}}{\meta{底线注释}}选项æä¾›\textbf{底线注释}内容。 % % 代ç ç›’å的外观也å¯ä»¥é€šè¿‡\tn{codeset}命令的逗å·åˆ†éš” % key-value列表进行设置。 % \end{function} % % \newpage % \begin{Verbatim}[frame=none,numbers=left,gobble=5] % \centering % \codefile{代ç ç›’åæ ‡é¢˜}{test.c} % \end{Verbatim} % % \begin{center} % \begin{minipage}{0.85\textwidth} % \codefile{代ç ç›’åæ ‡é¢˜}{test.c} % \end{minipage} % \end{center} % % \subsection{\env{codeview}å’Œ\env{codeview*}环境} % % \begin{function}[added=2021-12-26,updated=2021-12-26]{codeview,codeview*} % \begin{syntax} % \tn{begin}\{codeview\}\oarg{外观选项}\Arg{ç›’åæ ‡é¢˜} % ..... % \tn{end}\{codeview\} % \tn{begin}\{codeview*\}\oarg{外观选项}\Arg{ç›’åæ ‡é¢˜} % ..... % \tn{end}\{codeview*\} % \end{syntax} % 使用环境内容排版带编å·ä»£ç ç›’å。 % å¯ä»¥é€šè¿‡\Arg{ç›’åæ ‡é¢˜}为代ç ç›’åè®¾ç½®æ ‡é¢˜ã€‚ % % \oarg{外观选项}ä¸é€šè¿‡key-valueæ–¹å¼è®¾ç½®ä»£ç ç›’å外观。 % % 星å·çŽ¯å¢ƒ\texttt{codeview*}用于为代ç ç›’åæ·»åŠ åº•çº¿æ³¨é‡Šï¼Œ % æ¤æ—¶ï¼Œéœ€è¦åœ¨\oarg{外观选项}ä¸ç”¨ % \kvopt{\meta{comments}}{\meta{底线注释}}选项æä¾›\textbf{底线注释}内容。 % % 代ç ç›’å的外观也å¯ä»¥é€šè¿‡\tn{codeset}命令的逗å·åˆ†éš” % key-value列表进行设置。 % \end{function} % % \begin{Verbatim}[frame=none,numbers=left,gobble=5] % \centering % \begin{codeview}{ä»£ç æ ‡é¢˜} % #include <stdio.h> % #include <stdlib.h> % % int main(void) % { % printf("Hello World!\n"); % % return 0; % } % \end{codeview} % \end{Verbatim} % % \codeset{pretitle=代ç } % \begin{center} % \begin{minipage}{0.85\textwidth} % \cvfile{ä»£ç æ ‡é¢˜}{test.c} % \end{minipage} % \end{center} % % \subsection{\tn{cvfile}å’Œ\tn{cvfile*}命令} % % \begin{function}[added=2021-12-26,updated=2021-12-26]{\cvfile,\cvfile*} % \begin{syntax} % \tn{cvfile} \oarg{外观选项} \Arg{ç›’åæ ‡é¢˜} \Arg{ä»£ç æ–‡ä»¶} % \tn{cvfile*} \oarg{外观选项} \Arg{ç›’åæ ‡é¢˜} \Arg{ä»£ç æ–‡ä»¶} % \end{syntax} % % 用于排版带编å·ä»£ç ç›’å,æºä»£ç æ¥è‡ªäºŽ\Arg{ä»£ç æ–‡ä»¶}, % å¯ä»¥é€šè¿‡\Arg{ç›’åæ ‡é¢˜}为代ç ç›’åè®¾ç½®æ ‡é¢˜ã€‚ % % \oarg{外观选项}ä¸é€šè¿‡key-valueæ–¹å¼è®¾ç½®ä»£ç ç›’å外观。 % % 星å·å‘½ä»¤\texttt{cvfile*}用于为代ç ç›’åæ·»åŠ åº•çº¿æ³¨é‡Šï¼Œ % æ¤æ—¶ï¼Œéœ€è¦åœ¨\oarg{外观选项}ä¸ç”¨ % \kvopt{\meta{comments}}{\meta{底线注释}}选项æä¾›\textbf{底线注释}内容。 % % 代ç ç›’å的外观也å¯ä»¥é€šè¿‡\tn{codeset}命令的逗å·åˆ†éš” % key-value列表进行设置。 % \end{function} % % \begin{Verbatim}[frame=none,numbers=left,gobble=5] % \centering % \cvfile*[comments=这是一个简å•çš„Cè¯è¨€ä»£ç ]{ä»£ç æ ‡é¢˜}{test.c} % \end{Verbatim} % % \begin{center} % \begin{minipage}{0.85\textwidth} % \cvfile*[comments=这是一个简å•çš„Cè¯è¨€ä»£ç ]{ä»£ç æ ‡é¢˜}{test.c} % \end{minipage} % \end{center} % % \section{选项说明} % % \pkg{codebox}å®åŒ…æä¾›äº†ä¸€ç³»åˆ—选项,以设置代ç ç›’åçš„å¤–è§‚æ ·å¼ã€‚ % 载入\pkg{codebox}å®åŒ…åŽï¼Œä»¥ä¸‹é€‰é¡¹å‡å¯é€šè¿‡ç”¨æˆ·æŽ¥å£å‘½ä»¤\tn{codeset}进行设置。 % 当然,这些选项也å¯ä»¥é€šè¿‡å„个环境或命令的\oarg{外观选项}进行设置。 % % \subsection{代ç 引擎} % % \begin{function}[added=2021-12-26,updated=2021-12-26]{minted} % \begin{syntax} % minted = <\TTF> \init{true} % \end{syntax} % \opt{minted} ç”¨äºŽè®¾ç½®ä»£ç æŽ’ç‰ˆå¼•æ“Žï¼Œå¦‚ä¸º\textbf{true}则使用\pkg{minted}å®åŒ… % 排版代ç ç›’åä¸çš„内容,如为\textbf{false}则使用\pkg{listings}å®åŒ…排版 % 代ç ç›’åä¸çš„内容。默认值为\textbf{true}。 % \end{function} % % \subsection{代ç è¯è¨€} % % \begin{function}[added=2021-12-26,updated=2021-12-26]{lang} % \begin{syntax} % lang = \Arg{代ç è¯è¨€} \init{c} % \end{syntax} % \opt{lang} 用于设置代ç è¯è¨€ï¼Œé»˜è®¤å€¼ä¸º\textbf{cè¯è¨€}。 % \end{function} % % \subsection{代ç åç§°} % % \begin{function}[added=2021-12-26,updated=2021-12-26]{pretitle} % \begin{syntax} % pretitle = \Arg{代ç åç§°} \init{Code} % \end{syntax} % \opt{pretitle} 用于代ç ç¼–å·å‰çš„代ç åç§°å‰ç¼€ï¼Œé»˜è®¤å€¼ä¸º\textbf{Code}。 % \end{function} % % \subsection{ä»£ç æ ·å¼} % % \begin{function}[added=2021-12-26,updated=2021-12-26]{codestyle} % \begin{syntax} % codestyle = \Arg{ä»£ç æ ·å¼} \init{codeblocks} % \end{syntax} % \opt{codestyle} 用于设置代ç ç›’åä¸ä»£ç çš„æ ·å¼ï¼Œä»…对\textbf{minted} % 引擎有效,默认值为\textbf{codeblocks}。 % \end{function} % % \subsection{代ç å—å·} % % \begin{function}[added=2021-12-26,updated=2021-12-26]{codesize} % \begin{syntax} % codesize = \Arg{å—å·å‘½ä»¤} \init{\small} % \end{syntax} % \opt{codesize} 用于设置代ç ç›’åä¸ä»£ç çš„å—å·ï¼Œä»…对\textbf{minted} % 引擎有效,默认值为\textbf{\tn{small}}。 % \end{function} % % \subsection{底线注释内容} % % \begin{function}[added=2021-12-26,updated=2021-12-26]{comments} % \begin{syntax} % comments = \Arg{注释内容} \init{æ— } % \end{syntax} % \opt{commentf} 用于设置代ç ç›’å底线注释的内容, % 默认值为\textbf{æ— }。 % \end{function} % % \subsection{åº•çº¿æ³¨é‡Šæ ¼å¼} % % \begin{function}[added=2021-12-26,updated=2021-12-26]{commentf} % \begin{syntax} % commentf = \Arg{æ ¼å¼å‘½ä»¤ç»„} \init{\small\sffamily} % \end{syntax} % \opt{commentf} 用于设置代ç ç›’ååº•çº¿æ³¨é‡Šçš„æ ¼å¼ï¼Œ % 默认值为\textbf{\tn{small}\tn{sffamily}}。 % \end{function} % % \subsection{代ç 行è·} % % \begin{function}[added=2021-12-26,updated=2021-12-26]{codestretch} % \begin{syntax} % codestretch = \Arg{浮点数} \init{1.0} % \end{syntax} % \opt{codestretch} 用于设置代ç ç›’å内容(代ç )的行è·ï¼Œä»…对\textbf{minted} % å¼•æ“Žæœ‰æ•ˆï¼Œå–æµ®ç‚¹æ•°ã€‚默认值为\textbf{1.0}。 % \end{function} % % \subsection{行å·é—´è·} % % \begin{function}[added=2021-12-26,updated=2022-1-28]{linenumsep} % \begin{syntax} % linenumsep = \Arg{浮点数} \init{1.80} % \end{syntax} % \opt{linenumsep} 用于设置代ç ç›’å行å·ä¸Žä»£ç 的间è·ï¼Œä»…对\textbf{minted} % å¼•æ“Žæœ‰æ•ˆï¼Œå–æµ®ç‚¹æ•°ï¼Œå•使˜¯mm。默认值为\textbf{3.0}。 % \end{function} % % \changes{v1.0.3}{2022/1/4}{æ·»åŠ labelå¼•ç”¨æ ‡ç¾é€‰é¡¹çš„使用说明} % % \subsection{å¼•ç”¨æ ‡ç¾} % % \begin{function}[added=2022-1-4,updated=2022-1-4]{label} % \begin{syntax} % label = \Arg{å¼•ç”¨æ ‡ç¾åç§°} \init{空} % \end{syntax} % \opt{label} 用于设置带编å·ä»£ç ç›’åçš„å¼•ç”¨æ ‡ç¾ï¼Œ % 该选项仅对\env{codeview}/\env{codeview*}环境 % 或\tn{cvfile}/\tn{cvfile*}命令有效。 % 默认值为\textbf{空}。 % \end{function} % % \changes{v1.0.2}{2021/12/28}{æ·»åŠ cvcounter使用说明} % % \section{计数器} % % \begin{function}[added=2021-12-28,updated=2021-12-28]{cvcounter} % \pkg{codebox}å®åŒ…æä¾›äº†ä¸€ä¸ªè®¡æ•°å™¨\texttt{cvcounter}, % 当使用带编å·çŽ¯å¢ƒ\env{codeview}/\env{codeview*}å’Œ % 命令\tn{cvfile}/\tn{cvfile*}æŽ’ç‰ˆä»£ç æ—¶ï¼Œå¯ä»¥ç”¨äºŽå¯¹ä»£ç ç›’å进行计数。 % 默认情况下,如果å˜åœ¨\texttt{thechapter}计数器,则其父计数器设置为\texttt{chapter} % å¦åˆ™å°†æŒ‰å…¨æ–‡ç»Ÿä¸€è®¡æ•°ã€‚ % % å¯ä»¥ä½¿ç”¨ç±»ä¼¼\tn{renewcommand\{\tn{thecvcounter}\}\{\tn{thechapter.\tn{arabic\{cvcounter\}}}\}} % çš„å½¢å¼æ›´æ”¹ç¼–å·è¾“出内容。 % \end{function} % % \newpage % \section{æŽ’ç‰ˆæ ·ä¾‹} % % \pkg{codebox}å®åŒ…å¯ç”¨äºŽéœ€è¦è¯æ³•é«˜äº®ä»£ç æŽ’ç‰ˆåœºåˆï¼Œ % 以é¿å…ä½¿ç”¨ä»£ç æˆªå›¾ã€‚代ç ç›’åå¯ä»¥å¸¦/ä¸å¸¦åº•线注释。 % % \subsection{Java代ç } % å¯ä»¥ä½¿ç”¨\tn{codeset}命令设置代ç è¯è¨€ã€‚ % % \begin{Verbatim}[frame=none,numbers=left,gobble=5] % \centering % \codeset{lang=java} % \codefile{Java代ç ç›’å}{hellojava.java} % \end{Verbatim} % % \begin{center} % \begin{minipage}{0.85\textwidth} % \codeset{lang=java} % \codefile{Java代ç ç›’å}{hellojava.java} % \end{minipage} % \end{center} % % \subsection{Python代ç } % 还å¯ä»¥ä½¿ç”¨çŽ¯å¢ƒæˆ–å‘½ä»¤çš„\oarg{外观选项}设置代ç è¯è¨€ã€‚ % 当然,也å¯ä»¥é€šè¿‡ä½¿ç”¨\opt{label}选项为编å·ä»£ç æ·»åŠ å¼•ç”¨æ ‡ç¾ï¼Œ % 并通过\tn{ref}å‘½ä»¤å¼•ç”¨è¯¥æ ‡ç¾ï¼Œå¦‚代ç \ref{code-test}所示。 % % \begin{Verbatim}[frame=none,numbers=left,gobble=5] % \centering % \cvfile[lang=python,label=code-test]{Python代ç 示例}{hellopy.py} % \end{Verbatim} % % \begin{center} % % \begin{minipage}{0.85\textwidth} % \cvfile[lang=python,label=code-test]{Python代ç 示例}{hellopy.py} % \end{minipage} % \end{center} % % \subsection{listings引擎} % 在选项ä¸ä½¿ç”¨\kvopt{\meta{minted}}{\meta{false}} % 以使用\pkg{listings}å®åŒ…排版代ç 。 % % \begin{Verbatim}[frame=none,numbers=left,gobble=5] % \centering % \cvfile[minted=false,lang=c]{Cè¯è¨€ä»£ç 示例}{test.c} % \end{Verbatim} % % \begin{center} % \begin{minipage}{0.85\textwidth} % \cvfile[minted=false,lang=c]{Cè¯è¨€ä»£ç 示例}{test.c} % \end{minipage} % \end{center} % % % \end{documentation} % % \StopEventually{} % % \begin{implementation} % % \section{代ç 实现} % % 该å®åŒ…使用 \LaTeX3 è¯æ³•编写,ä¾èµ– \pkg{expl3} 环境, % 并需调用 \pkg{l3packages}ã€\pkg{tcolorbox}ã€\pkg{minted} % \pkg{listings}ã€\pkg{fontawesome5}ç‰å®åŒ…。 % % 按照 \LaTeX3 è¯æ³•,代ç ä¸çš„ç©ºæ ¼ã€æ¢è¡Œã€å›žè½¦ä¸Žåˆ¶è¡¨ç¬¦ä¼šå®Œå…¨è¢«å¿½ç•¥ï¼Œ % 而下划线“|_|â€å’Œå†’å·â€œ|:|â€åˆ™å¯ä½œä¸ºä¸€èˆ¬å—æ¯ä½¿ç”¨ã€‚ % æ£å¸¸çš„ç©ºæ ¼å¯ä»¥ä½¿ç”¨â€œ|~|â€ä»£æ›¿ï¼›è‡³äºŽ |~| åŽŸæ¥æ‰€è¡¨ç¤ºçš„“带åâ€ï¼Œ % 则è¦ç”¨ \LaTeXe{} 的原始命令 \tn{nobreakspace} 代替。 % % 以下代ç 䏿œ‰ä¸€äº›å½¢å¦‚ \textcolor[HTML]{2E3191}{\textsf{<*package>}} % çš„æ ‡è®°ï¼Œè¿™æ˜¯ \pkg{DocStrip} ä¸çš„“guardâ€ï¼Œç”¨æ¥é€‰æ‹©æ€§åœ°æå–文件。 % “\textsf{*}â€å’Œâ€œ\textsf{/}â€åˆ†åˆ«è¡¨ç¤ºè¯¥éƒ¨åˆ†çš„开始和结æŸã€‚ä¸å« % “\textsf{*}â€å’Œâ€œ\textsf{/}â€çš„ guard 出现在行å·å³ä¾§ï¼Œå®ƒä»¬ç”¨æ¥ç¡®å®š % å•独一行代ç 的归属。这些 guard 的颜色深浅ä¸ä¸€ï¼Œç”¨ä»¥æ˜Žç¡®åµŒå¥—关系。 % % 妿œ‰è‹¥å¹²å½¢å¦‚ \textcolor[HTML]{AD1457}{\textsf{<@@=codebox>}} çš„ guard, % 它们由 \pkg{l3docstrip} å®šä¹‰ï¼Œç”¨æ¥æ ‡è¯†åå—空间(模å—)。 % % \subsection{环境检测与准备} % % \begin{macrocode} %<*package> %<@@=codebox> % \end{macrocode} % % 载入必è¦çš„\LaTeX3 å®åŒ… % % \begin{macrocode} \RequirePackage { xtemplate, l3keys2e, xparse } % \end{macrocode} % % \changes{v1.0.1}{2021/12/26}{åˆ é™¤åŽŸ\LaTeX3 版本检测代ç } % % \subsection{载入其它å®åŒ…} % % 载入\pkg{fontawesome5}ã€\pkg{tcolorbox}ã€\pkg{amssymb}〠% \pkg{xcolor}å®åŒ… % % \begin{macrocode} \RequirePackage {fontawesome5, tcolorbox, varwidth, xcolor, etoolbox} % \end{macrocode} % % 解决Expl3ä¸\pkg{tcolorbox}å’Œ\pkg{tikz}é™„åŠ åº“æ— æ³•åŠ è½½çš„ % 的补ä¸(需è¦\pkg{etoolbox}å®åŒ…支æŒ) % % \url{https://tex.stackexchange.com/questions/57424/using-of-usetikzlibrary-in-an-expl3-package-fails} % % \begin{macrocode} \ExplSyntaxOff \patchcmd {\tcb@input@library@in} {% \input\tcbpkgprefix#1\relax% } {% \@pushfilename \input\tcbpkgprefix#1\relax% \@popfilename } {}{} \patchcmd {\pgfutil@InputIfFileExists} {\input #1} {% \@pushfilename \xdef\@currname{#1}% \input #1 % \@popfilename } {}{} \ExplSyntaxOn % \end{macrocode} % % \changes{v1.0.1}{2021/12/26}{minted2.6å‘å¸ƒï¼Œåˆ é™¤åŽŸè¡¥ä¸ä»£ç } % % 载入\pkg{tcolorbox}å’Œ\pkg{tikz}é™„åŠ åº“ % % \begin{macrocode} \tcbuselibrary{skins, xparse, breakable} \tcbuselibrary{minted,listings} \usetikzlibrary{shapes.geometric} % \end{macrocode} % % \subsection{定义颜色} % % \begin{macrocode} \definecolor{cvgrayc}{RGB}{247,247,247} \definecolor{cvgray}{RGB}{220,220,220} \definecolor{cvgrayb}{RGB}{153,153,153} \definecolor{cvblue}{RGB}{223,238,255} \definecolor{chengse}{RGB}{250,140,53} % \end{macrocode} % % \subsection{代ç ç›’åæ ·å¼è®¾è®¡} % % 代ç ç›’ålangæ ·å¼ % % \begin{macrocode} \tcbset{% skin=enhanced, lang/.style={% breakable,% drop~shadow,% colframe=gray!75!black,% left=4.5mm, enhanced,% colframe=tcbcolback!60!black,% colback=white,% colbacktitle=tcbcolback!5!gray!10!white,% fonttitle=\bfseries,% coltitle=black,% attach~boxed~title~to~top~center={% yshift=-0.25mm-\tcboxedtitleheight/2,% yshifttext=2mm-\tcboxedtitleheight/2% },% attach~boxed~title~to~top~left={% xshift=1cm,% yshift*=1mm-\tcboxedtitleheight% },% varwidth~boxed~title*=-3cm,% boxed~title~style={% frame~code={% \path[fill=tcbcolback!30!black]([yshift=-1mm,xshift=-1mm]frame.north~west)% arc[start~angle=0,end~angle=180,radius=1mm]([yshift=-1mm,xshift=1mm]frame.north~east)% arc[start~angle=180,end~angle=0,radius=1mm];% \path[left~color=tcbcolback!60!black,right~color=tcbcolback!60!black, middle~color=tcbcolback!80!black]([xshift=-2mm]frame.north~west)% --([xshift=2mm]frame.north~east)[rounded~corners=1mm]% --([xshift=1mm,yshift=-1mm]frame.north~east)% --(frame.south~east)% --(frame.south~west)% --([xshift=-1mm,yshift=-1mm]frame.north~west)[sharp~corners]% --cycle;% },% interior~engine=empty% },% overlay={% \begin{tcbclipinterior} \fill[tcbcolback!80!black] (frame.south~west) rectangle ([xshift=5mm]frame.north~west); \end{tcbclipinterior}% }, }% }% % \end{macrocode} % % \changes{v1.0.4}{2022/1/28}{修订分页代ç ç›’åæ— 行å·åº•色问题} % % 代ç ç›’åcvæ ·å¼ % % \begin{macrocode} \tcbset{% skin=enhanced, cv/.style={ boxrule=0.4mm, breakable, top=0mm, boxsep=1mm, drop~shadow, attach~boxed~title~to~top, colframe=blue!75!black, left=4.5mm, right=0mm, enhanced, colframe=tcbcolback!60!black, colback=white, colbacktitle=cvgray, fonttitle=\ttfamily, coltitle=black, underlay~boxed~title = { \begin{tcbclipinterior} \fill[cvblue] (frame.south~west) rectangle ([xshift=5.0mm,yshift=0mm]frame.north~west); \end{tcbclipinterior} }, underlay~middle = { \begin{tcbclipinterior} \fill[cvblue] (frame.south~west) rectangle ([xshift=5.0mm,yshift=0mm]frame.north~west); \end{tcbclipinterior} }, underlay~last = { \begin{tcbclipinterior} \fill[cvblue] (frame.south~west) rectangle ([xshift=5.0mm,yshift=0mm]frame.north~west); \end{tcbclipinterior} }, } }% % \end{macrocode} % % \subsection{内部å˜é‡å£°æ˜Ž} % % \begin{variable}{\l_@@_minted_bool, % \l_@@_comment_bool, % \l_@@_language_tl, % \l_@@_code_style_tl, % \l_@@_code_fontsize_tl, % \l_@@_code_name_tl, % \l_@@_comment_contents_tl, % \l_@@_comment_format_tl, % \l_@@_label_name_tl, % \l_@@_baseline_stretch_fp, % \l_@@_linenumber_sep_fp % } % 定义å˜é‡ã€‚ % % \changes{v1.0.3}{2022/1/4}{å¢žåŠ \tn{\_@@_label_name_tl}å˜é‡} % % \begin{macrocode} \bool_new:N \l_@@_minted_bool \bool_new:N \l_@@_comment_bool \tl_new:N \l_@@_language_tl \tl_new:N \l_@@_code_style_tl \tl_new:N \l_@@_code_fontsize_tl \tl_new:N \l_@@_code_name_tl \tl_new:N \l_@@_comment_contents_tl \tl_new:N \l_@@_comment_format_tl \tl_new:N \l_@@_label_name_tl \fp_new:N \l_@@_baseline_stretch_fp \fp_new:N \l_@@_linenumber_sep_fp % \end{macrocode} % \end{variable} % % \changes{v1.0.4}{2022/1/28}{ä¿®æ£linenumsep为默认值1.80以é¿å…3ä½è¡Œå·æº¢å‡ºè¾¹ç•Œ} % % \subsection{选项处ç†} % % 定义 |codebox| 键值类。 % \begin{macrocode} \keys_define:nn { codebox } { % \end{macrocode} % % \begin{macro}{minted} % 是å¦ä½¿ç”¨mintedå®åŒ…排版代ç ,默认为true。 % \begin{macrocode} minted .bool_set:N = \l_@@_minted_bool, minted .default:n = true, minted .initial:n = true, % \end{macrocode} % \end{macro} % % \begin{macro}{lang} % 设置排版代ç è¯è¨€ï¼Œé»˜è®¤ä¸ºc。 % \begin{macrocode} lang .tl_set:N = \l_@@_language_tl, lang .initial:n = c, % \end{macrocode} % \end{macro} % % \begin{macro}{pretitle} % 代ç åç§°å‰ç¼€ % \begin{macrocode} pretitle .tl_set:N = \l_@@_code_name_tl, pretitle .initial:n = Code, % \end{macrocode} % \end{macro} % % \begin{macro}{codestyle} % ä»£ç æ ·å¼ % \begin{macrocode} codestyle .tl_set:N = \l_@@_code_style_tl, codestyle .initial:n = default, % \end{macrocode} % \end{macro} % % \begin{macro}{codesize} % 代ç å—å· % \begin{macrocode} codesize .tl_set:N = \l_@@_code_fontsize_tl, codesize .initial:n = \small, % \end{macrocode} % \end{macro} % % \begin{macro}{comments} % æ³¨é‡Šæ ¼å¼ % \begin{macrocode} comments .tl_set:N = \l_@@_comment_contents_tl, comments .initial:n = {}, % \end{macrocode} % \end{macro} % % \begin{macro}{commentf} % æ³¨é‡Šæ ¼å¼ % \begin{macrocode} commentf .tl_set:N = \l_@@_comment_format_tl, commentf .initial:n = \small\sffamily, % \end{macrocode} % \end{macro} % % \begin{macro}{codestretch} % 基线伸展系数 % \begin{macrocode} codestretch .code:n = { \fp_set:Nn \l_@@_baseline_stretch_fp { #1 } }, codestretch .initial:n = 1.0, % \end{macrocode} % \end{macro} % % \begin{macro}{linenumsep} % 行å·ä¸Žæ–‡æœ¬ä¹‹é—´çš„è·ç¦»(å•ä½ï¼šmm) % \begin{macrocode} linenumsep .fp_set:N = \l_@@_linenumber_sep_fp, linenumsep .initial:n = 1.80, % \end{macrocode} % \end{macro} % % \changes{v1.0.3}{2022/1/4}{å¢žåŠ å¼•ç”¨æ ‡ç¾label选项} % % \begin{macro}{label} % æ³¨é‡Šæ ¼å¼ % \begin{macrocode} label .tl_set:N = \l_@@_label_name_tl, label .initial:n = {}, % \end{macrocode} % \end{macro} % % å¤„ç†æœªçŸ¥é€‰é¡¹ã€‚ % \begin{macrocode} unknown .code:n = { \@@_error:n { unknown-option } } } \msg_new:nnn { codebox } { unknown-option } { package~ option~ "\l_keys_key_tl"~ is~ unknown. } % \end{macrocode} % % \subsection{选项设置用户接å£} % % \begin{macro}{\codeset} % % 选项设置用户接å£ã€‚ % % \begin{macrocode} \NewDocumentCommand \codeset { m } { \keys_set:nn { codebox } {#1} } % \end{macrocode} % \end{macro} % % \subsection{内部函数} % % \changes{v1.0.2}{2022/1/2}{ä¿®æ”¹æŒ‰ç« ç¼–å·æ—¶cvcounterçš„ç¼–å·æ–¹å¼} % % \begin{macro}{\@@_set_counter_parent:} % % 设置代ç ç¼–å·è®¡æ•°å™¨çš„父计数器。 % % \begin{macrocode} \cs_new:Npn \@@_set_counter_parent: { \ifdef{\thechapter} { \newcounter{cvcounter}[chapter]% \renewcommand{\thecvcounter}{\thechapter.\arabic{cvcounter}} }{ \newcounter{cvcounter}%[section]% } } % \end{macrocode} % \end{macro} % % \changes{v1.0.1}{2021/12/26}{调整minted styleé€‰é¡¹ä¸ºå‚æ•°å®žçް} % \changes{v1.0.2}{2021/12/28}{å°†minted/listingsçš„å‚æ•°è®¾ç½®ç‹¬ç«‹ä¸ºå‡½æ•°} % % \begin{macro}{\@@_minted_engine_tcbset:n #1} % 设置代ç ç›’åmintedå®åŒ…傿•°ã€‚ % % \begin{macrocode} \cs_new:Npn \@@_minted_engine_tcbset:n #1 { \tcbset{ listing~engine=minted,% minted~style=#1, minted~options={% autogobble, breaklines,% fontsize=\tl_use:N \l_@@_code_fontsize_tl,% baselinestretch=\fp_eval:n { \l_@@_baseline_stretch_fp }, breaksymbolleft={},% linenos,% numbersep=\fp_eval:n { \l_@@_linenumber_sep_fp }~mm, },% minted~language=\tl_use:N \l_@@_language_tl% } } \cs_generate_variant:Nn \@@_minted_engine_tcbset:n {V} % \end{macrocode} % \end{macro} % % \begin{macro}{\@@_listings_engine_tcbset:} % 设置代ç ç›’ålistingså®åŒ…傿•°ã€‚ % % \begin{macrocode} \cs_new:Npn \@@_listings_engine_tcbset: { \lstset{% general command to set parameter(s) basicstyle=\ttfamily\tl_use:N \l_@@_code_fontsize_tl, % print whole listing small keywordstyle=\color{chengse}\bfseries,% identifierstyle=, % nothing happens breaklines=true, commentstyle=\itshape\color{gray}, stringstyle=\ttfamily, % typewriter type for strings numbers=left,% numberstyle=\tl_use:N \l_@@_code_fontsize_tl\sffamily\color[rgb]{0.5,0.5,1.0},% }% \tcbset{ overlay={% \begin{tcbclipinterior} \fill[tcbcolback!80!black] (frame.south~west) rectangle ([xshift=5mm]frame.north~west); \end{tcbclipinterior}% },% listing~options={ language=\tl_use:N \l_@@_language_tl, numbersep=\fp_eval:n { \l_@@_linenumber_sep_fp }~mm, %linebackgroundcolor={\ifodd\value{lstnumber}\color{cvgray}\fi} } }% } % \end{macrocode} % \end{macro} % % \begin{macro}{\@@_code_engine_tcbset:} % 设置代ç ç›’å引擎å®åŒ…傿•°ã€‚ % % \begin{macrocode} \cs_new:Npn \@@_code_engine_tcbset: { \bool_if:NTF \l_@@_minted_bool { \@@_minted_engine_tcbset:V \l_@@_code_style_tl }{ \@@_listings_engine_tcbset: } } % \end{macrocode} % \end{macro} % % \begin{macro}{\@@_comment_tcbset:} % 设置代ç ç›’å底线注释。 % % \begin{macrocode} \cs_new:Npn \@@_comment_tcbset: { \bool_if:NTF { \l_@@_comment_bool } { \tcbset{% listing~and~comment,% colbacklower=tcbcolback!5!yellow!10!white,% collower=tcbcolback!60!black,% comment={\tl_use:N \l_@@_comment_format_tl~ \tl_use:N \l_@@_comment_contents_tl},% } }{ \tcbset{ listing~only,} } } % \end{macrocode} % \end{macro} % % \changes{v1.0.1}{2021/12/27}{修订代ç ç›’åå‰å¤šä¸€ä¸ªé€—å·çš„问题} % \changes{v1.0.4}{2022/1/28}{修改用户接å£çš„{group_begin}到开始ä½ç½®} % % \subsection{ä¸è®¡æ•°ä»£ç ç›’å用户接å£} % % 定义ä¸å¸¦åº•线注释的代ç ç›’å环境\env{codebox} % % \begin{macrocode} \NewDocumentEnvironment{ codebox }{O{} m } { \group_begin: \bool_set_false:N \l_@@_comment_bool \keys_set:nn { codebox } { #1 } \@@_code_engine_tcbset: \@@_comment_tcbset: \tcbset{lang, title={#2} }% \tcblisting{} }{ \endtcblisting \group_end: } % \end{macrocode} % % 定义带底线注释的代ç ç›’å环境\env{codebox*} % % \begin{macrocode} \NewDocumentEnvironment{ codebox* }{O{} m } { \group_begin: \bool_set_false:N \l_@@_comment_bool \keys_set:nn { codebox } { #1 } \@@_code_engine_tcbset: \@@_comment_tcbset: \tcbset{lang, title={#2} }% \tcblisting{} }{ \endtcblisting \group_end: } % \end{macrocode} % % 定义带/ä¸å¸¦åº•线注释的从文件读å–内容的命令\tn{codefile}/\tn{codefile*} % % \begin{macrocode} \NewDocumentCommand \codefile { s O{} m m } { \group_begin: \IfBooleanTF{#1} { \bool_set_true:N \l_@@_comment_bool }{ \bool_set_false:N \l_@@_comment_bool } \keys_set:nn { codebox } { #2 } \@@_code_engine_tcbset: \@@_comment_tcbset: \tcbset{ lang, title={#3}, listing~file={#4}, }% \tcbinputlisting{ } \group_end: } % \end{macrocode} % % \subsection{计数代ç ç›’å用户接å£} % % 设置代ç ç›’å计算器 % % \begin{macrocode} \@@_set_counter_parent: % \end{macrocode} % % \changes{v1.0.2}{2021/12/28}{ä¸ºè®¡æ•°å™¨ä¸¤ç«¯æ·»åŠ \tn{nobreakspace}} % \changes{v1.0.3}{2022/1/4}{为带编å·ä»£ç ç›’åæ·»åŠ å¼•ç”¨æ ‡ç¾é€‰é¡¹} % % 定义ä¸å¸¦åº•线注释的代ç ç›’å环境\env{codeview} % % \begin{macrocode} \DeclareTCBListing[use~counter=cvcounter]{codeviewaux}{m} { title={\tl_use:N \l_@@_code_name_tl\nobreakspace\thecvcounter\nobreakspace~#1}, } \NewDocumentEnvironment{ codeview }{O{} m } { \group_begin: \bool_set_false:N \l_@@_comment_bool \keys_set:nn { codebox } { #1 } \@@_code_engine_tcbset: \@@_comment_tcbset: \tl_if_empty:NF \l_@@_label_name_tl { \tcbset{ label=\tl_use:N \l_@@_label_name_tl, } } \tcbset{ cv, overlay~unbroken~and~first ={ \begin{tcbclipinterior} \node[inner~sep=0pt,anchor=north~east,yshift=-3pt,xshift=-5pt,text=cvgrayb] at (frame.north~east){ \ttfamily\faFile*\ \faCode\ \faCodeBranch\ \faCopy\ \faExternalLink*\ \MakeUppercase{\tl_use:N \l_@@_language_tl} }; \end{tcbclipinterior} } }% \codeviewaux{#2} }{ \endcodeviewaux \group_end: } % \end{macrocode} % % % 定义带底线注释的代ç ç›’å环境\env{codeview*} % % \begin{macrocode} \NewDocumentEnvironment{ codeview* }{O{} m } { \group_begin: \bool_set_true:N \l_@@_comment_bool \keys_set:nn { codebox } { #1 } \@@_code_engine_tcbset: \@@_comment_tcbset: \tl_if_empty:NF \l_@@_label_name_tl { \tcbset{ label=\tl_use:N \l_@@_label_name_tl, } } \tcbset{ cv, overlay~unbroken~and~first ={ \begin{tcbclipinterior} \node[inner~sep=0pt,anchor=north~east,yshift=-3pt,xshift=-5pt,text=cvgrayb] at (frame.north~east){ \ttfamily\faFile*\ \faCode\ \faCodeBranch\ \faCopy\ \faExternalLink*\ \MakeUppercase{\tl_use:N \l_@@_language_tl} }; \end{tcbclipinterior} } }% \codeviewaux{#2} }{ \endcodeviewaux \group_end: } % \end{macrocode} % % 定义带/ä¸å¸¦åº•线注释的从文件读å–内容的命令\tn{cvfile}/\tn{cvfile*} % % \begin{macrocode} \DeclareTCBInputListing[use~counter=cvcounter]{\langfileaux}{m} { title={\tl_use:N \l_@@_code_name_tl\nobreakspace\thecvcounter\nobreakspace~#1}, } \NewDocumentCommand \cvfile { s O{} m m } { \group_begin: \IfBooleanTF{#1} { \bool_set_true:N \l_@@_comment_bool }{ \bool_set_false:N \l_@@_comment_bool } \keys_set:nn { codebox } { #2 } \@@_code_engine_tcbset: \@@_comment_tcbset: \tl_if_empty:NF \l_@@_label_name_tl { \tcbset{ label=\tl_use:N \l_@@_label_name_tl, } } \tcbset{ cv, listing~file={#4}, overlay~unbroken~and~first ={ \begin{tcbclipinterior} \node[inner~sep=0pt,anchor=north~east,yshift=-3pt,xshift=-5pt,text=cvgrayb] at (frame.north~east){ \ttfamily\faFile*\ \faCode\ \faCodeBranch\ \faCopy\ \faExternalLink*\ \MakeUppercase{\tl_use:N \l_@@_language_tl} }; \end{tcbclipinterior} } }% \langfileaux{#3} \group_end: } % \end{macrocode} % % \begin{macrocode} %</package> % \end{macrocode} % % \end{implementation} % % \Finale % \endinput