我目前正在尝试将我的 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
问题ngerman
在babel
于此选项会启用简写。最简单的解决方案是通过以下方式关闭它们:
\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
只有在吸收可选参数时才有效。