code内の空白幅が変
Closed this issue · 11 comments
@kdmsnr
ありがとうございます!今回の件はこれでばっちり解決しました。
※回避策があるので実務的には困らないようになりました。
ただ、codeタグの中で空白幅が異なるのはバグと思いますので、長期的に直れば嬉しいなと思います。
ただ、codeタグの中で空白幅が異なるのはバグと思いますので、長期的に直れば嬉しいなと思います。
Re:VIEWからはlatexにそのまま内容を渡しているだけですし、素のlatexでも再現しますので、Re:VIEWのバグではないんですよね。
どのようにワークアラウンドするのがベストかは @kmuto さんに聞きたいです。
@<code>{...}
の出力結果の前後に \frenchspacing
と \nonfrenchspacing
を導入する、というのはアリかも?
@kdmsnr
現状のRe:VIEW標準な\reviewcode{...}
(@<code>{...}
)ならば、ひとまず、
\DeclareRobustCommand{\reviewcode}[1]{{\frenchspacing\ttfamily\reviewbreakall{#1}}}
%% \nonfrenchspacingは不要ですね。\bgroup\frenchspacing...\egroupなので。
としておけば、どうでしょうか。
\begin{document}
\begin{itemize}
\item \texttt{a b: c; d\textasciitilde{} e. f, g}
\item \texttt{01234567890123456789}
\item \reviewcode{a b: c; d\textasciitilde{} e. f, g}
\item \reviewcode{01234567890123456789}
\item \texttt{a b: c; d\textasciitilde{} e. f, g}
\item \texttt{01234567890123456789}
\end{itemize}
\end{document}
munepei さんの解決策はかなり良い妥当な感じに思えます!
Re:VIEWからはlatexにそのまま内容を渡しているだけですし、素のlatexでも再現しますので、Re:VIEWのバグではないんですよね。
これについてですが、やはりRe:VIEWのバグと言えると思っています。
なぜなら、あくまでも@<code>{}
の仕様は「囲まれた文字列を等幅フォントで出力する」であって、「latexにそのまま渡す」ではないはずです。
latexにそのまま渡しているのは、単に現状の実装がそうなっているというだけです。
latexは文中空白と文末空白で幅を変えることが仕様なわけですから、そういう仕様のソフトウェアをバックエンドとして利用する以上、@<code>{}
の仕様を満たすために何らかの工夫をするのはRe:VIEWの責任範囲なのではないかと思います。
ひとまず、PR #1907 のとおり、現状のRe:VIEW標準の\reviewcode
の類のコマンドも同様に変更しておけばよいと思います。
これについてですが、やはりRe:VIEWのバグと言えると思っています。
現状のRe:VIEW標準の\reviewcode{...}
(@<code>{...}
)は、ある種の\texttt{...}
の通常の入力された文字列としてLaTeXに組版してもらっています(\texttt
は\verb/verbatim
ではない)。
Note
lmtt10の標準なTeX font metric(T1 encodingなら、rm-lmtt10
)がそうなっているからですね。
「. (period+space)」は、「.」のあとにSPACE 0.525+EXTRASPACE 0.525が入るので、空白2つ分となります。
逆に、(必要であれば別名にして)EXTRASPACE 0.0としたfont metricを作ると、「. (period+space)」は空白1つ分となります。
反応遅くなりました、利用用途を考えると等幅キープしてほしいというほうが自然だと思うので、munepiさんパッチを採用させていただく予定です(いつもありがとうございます!)。
@kmuto 本件に対する直接的な PR #1907 を適用する前に、 #1907 (comment) に対する別のパッチ(間接的にPDF栞に影響する)も同梱します。