OSDN Git Service

lltjp-listings.sty: added 'doubleletterspace' key.
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Thu, 8 Jan 2015 12:23:52 +0000 (21:23 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Thu, 8 Jan 2015 12:23:52 +0000 (21:23 +0900)
src/patches/lltjp-listings.sty
test/test13-listings.pdf
test/test13-listings.tex

index d0b57e4..d14a488 100644 (file)
@@ -7,8 +7,12 @@
 \RequirePackage{listings,luatexbase-cctb}
 
 %%%%%%%%%%%%%%%% Japanese support
+%% whether letter-space in a fixed mode box is doubled or not
+\newif\if@ltj@lst@double
+\lst@Key{doubleletterspace}f[t]{\lstKV@SetIf{#1}\if@ltj@lst@double}
+
 %% IVS support
-\newif\if@ltj@lst@vsraw \@ltj@lst@vsrawfalse
+\newif\if@ltj@lst@vsraw
 \def\ltj@lst@vscmd{}
 \lst@Key{vsraw}f[t]{\lstKV@SetIf{#1}\if@ltj@lst@vsraw}
 \lst@Key{vscmd}\relax{\def\ltj@lst@vscmd{#1}}
   local cat_str = luatexbase.catcodetables['string']
   local cat_lp  = luatexbase.catcodetables['latex-package']
   local ubyte = unicode.utf8.byte
+  local spccmd = string.char(0x5C) .. 'ltj@lst@hss@normal'
   luatexja.lst = {}
   function luatexja.lst.althss(t)
     t = ubyte(t)
     if not (t>=0xE0100 and t<0xE01F0) then
-      tex.sprint(cat_lp, string.char(0x5C) .. 'lst@hss')
+      tex.sprint(cat_lp, spccmd)
     end
   end
 }
-\gdef\ltj@lst@hss@ivs#1{%
+\def\ltj@lst@hss@ivs#1{%
   \directlua{luatexja.lst.althss('\luatexluaescapestring{#1}')}#1%
 }
+\def\ltj@lst@hss@double{\lst@hss\lst@hss}
 
 % lowest level
 \newif\if@ltj@lst@kanji
@@ -64,7 +70,7 @@
     \lst@Output
   \else
     \if@ltj@lst@kanji\else\lst@OutputOther\fi\lst@lettertrue
-  \fi}
+  \fi\@ltj@lst@kanjitrue}
 
 \def\ltj@lst@setopenflag{%
   \lst@ifletter
       end
       return ret
     end, 'ltj.listings_unicode', 1)}%
+  \if@ltj@lst@double
+    \let\ltj@lst@hss@normal=\ltj@lst@hss@double
+  \else
+    \let\ltj@lst@hss@normal=\lst@hss
+  \fi
   \if@ltj@lst@vsraw
     \let\ltj@lst@hss=\ltj@lst@hss@ivs
   \else
-    \let\ltj@lst@hss=\lst@hss
+    \let\ltj@lst@hss=\ltj@lst@hss@normal
   \fi
 }
 \lst@AddToHook{ExitVars}{%
index d8e3c02..0f0243b 100644 (file)
Binary files a/test/test13-listings.pdf and b/test/test13-listings.pdf differ
index e9cad71..c6b3c34 100644 (file)
@@ -95,15 +95,20 @@ the first line of the listing is not rendered.
 \textbf{Ticket \#29311}
 
 \begin{env}{\relax}
-長い長い長い長い長い長い長い長い長い長い長い長い#い長い
-長い長い長い長い長い長い長い長い長い長い長い長aaaa#::い長い
-長い長い長い長い長い長い長い長い長い長い長い長い,長い長い
-長い長い長い長い長い長い長い長い長い長い長い長aa,::い長い
-長い長い長い長い長い長い長い長い長い長い長い長,,::い長い
+長い長い長い長い長い長い長い長い長い長い長い長aaa長い::い長い
+長い長い長い長い長い長い長い長い長い長い長い長aaaa長い::い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長い,長い長い
+あ長い長い長い長い長い長い長い長い長い長い長い長い長い,長い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長a,::い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長aa,::い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長aaa,::い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長aaaa,::い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長い,,::い長い
 長い長い長い長い長い長い長い長い長い長い長い長(い長い
 長い長い長い長い長い長い長い長い長い長い長いaa(い長い
 長い長い長い長い長い長い長い長い長い長い長い長(aa長い
 長い長い長い長い長い長い長い長い長い長い長い長い)(長い
+あ長い長い長い長い長い長い長い長い長い長い長い長い)(長い
 \end{env}
 
 \newpage
@@ -146,6 +151,8 @@ IVS対応2: \texttt{vsraw=true}
 1葛󠄀城,葛󠄁飾アイウ
 \end{LTXexample}
 
+\newpage
+
 下の行において,最初の「1」の場所がずれてしまうのは半ば仕方がないとも言える.
 1行目では,「1234567890」が前後・文字間に計11箇所の等量の空白を入れて10全角の領域に
 出力されているのに対し,2,~3行目では「1」が全角幅に左右中央で出力されているからである.
@@ -153,8 +160,19 @@ IVS対応2: \texttt{vsraw=true}
 1234567890
 1あ,23
 1あ2,3
+1234567890
+\end{lstlisting}
+
+\texttt{doubleletterspace}オプションを指定すると,出力単位中の文字と文字の間隔を2倍にするため,
+下の例の「1」のように,各文字の垂直位置が揃いやすくなる.
+\begin{lstlisting}[escapechar=\%,doubleletterspace, basewidth=1\zw, basicstyle=\tt]
+1234567890
+1あ,23
+1あ2,3
+1234567890
 \end{lstlisting}
 
+
 \newpage
 \textbf{Ticket \#34786}
 \ltjsetparameter{autoxspacing=false}