我正在尝试在乳胶中重现一个宏,以便可以插入以下格式的代码: 因此,有一个带有清单编号的标题,从文档左侧开始。它位于两行之间。接下来是源代码,并且仅在代码清单开始之后。到目前为止,我有类似以下内容:
\newcommand{\insertCode}[4]{%
Źródło: Na podstawie \cite{#4}
\lstinputlisting[language=#2,caption={#3},label=#1]{#1}
}
我像这样运行它:
\insertCode{kody/testjava.jar}
{Java}
{Test java listing}
{oprWlasne}
问题是我的标题不是从左侧开始,而是从中间开始,并且源位于列表标题上方,而不是在标题和代码之间:
我的列表配置如下:
% kolory
\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}
\lstset{ %
backgroundcolor=\color{white}, % choose the background color
basicstyle=\footnotesize, % size of fonts used for the code
breaklines=true, % automatic line breaking only at whitespace
captionpos=t, % sets the caption-position to top
commentstyle=\color{mygreen}, % comment style
escapeinside={\%*}{*)}, % if you want to add LaTeX within your code
keywordstyle=\color{blue}, % keyword style
stringstyle=\color{mymauve}, % string literal style
numbers=left, % line numbers on
}
有没有办法在标题和代码本身之间插入引用?如何让标题从页面左侧开始而不是中间开始,并将“列表”的名称更改为自定义名称?我将不胜感激所有帮助。
编辑:在这里我添加MWE:
% Klasa:
\documentclass[12pt]{mwart}
% Kodowanie:
\usepackage[utf8]{inputenc}
% kody
\usepackage{lipsum}
\usepackage{listings}
% kolory
\usepackage{color}
\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}
\lstset{ %
backgroundcolor=\color{white}, % choose the background color
basicstyle=\ttfamily\footnotesize, % size of fonts used for the code
breaklines=true, % automatic line breaking only at whitespace
captionpos=t, % sets the caption-position to top
commentstyle=\color{mygreen}, % comment style
escapeinside={\%*}{*)}, % if you want to add LaTeX within your code
keywordstyle=\color{blue}, % keyword style
stringstyle=\color{mymauve}, % string literal style
numbers=left, % line numbers on
frame=/lines, % frame box config
}
% Numerowanie obiektow wedlug rozdzialow
\usepackage{chngcntr}
\AtBeginDocument{\counterwithin{lstlisting}{section}}
\counterwithin{figure}{section}
\counterwithin{table}{section}
\newcommand{\insertCode}[4]{%
\lstinputlisting[language=#2,caption={#3},label=#1]{#1}
Źródło: Na podstawie \cite{#4} \\
}
% START:
\begin{document}
\insertCode{test.java}
{Java}
{test java code}
{somerefference}
\end{document}
我不知道如何使用示例代码,因此我test.java
也添加了代码文件:
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
for (int i = 0; i < 100; ++i) {
System.out.println(i);
}
}
}
答案1
我认为您必须自己绘制标题。下面的代码尝试执行此操作,但请注意,这不支持浮动列表。
\documentclass[10pt]{mwart}
\usepackage{booktabs}
\usepackage{listings}
\usepackage{color}
\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}
\lstset{
backgroundcolor=\color{white}, % choose the background color
basicstyle=\ttfamily\footnotesize, % size of fonts used for the code
breaklines=true, % automatic line breaking only at whitespace
commentstyle=\color{mygreen}, % comment style
escapeinside={\%*}{*)}, % if you want to add LaTeX within your code
keywordstyle=\color{blue}, % keyword style
stringstyle=\color{mymauve}, % string literal style
numbers=left, % line numbers on
aboveskip=0pt, % no skip above
belowskip=\smallskipamount, % small skip below
lineskip=1ex, % extra space between lines
}
\renewcommand*\lstlistingname{Kod \'zr\`od\l owy}
\renewcommand*\lstlistlistingname{Kody \'zr\'od\l owe}
\usepackage{chngcntr}
\AtBeginDocument{\counterwithin{lstlisting}{section}}
\counterwithin{figure}{section}
\counterwithin{table}{section}
\newcommand{\insertCode}[4]{%
\par
\begingroup
\normalfont
\normalsize
\parindent=0pt
\parskip=0pt
\vskip\abovetopsep
\hrule height\heavyrulewidth
\vskip\belowrulesep
\addtocounter{lstlisting}{1}%
\textbf{\lstlistingname~\thelstlisting} \strut#3\strut\par
\addtocounter{lstlisting}{-1}%
\vskip\aboverulesep
\hrule height\lightrulewidth
\vskip\belowrulesep
\strut \'Zr\'od\l o: Na podstawie~\cite{#4}\par
\medskip
\lstinputlisting[language=#2,caption={[#3]},label=#1]{#1}%
\vskip\aboverulesep
\hrule height\heavyrulewidth
\vskip\belowrulesep
\endgroup
}
% START:
\begin{document}
\lstlistoflistings
\section{First section}
\section{Section section}
\insertCode{test.java}
{Java}
{test java code}
{somerefference}
\end{document}
需要注意一些事项。
- 尽管
\insertcode
宏本身会排版标题,但它也会将其作为短标题名称传递给\lstinputlisting
。这会导致它在 中显示适当的标题房源列表。 - 在水平规则方面,我与您显示的图像略有不同。我使用了
booktabs
包中的一些宏/尺寸来生成我认为看起来更好的规则。特别是,顶部和底部规则略粗。三个\hrule
s 及其相应的\vskips
上下对应booktabs
'\toprule
、\midrule
和\bottomrule
。如果您不喜欢它们的外观,可以轻松更改。当然,如果您将其用于booktabs
表格(您应该这样做),这将提供漂亮的统一外观。 - 计数器产生的数字遵循您设置的格式,即
\counterwithin{lstlisting}{section}
。由于计数器\lstinputlisting
本身会增加lstlisting
,因此此代码会在排版标题之前手动增加计数器,然后立即减少计数器。 - 您的示例图像没有颜色或任何特殊格式,但您的 MWE 包含设置这些的代码。我保留了您的代码。
- 每行之间似乎有一些额外的空格。我猜测了一下这个值应该是什么(例如 1)。其他值(包括没有)可能更适合
lineskip
。