Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

review-base.sty (\reviewtt, \reviewcode, \reviewtti, \reviewttb): inserted \frenchspacing inside #1907

Merged
merged 3 commits into from
Feb 18, 2024

Conversation

munepi
Copy link
Contributor

@munepi munepi commented Feb 13, 2024

本PRの変更内容は、3点です。

  1. インラインコード@<code>類における code内の空白幅が変 #1906 の(とりあえずの)対処
    * 詳細は、Noteのとおり。
  2. インラインコード@<code>{コード}類がPDF栞に入ったときに、コード(単なる文字列)が入るように対応
    * 1に間接的に影響する。
  3. インライン画像@<icon>がPDF栞に入ったときに、何も入らないように対応

ref. #1906

latexビルダに対するインラインなコード要素(等幅) @<code>, @<tt>, @<tti>, @<ttb> において、「. (period+space)」直後の“余計な”(に見える)空白アキをひとまず除きます。

現状の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つ分となります。

…viewcode, \reviewtti, \reviewttb): inserted \frenchspacing inside [issue kmuto#1906]
@takahashim
Copy link
Collaborator

PRありがとうございます!
この修正ですが、これを適用したものを動かした場合、私の手元の環境でも、

=== 見出し内 @<tt>{TT}

みたいなソースに対してreview-pdfmakerを実行すると、

./ch02.tex:399: Undefined control sequence.
\frenchspacing ->\sfcode `\.1006\sfcode `\?
                                           1005\sfcode `\!1004\sfcode `\:100...
l.399 \subsection{見出し内 \reviewtt{TT}}

みたいなエラーが出ることがあるようでした。これはLaTeX側の問題なんでしょうか?

@munepi
Copy link
Contributor Author

munepi commented Feb 15, 2024

@takahashim
少なくとも、本PRを適用するしないにかかわらず、

  • TeX Live 2022 frozen
    • jlreq 2023/03/05 jlreq
    • hyperref.sty 2023-02-07 v7.00v

の元で、\subsection{見出し内 \reviewcode{TT}}(のPDF栞の目次に渡る文字列(おそらく))が通らないですね。
ちなみに、同TeX Live 2022 frozenに同梱のjsbookでは、なぜか問題なく通りました(しかし、これは対処したほうが良いです)。

\documentclass[dvipdfmx]{jlreq}\listfiles
\usepackage{hyperref}
% \usepackage{pxjahyper}
\makeatletter
\DeclareRobustCommand{\reviewcode}[1]{{% \frenchspacing
\ttfamily\reviewbreakall{#1}}}

\newif\ifreview@ba@break
\def\review@ba@end{\review@ba@end@}
\DeclareRobustCommand{\reviewbreakall}[1]{%
  \begingroup
    \review@ba@breakfalse
    \review@break@all@a#1\review@ba@end
  \endgroup
}
\def\review@break@all@a{%
  \futurelet\review@ba@tok\review@break@all@b
}
\def\review@break@all@b{%
  \ifx\review@ba@tok\review@ba@end
    \let\next\@gobble
  \else\ifx\review@ba@tok\@sptoken
    \let\next\review@break@all@c
  \else\ifx\review@ba@tok~%
    \let\next\review@break@all@d
  \else\ifx\review@ba@tok\bgroup
    \let\next\review@break@all@e
  \else
    \let\next\review@break@all@f
  \fi\fi\fi\fi
  \next
}
\expandafter\def\expandafter\review@break@all@c\space{%
  \space
  \review@ba@breakfalse
  \review@break@all@a
}
\def\review@break@all@d#1{%
  \review@break@all@f{\mbox{\space}}%
}
\def\review@break@all@e#1{%
  \review@break@all@f{{#1}}%
}
\def\review@break@all@f#1{%
  \ifreview@ba@break
    \hskip0pt plus 0.02em\relax
  \fi
  #1%
  \review@ba@breaktrue
  \review@break@all@a
}
\makeatother
\begin{document}
\subsection{見出し内 \reviewcode{TT}}
\end{document}

そこで、

...
\def\pdfstringdefPreHook{%
  %%これ \let\reviewcode\texttt でも、\textttの処理がhyperrefであらかじめ決まっているので問題ないですが、
  \def\reviewcode##1{##1}%PDF栞中の文字列なんで、これで十分です。
}
\usepackage{hyperref}
...

という逃げをいれると、一応、TL22 frozen + jlreq でも通りました。

@takahashim
Copy link
Collaborator

むむむ、そうなんですね…。

私の環境では、Re:VIEW 5.8.0のtexdocumentclass: ["review-jlreq", "media=ebook,paper=a5"]で、

= test

test.

== 見出し内 @<tt>{TT}

more tests.

みたいなコードをビルドすると、以下のようにビルドできて栞も有効になっているようでした。

review-tt

uplatexは以下のものです。

$ uplatex --version
e-upTeX 3.141592653-p4.0.0-u1.28-220214-2.6 (utf8.uptex) (TeX Live 2022)
kpathsea version 6.3.4
ptexenc version 1.4.0
Copyright 2022 D.E. Knuth.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the e-upTeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the e-upTeX source.
Primary author of e-upTeX: Peter Breitenlohner.

@munepi
Copy link
Contributor Author

munepi commented Feb 17, 2024

むむむ、そうなんですね…。

私の環境では、Re:VIEW 5.8.0のtexdocumentclass: ["review-jlreq", "media=ebook,paper=a5"]で、

それがですね、現状のreview-jlreq+reviewmacroとjlreq+hyperref単体との差があって、謎なんですよ :(
(tracemacroで見ないと完全に分からん気がします…。)

しかしながら、hyperrefに予約されていない\reviewcodeの類がPDF栞に入ることに起因するはずなので、少なくとも\reviewcodeの類をpdfstring対応しとく必要はあります。

…reHook): added \reviewtt, \reviewcode, \reviewtti, \reviewttb, \reviewicon
@munepi
Copy link
Contributor Author

munepi commented Feb 17, 2024

@takahashim All checks have passed となりました。

@munepi
Copy link
Contributor Author

munepi commented Feb 17, 2024

ついでに、@<icon>{...} (\reviewicon{...}) が各種見出しに入ったときに、同様にPDF栞で困る場合があるはずなので、合わせて対応もしています。

@munepi
Copy link
Contributor Author

munepi commented Feb 17, 2024

@<icon>{...} (\reviewicon{...})に対して、若干修正します。

@kmuto
Copy link
Owner

kmuto commented Feb 18, 2024

@munepi ありがとうございます、現状でfixとして確認進めてよいでしょうか?

@munepi
Copy link
Contributor Author

munepi commented Feb 18, 2024

@kmuto

現状でfixとして確認進めてよいでしょうか?

はい、これで進めてもらってかまいません。
変更内容は、3点です。

  1. インラインコード@<code>類における code内の空白幅が変 #1906 の(とりあえずの)対処
    * 詳細は、Noteのとおり。
  2. インラインコード@<code>{コード}類がPDF栞に入ったときに、コード(単なる文字列)が入るように対応
    * 1に間接的に影響する。
  3. インライン画像@<icon>がPDF栞に入ったときに、何も入らないように対応

@kmuto
Copy link
Owner

kmuto commented Feb 18, 2024

ありがとうございます、3点、いずれもこちらでも動作を確認できました!

@kmuto kmuto merged commit b6e8893 into kmuto:master Feb 18, 2024
17 checks passed
@munepi munepi deleted the 1906_reviewcode_frenchspacing branch February 18, 2024 02:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants