将路径更改为 tcbinputlisting 以仅反映文件名

将路径更改为 tcbinputlisting 以仅反映文件名

在下面给出的代码中,我有许多 Matlab 文件。我将这些文件放入名为“Project/Matlab”的文件夹中。第一行中显示的名称现在是“Project/Matlab/sample.m”。

[注意:我还必须稍微更改代码,如下所示以反映路径变化。\inputmatlab{Expansion Algorithm}{Project/Matlab/sample.m}]

尽管文件位于不同的文件夹中,我该如何修改代码以仅反映如下所示的文件名?谢谢!

在此处输入图片描述

代码

\documentclass[a4paper, 10pt, oneside, fleqn, openright]{book}
\usepackage[no-math]{fontspec}

\usepackage{polyglossia}
\setdefaultlanguage{french}
\setotherlanguages{english}

\newcommand{\codeimg}{$\vcenter{\hbox{\includegraphics[height=\baselineskip]{example-image-a}}}$}
\newcommand{\codeimgpy}{$\vcenter{\hbox{\includegraphics[height=\baselineskip]{example-image-b}}}$}
\newcommand{\codeimgcpp}{$\vcenter{\hbox{\includegraphics[height=\baselineskip]{example-image-c}}}$}

\usepackage{calc}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{pdfpages,graphicx}
\usepackage{mdframed}
\usepackage{listings}
\usepackage{filecontents}
\definecolor{mybluei}{RGB}{0,173,239}
\definecolor{myblueii}{RGB}{63,200,244}
\definecolor{myblueiii}{RGB}{199,234,253}
\definecolor{light-gray}{gray}{0.92}

\definecolor{mainColor}{RGB}{211, 47, 47} % some dark red

\renewcommand\lstlistingname{Code}
\lstset{
    language=Python,
    numbers=left,
    numbersep= 7mm,
    numberstyle=\color{Black},
    stepnumber=1,
    tabsize=3,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    basicstyle=\color{Black}\ttfamily,
    commentstyle=\color{LimeGreen},
    keywordstyle=\color{BurntOrange}\bfseries,
    stringstyle=\color{WildStrawberry},
    keywords={var, func, extends},
    frame=leftline,
    framesep=0mm,
    xleftmargin=3mm,
    framesep=2mm,
    framerule=0mm,
    abovecaptionskip=5mm,
    aboveskip=\baselineskip,
    belowskip=\baselineskip
}

\usepackage[most]{tcolorbox}
\newcounter{data}
\newcounter{result}
\newcounter{pythoncode}
\newcounter{cppcode}
\newcounter{matlab}
\tcbuselibrary{skins,breakable,listings}

