zr-tex8r / BXjscls

LaTeX jsclasses document classes adapted to any engines
BSD 2-Clause "Simplified" License
52 stars 8 forks source link

\texttt{}があると、強制的にローマン体フォントがComputer Modernに変わり、サイズも極端に小さくなる #13

Closed CLRafaelR closed 4 years ago

CLRafaelR commented 4 years ago

@zr-tex8r さん、@kmaed さん

Version 2.2のBXjsclsに収められているbxjsarticleクラスを使い、pandocを経由してPDF作成を行っております。下記のようなtexファイルをコンパイルしているのですが、本文中に\texttt{}があると、それ以後のローマン体のフォントが強制的にComputer Modernに変わり、ローマン体のフォントサイズも極めて小さくなってしまいます。articleクラスなど他のdocumentclassでは発生しない挙動ですので、おそらくbxjsarticleに原因があるのではないかと思い、こちらにご連絡いたしました。改善のために、何か私の方で可能な設定などございましたら、ご教示いただけないでしょうか。何卒よろしくお願い申し上げます。

texファイル例

% Options for packages loaded elsewhere
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
\PassOptionsToPackage{space}{xeCJK}
%
\documentclass[
  pandoc]{bxjsarticle}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage{textcomp} % provide euro and other symbols
\else % if luatex or xetex
  \usepackage{unicode-math}
  \defaultfontfeatures{Scale=MatchLowercase}
  \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
  \setmainfont[]{Libertinus Serif}
  \ifxetex
    \usepackage{xeCJK}
    \setCJKmainfont[]{SourceHanSerifJP-Light.otf}
  \fi
  \ifluatex
    \usepackage[]{luatexja-fontspec}
    \setmainjfont[]{SourceHanSerifJP-Light.otf}
  \fi
\fi
% Use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\IfFileExists{microtype.sty}{% use microtype if available
  \usepackage[]{microtype}
  \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\makeatletter
\@ifundefined{KOMAClassName}{% if non-KOMA class
  \IfFileExists{parskip.sty}{%
    \usepackage{parskip}
  }{% else
    \setlength{\parindent}{0pt}
    \setlength{\parskip}{6pt plus 2pt minus 1pt}}
}{% if KOMA class
  \KOMAoptions{parskip=half}}
\makeatother
\usepackage{xcolor}
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
\hypersetup{
  pdftitle={Untitled},
  hidelinks,
  pdfcreator={LaTeX via pandoc}}
\urlstyle{same} % disable monospaced font for URLs
\usepackage{longtable,booktabs}
% Correct order of tables after \paragraph or \subparagraph
\usepackage{etoolbox}
\makeatletter
\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{}
\makeatother
% Allow footnotes in longtable head/foot
\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}}
\makesavenoteenv{longtable}
\usepackage{graphicx}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\makeatother
% Scale images if necessary, so that they will not overflow the page
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]{}
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
% Set default figure placement to htbp
\makeatletter
\def\fps@figure{htbp}
\makeatother
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{5}
\ifluatex
  \usepackage{selnolig}  % disable illegal ligatures
\fi

\title{Untitled}
\author{}
\date{\vspace{-2.5em}2020/9/12}

\begin{document}
\maketitle

{
\setcounter{tocdepth}{2}
\tableofcontents
}

% Comment out the following line, if you want to check whether the malfunction caused by \texttt environ. disappears.
\texttt{a} changes the font and font size of non-CJK rm characters.

\hypertarget{r-markdown}{%
\subsection{R Markdown}\label{r-markdown}}

This is an R Markdown document.
Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents.
For more details on using R Markdown see \url{http://rmarkdown.rstudio.com}.

When you click the \textbf{Knit} button a document will be generated that includes both content
as well as the output of any embedded R code chunks within the document.

\end{document}

\textttがあるtexファイルのコンパイル結果

image

\textttがないtexファイルのコンパイル結果

\textttがないtexファイルのコンパイル結果

kmaed commented 4 years ago

pandoc オプションをつけるだけで再現します(pdflatex は問題ないですが,lualatex, xelatex はだめ).

\documentclass[pandoc]{bxjsarticle}
\begin{document}
\texttt{a} changes the font and font size of non-CJK rm characters.
\end{document}

\bxjstextttの定義のあたりに何かあるのだろうとは推測しますが,それ以上のことは私にはよくわかりません.

CLRafaelR commented 4 years ago

@kmaed さん

定義箇所のご教示ありがとうございます。『BXjscls パッケージ(BXJS 文書クラス集)ソースコード説明書』の159ページによると、「\textttの両端に欧文ゴーストが入るように」なったとありますが、これが原因でしょうか。

kmaed commented 4 years ago

もう少し見てみましたが,bxghost.sty から推測するに

\def\bxjs@pan@eghost{\bxjs@eghost@f\bxjs@eghost@c}

\def\bxjs@pan@eghost{\bgroup\bxjs@eghost@f\bxjs@eghost@c\egroup}

であるべき??

CLRafaelR commented 4 years ago

@kmaed さん

ご指摘の通り、\def\bxjs@pan@eghost{\bxjs@eghost@f\bxjs@eghost@c}をコメントアウトし、当該箇所に\def\bxjs@pan@eghost{\bgroup\bxjs@eghost@f\bxjs@eghost@c\egroup}を入れたところ、望ましい形のPDFを生成することができました。本当にありがとうございました。

zr-tex8r commented 4 years ago

バグを修正したv2.2aをリリースしました。

ご指摘ありがとうございました。

CLRafaelR commented 4 years ago

修正版の公開ありがとうございました。アップデート後に作業したところ、望ましい形のPDFファイルを得ることができました。