Support \cite command in tufte classes

This is an extra command used for sidenote citations. Since we do not
provide \cite with natbib (which tufte uses) as a choice, we use the
new AddToCiteEngine feature to add it.

File format change.

Fixes: #11150
This commit is contained in:
Juergen Spitzmueller 2018-05-21 13:43:16 +02:00
parent c58b914c80
commit 98621be1ba
7 changed files with 117 additions and 21 deletions

View File

@ -7,6 +7,10 @@ changes happened in particular if possible. A good example would be
-----------------------
2018-05-21 Jürgen Spitzmüller <spitz@lyx.org>
* format incremented to 553: Support \cite command in tufte classes.
This builds on an extension of the natbib CiteEngine by tufte.
2018-05-10 Jürgen Spitzmüller <spitz@lyx.org>
* format incremented to 552: support for float alignment
- add buffer param \float_alignment [class|left|center|right]

View File

@ -1,5 +1,5 @@
#LyX 2.3 created this file. For more info see http://www.lyx.org/
\lyxformat 544
#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 553
\begin_document
\begin_header
\save_transient_properties true
@ -10,7 +10,7 @@
\language ngerman
\language_package default
\inputencoding auto
\fontencoding global
\fontencoding auto
\font_roman "default" "default"
\font_sans "helvet" "default"
\font_typewriter "default" "default"
@ -28,6 +28,8 @@
\output_sync 0
\bibtex_command bibtex
\index_command default
\float_placement class
\float_alignment class
\paperfontsize default
\spacing single
\use_hyperref false
@ -43,8 +45,8 @@
\use_package stackrel 1
\use_package stmaryrd 1
\use_package undertilde 1
\cite_engine basic
\cite_engine_type default
\cite_engine natbib
\cite_engine_type authoryear
\biblio_style plain
\use_bibtopic false
\use_indices false
@ -556,6 +558,8 @@ Leider ist die Zählung im \SpecialChar LyX
\begin_inset Float marginfigure
placement document
alignment document
wide false
sideways false
status open
@ -639,6 +643,8 @@ reference "fig:Textabbildung"
eine, die dies nicht tut (normale Gleitabbildung).
\begin_inset Float figure
placement document
alignment document
wide true
sideways false
status open
@ -708,6 +714,7 @@ name "fig:Ganzabbildung"
\begin_layout Standard
\begin_inset Float figure
placement h
alignment document
wide false
sideways false
status open
@ -802,6 +809,7 @@ formal
\begin_layout Standard
\begin_inset Float table
placement ht
alignment document
wide false
sideways false
status open

View File

@ -1,5 +1,5 @@
#LyX 2.3 created this file. For more info see http://www.lyx.org/
\lyxformat 544
#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 553
\begin_document
\begin_header
\save_transient_properties true
@ -10,7 +10,7 @@
\language english
\language_package default
\inputencoding auto
\fontencoding global
\fontencoding auto
\font_roman "default" "default"
\font_sans "default" "default"
\font_typewriter "default" "default"
@ -28,6 +28,8 @@
\output_sync 0
\bibtex_command bibtex
\index_command default
\float_placement class
\float_alignment class
\paperfontsize default
\spacing single
\use_hyperref true
@ -52,8 +54,8 @@
\use_package stackrel 1
\use_package stmaryrd 1
\use_package undertilde 1
\cite_engine basic
\cite_engine_type default
\cite_engine natbib
\cite_engine_type authoryear
\biblio_style plain
\use_bibtopic false
\use_indices false
@ -367,6 +369,8 @@ Tufte uses ordinary figure floats such as the following:
\begin_layout Standard
\begin_inset Float figure
placement document
alignment document
wide false
sideways false
status open
@ -437,6 +441,8 @@ reference "fig:margin-figure"
\begin_layout Standard
\begin_inset Float marginfigure
placement document
alignment document
wide false
sideways false
status open
@ -563,6 +569,8 @@ reference "fig:full-width-figure"
\begin_layout Standard
\begin_inset Float figure
placement document
alignment document
wide true
sideways false
status open
@ -928,6 +936,8 @@ Visualizing Rotation
\begin_layout Standard
\begin_inset Float marginfigure
placement document
alignment document
wide false
sideways false
status open
@ -986,6 +996,8 @@ A graph of
\begin_layout Standard
\begin_inset Float marginfigure
placement document
alignment document
wide false
sideways false
status open
@ -1302,6 +1314,8 @@ washer
\begin_layout Standard
\begin_inset Float marginfigure
placement document
alignment document
wide false
sideways false
status open
@ -1417,6 +1431,8 @@ Then, by summing the volumes of all the washers between points
\begin_layout Standard
In the case of our quadratic drill bit::
\begin_inset Float marginfigure
placement document
alignment document
wide false
sideways false
status open

View File

@ -1,5 +1,5 @@
#LyX 2.3 created this file. For more info see http://www.lyx.org/
\lyxformat 544
#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 553
\begin_document
\begin_header
\save_transient_properties true
@ -10,7 +10,7 @@
\language english
\language_package default
\inputencoding auto
\fontencoding global
\fontencoding auto
\font_roman "default" "default"
\font_sans "helvet" "default"
\font_typewriter "default" "default"
@ -52,8 +52,8 @@
\use_package stackrel 1
\use_package stmaryrd 1
\use_package undertilde 1
\cite_engine basic
\cite_engine_type default
\cite_engine natbib
\cite_engine_type authoryear
\biblio_style plain
\use_bibtopic false
\use_indices false
@ -554,6 +554,8 @@ Note: unfortunately, the counting inside the \SpecialChar LyX
\begin_inset Float marginfigure
placement document
alignment document
wide false
sideways false
status open
@ -664,6 +666,8 @@ reference "fig:textfig"
is an example of the normal figure float.
\begin_inset Float figure
placement document
alignment document
wide true
sideways false
status open
@ -740,6 +744,7 @@ name "fig:fullfig"
\begin_layout Standard
\begin_inset Float figure
placement h
alignment document
wide false
sideways false
status open
@ -834,6 +839,7 @@ formal
\begin_layout Standard
\begin_inset Float table
placement ht
alignment document
wide false
sideways false
status open

View File

@ -17,6 +17,20 @@ ClassOptions
Other nohyper
end
# Tufte uses \cite for margin note citations
AddToCiteEngine authoryear
cite[][]
End
CiteFormat authoryear
_sidenote Sidenote
_side sidenote
_fullcite bibl. entry
_bibentry Full bibliography entry.
# "Margin: Full bibliography entry." (dialog) / "Margin: Key (bibliography entry)"
cite {%dialog%[[%_sidenote%]][[%_side%]]}: {%dialog%[[%_bibentry%]][[{%label%[[%!fullcite%]][[%key%%!nextkey% (%_fullcite%)]]}]]}
End
Style Standard
Margin Static
LatexType Paragraph

View File

@ -24,12 +24,13 @@ import sys, os
# Uncomment only what you need to import, please.
from parser_tools import (find_end_of_inset, find_end_of_layout, find_token, get_bool_value, get_value)
from parser_tools import (find_end_of_inset, find_end_of_layout, find_token,
get_bool_value, get_value, get_quoted_value)
# del_token, del_value, del_complete_lines,
# find_complete_lines, find_end_of,
# find_re, find_substring, find_token_backwards,
# get_containing_inset, get_containing_layout, get_value,
# get_quoted_value, is_in_inset, set_bool_value
# get_containing_inset, get_containing_layout,
# is_in_inset, set_bool_value
# find_tokens, find_token_exact, check_token, get_option_value
from lyx2lyx_tools import (put_cmd_in_ert, add_to_preamble)
@ -281,6 +282,51 @@ def revert_floatalignment(document):
i = j
def revert_tuftecite(document):
" Revert \cite commands in tufte classes "
tufte = ["tufte-book", "tufte-handout"]
if document.textclass not in tufte:
return
i = 0
while (True):
i = find_token(document.body, "\\begin_inset CommandInset citation", i)
if i == -1:
break
j = find_end_of_inset(document.body, i)
if j == -1:
document.warning("Can't find end of citation inset at line %d!!" %(i))
i += 1
continue
k = find_token(document.body, "LatexCommand", i, j)
if k == -1:
document.warning("Can't find LatexCommand for citation inset at line %d!" %(i))
i = j + 1
continue
cmd = get_value(document.body, "LatexCommand", k)
if cmd != "cite":
i = j + 1
continue
pre = get_quoted_value(document.body, "before", i, j)
post = get_quoted_value(document.body, "after", i, j)
key = get_quoted_value(document.body, "key", i, j)
if not key:
document.warning("Citation inset at line %d does not have a key!" %(i))
key = "???"
# Replace command with ERT
res = "\\cite"
if pre:
res += "[" + pre + "]"
if post:
res += "[" + post + "]"
elif pre:
res += "[]"
res += "{" + key + "}"
document.body[i:j+1] = put_cmd_in_ert([res])
i = j + 1
##
# Conversion hub
#
@ -294,10 +340,12 @@ convert = [
[549, []],
[550, [convert_fontenc]],
[551, []],
[552, []]
[552, []],
[553, []]
]
revert = [
[552, [revert_tuftecite]],
[551, [revert_floatpclass, revert_floatalignment]],
[550, [revert_nospellcheck]],
[549, [revert_fontenc]],

View File

@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
#define LYX_FORMAT_LYX 552 // spitz: float alignment
#define LYX_FORMAT_TEX2LYX 552
#define LYX_FORMAT_LYX 553 // spitz: tufte \cite
#define LYX_FORMAT_TEX2LYX 553
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER