在下面给出的代码中,我有许多 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}