我有很多 VBA(Visual Basic for Applications,Microsoft Office 中的编程语言)代码,我必须将其添加到附录中的论文中。
我想知道如何才能最舒服地列出那些代码行(必须以某种方式构造,因为有很多行)并将它们包括在我的 pdflatex 文档中。
这里有人有排版大量 VBA 代码的经验吗?
Option Explicit
Sub Signal(strSignalfolge As String, Optional lngTakt As Long = 100)
'Prozedur erzeugt eine Serie von Warntönen.
'Die optionale Variable lngTakt gibt den Takt in Millisekunden vor (Standard: 100 ms)
'Das Muster kann über die String-Variable strSignalfolge beeinflusst werden:
' Stern (*) -> 1 Warnton
' Ziffern 1..9 -> 1..9 Takte Pause
' Leerzeichen -> 1 Sekunde Pause
' Minus (-) -> 1.5 Sekunden Pause
Dim i As Integer
Dim b As String
For i = 1 To Len(strSignalfolge)
b = Mid(strSignalfolge, i, 1)
Select Case b
Case "*": beep
Case 1 To 9: DELAY CInt(b) * lngTakt
Case " ": DELAY 1000
Case "-": DELAY 1500
End Select
DELAY lngTakt
Next i
End Sub
Public Function strParse(Data As String, Trenn As String, Nr As Integer)
'Funktion trennt die Zeichenkette <Data>
On Error Resume Next
Dim MainData() As String, SplitData() As String
MainData = Split(Data, Trenn)
SplitData = Split(MainData(Nr - 1), Trenn)
strParse = SplitData(0)
End Function
Public Sub ProtokollZeile(strData As String)
'Gibt eine Protokollzeile im Direktfenster aus: Datum, Uhrzeit und <strData>
Debug.Print Now & " " & strData
End Sub
Sub NetSend(strmsg As String, Optional strEmpf As String = "imf3beck")
'Prozedur sendet die Kurznachricht <strMsg> über das Intranet an den Rechner <strEmpf>
Dim a
a = Shell("cmd.exe /c net send " & strEmpf & " " & strmsg, vbMinimizedFocus)
MsgBox "(net send message)" & vbCr & strmsg
End Sub
Sub NetSendMessungBeendet(Optional strBem As String = "")
'Sendet über das Netzwerk eine Statusnachricht, dass die Messung beendet wurde und gibt diese
'Nachricht auch lokal als Warndialog aus
Dim strMsgText As String
strMsgText = (Format(Now, "hh:mm:ss") & " Messung beendet" & strBem)
NetSend (strMsgText)
End Sub
Public Function ZellBereichAdresse(strZellber As String) As String
Application.Volatile
ZellBereichAdresse = CStr(Range(strZellber).Address)
End Function
答案1
listings
包将会帮助你。
使用style=A
使用style=B
TeX 输入文件
\documentclass[dvipsnames,cmyk]{article}
\usepackage{listings,xcolor}
\lstset
{
breaklines=true,
tabsize=3,
showstringspaces=false
}
\lstdefinestyle{Common}
{
extendedchars=\true,
language={[Visual]Basic},
frame=single,
%===========================================================
framesep=3pt,%expand outward.
framerule=0.4pt,%expand outward.
xleftmargin=3.4pt,%make the frame fits in the text area.
xrightmargin=3.4pt,%make the frame fits in the text area.
%===========================================================
rulecolor=\color{Red}
}
\lstdefinestyle{A}
{
style=Common,
backgroundcolor=\color{Yellow!10},
basicstyle=\scriptsize\color{Black}\ttfamily,
keywordstyle=\color{Orange},
identifierstyle=\color{Cyan},
stringstyle=\color{Red},
commentstyle=\color{Green}
}
\lstdefinestyle{B}
{
style=Common,
backgroundcolor=\color{Black},
basicstyle=\scriptsize\color{White}\ttfamily,
keywordstyle=\color{Orange},
identifierstyle=\color{Cyan},
stringstyle=\color{Red},
commentstyle=\color{Green}
}
\begin{document}
\begin{lstlisting}[style=A]%please try style=B
Option Explicit
Sub Signal(strSignalfolge As String, Optional lngTakt As Long = 100)
'Prozedur erzeugt eine Serie von Warntönen.
'Die optionale Variable lngTakt gibt den Takt in Millisekunden vor (Standard: 100 ms)
'Das Muster kann über die String-Variable strSignalfolge beeinflusst werden:
' Stern (*) -> 1 Warnton
' Ziffern 1..9 -> 1..9 Takte Pause
' Leerzeichen -> 1 Sekunde Pause
' Minus (-) -> 1.5 Sekunden Pause
Dim i As Integer
Dim b As String
For i = 1 To Len(strSignalfolge)
b = Mid(strSignalfolge, i, 1)
Select Case b
Case "*": beep
Case 1 To 9: DELAY CInt(b) * lngTakt
Case " ": DELAY 1000
Case "-": DELAY 1500
End Select
DELAY lngTakt
Next i
End Sub
Public Function strParse(Data As String, Trenn As String, Nr As Integer)
'Funktion trennt die Zeichenkette <Data>
On Error Resume Next
Dim MainData() As String, SplitData() As String
MainData = Split(Data, Trenn)
SplitData = Split(MainData(Nr - 1), Trenn)
strParse = SplitData(0)
End Function
Public Sub ProtokollZeile(strData As String)
'Gibt eine Protokollzeile im Direktfenster aus: Datum, Uhrzeit und <strData>
Debug.Print Now & " " & strData
End Sub
Sub NetSend(strmsg As String, Optional strEmpf As String = "imf3beck")
'Prozedur sendet die Kurznachricht <strMsg> über das Intranet an den Rechner <strEmpf>
Dim a
a = Shell("cmd.exe /c net send " & strEmpf & " " & strmsg, vbMinimizedFocus)
MsgBox "(net send message)" & vbCr & strmsg
End Sub
Sub NetSendMessungBeendet(Optional strBem As String = "")
'Sendet über das Netzwerk eine Statusnachricht, dass die Messung beendet wurde und gibt diese
'Nachricht auch lokal als Warndialog aus
Dim strMsgText As String
strMsgText = (Format(Now, "hh:mm:ss") & " Messung beendet" & strBem)
NetSend (strMsgText)
End Sub
Public Function ZellBereichAdresse(strZellber As String) As String
Application.Volatile
ZellBereichAdresse = CStr(Range(strZellber).Address)
End Function
\end{lstlisting}
\end{document}
笔记:
- 最好使用 从 TeX 输入文件中导入 VBA 源代码
\lstinputlisting[<options>]{filename.vb}
。这样可以使您的 TeX 输入文件干净。 style=A
通过更改为 来尝试我的风格style=B
B。
答案2
您的选择包括:
我会选择 minted。注意它使用色素因此其依赖项包括 python + pygments。您还必须使用选项调用 TeX 引擎-shell-escape
。例如
xelatex -shell-escape source_file.tex
编辑
首先我是一名 Python 爱好者!:P
现在更认真地说,我更喜欢 minted,因为我发现它更容易设置。您不必花时间处理listings
' 选项以获得彩色输出。通常每种语言的默认值都可以。如果您想排版一种晦涩难懂的语言,您也有很大灵活性。Pygmentize 几乎为所有内容提供了词法分析器。
我必须承认我还没有将它用于大量的代码片段,所以我不知道编译时间是否变得难以接受。
我认为最好的选择是尝试两者并选择更适合您的一个!
这是 MWE
\documentclass[12pt, final]{article}
\usepackage{minted}
\begin{document}
\begin{minted}{python}
class FancyColoredStuff(object):
def __init__(self, language):
self.language = language
def highlight(self):
print "This is colorful code in %s" % self.language
\end{minted}
\end{document}