我正在尝试将文件名添加为标题。我能够进行此设置
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@base
caption
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.c
。customc
是自定义样式,您可以将其删除。\texttt
和\detokenize
表示文件名中的特殊字符, 的第一个可选参数\newcommand
用于在使用命令时添加功能,例如\cfile[basicstyle=\ttfamily]{file_name.c}
。