名前: しっぽ愛好家 日時: 2003-01-04 01:54:38 IPアドレス: 210.230.96.*
>>14591 >簡単に図表名を出す方法があるのではないかと思ったので。。 確かにそういう方法はありますが,LaTeX のデフォルトでは 提供されていない,というだけですね. %%% ``目次'' の機構と ``相互参照'' の機構は互いに独立していることにも %%% 注意してください. さて,\ref{<label-string>}(<label-string> は文字列)によって与えられる 文字列は,\label{<label-string>} を用いた時点での \@currentlabel です. また,\@currentlabel の設定は \refstepcounter(をはじめとするいくつかの マクロ)によって行われます. これらのことに注意すると,\caption の処理の中で \@currentlabel を 設定している部分を変更することにより,下記の例のような処理を 行うこともできます. %%% キャプション文字列の中に含まれるコマンドに対しては, %%% \protect を必要に応じて前置して保護してください. %%% %%% これは,下記の例にあるような再定義を行わない場合についても %%% %%% 同様です. \documentclass{article} \makeatletter \def\caption{% \ifx\@captype\@undefined \@latex@error{\noexpand\caption outside float}\@ehd \expandafter\@gobble \else \stepcounter\@captype%%% オリジナルでは \refstepcounter\@captype \expandafter\@firstofone \fi {\@dblarg{\@caption\@captype}}} \long\def\@caption#1[#2]#3{% %%% #1: figure/table etc., #2; short caption, #3: caption \par \protected@edef\@currentlabel{#3}%%% この記述を追加 \addcontentsline{\csname ext@#1\endcsname}{#1}% {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}% \begingroup \@parboxrestore \if@minipage \@setminipage \fi \normalsize \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par \endgroup} \makeatother \begin{document} \begin{figure} \centering \includegraphics{somefigure.eps} \caption{caption} \label{fig:sample} \end{figure} As indicated in figure ``\ref{fig:sample}'', \dots. \end{document} %%% まあ,nide さんのお話にある方法は充分実用的だと思います. %%% それ以前に,相互参照のようにしてキャプション文字列を取得する, %%% という状況そのものに興味があります. %%% %%% キャプションを頻繁に変更する,というのでもなければ, %%% %%% キャプション文字列をそのままコピーすれば済みそうな %%% %%% 気もしますので…
この書き込みへの返事: