colorの動作について

colorの動作について

- nami kazu の投稿
返信数: 4
「\color{red}で文字を赤くした後,\color{black}で文字を黒に戻す」という操作を繰り返すと,途中から\colorが正常に動作しなくなってしまいます.これを解決する方法としてどのような手立てが考えられますでしょうか?
以下に.texファイルの中身を記載し,コンパイルによって出力されたpdfを添付いたします.
(62回目以降の\color{red}から正常に動作していないようです)

\documentclass[dvipdfmx]{jbook}
\usepackage[dvipdfmx]{color} % 色付け

\begin{document}

0
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの

10
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの

20
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの

30
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの

40
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの

50
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの
\color{red}他の\color{black}どの\color{red}他の\color{black}どの

60
\color{red}他の\color{black}どの

\color{red}他の\color{black}どの\color{red}他の\color{black}どの\color{red}他の\color{black}どの\color{red}他の\color{black}どの

\end{document}
nami kazu への返信

Re: colorの動作について

- ut の投稿
dvipdfmx の問題のようです:

  Provide high level "pushcolor" and "popcolor" to avoid color stack overflow with some engines when changing colors at top level
  https://github.com/latex3/latex2e/issues/882
  (Jun 28, 2022)

  when use lots of \color{} command, can't change color
  https://tex.stackexchange.com/questions/427022/when-use-lots-of-color-command-cant-change-color
  (asked Apr 17, 2018 at 14:26)

stackexchange での egreg さんのご回答に、問題が発生する理由の
解説と、回避法が書かれていました。


\documentclass[dvipdfmx]{jbook}
\usepackage[dvipdfmx]{color} % 色付け

\begin{document}

0
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}

10
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}

20
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}

30
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}

40
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}

50
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}

60
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}
\textcolor{red}{他の}\textcolor{black}{どの}\textcolor{red}{他の}\textcolor{black}{どの}

\end{document}
ut への返信

Re: colorの動作について

- nami kazu の投稿
ご回答ありがとうございます.
一旦の解決方法は理解しました.

個人的な事情で申し訳ないのですが,一旦赤字で出力したあと,完成版としては全て黒字での出力をしたいと考えていました.
(\color{red}と\color{black}を後で完全一致にて削除するためにこうした表記を用いていました)

この場合は,現在redになっているところを変数で定義し,適宜変更するしか方法はないという認識になりますか?
できれば.texファイルに色を変えていた痕跡が残らないようにしたかったのですが,,,.
nami kazu への返信

Re: colorの動作について

- Z. R. の投稿

要するに

{\color{red}色を付けたい部分}

\textcolor{red}{色を付けたい部分}はこれと実質的に同じです)とすればよくて、だから「{\color{red}」と「}」をそれぞれマクロにできればよいわけです。しかしマクロの定義に「{}の均衡がとれていないもの」を書くことはできないため、(この場合に)同じように使える\begingroup\endgroupを使います。

\newcommand{\Red}[1]{\begingroup\color{red}}
\newcommand{\Black}[1]{\endgroup}

このマクロを使うと

\Red{}色を付けたい部分\Black{}

と書くことができて、後で\Red{}\Black{}を一括削除できます。

※「区切りのスペースの扱い」が厄介になるのを避けるために敢えて意味のない引数({})を入れています。


もう少し技巧的になりますが

\newcommand{\Red}[1]{\ifx0#1\endgroup\else\begingroup\color{red}\fi}

と定義すると、

\Red1色を付けたい部分\Red0

と書けます。(この場合は10が引数になっています。)