我已经定义了自己的语言,其语法与 Pascal 非常接近。例如,我想输入以下程序。许多人使用软件包algorithmicx
或algorithm2e
打印程序,但似乎我们必须使用其语法的特定关键字,如procedure
, end while
。
我只想在需要的时候缩进空格,并在需要的时候加粗一些单词(抱歉,我不能大胆的字母如下图所示)。我必须
texttt
为每一行使用 吗?此外,使用verbatim
,我无法大胆的字...
此外,由于程序不大,我需要将其放在页面左侧,并在右侧留出一些解释文本的空间。所以我想我需要将它们放在一起,然后使用multicols
。
有人可以帮忙吗?
program test some text here
var
i : integer; ...
b : boolean;
begin
i := 1; ...
b := true;
while i < 15 do
i := i + 1;
b := not b some text here
od
end
编辑1:按照@Werner 的tabbing
解决方案,我将代码做成了一个小页面:
\begin{minipage}[t]{0.48\linewidth}%
\begin{tabbing}
Werner's solution
\end{tabbing}
\end{minipage}\hfill
\begin{minipage}[t]{0.48\linewidth}
a paragraph
\end{minipage}
实际上,正如代码所示,我希望文本成为代码右侧另一个独立的小页面。然后我有两个问题:
做
0.48\linewidth
而不是 是否合理0.5\linewidth
?0.48\linewidth
是一种常规选择?是否可以在代码周围制作一个框架,并使用
\caption
其\label
作为参考(我更喜欢图形)?
答案1
algorithmicx
algorithmicx
你可以在使用该包时定义自己的关键字。3.1.10 更改命令名称的包装文档\algnewcommand
讨论了/的用法\algrenewcommand
,您可以使用它来创建新命令/更改现有格式。以下两张图片直接取自软件包文档:
algorithm2e
algorithm2e
您还可以使用该包定义自己的关键字。10 定义自己的语言关键字的包装文档详细讨论了这一点。具体来说,你可以使用如下命令
\SetKwInput
以及\SetKwOutput
算法输入/输出定义\SetKw
为了关键词定义\SetKwBlock
为了堵塞定义\SetKwFunction
为了功能/程序定义\SetKwComment
为了评论定义\SetKwIf
为了if 语句定义\SetKwSwitch
为了多条件选择定义\SetKwFor
为了for 循环定义\SetKwRepeat
为了重复/尽管定义
listings
然后是listings
允许进行同样多修改的包。关键字定义通过样式和/或语言指定。阅读非常详细的包装文档了解更多信息。
tabbing
以上内容使用了包中的一些丰富的编程指令,可能需要大量阅读。在特殊情况下,如果您“只想编写几行代码并以自己的方式格式化内容”,则可以使用环境tabbing
。这要么是由 LaTeX 提供(默认)或tabbing
包裹。 这tabbing
包装文档给出了一些使用它的动力,但这取决于你。
典型的tabbing
环境类似于
\begin{tabbing}
<space> \= <space> \= <space> \= <space> \= \kill
no indent \> \> more text \\
\> one indent \> \\
....
....
\end{tabbing}
制表符停止位由 指示,并\=
使用 跳转到\>
。最好在第一行留出空白(通过\hspace{<space>}
、\quad
或),因为提供了第一行(而不是)以防止排版第一行。这可确保实际的制表符排版从第一行开始。\qquad
\phantom{<stuff>}
\kill
\\[-\baselineskip]
这样做的好处是,您可以按照自己想要的方式格式化代码,而无需任何特殊包“干扰”您的风格或其他偏好。根据您的示例,以下是我要做的事情(不使用\multicol
):
\documentclass{article}
\usepackage{calc}% For length calculations
\begin{document}
\newlength{\mylen}%
\setlength{\mylen}{\linewidth-2\fboxsep-2\fboxrule}%
\fbox{\begin{minipage}{\mylen}
\begin{tabbing}
\quad \= \quad \= \quad \= \hspace{5cm} \= \kill
\textbf{program} test \> \> \> \> \texttt{some text here} \\
\textbf{var} \\
\> $i$ : \textbf{integer}; \> \> \> \texttt{...} \\
\> $b$ : \textbf{boolean}; \\
\textbf{begin} \\
\> $i:=1$; \> \> \> \texttt{...} \\
\> $b:=\texttt{true}$; \\
\> \textbf{while} $i<15$ \textbf{do} \\
\> \> $i:=i+1$; \\
\> \> $b:=\textbf{not}\ b$; \> \> \texttt{some text here} \\
\> \textbf{od} \\
\textbf{end}
\end{tabbing}
\end{minipage}}
\end{document}
verbatim
该verbatim
环境是一个段落制作环境,它使 LaTeX 能够准确打印您输入的内容。它将 LaTeX 变成一台打字机,回车符和空格具有与打字机相同的效果。输出看起来与输入文件中的样子完全一样。典型的排版verbatim
类似于
\begin{verbatim}
<stuff>
\end{verbatim}
或者
\begin{verbatim*}
<stuff>
\end{verbatim*}
verbatim
和之间的区别在于verbatim*
后者将空格打印为“可视”空格,即短而粗的“u”。verbatim
使用以下方法也可以进行内联
\verb char literal_text char
或者
\verb*char literal_text char
\verb
其含义与之前无星号和有星号版本类似。或\verb*
和之间不得有空格char
(此处显示空格只是为了清楚起见)。 此处char
表示\verb
分隔符,应在开头和结尾处匹配。char
可以是除空格(或表格*
中的\verb
)之外的任何内容。
答案2
该minted
包使用 Pygments Python 模块作为后端,在 LaTeX 中生成高亮(甚至彩色)的代码。
你可以通过编写新的 Pygment 模块来获得你自己的语言的支持。请参阅这篇博文例如。
要在代码右侧写注释,您可能需要使用minipage
。
答案3
我最近发现algpseudocodex
包裹很好地结合了 的特点algorithmicx
和 的精益布局algorithm2e
。