showexpl で日本語が抜ける

showexpl で日本語が抜ける

- 浮亭 夢介 の投稿
返信数: 3
(1)日本語が抜ける
LuaTeX-ja では showexpl を登録すると,正しく日本語が表示されますが,
それ以外の例えば upLaTeX などでは showexpl の他に listings,jlisting
を登録するのが通例のようですが,それでも日本語が抜けてしまいます.
(jlisting.styは新たにdownloadした) ソースファイルは次の通りです.
-------------------------
\documentclass[uplatex]{jsarticle}
\usepackage{showexpl}
\usepackage{listings,jlisting}
\begin{document}
\begin{LTXexample}[frame=none,wide,width=.5\linewidth]
\begin{enumerate}
\item ああああああ
\item いいいいいい
\item うううううう
\end{enumerate}
\end{LTXexample}
\end{document}
-------------------------
ptex2pdf -l -u foo とし,結果をみると日本語が抜けていました.
ご指摘頂ければありがたいです.

(追)
\item aあああああ
\item bいいいいい
\item cううううう
のように先頭に半角英数を添えると,半角英数を含めて日本語が表示されます.

(2)\ref{}が効かない
続いて,\label / \ref を使ってみました.
-------------------------
\begin{document}
\begin{LTXexample}[frame=none,wide,width=.5\linewidth]
\begin{enumerate}
\item aああああああ
\item bいいいいいい \label{xxx}
\item cうううううう
\end{enumerate}
\end{LTXexample}
\ref{xxx}....
\end{document}
-------------------------
実行すると
LaTeX Warning: There were undefined references.

\ref するにはどのように対処すればよいでしょうか.
これは LuaTeX-ja,upLaTeXなど区別なく生じます
浮亭 夢介 への返信

Re: showexpl で日本語が抜ける

- 浮亭 夢介 の投稿
(2)\ref について
Stack Exchange で対応策が見つかりました.
http://tex.stackexchange.com/questions/6337/showexpl-ltxexample-and-references-inside-enumerate

LTXexample環境内で\label,\ref を使うにはそれなりの手当が必要なようです.

\begin{document}
\let\orilabel\label %-----------追加
\begin{LTXexample}[frame=none,preset=\let\label\orilabel] %preset= ---------追加
\begin{enumerate}
\item aあああああ
\item bいいいいい \label{xxx}
\item cううううう
\end{enumerate}
\ref{xxx}...
\end{LTXexample}
\end{document}
浮亭 夢介 への返信

Re: showexpl で日本語が抜ける

- 前田 一貴 の投稿
(1) についてですが,showexpl は一度 \jobname.tmp に LTXexample 内のコードを書き出すという
処理をするのですが,これが和文文字の塊についてはうまくいかないようです.
実際に \jobname.tmp を見ると,

\begin{enumerate}
\item
\item
\item
\end{enumerate}

と,なっているのがわかると思います.

原因は,lstmisc.sty 内で定義されている \lst@WFBegin というのが書き出し処理を
始めるマクロなのですが,この中で \lst@ProcessSpace へ変更を加えていて,
これが jlisting の \lst@ProcessSpace の再定義と衝突するためのようです.
jlisting ではオリジナルの \lst@ProcessSpace を \lst@@ProcessSpace へ退避して利用しているので,
こちらを変更するようにパッチを当てるとうまくいきそうです.

\documentclass[uplatex]{jsarticle}
\usepackage{showexpl}
\usepackage{listings,jlisting}

\usepackage{etoolbox}
\makeatletter
\catcode`\^^I=11
\patchcmd{\lst@WFBegin}{\lst@ProcessSpace}{\lst@@ProcessSpace}{}{}
\catcode`\^^I=10
\makeatother

\begin{document}
\begin{LTXexample}[frame=none,wide,width=.5\linewidth]
\begin{enumerate}
\item ああああああ
\item いいいいいい
\item うううううう
\end{enumerate}
\end{LTXexample}
\end{document}