listingsとfancyvrb。

\(\rm\LaTeX\)でソースコードや設定を記述するときに、listings パッケージ + jlisting パッケージを使って貼り付けていましたが、"//"コメントを使うとイタリック体になってしまって都合が悪いことに気づきました。まあ気にしない人は気にしない程度のことかも知れませんが。

追記: listingsのドキュメントを見ていたら、commentstyle という key のデフォルトが itshape になっているのを見つけました。
lstset の中で書体を指定すればイタリック体以外も使えます。


実は description 環境を使ったときに、段落間をもうすこし開けたい、と調べているときに fancyvrb パッケージを発見して、これを見てみたらすごくいい感じだったのでメモです。

fancyvrbパッケージでは、通常の verbatim 環境を拡張して、文字の色付け、枠囲い、フォントの指定、空白文字の表示などなど、いやそれ verbatim じゃないだろうと思ってしまうような指定がいろいろできます。さらには verbatim 内で \fboc{}や \textcolor{}などが使え、なんだそりゃ的にすごいので、verbatim なんだけどこの行だけ特に強調したい、みたいな場合にはすごく助かります。詳細は上記リンク参照。

追記: Verbatim環境で、UTF-8で「対応」の文字が "Invalid code (24540), should be in the range of 0..255." というエラーになりました。up-\(\rm\LaTeX\)なので中身はe-up\(\rm\TeX\)なんですが、日本語で listings+plistings(jlisting) のほうがいいかもしれません。

ちなみに description 環境で \item 内の記述の段落間をもう少し開けたい場合には、enumitem パッケージを使います。enumitem パッケージはリスト系の環境の書式を、topsep、partopsep、parsep、itemsepで調整できます。
\begin{description}[topsep=0pt,partopsep=0pt,parsep=15pt,itemsep=0pt]
    \item [first item]~\\
        1行目。

        2行目。
    \item [second item]~\\
        なんとかかんとか。
\end{description}
みたいな感じで使うと、1行目と2行目の間を15pt分開けてくれます。

それから余談ですが、listings パッケージの日本語対応で jlisting を使うというのはよく見るのですが、plistingというのもあるようです。
よくよく見てみると、jlisting.sty を使うという記述のページでは、jlisting.sty の入手先を SourceForge の My\(\rm\TeX\)part の奥の方から URL 直で指定しているようですが、My\(\rm\TeX\)part の wiki では Listingsのページで plistings を推してるじゃありませんか。
plistings は GitHubの方には、e-\(\rm\TeX\) 拡張必須、と記載がありますが、TeXLive はすでに up\(\rm\LaTeX\)などはe-\(\rm\TeX\)なので、問題ナッシングです。

もうひとつ、listing の lstset で language を指定するときに、サポートしている言語のリストってどこー、とか探してもなかなか見つからないので列挙しておきます。

ABAP (R/2 4.3, R/2 5.0, R/3 3.1, R/3 4.6C, R/3 6.10)、ACM、ACMscript、ACSL、Ada (2005, 83, 95)、Algol (60, 68)、Ant、Assembler (Motorola68k, x86masm)、Awk (gnu, POSIX)、bash、Basic (Visual)、C (ANSI, Handel, Objective, Sharp)、C++ (11, ANSI, GNU, ISO, Visual)、Caml (light, Objective)、CIL、Clean、Cobol (1974, 1985, ibm)、Comal 80、command.com (WinXP)、Comsol、csh、Delphi、Eiffel、Elan、erlang、Euphoria、Fortran (03, 08, 77, 90, 95)、GAP、GCL、Gnuplot、hansl、Haskell、HTML、IDL (empty, CORBA)、inform、Java (empty, AspectJ)、JVMIS、ksh、Lingo、Lisp (empty, Auto)、LLVM Logo、Lua (5.0, 5.1, 5.2, 5.3)、make (empty, gnu)、Mathematica (1.0, 3.0, 5.2)、Matlab、Mercury、MetaPost、Miranda、Mizar、ML、Modula-2、MuPAD、NASTRAN、Oberon-2、OCL (decorative, OMG)、Octave、Oz、Pascal (Borland6, Standard, XSC)、Perl、PHP、PL/I、Plasm、PostScript、POV、Prolog、Promela、PSTricks、Python、R、Reduce、Rexx、RSL、Ruby、S (empty, PLUS)、SAS、Scala、Scilab、sh、SHELXL、Simula (67, CII, DEC, IBM)、SPARQL、SQL、tcl (empty, tk)、TeX (AlLaTeX, common, LaTeX, plain, primitive)、VBScript、Verilog、VHDL (empty, AMS)、VRML (97)、XML、XSLT

自分が使いそうなのだけ色を変えてみました。ふと気づけば Windows PowerShell がないですね。

それから listings のドキュメントを眺めたら、Interface to fancyvrb というのがありました。

The fancyvrb package—fancy verbatims—from Timothy van Zandt provides macros for reading, writing and typesetting verbatim code. It has some remarkable features the listings package doesn’t have. (Some are possible, but you mustfind somebody who will implement them ;-).

fancyvrb=[true|false]
activates or deactivates the interface. If active, verbatim code is read by fancyvrb but typeset by listings, i.e. with emphasized keywords, strings, comments, and so on. Internally we use a very special definition of \FancyVerbFormatLine.
This interface works with Verbatim, BVerbatim and LVerbatim. But you shouldn’t use fancyvrb's defineactive. (As far as I can see it doesn’t matter since it does nothing at all, but for safety ....) If fancyvrb and listings provide similar functionality, you should use fancyvrb's.

listings のオプションで fancyvrb=true すると、verbatim 自体は facyvrb が行うけどタイプセットは listings が行う、と。つまり、fancyvrb の Verbatim 環境の中でキーワードや構文強調などが使えるということのようです。

また、listings でサポートされていない言語を追加する場合には(たぶんいろいろと解説してくれているサイトもあるでしょうが)、
\lstdefinelanguage{rock}
{
  morekeywords={one,two,three,four,five,six,seven,eight,
      nine,ten,eleven,twelve,o,clock,rock,around,the,tonight},
  sensitive=false,
  morecomment=[l]{//},
  morecomment=[s]{/*}{*/},
  morestring=[b]",
}
みたいな形でプリアンブルに追加できるようです。

0 件のコメント:

コメントを投稿

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...