\DeclareTCBInputListing[use counter=matlab,list inside=matlab,number
within=chapter]{\inputmatlab}{O{}+m+O{#2}+m}{listing options={style=Matlab-editor},%
        enhanced,noparskip,breakable,colback=light-gray,colframe=DarkSlateGray,opacitybacktitle=.8,%
        fonttitle=\bfseries,before upper={\hspace*{-1em}\codeimg~#4},%
    title after break={\centering\footnotesize\itshape\strut Matlab Code~\thematlab~--~continued},%
     listing only,listing options={xleftmargin=-1mm,#1,style=Matlab-editor},
     after upper={\centering\strut {\bfseries Matlab Code~\thematlab:}~#2},
     frame hidden,arc=0pt,outer arc=0pt,boxrule=0pt,frame code={\draw[gray,line width=2mm] ([xshift=-0.5pt]frame.north west) -- ([xshift=-0.5pt]frame.south west);},
     %
     listing file={#4},#1}

\usepackage[numbered,framed]{matlab-prettifier}

\begin{filecontents*}{sample.m}
% create a file for output
!touch testFile.txt
fid = fopen('testFile.text', 'w')
for i=1:10
  fprintf(fid,'%6.2f \n', i);
end
\end{filecontents*}

\begin{document}

\inputmatlab{Expansion Algorithm}{sample.m}

\end{document} 

答案1

基本 latex 中有一个内部宏\filename@parse,可将文件名解析为其组件,设置宏\filename@area\filename@base以及\filename@ext文件的路径、基本名称和扩展名。您可以使用它们来设置一个宏,以删除路径前缀,如下所示

\makeatletter
\newcommand{\mystrippath}[1]{\filename@parse{#1}%
  \filename@base\@ifundefined{\filename@ext}{.\filename@ext}{}}
\makeatother

然后您可以使用\mystrippath第四个参数来进行显示目的。

在此处输入图片描述

\documentclass[a4paper, 10pt, oneside, fleqn, openright]{book}
\usepackage[no-math]{fontspec}

\usepackage{polyglossia}
\setdefaultlanguage{french}
\setotherlanguages{english}

\newcommand{\codeimg}{$\vcenter{\hbox{\includegraphics[height=\baselineskip]{example-image-a}}}$}
\newcommand{\codeimgpy}{$\vcenter{\hbox{\includegraphics[height=\baselineskip]{example-image-b}}}$}
\newcommand{\codeimgcpp}{$\vcenter{\hbox{\includegraphics[height=\baselineskip]{example-image-c}}}$}

\usepackage{calc}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{pdfpages,graphicx}
\usepackage{mdframed}
\usepackage{listings}
\usepackage{filecontents}
\definecolor{mybluei}{RGB}{0,173,239}
\definecolor{myblueii}{RGB}{63,200,244}
\definecolor{myblueiii}{RGB}{199,234,253}
\definecolor{light-gray}{gray}{0.92}

\definecolor{mainColor}{RGB}{211, 47, 47} % some dark red

\renewcommand\lstlistingname{Code}
\lstset{
    language=Python,
    numbers=left,
    numbersep= 7mm,
    numberstyle=\color{Black},
    stepnumber=1,
    tabsize=3,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    basicstyle=\color{Black}\ttfamily,
    commentstyle=\color{LimeGreen},
    keywordstyle=\color{BurntOrange}\bfseries,
    stringstyle=\color{WildStrawberry},
    keywords={var, func, extends},
    frame=leftline,
    framesep=0mm,
    xleftmargin=3mm,
    framesep=2mm,
    framerule=0mm,
    abovecaptionskip=5mm,
    aboveskip=\baselineskip,
    belowskip=\baselineskip
}

\usepackage[most]{tcolorbox}
\newcounter{data}
\newcounter{result}
\newcounter{pythoncode}
\newcounter{cppcode}
\newcounter{matlab}
\tcbuselibrary{skins,breakable,listings}

\makeatletter
\newcommand{\mystrippath}[1]{\filename@parse{#1}%
  \filename@base\@ifundefined{\filename@ext}{.\filename@ext}{}}
\makeatother

\DeclareTCBInputListing[use counter=matlab,list inside=matlab,number
within=chapter]{\inputmatlab}{O{}+m+O{#2}+m}{listing options={style=Matlab-editor},%
        enhanced,noparskip,breakable,colback=light-gray,colframe=DarkSlateGray,opacitybacktitle=.8,%
        fonttitle=\bfseries,before upper={\hspace*{-1em}\codeimg~\mystrippath{#4}},%
    title after break={\centering\footnotesize\itshape\strut Matlab Code~\thematlab~--~continued},%
     listing only,listing options={xleftmargin=-1mm,#1,style=Matlab-editor},
     after upper={\centering\strut {\bfseries Matlab Code~\thematlab:}~#2},
     frame hidden,arc=0pt,outer arc=0pt,boxrule=0pt,frame code={\draw[gray,line width=2mm] ([xshift=-0.5pt]frame.north west) -- ([xshift=-0.5pt]frame.south west);},
     %
     listing file={#4},#1}

\usepackage[numbered,framed]{matlab-prettifier}

\begin{filecontents*}{sample.m}
% create a file for output
!touch testFile.txt
fid = fopen('testFile.text', 'w')
for i=1:10
  fprintf(fid,'%6.2f \n', i);
end
\end{filecontents*}

\begin{document}

\inputmatlab{Expansion Algorithm}{matlab/sample.m}

\end{document}

相关内容