\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
\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}{%
\textbf{Ticket \#29311}
\begin{env}{\relax}
-長い長い長い長い長い長い長い長い長い長い長い長い#い長い
-長い長い長い長い長い長い長い長い長い長い長い長aaaa#::い長い
-長い長い長い長い長い長い長い長い長い長い長い長い,長い長い
-長い長い長い長い長い長い長い長い長い長い長い長aa,::い長い
-長い長い長い長い長い長い長い長い長い長い長い長,,::い長い
+長い長い長い長い長い長い長い長い長い長い長い長aaa長い::い長い
+長い長い長い長い長い長い長い長い長い長い長い長aaaa長い::い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長い,長い長い
+あ長い長い長い長い長い長い長い長い長い長い長い長い長い,長い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長a,::い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長aa,::い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長aaa,::い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長aaaa,::い長い
+長い長い長い長い長い長い長い長い長い長い長い長い長い,,::い長い
長い長い長い長い長い長い長い長い長い長い長い長(い長い
長い長い長い長い長い長い長い長い長い長い長いaa(い長い
長い長い長い長い長い長い長い長い長い長い長い長(aa長い
長い長い長い長い長い長い長い長い長い長い長い長い)(長い
+あ長い長い長い長い長い長い長い長い長い長い長い長い)(長い
\end{env}
\newpage
1葛󠄀城,葛󠄁飾アイウ
\end{LTXexample}
+\newpage
+
下の行において,最初の「1」の場所がずれてしまうのは半ば仕方がないとも言える.
1行目では,「1234567890」が前後・文字間に計11箇所の等量の空白を入れて10全角の領域に
出力されているのに対し,2,~3行目では「1」が全角幅に左右中央で出力されているからである.
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}