特定のページだけstyを無効化する方法

特定のページだけstyを無効化する方法

- Na Ta の投稿
返信数: 16
いつもお世話になっております。

特定のページだけstyファイルを無効化することは可能でしょうか?
新たなTeXファイルを作れば済むことですが、もしページごとに使うstyファイルを選択できるような方法があれば教えていただけますでしょうか。

よろしくお願いいたします。
Na Ta への返信

Re: 特定のページだけstyを無効化する方法

- 北見 けん の投稿
TeX や LaTeX の動作の仕組みを考えれば、sty ファイルの機能を一時的に無効にするような一般的な方法はなさそうです。
無効にしたい sty ファイルの中身を調べて、それに合わせて工夫すれば、一時的に無効にできる場合もあると思います。
Na Ta への返信

Re: 特定のページだけstyを無効化する方法

- 奥村 晴彦 の投稿
縦書きの本の特定ページだけ横書きにしたいような場合に,ページ全体を占めるfloat(figure環境とか)を使うことはよくありますが,そういう話でしょうか?
奥村 晴彦 への返信

Re: 特定のページだけstyを無効化する方法

- Na Ta の投稿
いま\usepackageでとあるstyを使っていまして、そうすると当然ながら、全ページにその内容が反映されると思うのですが、そのパッケージの仕様のせいか、n乗根やインテグラルの記号を使ったときに妙なスペースが入るので、これらの記号を使う部分だけ、最初に宣言したpackageの使用を無効化し、従来のLaTeXのスタイルを使いたいなと考えました。

さすがにこんなことは不可能ですかね、、、
Na Ta への返信

Re: 特定のページだけstyを無効化する方法

- 奥村 晴彦 の投稿
それは・・・その変なスペースが入るパッケージをデバッグするほうが早そうです。
奥村 晴彦 への返信

Re: 特定のページだけstyを無効化する方法

- Na Ta の投稿
styファイルを自分でいじるということですかね…?

ちょっと挑戦してみます。

ありがとうございました。
Na Ta への返信

Re: 特定のページだけstyを無効化する方法

- 和田 勇 の投稿
横からちょっとアドバイス。概念的なコードなのでテストしていませんが

\usepackage{hoge}
%% \def\XXX{outer block} というものが定義されている

  \begin{document}
\XXX

{ % ブロック内で 別解釈の XXX にしたい
\def\XXX{inner-block}

\XXX % inner-block と評価される
}

\XXX % outer block と評価される

もし複数箇所で利用するなら{ ...} を newenviroment などで定義すれば再利用可能だと思います。
和田 勇 への返信

Re: 特定のページだけstyを無効化する方法

- Na Ta の投稿
なるほど、なんとなくわかった気がしますが、
その場合
AAA.styで定義される \int の代わりに, 一部だけBBB.styで定義される\intを使いたい場合はどう書けばよいでしょうか?

下のように書くとダメでした、、、

\usepackage{AAA}
\begin{document}

$\int x dx$ %AAA.styで定義された\intが出力
{\def\BBB{\int}

$\int x dx$ %BBB.styで定義された\intが出力?
}


Na Ta への返信

Re: 特定のページだけstyを無効化する方法

- 和田 勇 の投稿

texlive の中にある \def\int の定義を見ると短めの定義ですが

texmf-dist/tex/latex-dev/amsmath/amstex.sty
381:\def\int{\DOTSI\intop\ilimits@}

texmf-dist/tex/latex/cmupint/cmupint.sty
59:\def\int{\relax\uprightintop\upilimits@}

があり、でデフォルト amstex で、時々 cmupint なものを使いやいなら、テストしていないけど以下のような感じになるかと思います。

 \usepackage{amstex}

$int x dx$ using amstex

{
    \def\int{\relax\uprightintop\upilimits@}

     $int x dx$ using cmupint.sty
}

$inr x dx$ again using amstex

追伸 使用しているプリアンブル部分と、問題の数式箇所で改善したいところのサンプルソースをアップしていただいた方が解決は早いと思います。

Na Ta への返信

Re: 特定のページだけstyを無効化する方法

- みなも の投稿
ちょっと時間がたっちゃったんで元質問者さんはもう見てないかも知れませんが。。。

\usepackage{BBB}
\let\BBBint=\int% BBB.sty での定義を「保存」
\usepackage{AAA}
%\let\AAAint=\int% AAA.sty での定義を「保存」(不要?)
% この状態では AAA.sty の定義で上書きされている

\begin{document}
$\int x dx$ % AAA.styで定義された\intが出力

{\let\int=\BBBint% BBB.sty の定義を復活

$\int x dx$ % BBB.styで定義された\intが出力

}

$\int x dx$ % 再び AAA.styで定義された\intが出力


で目的は達成できるんではないでしょうか。

ちなみに,定義を差し替えたいマクロが多いときは

\def\changeBBB{%
  \let\int=\BBBint
  \let\sqrt=\BBBsqrt
}

みたいな,一括差し替えマクロを用意すればいいかと。
Na Ta への返信

Re: 特定のページだけstyを無効化する方法

- 帯田 木偶太 の投稿
「妙なスペースが入る」という症状から考えて、最初に疑うべきは、行末の
コメントアウトし忘れであろうかと。
帯田 木偶太 への返信

Re: 特定のページだけstyを無効化する方法

- Na Ta の投稿
ご回答ありがとうございます。

それが、そのスタイルファイルを使うと全員なるみたいです。
Na Ta への返信

Re: 特定のページだけstyを無効化する方法

- 帯田 木偶太 の投稿
いや、スタイルファイル中の行末のコメントアウト、ということです。

でも、数式中で生じるのなら、可能性は低いかもしれませんが…。
帯田 木偶太 への返信

Re: 特定のページだけstyを無効化する方法

- Na Ta の投稿
なるほど、そのstyファイル自体の問題ということですね、ありがとうございます。 
Na Ta への返信

Re: 特定のページだけstyを無効化する方法

- 北見 けん の投稿
> さすがにこんなことは不可能ですかね、、、
いえ、むしろその方が「特定のページで sty ファイルを無効化する」よりはるかに簡単ですね。
Na Ta への返信

Re: 特定のページだけstyを無効化する方法

- 本田 知亮 の投稿
その「とあるsty」が何をしているかです.
\intや\sqrtを「とあるsty」がいじってるなら
それを消せばいいのでは?

もしその「とあるsty」が
\intや\sqrtをいじるものを読み込んでいるならば
そのいじってるものが何かしてるのでしょう.

こういうのは具体例なしで解決することは
余人には無理です.
最低でも,状態が再現する最小のファイルが必要です.

ちなみに,
古いtxfontsだと$S$の後ろにアキがあったりしますが
これはマクロレベルの問題でなく,
tfmが間違っているのが原因ですし,
そもそも文字自体が間違っているケースもあります
(\smileと\frownが逆だったり,
\coloneqが:=ではなく:-になってたり・・・).
フォントのデザインそのものが
空いているように見るものもあるかもしれません.

ということで,
現象によってはマクロレベルの問題ではないことも
それなりにあって,こうなると厄介です.

ちなみに,たとえば
txfontsを使いつつ,特定の記号のみCMに戻すとか,
その逆にする(CMベースで特定のものだけtx型)とか,
特定の環境内だけ違う数式フォントを使ったりすることは
比較的容易にできます.
texwikiのnewtxのページに方法が出ているはずです.