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のチェックを外しておくこと。

subfloatへのnameref

subfigパッケージを使って、subfigやsubtableを作ってラベルを付けてからnamerefすると、

\begin{table}[H]
\caption{たぶ}
\subfloat[さぶたぶ\label{tab:hoge}]{}
\end{table}
\nameref{tab:hoge}

Subtable 1 1.1.1(a) 
という感じでキャプションタイトル(図とか表となる個所)がSubfigureとかSubtableとなってしまう。原因を探っているとsubfig.styの512行目付近以下が怪しい。
\def\subfloat@label{%
  \@ifnextchar(%   %) match left parenthesis
    {\sf@sub@label}
    {\sf@sub@label(Sub\@captype\space
                   \@ifundefined{thechapter}{}{\@nameuse{thechapter}\space}%
                   \@nameuse{p@sub\@captype}%
                   \@nameuse{thesub\@captype}.)}}
ここでsubfloatのラベルをnamerefしたときにでるキャプションタイトルを設定している。captypeを使ってフロートの内容ごとにSubの後ろのfigureとtableを場合分けしていて修正が複雑なので、現時点ではあきらめてsubfloatにはnamerefを使わないことにする。
ネットも探したが解決策が見つからなかった...。

2013-09-04

gitは正常に終了しませんでした (終了コード 128)

gitでtexのテンプレを修正したのでコミットすると間違ってコミット中にエンターを押してしまった。すると以下のエラー

fatal: Unable to create 'C:/Users/Senoo/SkyDrive/template/tex/.git/refs/heads/master.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.


gitは正常に終了しませんでした (終了コード 128) (62 ms @ 2013/09/04 2:12:50)

以下のファイルを削除すると解決した。
'C:/Users/Senoo/SkyDrive/template/tex/.git/refs/heads/master.lock':