仅获取列表的文件名和扩展名,而不是完整路径

仅获取列表的文件名和扩展名,而不是完整路径

我正在尝试将文件名添加为标题。我能够进行此设置

caption=\lstname

但这显示了完整路径。我现在想让文件名和扩展名只显示出来。我尝试使用\filename@parser,但没有成功。

代码如下:

\ifdefined\docdefined
\else
%   \documentclass[a4paper,twoside,12pt, openright]{report}
    \input{include_start}
    \begin{document}
\fi

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

% START DOCUMENT
\begin{appendices}
\makeatletter

\lstset{language=C, 
numbers=left, 
frame=single, 
commentstyle=\color{dkgreen}, 
basicstyle={\scriptsize\ttfamily}, 
keywordstyle=\color{blue}, 
%identifierstyle=\color{blue}, 
stringstyle=\color{mauve},
captionpos=t,
showstringspaces=false,
breaklines=true,
breakatwhitespace=true,
tabsize=3,
caption={\protect\filename@parse{\lstname}\protect\filename@base\text{.}\protect\filename@ext},
}

\begin{frame}
% LIST FILES HERE:


\lstinputlisting{C:/Users/x/Project/trunk/User/Drivers/ADC.h}

\lstinputlisting{C:/Users/x/Project/trunk/User/Drivers/ADC.c}


\end{frame}
\end{appendices}

% END DOCUMENT
\ifdefined\docdefined
\else
    \input{include_end}
    \end{document}
\fi

我很确定这里的语法是错误的:

   caption={\filename@parse{\lstname}\filename@base}

我正在尝试解析\lstname并获取基础。

答案1

您需要\protect保护移动参数中的\filename@parse和:\filename@basecaption

caption={\protect\filename@parse{\lstname}\protect\filename@area}

答案2

我会避免使用一组复杂的宏作为 的值;通过定义单独的命令,您可以轻松添加调整。在这里,我修复了将连字符更改为\caption的行为,并在文件名周围添加。listings\textendash\texttt

但请注意,您将无法正确编译列表列表。

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

\makeatletter
\DeclareRobustCommand{\getlstname}{%
 \begingroup
  % \lstname seems to change hyphens into \textendash
  \def\textendash{-}%
  \filename@parse{\lstname}%
  \texttt{\filename@base.\filename@ext}%
 \endgroup
}
\makeatother

% START DOCUMENT

\lstset{
  language=C, 
  numbers=left, 
  frame=single, 
  commentstyle=\color{dkgreen}, 
  basicstyle={\scriptsize\ttfamily}, 
  keywordstyle=\color{blue}, 
  %identifierstyle=\color{blue}, 
  stringstyle=\color{mauve},
  captionpos=t,
  showstringspaces=false,
  breaklines=true,
  breakatwhitespace=true,
  tabsize=3,
  caption=\getlstname,
}

\begin{document}

\lstinputlisting{/Users/enrico2013/primaria2014-02-04.tex}

\end{document}

我使用我的一个 LaTeX 文件作为示例。

在此处输入图片描述

答案3

在此处输入图片描述

产自

\documentclass{article}
\usepackage{color,listings}

\lstset{language=C, 
numbers=left, 
frame=single, 
commentstyle=\color{green}, 
basicstyle={\scriptsize\ttfamily}, 
keywordstyle=\color{blue}, 
%identifierstyle=\color{blue}, 
stringstyle=\color{red},
captionpos=t,
showstringspaces=false,
breaklines=true,
breakatwhitespace=true,
tabsize=3,
caption={\lstname},
}

\begin{document}


\lstinputlisting{io.h}

\end{document}

只要使用如下命令,你只需要提供文件名,而不需要完整路径

TEXINPUTS=/usr/include: pdflatex list22

或者在你使用的任何命令 shell 中执行等效操作(以上是 bash 语法)

答案4

您可以更改搜索路径,然后在标题中您将只看到文件名。

这对我有用:

\newcommand{\cfile}[2][]{
    \lstinputlisting[style=customc, caption={\texttt{\detokenize{#2}}},#1]{#2}
}

\lstset{inputpath=some/funny/path}

...

\cfile{file_name.c}

该文件位于some/funny/path/file_name.ccustomc是自定义样式,您可以将其删除。\texttt\detokenize表示文件名中的特殊字符, 的第一个可选参数\newcommand用于在使用命令时添加功能,例如\cfile[basicstyle=\ttfamily]{file_name.c}

相关内容