f

アーカイブ

2013-09-09

prettyrefによるformatted reference

LyXでrefstyleパッケージを使ってformatted reference (整形された参照)を行うと、subfig.styパッケージを読み込んでいると、subsection以下の階層をformatted referenceしようとすると表示が??になってしまう。これは、参照時のコマンドが\subref{}のため、subfigパッケージと競合するためである。
refstyleとsubfigとsubsectionの\subrefの問題に関する議論:
http://comments.gmane.org/gmane.editors.lyx.general/69677
Julien Riouxのコメントがこの現象を説明している
Yes I'm sure.
- Have a label "sub:mysection" in a subsection.
- Insert a reference to it using <Formatted reference> format.
- Make sure refstyle is used instead of prettyref (this is changed in
document settings> Document class ; refstyle is the default for new docs) 
So far all this works. LyX generates \subref{mysection}, which is the refstyle syntax for that.
Now if you also use a subfloat within a float you get a conflict.
Because subfloat also defines a \subref macro. The conflict is silent...
but you get [??] in output.
これを回避するには、prettyrefを使えばよい。以下のLyXの公式サイトによれば、多言語でのformatted referenceに対応するために従来の prettyrefからrefstyleの対応を可能にしたらしい。
LyXの公式:
http://wiki.lyx.org/LyX/NewInLyX20#refstyle
しかしながら、以下のサイトの説明されているように自分で定義すれば英語でなくても何も問題がない。
修正例:
https://sites.google.com/site/6eskymemo/note/tex-lyx/prettyref
例えば、私の設定だが以下のようにすると参照時にタイトルとページ数が表示される。
\usepackage{prettyref} % subfigがあっても問題ない [130907]
\newrefformat{part}{\ref{#1}“\nameref{#1}”[p.\pageref{#1}]}
\newrefformat{chap}{\ref{#1}\nameref{#1}"[p.\pageref{#1}]}
\newrefformat{sec}{\ref{#1}“\nameref{#1}”[p.\pageref{#1}]}
\newrefformat{sub}{\ref{#1}“\nameref{#1}”[p.\pageref{#1}]}
\newrefformat{par}{\ref{#1}“\nameref{#1}”[p.\pageref{#1}]}
\newrefformat{tab}{\ref{#1}“\nameref{#1}”[p.\pageref{#1}]}
\newrefformat{fig}{\ref{#1}“\nameref{#1}”[p.\pageref{#1}]}
\newrefformat{lis}{\ref{#1}“\nameref{#1}”[p.\pageref{#1}]}
\newrefformat{enu}{\ref{#1}}
\newrefformat{eq}{\ref{#1}}
\newrefformat{lem}{補題\ref{#1}}
\newrefformat{thm}{定理\ref{#1}}
% subfloatにnamerefするとキャプションタイトルがSubfigureになるのでprettyrefを使わない
使用時には、Document > Settings... > Document Class > Use refstyle (not prettyref) for cross-referencesのチェックを外しておくこと。

0 件のコメント:

コメントを投稿