在 Latex 中包含 matlab 代码时出现的问题

在 Latex 中包含 matlab 代码时出现的问题

我目前正在尝试将我的 Matlab 代码实现到 中TeX。奇怪的是,当编写一个最小工作示例时,一切都运行良好。但是,当我使用我的真实文档时,我只会出现错误。这里是 MWE:

\documentclass{article}
\usepackage[numbered]{mcode}
\definecolor{lightgray}{rgb}{0.9,0.9,0.9}
\renewcommand{\lstlistingname}{Quellcode}
\lstset{backgroundcolor=\color{lightgray},
        linewidth=15.5cm,}
\begin{document}
\lstinputlisting[label={hans}, caption=Funktion {\ttfamily setminInt}]
                {"E:/Program Files/MATLAB/projects/master/classes/Customer.m"}
\end{document}

以下是原始文件的序言(尽管被大大缩短了):

\documentclass[a4paper,12pt,parskip,bibtotoc,liststotoc]{article}

\usepackage{fontenc}
\usepackage[ngerman, english]{babel}   
\usepackage{setspace}      %fr Zeilenabstand
\usepackage[notindex,nottoc]{tocbibind}  %Inhaltsverzeichnisse erstellen

%zustzliche bentigte Pakete
\usepackage{graphicx}      %Graphik
\usepackage{amsmath,amssymb}  %Mathematik
\usepackage{natbib}       %Zitate
\usepackage{marvosym}      %enthlt Symbole wie das Eurozeichen
\usepackage{eurosym}
%\setcounter{secnumdepth}{3}
%\setcounter{tocdepth}{3}

\usepackage[numbered]{mcode}
\definecolor{lightgray}{rgb}{0.9,0.9,0.9}
\renewcommand{\lstlistingname}{Source Code}
\lstset{backgroundcolor=\color{lightgray},
        linewidth=15.5cm,}

\setlength{\parskip}{3pt} % 1ex plus 0.5ex minus 0.2ex}


\usepackage{mdwlist} 
\usepackage[labelsep=space,justification=centering]{caption}

%\usepackage{hyperref} %erlaubt Links innerhalb des pdf-Dokuments zu erzeugen

\setlength{\parindent}{0pt}   %Verhinderung des horizontalen Einrckens zu Beginn eines Absatzes

%Seitenlayout
\topmargin -0.9cm    %Vertikaler Abstand der Kopfzeile von der Bezugslinie
\textheight 25cm    %Abstand der Grundlinie der Kopfzeile zum Haupttext
\textwidth 16.5cm    %Breite des Haupttexts
\footskip 1cm      %Abstand der Grundlinien der letzten Textzeile und der Fuzeile
\voffset -0.5cm     %Vertikale Bezugspunktposition
\hoffset -1.2cm     %Horizontale Bezugspunktposition

\onehalfspacing     %anderthalbzeiliger Abstand

\newcommand{\url}{\;}  %URL im Literaturverzeichnis

\begin{document}
\lstinputlisting[caption=Funktion {\ttfamily setminInt}]
                    {"E:/Program Files/MATLAB/projects/master/classes/Customer.m"}
\end{document}

我总是收到错误:“E:\Program Files (x86)\MiKTeX 2.9\tex\latex\psnfss\ot1pcr.fd”)!不完整的 \iffalse;第 560 行之后的所有文本都被忽略。

因此miktex忽略客户类中写入的所有内容(代码从第 560 行开始)

答案1

问题ngermanbabel于此选项会启用简写。最简单的解决方案是通过以下方式关闭它们:

\usepackage[shorthands=off,ngerman,english]{babel}

否则,您可以通过以下方式关闭列表输入命令的简写:

\begingroup
\shorthandoff{"}
\lstinputlisting[caption=Funktion {\ttfamily setminInt}] {"file.m"}
\endgroup

在您的完整示例中包含外部file.m内容

nth

得出:

示例输出

\documentclass[a4paper,12pt,parskip,bibtotoc,liststotoc]{article}

\usepackage{fontenc}
\usepackage[main=ngerman,english]{babel}   
\usepackage{setspace}      %fr Zeilenabstand
\usepackage[notindex,nottoc]{tocbibind}  %Inhaltsverzeichnisse erstellen

%zustzliche bentigte Pakete
\usepackage{graphicx}      %Graphik
\usepackage{amsmath,amssymb}  %Mathematik
\usepackage{natbib}       %Zitate
\usepackage{marvosym}      %enthlt Symbole wie das Eurozeichen
\usepackage{eurosym}
%\setcounter{secnumdepth}{3}
%\setcounter{tocdepth}{3}

\usepackage[numbered]{mcode}
\definecolor{lightgray}{rgb}{0.9,0.9,0.9}
\renewcommand{\lstlistingname}{Source Code}
\lstset{backgroundcolor=\color{lightgray},
        linewidth=15.5cm,}

\setlength{\parskip}{3pt} % 1ex plus 0.5ex minus 0.2ex}


\usepackage{mdwlist} 
\usepackage[labelsep=space,justification=centering]{caption}

%\usepackage{hyperref} %erlaubt Links innerhalb des pdf-Dokuments zu erzeugen

\setlength{\parindent}{0pt}   %Verhinderung des horizontalen Einrckens zu Beginn eines Absatzes

%Seitenlayout
\topmargin -0.9cm    %Vertikaler Abstand der Kopfzeile von der Bezugslinie
\textheight 25cm    %Abstand der Grundlinie der Kopfzeile zum Haupttext
\textwidth 16.5cm    %Breite des Haupttexts
\footskip 1cm      %Abstand der Grundlinien der letzten Textzeile und der Fuzeile
\voffset -0.5cm     %Vertikale Bezugspunktposition
\hoffset -1.2cm     %Horizontale Bezugspunktposition

\onehalfspacing     %anderthalbzeiliger Abstand

\newcommand{\url}{\;}  %URL im Literaturverzeichnis

\begin{document}
xx"ayy

\begingroup
\shorthandoff{"}
\lstinputlisting[caption=Funktion {\ttfamily setminInt}] {"file.m"}
\endgroup

xx"ayy
\end{document}

答案2

listings只需在加载魔法代码后添加某处

\makeatletter
\g@addto@macro\lst@setcatcodes{\catcode`\"=12 }
\makeatother

你不需要任何特殊的技巧。这是一个安全的措施;不幸的是,没有接口,如果有就好了。然而,这会导致babel在可选参数中不能使用简写。如果你需要它们,则需要不同的解决方案。

\documentclass[a4paper]{article}

\usepackage[T1]{fontenc}
\usepackage[main=ngerman,english]{babel}   

\usepackage[numbered]{mcode}
\definecolor{lightgray}{rgb}{0.9,0.9,0.9}
\renewcommand{\lstlistingname}{Source Code}
\lstset{backgroundcolor=\color{lightgray},
        linewidth=15.5cm,}

\usepackage{mdwlist} 
\usepackage[labelsep=space,justification=centering]{caption}

\makeatletter
\renewcommand{\lstinputlisting}{%
  \begingroup\lst@setcatcodes\Xlst@listinputlisting
}
\newcommand{\Xlst@listinputlisting}[1][]{%
  \endgroup\def\lst@set{#1}%
  % make " other just for absorbing the next argument
  \begingroup\@makeother\"\Xlst@listinputlisting@i
}
\newcommand{\Xlst@listinputlisting@i}[1]{%
  \endgroup
  \IfFileExists{\lst@inputpath#1}
    {\expandafter\lst@InputListing\expandafter{\lst@inputpath#1}}%
    {\filename@parse{\lst@inputpath#1}%
     \edef\reserved@a{\noexpand\lst@MissingFileError{\filename@area\filename@base}%
       {\ifx\filename@ext\relax tex\else\filename@ext\fi}}%
     \reserved@a}%
  \lst@doendpe\@newlistfalse\ignorespaces
}
\makeatother

\begin{document}
xx"ayy

\lstinputlisting[caption=F\"unktion {\ttfamily setminInt}] {"juliaset.m"}

xx"ayy
\end{document}

这个想法是将可选参数和强制参数的吸收分开。"速记被删除只是为了获取参数,就像\lst@setcatcodes只有在吸收可选参数时才有效。

相关内容