#LyX 2.1 created this file. For more info see http://www.lyx.org/ \lyxformat 446 \begin_document \begin_header \textclass scrbook \begin_preamble % DO NOT ALTER THIS PREAMBLE!!! % % This preamble is designed to ensure that this document prints % out as advertised. If you mess with this preamble, % parts of this document may not print out as expected. If you % have problems LaTeXing this file, please contact % the documentation team % email: lyx-docs@lists.lyx.org \usepackage{ifpdf} % part of the hyperref bundle \ifpdf % if pdflatex is used % set fonts for nicer pdf view \IfFileExists{lmodern.sty} {\usepackage{lmodern}}{} \fi % end if pdflatex is used % the pages of the TOC is numbered roman % and a pdf-bookmark for the TOC is added \let\myTOC\tableofcontents \renewcommand\tableofcontents{% \frontmatter \pdfbookmark[1]{\contentsname}{} \myTOC \mainmatter } \end_preamble \options fleqn,bibliography=totoc,index=totoc,BCOR7.5mm,titlepage,captions=tableheading \use_default_options false \begin_modules logicalmkup \end_modules \maintain_unincluded_children false \begin_local_layout Format 35 InsetLayout Flex:MenuItem LyxType charstyle LabelString menu LatexType command LatexName menuitem Font Family Sans EndFont Preamble \newcommand*{\menuitem}[1]{{\sffamily #1}} EndPreamble End # In case we need to do with sans... #InsetLayout CharStyle:Code #Font #Family Sans #EndFont #Preamble #\renewcommand{\code}[1]{{\sffamily #1}} #EndPreamble #End \end_local_layout \language english \language_package default \inputencoding auto \fontencoding global \font_roman default \font_sans default \font_typewriter default \font_math auto \font_default_family default \use_non_tex_fonts false \font_sc false \font_osf false \font_sf_scale 100 \font_tt_scale 100 \graphics default \default_output_format default \output_sync 0 \bibtex_command default \index_command default \paperfontsize 12 \spacing single \use_hyperref true \pdf_title "LyX Configuration Manual" \pdf_author "LyX Team" \pdf_subject "LyX-documentation Customization" \pdf_keywords "LyX, documentation, customization" \pdf_bookmarks true \pdf_bookmarksnumbered true \pdf_bookmarksopen true \pdf_bookmarksopenlevel 1 \pdf_breaklinks false \pdf_pdfborder false \pdf_colorlinks true \pdf_backref false \pdf_pdfusetitle false \pdf_quoted_options "linkcolor=black, citecolor=black, urlcolor=blue, filecolor=blue,pdfpagelayout=OneColumn, pdfnewwindow=true, pdfstartview=XYZ, plainpages=false" \papersize default \use_geometry false \use_package amsmath 0 \use_package amssymb 0 \use_package esint 0 \use_package mathdots 1 \use_package mathtools 0 \use_package mhchem 0 \use_package undertilde 0 \cite_engine basic \cite_engine_type numerical \biblio_style plain \use_bibtopic false \use_indices false \paperorientation portrait \suppress_date false \justification true \use_refstyle 0 \branch OutDated \selected 0 \filename_suffix 0 \color #f5fae7 \end_branch \index Index \shortcut idx \color #008000 \end_index \secnumdepth 3 \tocdepth 3 \paragraph_separation indent \paragraph_indentation default \quotes_language english \papercolumns 1 \papersides 2 \paperpagestyle headings \tracking_changes true \output_changes false \html_math_output 0 \html_css_as_file 0 \html_be_strict true \author -712698321 "Jürgen Spitzmüller" \author -195340706 "Georg Baum" \author 5863208 "ab" \author 1082167584 "Kayvan Sylvan" kayvan@sylvan.com \author 1414654397 "Richard Heck" \end_header \begin_body \begin_layout Title Customizing LyX: Features for the Advanced User \end_layout \begin_layout Author by the LyX Team \begin_inset Foot status collapsed \begin_layout Plain Layout \noindent If you have comments or error corrections, please send them to the LyX Documenta tion mailing list, \begin_inset CommandInset href LatexCommand href target "lyx-docs@lists.lyx.org" type "mailto:" \end_inset . Include \begin_inset Quotes eld \end_inset [Customization] \begin_inset Quotes erd \end_inset in the subject header, and please cc the current maintainer of this file, Richard Heck . \end_layout \end_inset \begin_inset Newline newline \end_inset \begin_inset Newline newline \end_inset Version 2.0.x \end_layout \begin_layout Standard \begin_inset CommandInset toc LatexCommand tableofcontents \end_inset \end_layout \begin_layout Standard \begin_inset Note Note status open \begin_layout Plain Layout Please use change tracking when modifying this document. This makes it easier for our translators to recognize things that have been changed, and it helps the maintainer keep up-to-date with what's been done. \end_layout \end_inset \end_layout \begin_layout Chapter Introduction \end_layout \begin_layout Standard This manual covers the customization features present in LyX. In it, we discuss issues like keyboard shortcuts, screen previewing options, printer options, sending commands to LyX via the LyX Server, internationalizati on, installing new LaTeX classes and LyX layouts, etc. We can't possibly hope to touch on everything you can change—our developers add new features faster than we can document them—but we will explain the most common customizations and hopefully point you in the right direction for some of the more obscure ones. \end_layout \begin_layout Standard \begin_inset Branch OutDated status collapsed \begin_layout Standard Information from previous versions of this document that now seems to be outdated is contained in the OutDated branch of this document. By default, this information will not appear in the LaTeX output. \end_layout \end_inset \end_layout \begin_layout Chapter LyX configuration files \end_layout \begin_layout Standard This chapter aims to help you to find your way through the LyX configuration files. Before continuing to read this chapter, you should find out where your LyX library and user directories are by using \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Help\SpecialChar \menuseparator About \begin_inset space ~ \end_inset LyX \end_layout \end_inset . The library directory is the place where LyX places its system-wide configurati on files; the user directory is where you can place your modified versions. We will call the former \begin_inset Flex Code status collapsed \begin_layout Plain Layout LyXDir \end_layout \end_inset and the latter \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout UserDir \end_layout \end_inset in the remainder of this document. \end_layout \begin_layout Section What's in \begin_inset Flex Code status collapsed \begin_layout Plain Layout LyXDir \end_layout \end_inset ? \end_layout \begin_layout Standard \begin_inset Flex Code status collapsed \begin_layout Plain Layout LyXDir \end_layout \end_inset and its sub-directories contain a number of files and that can be used to customize LyX's behavior. You can change many of these files from within LyX itself through the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Tools\SpecialChar \menuseparator Preferences \end_layout \end_inset dialog. Most customization that you will want to do in LyX is possible through this dialog. However, many other inner aspects of LyX can be customized by modifying the files in \begin_inset Flex Code status collapsed \begin_layout Plain Layout LyXDir \end_layout \end_inset . These files fall in different categories, described in the following subsection s. \end_layout \begin_layout Subsection Automatically generated files \end_layout \begin_layout Standard The files, which are to be found in \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout UserDir \end_layout \end_inset , are generated when you configure LyX. They contain various default values that are guessed by inspection. In general, it is not a good idea to modify them, since they might be overwritt en at any time. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout lyxrc.defaults \end_layout \end_inset contains defaults for various commands. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout packages.lst \end_layout \end_inset contains the list of packages that have been recognized by LyX. It is currently unused by the LyX program itself, but the information extracted , and more, is made available with \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Help\SpecialChar \menuseparator LaTeX \begin_inset space ~ \end_inset Configuration \end_layout \end_inset . \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout textclass.lst \end_layout \end_inset the list of text classes that have been found in your \begin_inset Flex Code status collapsed \begin_layout Plain Layout layout/ \end_layout \end_inset directories, along with the associated LaTeX document class and their descripti on. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout lyxmodules.lst \end_layout \end_inset the list of layout modules found in your \begin_inset Flex Code status collapsed \begin_layout Plain Layout layout/ \end_layout \end_inset directories \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout *files.lst \end_layout \end_inset lists of various sorts of LaTeX-related files found on your system \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout doc/LaTeXConfig.lyx \end_layout \end_inset is automatically generated during configuration from the file \begin_inset Flex Code status collapsed \begin_layout Plain Layout LaTeXConfig.lyx.in \end_layout \end_inset . It contains information on your LaTeX configuration. \end_layout \begin_layout Subsection Directories \end_layout \begin_layout Standard These directories are duplicated between \begin_inset Flex Code status collapsed \begin_layout Plain Layout LyXDir \end_layout \end_inset and \begin_inset Flex Code status collapsed \begin_layout Plain Layout UserDir \end_layout \end_inset . If a particular files exists in both places, the one in \begin_inset Flex Code status collapsed \begin_layout Plain Layout UserDir \end_layout \end_inset will be used. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout bind/ \end_layout \end_inset this directory contains files with the extension \begin_inset Flex Code status collapsed \begin_layout Plain Layout .bind \end_layout \end_inset that define the keybindings used in LyX. If there exists an internationalized version of the bind file named \begin_inset Flex Code status collapsed \begin_layout Plain Layout $LANG_xxx.bind \end_layout \end_inset , that will be used first. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout clipart/ \end_layout \end_inset contains graphics files that can be included in documents. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout doc/ \end_layout \end_inset contains LyX documentation files (including the one you are currently reading). The file \begin_inset Flex Code status collapsed \begin_layout Plain Layout LaTeXConfig.lyx \end_layout \end_inset deserves special attention, as noted above. The internationalized help docs are in subdirectories \begin_inset Flex Code status collapsed \begin_layout Plain Layout doc/xx \end_layout \end_inset where \begin_inset Quotes eld \end_inset xx \begin_inset Quotes erd \end_inset is the ISO language code. See chapter \begin_inset space ~ \end_inset \begin_inset CommandInset ref LatexCommand ref reference "cha:Internationalizing-LyX" \end_inset for details. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout examples/ \end_layout \end_inset contains example files that explain how to use some features. In the file browser, press the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Examples \end_layout \end_inset button to get there. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout images/ \end_layout \end_inset contains image files that are used by the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Document \end_layout \end_inset dialog. In addition, it also contains the individual icons used in the toolbar and the banners that can be shown when LyX is launched. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout kbd/ \end_layout \end_inset contains keyboard keymapping files. See Chapter \begin_inset space ~ \end_inset \begin_inset CommandInset ref LatexCommand ref reference "sec:International-Keymap-Stuff" \end_inset for details. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout layouts/ \end_layout \end_inset contains the text class and module files described in Chapter \begin_inset space ~ \end_inset \begin_inset CommandInset ref LatexCommand ref reference "cha:Installing-New-Document" \end_inset . \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout lyx2lyx \end_layout \end_inset contains the \begin_inset Flex Code status collapsed \begin_layout Plain Layout lyx2lyx \end_layout \end_inset Python scripts used to convert between LyX versions. These can be run from the command line if, say, you want to batch-convert files. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout scripts/ \end_layout \end_inset contains some files that demonstrate the capabilities of the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout External \begin_inset space ~ \end_inset Template \end_layout \end_inset feature. Also contains some scripts used by LyX itself. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout templates/ \end_layout \end_inset contains the standard LyX template files described in Chapter \begin_inset space ~ \end_inset \begin_inset CommandInset ref LatexCommand ref reference "sub:Creating-Templates" \end_inset . \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout ui/ \end_layout \end_inset contains files with the extension \begin_inset Flex Code status collapsed \begin_layout Plain Layout .ui \end_layout \end_inset that define the user interface to LyX. That is, the files define which items appear in which menus and the items appearing on the toolbar. \end_layout \begin_layout Subsection Files you don't want to modify \end_layout \begin_layout Standard These files are used internally by LyX and you generally do not need to modify them unless you are a developer. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout CREDITS \end_layout \end_inset this file contains the list of LyX developers. The contents are displayed with the menu entry \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Help\SpecialChar \menuseparator About \begin_inset space ~ \end_inset LyX \end_layout \end_inset . \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout chkconfig.ltx \end_layout \end_inset this is a LaTeX script used during the configuration process. Do not run directly. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout configure.py \end_layout \end_inset this is the script that is used to re-configure LyX. It creates configuration files in the directory it was run from. \end_layout \begin_layout Subsection Other files needing a line or two... \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout encodings \end_layout \end_inset this contains tables describing how different character encodings can be mapped to Unicode \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout external_templates \end_layout \end_inset this file contains the templates available to the new \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout External \begin_inset space ~ \end_inset Template \end_layout \end_inset feature. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout languages \end_layout \end_inset this file contains a list of all the languages currently supported by LyX. \change_inserted -195340706 1334775793 \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \change_inserted -195340706 1334775793 \begin_inset Flex Code status collapsed \begin_layout Plain Layout \change_inserted -195340706 1334775793 layouttranslations \end_layout \end_inset this file contains translations for internationalized paragraph styles (see sec. \begin_inset space \thinspace{} \end_inset \begin_inset CommandInset ref LatexCommand ref reference "sub:I18n" \end_inset ). \change_unchanged \end_layout \begin_layout Section Your local configuration directory \end_layout \begin_layout Standard Even if you are using LyX as an unprivileged user, you might want to change LyX configuration for your own use. The \begin_inset Flex Code status collapsed \begin_layout Plain Layout UserDir \end_layout \end_inset directory contains all your personal configuration files. This is the directory described as \begin_inset Quotes eld \end_inset user directory \begin_inset Quotes erd \end_inset in \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Help\SpecialChar \menuseparator About \begin_inset space ~ \end_inset LyX \end_layout \end_inset . This directory is used as a mirror of \begin_inset Flex Code status collapsed \begin_layout Plain Layout LyXDir \end_layout \end_inset , which means that every file in \begin_inset Flex Code status collapsed \begin_layout Plain Layout UserDir \end_layout \end_inset is a replacement for the corresponding file in \begin_inset Flex Code status collapsed \begin_layout Plain Layout LyXDir \end_layout \end_inset . Any configuration file described in the above sections can be placed either in the system-wide directory, in which case it will affect all users, or in your local directory for your own use. \end_layout \begin_layout Standard To make things clearer, let's provide a few examples: \end_layout \begin_layout Itemize The preferences set in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Tools\SpecialChar \menuseparator Preferences \end_layout \end_inset dialog are saved to a file \begin_inset Flex Code status collapsed \begin_layout Plain Layout preferences \end_layout \end_inset in \begin_inset Flex Code status collapsed \begin_layout Plain Layout UserDir \end_layout \end_inset . \end_layout \begin_layout Itemize When you reconfigure using \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Tools\SpecialChar \menuseparator Reconfigure \end_layout \end_inset , LyX runs the \begin_inset Flex Code status collapsed \begin_layout Plain Layout configure.py \end_layout \end_inset script, and the resulting files are written in your local configuration directory. This means that any additional text class file that you might have added in \begin_inset Flex Code status collapsed \begin_layout Plain Layout UserDir/layouts \end_layout \end_inset will be added to the list of classes in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Document\SpecialChar \menuseparator Settings \end_layout \end_inset dialog. \end_layout \begin_layout Itemize If you get some updated documentation from LyX ftp site and cannot install it because you do not have sysadmin rights on your system, you can just copy the files in \begin_inset Flex Code status collapsed \begin_layout Plain Layout UserDir/doc/ \end_layout \end_inset and the items in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Help \end_layout \end_inset menu will open them! \end_layout \begin_layout Section Running LyX with multiple configurations \end_layout \begin_layout Standard The configuration freedom of the local configuration directory may not suffice if you want to have more than one configuration at your disposal. For example, you may want to be use different key bindings or printer settings at different times. You can achieve this by having several such directories. You then specify which directory to use at run-time. \end_layout \begin_layout Standard Invoking LyX with the command line switch \begin_inset Flex Code status collapsed \begin_layout Plain Layout -userdir \end_layout \end_inset \emph on \emph default instructs the program to read the configuration from that directory, and not from the default directory. (You can determine the default directory by running LyX without the \begin_inset Flex Code status collapsed \begin_layout Plain Layout -userdir \end_layout \end_inset switch.) If the specified directory does not exist, LyX offers to create it for you, just like it does for the default directory on the first time you run the program. You can modify the configuration options in this additional user directory exactly as you would for the default directory. These directories are completely independent (but read on). Note that setting the environment variable \begin_inset Flex Code status collapsed \begin_layout Plain Layout LYX_USERDIR_VER \end_layout \end_inset to some value has exactly the same effect. \end_layout \begin_layout Standard Having several configurations also requires more maintenance: if you want to add a new layout to \begin_inset Flex Code status collapsed \begin_layout Plain Layout NewUserDir/layouts \end_layout \end_inset which you want available from all your configurations, you must add it to each directory separately. You can avoid this with the following trick: after LyX creates the additional directory, most of the subdirectories (see above) are empty. If you want the new configuration to mirror an existing one, replace the empty subdirectory with a symbolic link to the matching subdirectory in the existing configuration. Take care with the \begin_inset Flex Code status collapsed \begin_layout Plain Layout doc/ \end_layout \end_inset subdirectory, however, since it contains a file written by the configuration script (also accessible through \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Tools\SpecialChar \menuseparator Reconfigure \end_layout \end_inset ) which is configuration-specific. \end_layout \begin_layout Chapter The Preferences dialog \end_layout \begin_layout Standard All options of the preferences dialog are described in the Appendix \emph on The Preferences Dialog \emph default in the \emph on User's Guide \emph default . For some options you might find here more details. \end_layout \begin_layout Section Formats \begin_inset CommandInset label LatexCommand label name "sec:Formats" \end_inset \end_layout \begin_layout Standard The first step is to define your file formats if they are not already defined. To do so, open the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Tools\SpecialChar \menuseparator Preferences \end_layout \end_inset dialog. Under \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout File Handling\SpecialChar \menuseparator File formats \end_layout \end_inset press the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout New\SpecialChar \ldots{} \end_layout \end_inset button to define your new format. The \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Format \end_layout \end_inset field contains the name used to identify the format in the GUI. The \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Short Name \end_layout \end_inset is used to identify the format internally. You will also need to enter a file extension. These are all required. The optional \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Shortcut \end_layout \end_inset field is used to provide a keyboard shortcut on the menus. (For example, pressing \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Alt-V F D \end_layout \end_inset will \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout View\SpecialChar \menuseparator View (Other Formats)\SpecialChar \menuseparator DVI \end_layout \end_inset .) \end_layout \begin_layout Standard A Format can have a \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Viewer \end_layout \end_inset and an \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Editor \end_layout \end_inset associated with it. For example, you might want to use \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Ghostview \end_layout \end_inset to view PostScript files. You can enter the command needed to start the program in the corresponding fields. In defining this command, you can use the four variables listed in the next section. The viewer is launched when you view an image in LyX or use the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout View \end_layout \end_inset menu. The editor is for example launched when you right-click on an image and choose \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Edit externally \end_layout \end_inset in the appearing context menu. \end_layout \begin_layout Standard \change_inserted -195340706 1329851811 The \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout MIME \end_layout \end_inset type of a format is optional, but if it is specified, it must be unique across all formats. It is used to detect files of this format from the file contents. For some important file formats there is no MIME type officially registered with the \begin_inset CommandInset href LatexCommand href name "IANA" target "http://www.iana.org/assignments/media-types/" \end_inset . Therefore LyX uses the extended list of MIME types as specified by \begin_inset CommandInset href LatexCommand href name "freedesktop.org" target "http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec" \end_inset . \end_layout \begin_layout Standard The \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Document format \end_layout \end_inset option tells LyX that a format is suitable for document export. If this is set and if a suitable conversion route exists (see sec. \begin_inset space \thinspace{} \end_inset \begin_inset CommandInset ref LatexCommand ref reference "sec:Converters" \end_inset ), the format will appear in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout File\SpecialChar \menuseparator Export \end_layout \end_inset menu. The format will also appear in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout View \end_layout \end_inset menu if a viewer is specified for the format. Pure image formats, such as \begin_inset Flex Code status collapsed \begin_layout Plain Layout png \end_layout \end_inset , should not use this option. Formats that can both represent vector graphics and documents like \begin_inset Flex Code status collapsed \begin_layout Plain Layout pdf \end_layout \end_inset should use it. \end_layout \begin_layout Standard The option \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Vector graphics format \end_layout \end_inset tells LyX that a format can contain vector graphics. This information is used to determine the target format of included graphics for \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout pdflatex \end_layout \end_inset export. Included graphics may need to be converted to either \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout pdf \end_layout \end_inset , \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout png \end_layout \end_inset , or \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout jpg \end_layout \end_inset , since \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout pdflatex \end_layout \end_inset cannot handle other image formats. If an included graphic is not already in \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout pdf \end_layout \end_inset , \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout png \end_layout \end_inset , or \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout jpg \end_layout \end_inset format, it is converted to \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout pdf \end_layout \end_inset if the vector format option is set, and otherwise to \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout png \end_layout \end_inset . \end_layout \begin_layout Section Copiers \end_layout \begin_layout Standard Since all conversions from one format to another take place in LyX's temporary directory, it is sometimes necessary to modify a file before copying it to the temporary directory in order that the conversion may be performed. \begin_inset Foot status collapsed \begin_layout Plain Layout For example, the file may refer to other files—images, for example—using relative file names, and these may become invalid when the file is copied to the temporary directory. \end_layout \end_inset This is done by a Copier: It copies a file to (or from) the temporary directory and may modify it in the process. \end_layout \begin_layout Standard The definitions of the copiers may use four variables: \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$s \end_layout \end_inset The LyX system directory (e. \begin_inset space \thinspace{} \end_inset g. \begin_inset space \space{} \end_inset \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout /usr/share/lyx \end_layout \end_inset ). \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$i \end_layout \end_inset The input file \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$o \end_layout \end_inset The output file \change_inserted 1082167584 1348453985 \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \change_inserted 1082167584 1348453986 $$b The base name (without filename extension) in the LyX temporary directory \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \change_inserted 1082167584 1348453986 $$p The full directory path of the LyX temporary directory \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \change_inserted 1082167584 1348453986 $$r The full pathname to the original LyX file being processed \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \change_inserted 1082167584 1348453986 $$f The filename (without any directory path) of the LyX file. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$l \end_layout \end_inset The `LaTeX name' \change_inserted 1082167584 1348453720 \end_layout \begin_layout Standard The latter should be the filename as it would be used in a LaTeX's \series bold \backslash include \series default command. It is relevant only when exporting files suitable for such inclusion. \end_layout \begin_layout Standard Copiers can be used to do almost anything with output files. For example, suppose you want generated pdf files to be copied to a special directory, \begin_inset Flex Code status collapsed \begin_layout Plain Layout /home/you/pdf/ \end_layout \end_inset . Then you could write a shell script such as this one: \end_layout \begin_layout Standard \begin_inset listings inline false status open \begin_layout Plain Layout #!/bin/bash \end_layout \begin_layout Plain Layout FROMFILE=$1 \end_layout \begin_layout Plain Layout TOFILE=`basename $2` \end_layout \begin_layout Plain Layout cp $FROMFILE /home/you/pdf/$TOFILE \end_layout \end_inset Save it in your local LyX directory—say, \begin_inset Flex Code status collapsed \begin_layout Plain Layout /home/you/.lyx/scripts/pdfcopier.sh \end_layout \end_inset —and make it executable, if you need to do so on your platform. Then, in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Tools\SpecialChar \menuseparator Preferences \end_layout \end_inset dialog, select under \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout File Handling\SpecialChar \menuseparator File formats \end_layout \end_inset the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout PDF(pdflatex) \end_layout \end_inset format—or one of the other pdf formats—and enter \begin_inset Flex Code status collapsed \begin_layout Plain Layout pdfcopier.sh $$i $$o \end_layout \end_inset into the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Copier \end_layout \end_inset field. \end_layout \begin_layout Standard Copiers are used by LyX in various of its own conversions. For example, if appropriate programs are found, LyX will automatically install copiers for the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout HTML \end_layout \end_inset and \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout HTML \begin_inset space ~ \end_inset (MS Word) \end_layout \end_inset formats. When these formats are exported, the copier sees that not just the main HTML file but various associated files (style files, images, etc.) are also copied. All these files are written to a subdirectory of the directory in which the original LyX file was found. \begin_inset Foot status collapsed \begin_layout Plain Layout This copier can be customized. The optional \begin_inset Quotes eld \end_inset -e \begin_inset Quotes erd \end_inset argument takes a comma-separated list of extensions to be copied; if it is omitted, all files will be copied. The \begin_inset Quotes eld \end_inset -t \begin_inset Quotes erd \end_inset argument determines the extension added to the generated directory. By default, it is \begin_inset Quotes eld \end_inset \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout LyXconv \end_layout \end_inset \begin_inset Quotes erd \end_inset , so HTML generated from \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout /path/to/filename.lyx \end_layout \end_inset will end up in \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout /path/to/filename.html.LyXconv \end_layout \end_inset . \end_layout \end_inset \end_layout \begin_layout Section Converters \begin_inset CommandInset label LatexCommand label name "sec:Converters" \end_inset \end_layout \begin_layout Standard You can define your own Converters to convert files between different formats. This is done in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Tools\SpecialChar \menuseparator Preferences\SpecialChar \menuseparator File Handling\SpecialChar \menuseparator Converters \end_layout \end_inset dialog. \end_layout \begin_layout Standard To define a new converter, select the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout From \begin_inset space ~ \end_inset format \end_layout \end_inset and \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout To \begin_inset space ~ \end_inset format \end_layout \end_inset from the drop-down lists, enter the command needed for the conversion, and then press the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Add \end_layout \end_inset button. Several variables can be used in the definition of converters: \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$s \end_layout \end_inset The LyX system directory \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$i \end_layout \end_inset The input file \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$o \end_layout \end_inset The output file \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$b \end_layout \end_inset The base filename of the input file (i. \begin_inset space \thinspace{} \end_inset g., without the extension) \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$p \end_layout \end_inset The path to the input file \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$r \end_layout \end_inset The path to the original input file (this is different from $$p when a chain of converters is called) \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$e \end_layout \end_inset The iconv name for the encoding of the document. \end_layout \begin_layout Standard In the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Extra \begin_inset space ~ \end_inset Flag \end_layout \end_inset field you can enter the following flags, separated by commas: \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout latex \end_layout \end_inset This converter runs some form of LaTeX. This will make LyX's LaTeX error logs available. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout needaux \end_layout \end_inset Needs the LaTeX \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout .aux \end_layout \end_inset file for the conversion. \change_inserted 1414654397 1337693117 \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \change_inserted 1414654397 1337693188 \begin_inset Flex Code status collapsed \begin_layout Plain Layout \change_inserted 1414654397 1337693129 nice \change_unchanged \end_layout \end_inset Needs a \begin_inset Quotes eld \end_inset nice \begin_inset Quotes erd \end_inset file from the backend, which in practice means a LaTeX file like the one we would export, without \begin_inset Flex Code status collapsed \begin_layout Plain Layout \change_inserted 1414654397 1337693184 input@path \change_unchanged \end_layout \end_inset . \change_unchanged \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout xml \end_layout \end_inset Output is XML. \end_layout \begin_layout Standard The following three flags are not really flags at all because they take an argument in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout key \begin_inset space ~ \end_inset = \begin_inset space ~ \end_inset value \end_layout \end_inset format: \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout parselog \end_layout \end_inset If set, the converter's standard error will be redirected to a file \begin_inset Flex Code status collapsed \begin_layout Plain Layout infile.out \end_layout \end_inset , and the script given as argument will be run as: \begin_inset Flex Code status collapsed \begin_layout Plain Layout script < infile.out > infile.log \end_layout \end_inset . The argument may contain \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$s \end_layout \end_inset . \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout resultdir \end_layout \end_inset The name of the directory in which the converter will dump the generated files. LyX will not create this directory, and it does not copy anything into it, though it will copy this directory to the destination. The argument may contain \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$b \end_layout \end_inset , which will be replaced by the base name of the input and output files, respectively, when the directory is copied. \begin_inset Newline newline \end_inset Note that resultdir and usetempdir make no sense together. The latter will be ignored if the former is given. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout resultfile \end_layout \end_inset Determines the output file name and may, contain \begin_inset Flex Code status collapsed \begin_layout Plain Layout $$b \end_layout \end_inset . Sensible only with resultdir and optional even then; if not given, it defaults to `index'. \end_layout \begin_layout Standard None of these last three are presently used in any of the converters that are installed with LyX. \end_layout \begin_layout Standard You do not have to define converters for all formats between which you want to convert. For example, you will note that there is no `LyX to PostScript' converter, but LyX will export PostScript. It does so by first creating a LaTeX file (no converter needs to be defined for this) which is then converted to DVI using the `LaTeX to DVI' converter, and finally converting the resulting DVI file to PostScript. LyX finds such `chains' of converters automatically, and it will always choose the shortest possible chain. You can, though, still define multiple conversion methods between file formats. For example, the standard LyX configuration provides three ways to convert LaTeX to PDF: Directly, using \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout pdflatex \end_layout \end_inset ; via (DVI and) PostScript, using \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout ps2pdf \end_layout \end_inset ; or via DVI, using \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout dvipdfm \end_layout \end_inset . To define such alternate chains, you must define multiple target `file formats', as described in section \begin_inset CommandInset ref LatexCommand ref reference "sec:Formats" \end_inset . For example, in the standard configuration, the formats named \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout pdf \end_layout \end_inset , \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout pdf2 \end_layout \end_inset , and \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout pdf3 \end_layout \end_inset are defined, all of which share the extension \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout .pdf \end_layout \end_inset , and which correspond to the conversion methods just mentioned. \end_layout \begin_layout Chapter Internationalizing LyX \begin_inset CommandInset label LatexCommand label name "cha:Internationalizing-LyX" \end_inset \end_layout \begin_layout Standard LyX supports using a translated interface. Last time we checked, LyX provided text in thirty languages. The language of choice is called your \emph on locale \emph default . (For further reading on locale settings, see also the documentation for locale that comes with your operating system. For Linux, the manual page for \begin_inset Flex Code status collapsed \begin_layout Plain Layout locale(5) \end_layout \end_inset could be a good place to start). \end_layout \begin_layout Standard Notice that these translations will work, but do contain a few flaws. In particular, all dialogs have been designed with the English text in mind, which means that some of the translated text will be too large to fit within the space allocated. This is only a display problem and will not cause any harm. Also, you will find that some of the translations do not define shortcut keys for everything. Sometimes, there are simply not enough free letters to do it. Other times, the translator just hasn't got around to doing it yet. Our localization team, which you may wish to join, \begin_inset Foot status collapsed \begin_layout Plain Layout If you are a fluent speaker of a language other than English, joining these teams is a great way to give back to the LyX community! \end_layout \end_inset will of course try to fix these shortcomings in future versions of LyX. \end_layout \begin_layout Section Translating LyX \end_layout \begin_layout Subsection Translating the graphical user interface (text messages). \end_layout \begin_layout Standard LyX uses the GNU \begin_inset Flex Code status collapsed \begin_layout Plain Layout gettext \end_layout \end_inset library to handle the internationalization of the interface. To have LyX speak your favorite language in all menus and dialogs, you need a \begin_inset Flex Code status collapsed \begin_layout Plain Layout po \end_layout \end_inset -file for that language. When this is available, you'll have to generate a \begin_inset Flex Code status collapsed \begin_layout Plain Layout mo \end_layout \end_inset -file from it and install the \begin_inset Flex Code status collapsed \begin_layout Plain Layout mo \end_layout \end_inset -file. The process of doing all of this is explained in the documentation for GNU \begin_inset Flex Code status collapsed \begin_layout Plain Layout gettext \end_layout \end_inset . It is possible to do this just for yourself, but if you're going to do it, you might as well share the results of your labors with the rest of the LyX community. Send a message to the LyX developers' list for more information about how to proceed. \end_layout \begin_layout Standard In short, this is what you should do (xx denotes the language code): \end_layout \begin_layout Itemize Check out the LyX source code. (See the \begin_inset CommandInset href LatexCommand href name "information on the web" target "http://www.lyx.org/HowToUseSVN" \end_inset .) \end_layout \begin_layout Itemize Copy the file \begin_inset Flex Code status collapsed \begin_layout Plain Layout lyx.pot \end_layout \end_inset to the folder of the \begin_inset Flex Code status collapsed \begin_layout Plain Layout **.po \end_layout \end_inset files. Then rename it to \begin_inset Flex Code status collapsed \begin_layout Plain Layout xx.po \end_layout \end_inset . (If \begin_inset Flex Code status collapsed \begin_layout Plain Layout lyx.pot \end_layout \end_inset doesn't exist anywhere, it can be remade with the console command \begin_inset Flex Code status collapsed \begin_layout Plain Layout make lyx.pot \end_layout \end_inset in that directory, or you can use an existing po-file for some other language as a template). \end_layout \begin_layout Itemize Edit \begin_inset Flex Code status collapsed \begin_layout Plain Layout xx.po \end_layout \end_inset . \begin_inset Foot status collapsed \begin_layout Plain Layout This is just a text file, so it can be edited in any text editor. But there are also specialized programs that support such editing, such as \family typewriter Poedit \family default (for all platforms) or \family typewriter KBabel \family default (for KDE). \family typewriter Emacs \family default contains a `mode' for editing \begin_inset Flex Code status collapsed \begin_layout Plain Layout po \end_layout \end_inset files, as well. \end_layout \end_inset For some menu- and widget-labels, there are also shortcut keys that should be translated. Those keys are marked after a `|', and should be translated according to the words and phrases of the language. You should also fill also out the information at the beginning of the new \begin_inset Flex Code status collapsed \begin_layout Plain Layout po \end_layout \end_inset -file with your email-address, etc., so people know where to reach you with suggestions and entertaining flames. \end_layout \begin_layout Standard If you are just doing this on your own, then: \end_layout \begin_layout Itemize Generate \begin_inset Flex Code status collapsed \begin_layout Plain Layout xx.mo \end_layout \end_inset . This can be done with \begin_inset Flex Code status collapsed \begin_layout Plain Layout msgfmt -o xx.mo < xx.po \end_layout \end_inset . \end_layout \begin_layout Itemize Copy the \begin_inset Flex Code status collapsed \begin_layout Plain Layout mo \end_layout \end_inset -file to your locale-tree, at the correct directory for application messages for the language \series bold \series default xx, and under the name \begin_inset Flex Code status collapsed \begin_layout Plain Layout lyx.mo \end_layout \end_inset (e. \begin_inset space \thinspace{} \end_inset g. \begin_inset space \space{} \end_inset \begin_inset Flex Code status collapsed \begin_layout Plain Layout /usr/local/share/locale/xx/LC_MESSAGES/lyx.mo \end_layout \end_inset \series bold . \end_layout \begin_layout Standard As said, however, it would be best if the new \begin_inset Flex Code status collapsed \begin_layout Plain Layout po \end_layout \end_inset -file could be added to the LyX distribution, so others can use it. Adding it involves making additional changes to LyX. So send an email to the developers' mailing list if you're interested in doing that. \end_layout \begin_layout Subsubsection Ambiguous messages \end_layout \begin_layout Standard Sometimes it turns out that one English message needs to be translated into different messages in the target language. One example is the message \begin_inset Flex Code status collapsed \begin_layout Plain Layout To \end_layout \end_inset which has the German translation \lang german Nach \lang english or \lang german Bis \lang english , depending upon exactly what the English \begin_inset Quotes eld \end_inset to \begin_inset Quotes erd \end_inset means. GNU \begin_inset Flex Code status collapsed \begin_layout Plain Layout gettext \end_layout \end_inset does not handle such ambiguous translations. Therefore you have to add some context information to the message: Instead of \begin_inset Flex Code status collapsed \begin_layout Plain Layout To \end_layout \end_inset it becomes \begin_inset Flex Code status collapsed \begin_layout Plain Layout To[[as in 'From format x to format y']] \end_layout \end_inset and \begin_inset Flex Code status collapsed \begin_layout Plain Layout To[[as in 'From page x to page y']]. \end_layout \end_inset Now the two occurrences of \begin_inset Flex Code status collapsed \begin_layout Plain Layout To \end_layout \end_inset are different for \begin_inset Flex Code status collapsed \begin_layout Plain Layout gettext \end_layout \end_inset and can be translated correctly to \lang german Nach \lang english and \lang german Bis \lang english , respectively. \end_layout \begin_layout Standard Of course the context information needs to be stripped off the original message when no translation is used. Therefore you have to put it in double square brackets at the end of the message (see the example above). The translation mechanism of LyX ensures that everything in double square brackets at the end of messages is removed before displaying the message. \end_layout \begin_layout Subsection Translating the documentation. \end_layout \begin_layout Standard The online documentation (in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Help \end_layout \end_inset -menu) can (and should!) be translated. If there are translated versions of the documentation available \begin_inset Foot status collapsed \begin_layout Plain Layout As of March 2008, at least some of the documents have been translated into fourteen languages, with the Tutorial available in a few more. \end_layout \end_inset and the locale is set accordingly, these will be used automagically by LyX. LyX looks for translated versions as \begin_inset Flex Code status collapsed \begin_layout Plain Layout LyXDir/doc/xx/DocName.lyx \end_layout \end_inset , where \begin_inset Flex Code status collapsed \begin_layout Plain Layout xx \end_layout \end_inset is the code for the language currently in use. If there are no translated documents, the default English versions will be displayed. Note that the translated versions must have the same filenames ( \begin_inset Flex Code status collapsed \begin_layout Plain Layout DocName \end_layout \end_inset above) as the original. If you feel up to translating the documentation (an excellent way to proof-read the original documentation by the way!), there are a few things you should do right away: \end_layout \begin_layout Itemize Check out the documentation translation web page at \begin_inset CommandInset href LatexCommand href name "http://www.lyx.org/Translation" target "http://www.lyx.org/Translation" \end_inset . That way, you can find out which (if any) documents have already been translate d into your language. You can also find out who (if anyone) is organizing the effort to translate the documentation into your language. If no one is organizing the effort, please let us know that you're interested. \end_layout \begin_layout Standard Once you get to actually translating, here's a few hints for you that may save you trouble: \end_layout \begin_layout Itemize Join the documentation team! There is information on how to do that in \begin_inset Flex Code status collapsed \begin_layout Plain Layout Intro.lyx \end_layout \end_inset ( \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Help\SpecialChar \menuseparator Introduction \end_layout \end_inset ), which by the way is the first document you should translate. \end_layout \begin_layout Itemize Learn the typographic conventions for the language you are translating to. Typography is an ancient art and over the centuries, a great variety of conventions have developed throughout different parts of the world. Also study the professional terminology amongst typographers in your country. Inventing your own terminology will only confuse the users. \emph on (Warning! Typography is addictive!) \end_layout \begin_layout Itemize Make a copy of the document. This will be your working copy. You can use this as your personal translated help-file by placing it in your \begin_inset Flex Code status collapsed \begin_layout Plain Layout UserDir/doc/xx/ \end_layout \end_inset directory. \end_layout \begin_layout Itemize Sometimes the original document (from the LyX-team) will be updated. Use the source viewer at \begin_inset CommandInset href LatexCommand href name "http://www.lyx.org/trac/timeline" target "http://www.lyx.org/trac/timeline" \end_inset to see what has been changed. That way you can easily see which parts of the translated document need to be updated. \end_layout \begin_layout Standard If you ever find an error in the original document, fix it and notify the rest of the documentation team of the changes! (You didn't forget to join the documentation team, did you?) \end_layout \begin_layout Standard \begin_inset Branch OutDated status collapsed \begin_layout Section International Keyboard Support \end_layout \begin_layout Standard \emph on [Editor's Note: The following section is by \emph default \shape smallcaps \emph on Ivan Schreter \shape default . It needs to be fixed to conform to the new Documentation Style sheet and to make use of the new v1.0 features. The whole thing also needs to be merged with the section following it.-jw It may also be badly out of date.-rh (2008)] \end_layout \begin_layout Subsection Defining Own Keymaps: Keymap File Format \end_layout \begin_layout Standard Let's look at a keyboard definition file a little closer. It is a plain text file defining \end_layout \begin_layout Itemize key-to-key or key-to-string translations \end_layout \begin_layout Itemize dead keys \end_layout \begin_layout Itemize dead keys exceptions \end_layout \begin_layout Standard To define key-to-key or key-to-string translation, use this command: \end_layout \begin_layout Quotation \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash kmap \end_layout \end_inset \begin_inset Flex Code status collapsed \begin_layout Plain Layout key \end_layout \end_inset outstring \end_layout \begin_layout Standard where \begin_inset Flex Code status collapsed \begin_layout Plain Layout key \end_layout \end_inset is the key to be translated and \begin_inset Flex Code status collapsed \begin_layout Plain Layout outstring \end_layout \end_inset is the string to be inserted into the document. To define dead keys, use: \end_layout \begin_layout Quotation \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash kmod \end_layout \end_inset \begin_inset Flex Code status collapsed \begin_layout Plain Layout key \end_layout \end_inset deadkey \end_layout \begin_layout Standard where \begin_inset Flex Code status collapsed \begin_layout Plain Layout key \end_layout \end_inset is a keyboard key and \begin_inset Flex Code status collapsed \begin_layout Plain Layout deadkey \end_layout \end_inset is dead key name. The following dead keys are supported (shortcut name is in parentheses): \end_layout \begin_layout Quotation \emph on Name \begin_inset space \hfill{} \end_inset Example \end_layout \begin_layout Quotation acute (acu) \begin_inset space \hfill{} \end_inset áéíóú \end_layout \begin_layout Quotation grave (gra) \begin_inset space \hfill{} \end_inset àèìòù \end_layout \begin_layout Quotation macron (mac) \begin_inset space \hfill{} \end_inset ō \end_layout \begin_layout Quotation tilde (til) \begin_inset space \hfill{} \end_inset ñÑ \end_layout \begin_layout Quotation underbar (underb) \begin_inset space \hfill{} \end_inset \begin_inset ERT status open \begin_layout Plain Layout \backslash b o \end_layout \end_inset \end_layout \begin_layout Quotation cedilla (ced) \begin_inset space \hfill{} \end_inset çÇ \end_layout \begin_layout Quotation underdot (underd) \begin_inset space \hfill{} \end_inset \begin_inset ERT status open \begin_layout Plain Layout \backslash d o \end_layout \end_inset \end_layout \begin_layout Quotation circumflex (circu) \begin_inset space \hfill{} \end_inset âêîôû \end_layout \begin_layout Quotation circle (circl) \begin_inset space \hfill{} \end_inset ÅůŮ \end_layout \begin_layout Quotation tie (tie) \begin_inset space \hfill{} \end_inset \begin_inset ERT status open \begin_layout Plain Layout \backslash t o \end_layout \end_inset \end_layout \begin_layout Quotation breve (bre) \begin_inset space \hfill{} \end_inset ă \begin_inset ERT status open \begin_layout Plain Layout \backslash u o \end_layout \end_inset \end_layout \begin_layout Quotation caron (car) \begin_inset space \hfill{} \end_inset čšž \end_layout \begin_layout Quotation hungarian umlaut (hug) \begin_inset space \hfill{} \end_inset őű \end_layout \begin_layout Quotation umlaut (uml) \begin_inset space \hfill{} \end_inset äöü \end_layout \begin_layout Quotation dot (dot) \begin_inset space \hfill{} \end_inset ż \begin_inset ERT status open \begin_layout Plain Layout \backslash .s \end_layout \end_inset \end_layout \begin_layout Standard Since in many international keyboards there are exceptions to what some dead keys should do, you can define them using \end_layout \begin_layout Quotation \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash kxmod \end_layout \end_inset deadkey key outstring \end_layout \begin_layout Standard For example, on Slovak keyboard, if you enter caron-o, it generates circumflex-o , so you put in \end_layout \begin_layout Quotation \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash kxmod \end_layout \end_inset caron o " \backslash ^o" \end_layout \begin_layout Standard to make it work correctly. Also, you have to define as exceptions dead keys over i and j, to remove the dot from them before inserting an accent mark. I will change this when the time comes, but so far I haven't had time. \end_layout \begin_layout Standard Oh, and about characters: backslash is escaped, so to enter it, you'll need double backslash. Also, quotes and \begin_inset Flex Code status collapsed \begin_layout Plain Layout # \end_layout \end_inset have different meaning. \begin_inset Flex Code status collapsed \begin_layout Plain Layout # \end_layout \end_inset marks comments, quotes start and end LaTeX-style commands. To enter quote, you'll need to use \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash " \end_layout \end_inset , to enter \begin_inset Flex Code status collapsed \begin_layout Plain Layout # \end_layout \end_inset , use \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash # \end_layout \end_inset . \end_layout \begin_layout Standard If you make a keyboard description file that works for your language, please mail it to me, so I can include it in the next keymap distribution. \end_layout \begin_layout Standard More keywords will be supported in keymap configuration file in future, like \end_layout \begin_layout Itemize \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash kinclude filename \end_layout \end_inset \emph on \begin_inset space \hfill{} \end_inset \begin_inset Flex Code status collapsed \begin_layout Plain Layout include \end_layout \end_inset another file \end_layout \begin_layout Itemize \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash kprog program \end_layout \end_inset \emph on \begin_inset space \hfill{} \end_inset \begin_inset Flex Code status collapsed \begin_layout Plain Layout define \end_layout \end_inset an external keymap translation program \end_layout \begin_layout Standard Also, it should look into \begin_inset Flex Code status collapsed \begin_layout Plain Layout lyxrc \end_layout \end_inset file for defaults, too (for example, a \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash kinclude \end_layout \end_inset option to include default keyboard). \end_layout \end_inset \end_layout \begin_layout Section International Keymap Stuff \begin_inset CommandInset label LatexCommand label name "sec:International-Keymap-Stuff" \end_inset \end_layout \begin_layout Standard \begin_inset Note Note status open \begin_layout Plain Layout In doing the revisions on this document in March 2008, I did not look over this stuff, as I do not understand it. It would be good if someone else could do so. (RH) \end_layout \end_inset \end_layout \begin_layout Standard The next two sections describe the \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up .kmap \end_layout \end_inset and \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up .cdef \end_layout \end_inset file syntax in detail. These sections should help you design your own key map if the ones provided do not meet your needs. \end_layout \begin_layout Subsection The .kmap File \end_layout \begin_layout Standard A \shape up . \begin_inset Flex Code status collapsed \begin_layout Plain Layout kmap \end_layout \end_inset file maps keystrokes to characters or strings. As the name suggests, it sets a keyboard mapping. The \begin_inset Flex Code status collapsed \begin_layout Plain Layout .kmap \end_layout \end_inset \shape default file keywords \shape up \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up kmap \end_layout \end_inset \shape default , \shape up \shape default \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up kmod \end_layout \end_inset , \shape up \shape default \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up kxmod \end_layout \end_inset , and \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up kcomb \end_layout \end_inset are described in this section. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up kmap \end_layout \end_inset Map a character to a string \end_layout \begin_layout LyX-Code \backslash kmap \family roman \emph on char \family default \emph default \family roman \emph on string \end_layout \begin_layout Standard This will ma \family roman p \family default \family roman \emph on char \family default \emph default \family roman to \family default \family roman \emph on string \emph default . Note that in \family default \family roman \emph on string \emph default , \family default \family roman \shape up the double-quote (") \family default \shape default \family roman and \family default \family roman \shape up the backslash ( \backslash ) \family default \shape default \family roman must be escaped with a preceding backslash ( \shape up \backslash \shape default ) \family default . \end_layout \begin_layout Standard An example of a \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout \shape up kmap \end_layout \end_inset statement to cause the symbol \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout \shape up / \end_layout \end_inset to be output for the keystroke \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout \shape up & \end_layout \end_inset is: \end_layout \begin_layout LyX-Code \backslash kmap & / \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up kmod \end_layout \end_inset Specify an accent character \end_layout \begin_layout LyX-Code \backslash kmod \family roman \emph on char accent allowed \end_layout \begin_layout Standard This will make the cha \family roman racter \family default \family roman \emph on char \family default \emph default \family roman \shape up \emph on be an accent \family default \shape default \emph default \family roman \shape up on the \family default \shape default \family roman \shape up \emph on allowed \family default \shape default \emph default \family roman \shape up cha \family default racter(s). This is the dead key \begin_inset Foot status collapsed \begin_layout Plain Layout The term \family roman \emph on dead key \family default \emph default refers to a key that does not produce a character by itself, but when followed with another key, produces the desired accent character. For example, a German characte \family roman r with an umlaut like \family default \family roman \emph on ä \family default \emph default \family roman can be produced in this manner. \end_layout \end_inset mechanism. \end_layout \begin_layout Standard If you \family roman hit \family default \family roman \emph on char \family default \emph default \family roman and then another key not in \family default \family roman \emph on allowed \emph default , you will get a \family default \family roman \emph on char \family default \emph default \family roman followed by the other, not allowed key, as output. \family default Note that a \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout \shape up Backspace \end_layout \end_inset cancels a dead key, so if \family roman you hit \family default \family roman \emph on char \family default \emph default \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout \shape up \emph on Backspace \end_layout \end_inset , the cursor will not go one position backwards but will instead cancel the effect t \family roman hat \family default \family roman \shape up \emph on char \family default \shape default \emph default \family roman \shape up might have had on the next keystroke. \end_layout \begin_layout Standard The following example specifies that the character ' is to be an acute accent, allowed on the characters a, e, i, o, u, A, E, I, O, and U: \end_layout \begin_layout LyX-Code \backslash kmod ' acute aeiouAEIOU \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout kxmod \end_layout \end_inset Specify an exception to the accent character \end_layout \begin_layout LyX-Code \backslash kxmod \family roman \emph on accent char result \end_layout \begin_layout Standard This defines an exce \family roman ption for \family default \family roman \emph on accent \family default \emph default \family roman on \family default \family roman \emph on char \emph default . T \shape up he \family default \shape default \family roman \shape up \emph on accent \family default \shape default \emph default \family roman \shape up must \family default \shape default \shape up have been assigned a keystroke with a previous \shape default \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up \backslash kmo \shape default d \end_layout \end_inset declar \family roman ation and \family default \family roman \emph on char \family default \emph default \family roman must not belong in the \family default \family roman \emph on allowed \family default \emph default \family roman set of \family default \family roman \emph on accent \emph default . When \family default \family roman \shape up you enter the \family default \shape default \family roman \shape up \emph on accent char \family default \shape default \emph default \family roman \shape up sequence, \family default \shape default \family roman \shape up \emph on result \emph default is produced. If such a declaration does not exist in \family default \shape default \shape up the \shape default \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up .kmap \end_layout \end_inset file and yo \family roman u enter \family default \family roman \emph on accent char \emph default , you get \family default \family roman \emph on accent_key char \emph default where \family default \family roman \emph on accent_key \emph default is the first arg \family default ument of the \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up \backslash kmod \end_layout \end_inset declaration. \end_layout \begin_layout Standard The following command produces causes äi to be produced when you enter acute-i ('i): \end_layout \begin_layout LyX-Code \backslash kxmod acute i " \backslash \backslash '{ \backslash \backslash i}" \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 \begin_inset Flex Code status collapsed \begin_layout Plain Layout kcomb \end_layout \end_inset Combine two accent characters \end_layout \begin_layout LyX-Code \backslash kcomb \family roman \emph on accent1 accent2 allowed \end_layout \begin_layout Standard This one is getting pretty esoteric. It allows you to combine the effect \family roman of \family default \family roman \emph on accent1 \family default \emph default \family roman and \family default \family roman \emph on accent2 \family default \emph default \family roman (in that order!) on \family default \family roman \emph on allowed \family default \emph default \family roman chars. The keystrokes for \family default \family roman \emph on accent1 \family default \emph default \family roman and \family default \family roman \emph on accent2 \family default \emph default \family roman must have be \family default en set with a \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up \backslash kmod \end_layout \end_inset command at \family roman a \family default \family roman \emph on previous \family default \emph default \family roman point in the \family default file. \end_layout \begin_layout Standard Consider this example from the \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up greek.kmap \end_layout \end_inset file: \end_layout \begin_layout LyX-Code \backslash kmod ; acute aeioyvhAEIOYVH \backslash kmod : umlaut iyIY \backslash kcomb acute umlaut iyIY \end_layout \begin_layout Standard This allows you to press \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout \shape up ;:i \end_layout \end_inset and get the effect of \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up \backslash '{ \backslash "{i}} \end_layout \end_inset . \family roman \shape up A backspace \family default \shape default in this case cancels the last dead key, so if you press \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout \shape up ;: Backspace i \end_layout \end_inset you get \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up \backslash '{i} \end_layout \end_inset . \end_layout \begin_layout Subsection The .cdef File \end_layout \begin_layout Standard After the \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up .kmap \end_layout \end_inset mapping is performed, a \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up .cde \shape default f \end_layout \end_inset file maps the strings that the symbols generate to characters in the current font. The LyX distribution currently includes at least the \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up iso8859-1.cdef \end_layout \end_inset and \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up iso8859-2.cdef \end_layout \end_inset files. \end_layout \begin_layout Standard In general the \begin_inset Flex Code status collapsed \begin_layout Plain Layout \shape up .cdef \end_layout \end_inset file is a sequence of declarations of the form \end_layout \begin_layout LyX-Code \family roman \emph on char_index_in_set \family default \emph default \family roman \emph on string \end_layout \begin_layout Standard For example, in order to map \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout \shape up \backslash '{e} \end_layout \end_inset to the corresponding character in the iso-8859-1 set (233), the following declaration is used \end_layout \begin_layout LyX-Code 233 " \backslash \backslash '{e}" \end_layout \begin_layout Standard with \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash \end_layout \end_inset and \begin_inset Flex Code status collapsed \begin_layout Plain Layout " \end_layout \end_inset being escap \family roman ed in \family default \family roman \emph on string \emph default . Note that \family default the same character can apply to more than one string. In the \begin_inset Flex Code status collapsed \begin_layout Plain Layout i \shape up so-8859-7.cdef \end_layout \end_inset file you have \end_layout \begin_layout LyX-Code 192 " \backslash \backslash '{ \backslash \backslash \backslash "{i}}" \begin_inset Newline newline \end_inset 192 " \backslash \backslash \backslash "{ \backslash \backslash '{i}}" \end_layout \begin_layout Standard If LyX cannot find a mapping for the string produced by the keystroke or a deadkey sequence, it will check if it looks like an accented char and try to draw an accent over the character on screen. \end_layout \begin_layout Subsection Dead Keys \end_layout \begin_layout Standard There is a second way to add support for international characters through so-called dead-keys. A dead-key works in combination with a letter to produce an accented character. Here, we'll explain how to create a really simple dead-key to illustrate how they work. \end_layout \begin_layout Standard Suppose you happen to need the circumflex character, \begin_inset Quotes eld \end_inset ̂ \begin_inset Quotes erd \end_inset . You could bind the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout ^ \end_layout \end_inset -key [a.k.a. \begin_inset space ~ \end_inset \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Shift-6 \end_layout \end_inset ] to the LyX command \begin_inset Flex Code status collapsed \begin_layout Plain Layout accent-circumflex \end_layout \end_inset in your \begin_inset Flex Code status collapsed \begin_layout Plain Layout lyxrc \end_layout \end_inset file. Now, whenever you type the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout ^ \end_layout \end_inset -key followed by a letter, that letter will have a circumflex accent on it. For example, the sequence \begin_inset Quotes eld \end_inset \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout ^e \end_layout \end_inset \begin_inset Quotes erd \end_inset produces the letter: \begin_inset Quotes eld \end_inset ê \begin_inset Quotes erd \end_inset . If you tried to type \begin_inset Quotes eld \end_inset \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout ^t \end_layout \end_inset \begin_inset Quotes erd \end_inset , however, LyX will complain with a beep, since a \begin_inset Quotes eld \end_inset \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout t \end_layout \end_inset \begin_inset Quotes erd \end_inset never takes a circumflex accent. Hitting \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Space \end_layout \end_inset after a dead-key produces the bare-accent. Please note this last point! If you bind a key to a dead-key, you'll need to rebind the character on that key to yet another key. Binding the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout ,-key \end_layout \end_inset to a cedilla is a bad idea, since you'll only get cedillas instead of commas. \end_layout \begin_layout Standard One common way to bind dead-keys is to use \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Meta- \end_layout \end_inset , \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Ctrl- \end_layout \end_inset , and \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Shift- \end_layout \end_inset in combination with an accent, like \begin_inset Quotes eld \end_inset \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout ~ \end_layout \end_inset \begin_inset Quotes erd \end_inset or \begin_inset Quotes eld \end_inset \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout , \end_layout \end_inset \begin_inset Quotes erd \end_inset or \begin_inset Quotes eld \end_inset \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout ^ \end_layout \end_inset \begin_inset Quotes erd \end_inset . Another way involves using \begin_inset Flex Code status collapsed \begin_layout Plain Layout xmodmap \end_layout \end_inset and \begin_inset Flex Code status collapsed \begin_layout Plain Layout xkeycaps \end_layout \end_inset to set up the special \begin_inset Flex Code status collapsed \begin_layout Plain Layout Mode_Switch \end_layout \end_inset key. The \begin_inset Flex Code status collapsed \begin_layout Plain Layout Mode_Switch \end_layout \end_inset acts in some ways just like \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Shift \end_layout \end_inset and permits you to bind keys to accented characters. You can also turn keys into dead-keys by binding them to something like \begin_inset Flex Code status collapsed \begin_layout Plain Layout usldead_cedilla \end_layout \end_inset and then binding this symbolic key to the corresponding LyX command. \begin_inset Foot status collapsed \begin_layout Plain Layout Note from \noun on John Weiss \noun default : This is exactly what I do in my \begin_inset Flex Code status collapsed \begin_layout Plain Layout ~/.lyx/lyxrc \end_layout \end_inset and my \begin_inset Flex Code status collapsed \begin_layout Plain Layout ~/.xmodmap \end_layout \end_inset files. I have my \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Scroll \begin_inset space ~ \end_inset Lock \end_layout \end_inset key set up as \begin_inset Flex Code status collapsed \begin_layout Plain Layout Mode_Shift \end_layout \end_inset and a bunch of these \begin_inset Quotes eld \end_inset \begin_inset Flex Code status collapsed \begin_layout Plain Layout usldead_* \end_layout \end_inset \begin_inset Quotes erd \end_inset symbolic keys bound such things as \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Scroll \begin_inset space ~ \end_inset Lock-^ \end_layout \end_inset and \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Scroll \begin_inset space ~ \end_inset Lock-~ \end_layout \end_inset . This is how I produce my accented characters. \end_layout \end_inset You can make just about anything into the \begin_inset Flex Code status collapsed \begin_layout Plain Layout Mode_Switch \end_layout \end_inset key: One of the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Ctrl- \end_layout \end_inset keys, a spare function key, etc. As for the LyX commands that produce accents, check the entry for \begin_inset Flex Code status collapsed \begin_layout Plain Layout accent-acute \end_layout \end_inset in the \emph on Reference Manual \emph default . You'll find the complete list there. \end_layout \begin_layout Subsection Saving your Language Configuration \end_layout \begin_layout Standard You can edit your preferences so that your desired language environment is automatically configured when LyX starts up, via the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Edit\SpecialChar \menuseparator Preferences \end_layout \end_inset dialog. \end_layout \begin_layout Chapter Installing New Document Classes, Layouts, and Templates \begin_inset CommandInset label LatexCommand label name "cha:Installing-New-Document" \end_inset \begin_inset Argument 1 status collapsed \begin_layout Plain Layout Installing New Document Classes \end_layout \end_inset \end_layout \begin_layout Standard In this chapter, we describe the procedures for creating and installing new LyX layout and template files, as well as offer a refresher on correctly installing new LaTeX document classes. \end_layout \begin_layout Standard First, let us a say a few words about how one ought to think about the relation between LyX and LaTeX. The thing to understand is that, in a certain sense, LyX doesn't know anything about LaTeX. Indeed, from LyX's point of view, LaTeX is just one of several \begin_inset Quotes eld \end_inset backend formats \begin_inset Quotes erd \end_inset in which it is capable of producing output. Other such formats are DocBook, plaintext, and XHTML. LaTeX is, of course, a particularly important format, but very little of the information LyX has about LaTeX is actually contained in the program itself. \begin_inset Foot status collapsed \begin_layout Plain Layout Some commands are sufficiently complex that they are \begin_inset Quotes eld \end_inset hardcoded \begin_inset Quotes erd \end_inset into LyX. But the developers generally regard this as a Bad Thing. \end_layout \end_inset Rather, that information, even for the standard classes like \begin_inset Flex Code status collapsed \begin_layout Plain Layout article.cls \end_layout \end_inset , is contained in `layout files'. Similarly, LyX itself does not know much about DocBook or XHTML. What it knows is contained in layout files. \end_layout \begin_layout Standard You can think of the layout file for a given document class as a translation manual between LyX constructs---paragraphs with their corresponding styles, certain sorts of insets, etc---and the corresponding LaTeX, DocBook, or XHTML constructs. Almost everything LyX knows about \begin_inset Flex Code status collapsed \begin_layout Plain Layout article.cls \end_layout \end_inset , for example, is contained in the file \begin_inset Flex Code status collapsed \begin_layout Plain Layout article.layout \end_layout \end_inset and in various other files it includes. For this reason, anyone intending to write layout files should plan to study the existing files. A good place to start is with \begin_inset Flex Code status collapsed \begin_layout Plain Layout stdsections.inc \end_layout \end_inset , which is included in \begin_inset Flex Code status collapsed \begin_layout Plain Layout article.layout \end_layout \end_inset , \begin_inset Flex Code status collapsed \begin_layout Plain Layout book.layout \end_layout \end_inset , and many of the other layout files for document classes. This file is where sections and the like are defined: \begin_inset Flex Code status collapsed \begin_layout Plain Layout stdsections.inc \end_layout \end_inset tells LyX how paragraphs that are marked with the Section, Subsection, etc, styles can be translated into corresponding LaTeX, DocBook, and XHTML commands and tags. The \begin_inset Flex Code status collapsed \begin_layout Plain Layout article.layout \end_layout \end_inset file basically just includes several of these \begin_inset Flex Code status collapsed \begin_layout Plain Layout std*.inc \end_layout \end_inset files. \end_layout \begin_layout Standard Defining the LyX--LaTeX correspondence is not the only thing layout files do, though. Their other job is to define how the LyX constructs themselves will appear on-screen. The fact that layout files have these two jobs is often a source of confusion, because they are completely separate. Telling LyX how to translate a certain paragraph style into LaTeX does not tell LyX how to display it; conversely, telling LyX how to display a certain paragraph style does not tell LyX how to translate it into LaTeX (let alone tell LaTeX how to display it). So, in general, when you define a new LyX construct, you must always do two quite separate things: (i) \begin_inset space ~ \end_inset tell LyX how to translate it into LaTeX and (ii) \begin_inset space ~ \end_inset tell LyX how to display it. \end_layout \begin_layout Standard Much the same is true, of course, as regards LyX's other backend formats, though XHTML is in some ways different, because in that case LyX \emph on is \emph default able, to some extent, to use information about how it should display a paragraph on the screen to output information (in the form of CSS) about how the paragraph should be displayed in a browser. Even in this case, however, the distinction between what LyX does internally and how things are rendered externally remains in force, and the two can be controlled separately. See \begin_inset CommandInset ref LatexCommand ref reference "sec:Tags-for-XHTML" \end_inset for the details. \end_layout \begin_layout Section Installing new LaTeX files \end_layout \begin_layout Standard Some installations may not include a LaTeX package or class file that you would like to use within LyX. For example, you might need FoilTeX, a package for preparing slides for overhead projectors. Modern LaTeX distributions like TeXLive (2008 or newer) or MiKTeX provide a user interface for installing such packages. For example, with MiKTeX, you start the program \begin_inset Quotes eld \end_inset Package \begin_inset space ~ \end_inset Manager \begin_inset Quotes erd \end_inset to get a list of available packages. To install one of them, right click on it or use the corresponding toolbar button. \end_layout \begin_layout Standard If your LaTeX distribution does not provide such a `package manager', or if the package is not available from your distribution, then follow these steps to install it manually: \end_layout \begin_layout Enumerate Get the package from \begin_inset CommandInset href LatexCommand href name "CTAN" target "http://www.ctan.org/" \end_inset or wherever. \end_layout \begin_layout Enumerate If the package contains a file with the ending \begin_inset Quotes eld \end_inset \begin_inset Flex Code status collapsed \begin_layout Plain Layout .ins \end_layout \end_inset \begin_inset Quotes erd \end_inset (is the case for FoilTeX) then open a console, change to the folder of this file and execute the command \begin_inset Flex Code status collapsed \begin_layout Plain Layout latex foiltex.ins \end_layout \end_inset . You have now unpacked the package and have all files to install it. Most LaTeX-packages are not packed and you can skip this step. \end_layout \begin_layout Enumerate Now you need to decide if the package should be available for all users or only for you. \end_layout \begin_deeper \begin_layout Enumerate On *nix systems (Linux, OSX, etc.), if you want the new package to be available for all users on your system, then install it in your `local' TeX tree, otherwise install it in your own `user' TeX tree. Where these trees should be created, if they do not already exist, depends on your system. To find this out, look in the file \begin_inset Flex Code status collapsed \begin_layout Plain Layout texmf.cnf \end_layout \end_inset . \begin_inset Foot status collapsed \begin_layout Plain Layout This is usually in the directory \begin_inset Flex Code status collapsed \begin_layout Plain Layout $TEXMF/web2c \end_layout \end_inset , though you can execute the command \begin_inset Flex Code status collapsed \begin_layout Plain Layout kpsewhich texmf.cnf \end_layout \end_inset to locate it. \end_layout \end_inset The location of the `local' TeX tree is defined by the \begin_inset Flex Code status collapsed \begin_layout Plain Layout TEXMFLOCAL \end_layout \end_inset variable; this is usually somewhere like \begin_inset Flex Code status collapsed \begin_layout Plain Layout /usr/local/share/texmf \end_layout \end_inset . The location of the `user' TeX tree is defined by \begin_inset Flex Code status collapsed \begin_layout Plain Layout TEXMFHOME \end_layout \end_inset and is commonly \begin_inset Flex Code status collapsed \begin_layout Plain Layout $HOME/texmf \end_layout \end_inset . (If these variables are not predefined, you have to define them.) You'll probably need root permissions to create or modify the `local' tree, but not for your `user' tree. \begin_inset Newline newline \end_inset In general, it is recommended to install in the user tree because your user will not be modified or even overwritten when you upgrade your system. It will typically also be backed up together with everything else when you backup your home directory (which, of course, you do on a regular basis). \end_layout \begin_layout Enumerate On Windows, if you want the new package to be available for all users on your system, change to the folder where LaTeX is installed and then change to the subfolder \begin_inset Flex Code status collapsed \begin_layout Plain Layout ~ \backslash tex \backslash latex \end_layout \end_inset . (For MiKTeX, this would be by default the folder \begin_inset Flex Code status collapsed \begin_layout Plain Layout ~: \backslash Programs \backslash MiKTeX \backslash tex \backslash latex \end_layout \end_inset .) \begin_inset Foot status open \begin_layout Plain Layout Note that this will be the correct path only on English installations. On a German one, it would be \begin_inset Flex Code status collapsed \begin_layout Plain Layout ~: \backslash Programme \backslash MiKTeX \backslash tex \backslash latex \end_layout \end_inset , and similarly for other languages. \end_layout \end_inset Create there a new folder \begin_inset Flex Code status collapsed \begin_layout Plain Layout foiltex \end_layout \end_inset and copy all files of the package into it. \begin_inset Newline newline \end_inset If the package should only available for you or you don't have admin permissions , do the same, but in the local LaTeX folder. E. \begin_inset space \thinspace{} \end_inset g., for MiKTeX \begin_inset space ~ \end_inset 2.8 under Windows XP, this would be the folder: \begin_inset Newline newline \end_inset \family sans \begin_inset Flex Code status collapsed \begin_layout Plain Layout ~: \backslash Documents and Settings \backslash \backslash Application Data \backslash \end_layout \end_inset \begin_inset Newline newline \end_inset \family default \begin_inset Phantom HPhantom status open \begin_layout Plain Layout \family sans ~: \backslash \end_layout \end_inset \begin_inset Flex Code status collapsed \begin_layout Plain Layout MiKTeX \backslash 2.8 \backslash tex \backslash latex \end_layout \end_inset \begin_inset Newline newline \end_inset On Vista, it would be: \begin_inset Newline newline \end_inset \begin_inset Flex Code status collapsed \begin_layout Plain Layout ~: \backslash Users \backslash \backslash AppData \backslash Roaming \backslash 2.8 \backslash MiKTeX \backslash tex \backslash latex \end_layout \end_inset \end_layout \end_deeper \begin_layout Enumerate Now one only need to tell LaTeX that there are new files. This depends on the used LaTeX-Distribution: \end_layout \begin_deeper \begin_layout Enumerate For TeXLive execute the command \begin_inset Flex Code status collapsed \begin_layout Plain Layout texhash \end_layout \end_inset from a console. If you installed the package for all users, then you will probably need to have root permissions for that. \end_layout \begin_layout Enumerate For MiKTeX, if you have installed the package for all users, start the program \begin_inset Quotes eld \end_inset Settings \begin_inset space ~ \end_inset (Admin) \begin_inset Quotes erd \end_inset and press the button marked \begin_inset Quotes eld \end_inset Refresh FNDB \begin_inset Quotes erd \end_inset . Otherwise start the program \begin_inset Quotes eld \end_inset Settings \begin_inset Quotes erd \end_inset and do the same. \end_layout \end_deeper \begin_layout Enumerate Finally, you need to tell LyX that there are new packages available. So, in LyX, use the menu \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Tools \family sans \SpecialChar \menuseparator Reconfigure \end_layout \end_inset and then restart LyX. \end_layout \begin_layout Standard Now the package is installed. In our example, the document class \begin_inset Flex Code status collapsed \begin_layout Plain Layout Slides \begin_inset space ~ \end_inset (FoilTe \begin_inset ERT status collapsed \begin_layout Plain Layout {} \end_layout \end_inset x) \end_layout \end_inset will now be available under \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Document\SpecialChar \menuseparator Settings\SpecialChar \menuseparator Document Class \end_layout \end_inset . \end_layout \begin_layout Standard If you would like to use a LaTeX document class that is not even listed in the menu \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Document\SpecialChar \menuseparator Settings\SpecialChar \menuseparator Document Class \end_layout \end_inset , then you need to create a `layout' file for it. That is the topic of the next section. \end_layout \begin_layout Section Types of layout files \end_layout \begin_layout Standard This section describes the various sorts of LyX files that contain layout information. These files describe various paragraph and character styles, determining how LyX should display them and how they should be translated into LaTeX, DocBook, XHTML, or whatever output format is being used. \end_layout \begin_layout Standard We shall try to provide a thorough description of the process of writing layout files here. However, there are so many different types of documents supported even by just LaTeX that we can't hope to cover every different possibility or problem you might encounter. The LyX users' list is frequented by people with lots of experience with layout design who are willing to share what they've learned, so please feel free to ask questions there. \end_layout \begin_layout Standard As you prepare to write a new layout, it is extremely helpful to look at the layouts distributed with LyX. If you write a LyX layout for a LaTeX document class that might also be used by others, or write a module that might be useful to others, then you should consider posting your layout to the \begin_inset CommandInset href LatexCommand href name "layout section on the LyX wiki" target "http://wiki.lyx.org/Layouts/Layouts" \end_inset or even to the LyX developers' list, so that it might be included in LyX itself. \begin_inset Foot status collapsed \begin_layout Plain Layout Note that LyX is licensed under the General Public License, so any material that is contributed to LyX must be similarly licensed. \end_layout \end_inset \end_layout \begin_layout Subsection Layout modules \begin_inset CommandInset label LatexCommand label name "sub:Layout-modules" \end_inset \end_layout \begin_layout Standard We have spoken to this point about `layout files'. But there are different sorts of files that contain layout information. Layout files, strictly so called, have the \begin_inset Flex Code status collapsed \begin_layout Plain Layout .layout \end_layout \end_inset extension and provide LyX with information about document classes. As of LyX 1.6, however, layout information can also be contained in layout \emph on modules \emph default , which have the \begin_inset Flex Code status collapsed \begin_layout Plain Layout .module \end_layout \end_inset extension. Modules are to LaTeX packages much as layouts are to LaTeX classes, and some modules—such as the \begin_inset Flex Code status collapsed \begin_layout Plain Layout endnotes \end_layout \end_inset module—specifically provide support for one package. In a sense, layout modules are similar to included \begin_inset Foot status collapsed \begin_layout Plain Layout These can have any extension, but by convention have the \begin_inset Flex Code status collapsed \begin_layout Plain Layout .inc \end_layout \end_inset extension. \end_layout \end_inset files—files like \begin_inset Flex Code status collapsed \begin_layout Plain Layout stdsections.inc \end_layout \end_inset —in that modules are not specific to a given document class but may be used with many different classes. The difference is that using an included file with \begin_inset Flex Code status collapsed \begin_layout Plain Layout article.cls \end_layout \end_inset requires editing that file. Modules, by contrast, are selected in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Document\SpecialChar \menuseparator Settings \end_layout \end_inset dialog. \end_layout \begin_layout Standard Building modules is the easiest way to get started with layout editing, since it can be as simple as adding a single new paragraph style or flex inset. But modules may, in principle, contain anything a layout file can contain. \end_layout \begin_layout Standard After creating a new module and copying it to the \begin_inset Flex Code status collapsed \begin_layout Plain Layout layouts/ \end_layout \end_inset folder, you will need to reconfigure and then restart LyX for the module to appear in the menu. However, changes you make to the module will be seen immediately, if you open \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Document\SpecialChar \menuseparator Settings \end_layout \end_inset , highlight something, and then hit \begin_inset Quotes eld \end_inset OK \begin_inset Quotes erd \end_inset . \emph on It is strongly recommended that you save your work before doing this \emph default . In fact, \emph on it is strongly recommended that you not attempt to edit modules while simultaneo usly working on actual documents \emph default . Though of course the developers strive to keep LyX stable in such situations, syntax errors and the like in your module file could cause strange behavior. \end_layout \begin_layout Subsubsection Local Layout \end_layout \begin_layout Standard Modules are to LyX as packages are to LaTeX. Sometimes, however, you find yourself wanting a specific inset or character style just for one document and writing a module that will also be available to other documents makes little sense. What you need is LyX's \begin_inset Quotes eld \end_inset Local Layout \begin_inset Quotes erd \end_inset . \end_layout \begin_layout Standard You will find it under \family sans Document\SpecialChar \menuseparator Settings\SpecialChar \menuseparator Local Layout \family default . The large text box allows you to enter anything that you might enter in a layout file or module. You can think of a document's local layout, in fact, as a module that belongs just to it. So, in particular, you must enter a \begin_inset Flex Code status collapsed \begin_layout Plain Layout Format \end_layout \end_inset tag. Any format is acceptable, but one would normally use the format current at the time. (In LyX 2.0, the current layout format is 35.) You should be aware that local layout is not supported by versions of LyX prior to 1.6, so you should not use it if you want to be able to export your document to LyX 1.5 or earlier (without, that is, losing the local layout information). If you wish to be able to export to 1.6---local layout is supported in 1.6, though there is no UI for it---then you should use format 11 and, of course, use only layout constructs that were available in LyX 1.6. \end_layout \begin_layout Standard When you have entered something in the \begin_inset Flex Code status collapsed \begin_layout Plain Layout Local Layout \end_layout \end_inset pane, LyX will enable the \begin_inset Quotes eld \end_inset Validate \begin_inset Quotes erd \end_inset button at the bottom. Clicking this button will cause LyX to determine whether what you have entered is valid layout information for the chosen format. LyX will report the result but, unfortunately, will not tell you what errors there might have been. These will be written to the terminal, however, if LyX is started from a terminal. You will not be permitted to save your local layout until you have entered something valid. \end_layout \begin_layout Standard The warnings at the end of the previous section apply here, too. Do not play with local layout while you are actually working, especially if you have not saved your document. That said, using local layout with a test document can be a very convenient way to try out layout ideas, or even to start developing a module. \end_layout \begin_layout Subsection Layout for \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout .sty \end_layout \end_inset files \end_layout \begin_layout Standard There are two situations you are likely to encounter when wanting to support a new LaTeX document class, involving style ( \begin_inset Flex Code status collapsed \begin_layout Plain Layout .sty \end_layout \end_inset ) files and LaTeX2e class ( \begin_inset Flex Code status collapsed \begin_layout Plain Layout .cls \end_layout \end_inset ) . Supporting a style file is usually fairly easy. Supporting a new class file is a bit harder. We'll discuss the former in this section and the latter in the next. Similar remarks apply, of course, if you want to support a new DocBook DTD. \end_layout \begin_layout Standard The easier case is the one in which your new document class is provided as a style file that is to be used in conjunction with an already supported document class. For the sake of the example, we'll assume that the style file is called \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout myclass.sty \end_layout \end_inset and that it is meant to be used with \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout report.cls \end_layout \end_inset , which is a standard class. \end_layout \begin_layout Standard Start by copying the existing class's layout file into your local directory: \begin_inset Foot status collapsed \begin_layout Plain Layout Of course, which directory is your local directory will vary by platform, and LyX allows you to specify your local directory on startup, too, using the \begin_inset Flex Code status collapsed \begin_layout Plain Layout -userdir \end_layout \end_inset option. \end_layout \end_inset \end_layout \begin_layout LyX-Code cp report.layout ~/.lyx/layouts/myclass.layout \end_layout \begin_layout Standard Then edit \begin_inset Flex Code status collapsed \begin_layout Plain Layout myclass.layout \end_layout \end_inset and change the line: \end_layout \begin_layout LyX-Code \backslash DeclareLaTeXClass{report} \end_layout \begin_layout Standard to read \end_layout \begin_layout LyX-Code \backslash DeclareLaTeXClass[report, myclass.sty]{report (myclass)} \end_layout \begin_layout Standard Then add: \end_layout \begin_layout LyX-Code Preamble \begin_inset Newline newline \end_inset \backslash usepackage{myclass} \begin_inset Newline newline \end_inset EndPreamble \end_layout \begin_layout Standard near the top of the file. \end_layout \begin_layout Standard Start LyX and select \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Tools\SpecialChar \menuseparator Reconfigure \end_layout \end_inset . Then restart LyX and try creating a new document. You should see " \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout report (myclass) \end_layout \end_inset " as a document class option in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Document\SpecialChar \menuseparator Settings \end_layout \end_inset dialog. It is likely that some of the sectioning commands and such in your new class will work differently from how they worked in the base class— \begin_inset Flex Code status collapsed \begin_layout Plain Layout report \end_layout \end_inset in this example—so you can fiddle around with the settings for the different sections if you wish. The layout information for sections is contained in \begin_inset Flex Code status collapsed \begin_layout Plain Layout stdsections.inc \end_layout \end_inset , but you do not need to copy and change this file. Instead, you can simply add your changes to your layout file, after the line \begin_inset Flex Code status collapsed \begin_layout Plain Layout Input stdclass.inc \end_layout \end_inset , which itself includes \begin_inset Flex Code status collapsed \begin_layout Plain Layout stdsections.inc \end_layout \end_inset . For example, you might add these lines: \end_layout \begin_layout LyX-Code Style Chapter \end_layout \begin_layout LyX-Code Font \end_layout \begin_layout LyX-Code Family Sans \end_layout \begin_layout LyX-Code EndFont \end_layout \begin_layout LyX-Code End \end_layout \begin_layout Standard to change the font for chapter headings to sans-serif. This will override (or, in this case, add to) the existing declaration for the Chapter style. \end_layout \begin_layout Standard Your new package may also provide commands or environments not present in the base class. In this case, you will want to add these to the layout file. See \begin_inset CommandInset ref LatexCommand ref reference "sec:TextClass" \end_inset for information on how to do so. \end_layout \begin_layout Standard If \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout myclass.sty \end_layout \end_inset can be used with several different document classes, and even if it cannot, you might find it easiest just to write a module that you can load with the base class. The simplest possible such module would be: \end_layout \begin_layout LyX-Code # \backslash DeclareLyXModule{My Package} \end_layout \begin_layout LyX-Code #DescriptionBegin \end_layout \begin_layout LyX-Code #Support for mypkg.sty. \end_layout \begin_layout LyX-Code #DescriptionEnd \begin_inset Newline newline \end_inset \end_layout \begin_layout LyX-Code Format 21 \begin_inset Newline newline \end_inset \end_layout \begin_layout LyX-Code Preamble \begin_inset Newline newline \end_inset \backslash usepackage{mypkg} \begin_inset Newline newline \end_inset EndPreamble \end_layout \begin_layout Standard A more complex module might modify the behavior of some existing constructs or define some new ones. Again, see \begin_inset CommandInset ref LatexCommand ref reference "sec:TextClass" \end_inset for discussion. \end_layout \begin_layout Subsection Layout for \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout .cls \end_layout \end_inset files \end_layout \begin_layout Standard There are two possibilities here. One is that the class file is itself based upon an existing document class. For example, many thesis classes are based upon \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout book.cls \end_layout \end_inset . To see whether yours is, look for a line like \end_layout \begin_layout LyX-Code \backslash LoadClass{book} \end_layout \begin_layout Standard in the file. If so, then you may proceed largely as in the previous section, though the \begin_inset Flex Code status collapsed \begin_layout Plain Layout DeclareLaTeXClass \end_layout \end_inset line will be different. If your new class is \begin_inset Flex Code status collapsed \begin_layout Plain Layout thesis \end_layout \end_inset and it is based upon \begin_inset Flex Code status collapsed \begin_layout Plain Layout book \end_layout \end_inset , then the line should read: \begin_inset Foot status collapsed \begin_layout Plain Layout And it will be easiest if you save the file to \begin_inset Flex Code status collapsed \begin_layout Plain Layout thesis.layout \end_layout \end_inset : LyX assumes that the document class has the same name as the layout file. \end_layout \end_inset \end_layout \begin_layout LyX-Code \backslash DeclareLaTeXClass[thesis,book]{thesis} \end_layout \begin_layout Standard If, on the other hand, the new class is not based upon an existing class, you will probably have to \begin_inset Quotes eld \end_inset roll your own \begin_inset Quotes erd \end_inset layout. We strongly suggest copying an existing layout file which uses a similar LaTeX class and then modifying it, if you can do so. At least use an existing file as a starting point so you can find out what items you need to worry about. Again, the specifics are covered below. \end_layout \begin_layout Subsection Creating templates \begin_inset CommandInset label LatexCommand label name "sub:Creating-Templates" \end_inset \end_layout \begin_layout Standard Once you have written a layout file for a new document class, you might want to consider writing a \emph on template \emph default for it, too. A template acts as a kind of tutorial for your layout, showing how it might be used, though containing dummy content. You can of course look at the various templates included with LyX for ideas. \end_layout \begin_layout Standard Templates are created just like usual documents: using LyX. The only difference is that usual documents contain all possible settings, including the font scheme and the paper size. Usually a user doesn't want a template to overwrite his preferred settings for such parameters. For that reason, the designer of a template should remove the corresponding commands like \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash font_roman \end_layout \end_inset or \begin_inset Flex Code status collapsed \begin_layout Plain Layout \backslash papersize \end_layout \end_inset from the template LyX file. This can be done with any simple text-editor, for example \begin_inset Flex Code status collapsed \begin_layout Plain Layout vi \end_layout \end_inset or \begin_inset Flex Code status collapsed \begin_layout Plain Layout notepad \end_layout \end_inset . \end_layout \begin_layout Standard Put the edited template files you create in \begin_inset Flex Code status collapsed \begin_layout Plain Layout UserDir/templates/ \end_layout \end_inset , copy the ones you use from the global template directory in \begin_inset Flex Code status collapsed \begin_layout Plain Layout LyXDir/templates/ \end_layout \end_inset to the same place, and redefine the template path in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Tools\SpecialChar \menuseparator Preferences\SpecialChar \menuseparator Paths \end_layout \end_inset dialog. \end_layout \begin_layout Standard Note, by the way, that there is a template which has a particular meaning: \begin_inset Flex Code status collapsed \begin_layout Plain Layout defaults.lyx \end_layout \end_inset . This template is loaded every time you create a new document with \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout File\SpecialChar \menuseparator New \end_layout \end_inset in order to provide useful defaults. To create this template from inside LyX, all you have to do is to open a document with the correct settings, and use the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Save as Document Defaults \end_layout \end_inset button. \end_layout \begin_layout Subsection Upgrading old layout files \end_layout \begin_layout Standard The format of layout files changes with each LyX release, so old layout files need to be converted to the new format. This process has been automated since LyX 1.4: If LyX reads a layout file in an older format, it automatically calls the script \begin_inset Flex Code status collapsed \begin_layout Plain Layout layout2layout.py \end_layout \end_inset to convert it to a temporary file in current format. The original file is left untouched. If you use the layout file often, then, you may want to convert it permanently, so that LyX does not have to do so itself every time. To do this, you can call the converter manually: \end_layout \begin_layout LyX-Code mv myclass.layout myclass.old \end_layout \begin_layout LyX-Code python LyXDir/scripts/layout2layout.py myclass.old myclass.layout \end_layout \begin_layout Standard You need to replace \begin_inset Flex Code status collapsed \begin_layout Plain Layout LyXDir \end_layout \end_inset with the name of your LyX system directory, of course. \end_layout \begin_layout Standard Note that manual conversion does not affect included files, so these will have to be converted separately. \end_layout \begin_layout Section \begin_inset CommandInset label LatexCommand label name "sec:TextClass" \end_inset The layout file format \end_layout \begin_layout Standard When it's finally time to get your hands dirty and create or edit your own layout file, the following sections describe what you're up against. Our advice is to go slowly, save and test often, listen to soothing music, and enjoy one or two of your favorite adult beverages; more if you are getting particularly stuck. It's really not that hard, except that the multitude of options can become overwhelming if you try to do too much in one sitting. Go have another adult beverage, just for good measure. \end_layout \begin_layout Standard Note that all the tags used in layout files are case-insensitive. This means that \begin_inset Flex Code status collapsed \begin_layout Plain Layout Style \end_layout \end_inset , \begin_inset Flex Code status collapsed \begin_layout Plain Layout style \end_layout \end_inset and \begin_inset Flex Code status collapsed \begin_layout Plain Layout StYlE \end_layout \end_inset are really the same tag. The possible values are printed in brackets after the feature's name. The default value if a feature isn't specified inside a text class-description is typeset \begin_inset Flex Code status collapsed \begin_layout Plain Layout \emph on emphasized \end_layout \end_inset . If the argument has a data type like \begin_inset Quotes eld \end_inset string \begin_inset Quotes erd \end_inset or \begin_inset Quotes eld \end_inset float \begin_inset Quotes erd \end_inset , the default is shown like this: \begin_inset Flex Code status collapsed \begin_layout Plain Layout float= \emph on default \end_layout \end_inset . \end_layout \begin_layout Subsection The document class declaration \change_inserted -712698321 1349766602 and classification \change_unchanged \end_layout \begin_layout Standard Lines in a layout file which begin with \begin_inset Flex Code status collapsed \begin_layout Plain Layout # \end_layout \end_inset are comments. There is one exception to this rule. All \begin_inset Flex Code status collapsed \begin_layout Plain Layout *.layout \end_layout \end_inset files should begin with \change_deleted -712698321 1349766533 a \change_unchanged line \change_inserted -712698321 1349766536 s \change_unchanged like: \end_layout \begin_layout LyX-Code \size small #% Do not delete the line below; configure depends on this \end_layout \begin_layout LyX-Code \size small # \backslash DeclareLaTeXClass{ \change_deleted -712698321 1349766193 article \change_inserted -712698321 1349766201 Article (Standard Class) \change_unchanged } \change_inserted -712698321 1349766538 \end_layout \begin_layout LyX-Code \change_inserted -712698321 1349766581 \size small # \backslash DeclareCategory{Articles} \change_unchanged \end_layout \begin_layout Standard The second \change_inserted -712698321 1349766695 and third \change_unchanged line \change_inserted -712698321 1349766626 s \change_unchanged \change_deleted -712698321 1349766628 is \change_inserted -712698321 1349766628 are \change_unchanged used when you (re)configure LyX. The layout file is read by the LaTeX script \begin_inset Flex Code status collapsed \begin_layout Plain Layout chkconfig.ltx \end_layout \end_inset , in a special mode where \begin_inset Flex Code status collapsed \begin_layout Plain Layout # \end_layout \end_inset is ignored. The first line is just a LaTeX comment, \change_deleted -712698321 1349766656 and \change_unchanged the second one contains the \change_inserted -712698321 1349766650 mandatory \change_unchanged declaration of the text class \change_inserted -712698321 1349766689 , and the third line contains the optional classification of the class \change_unchanged . If these lines appear in a file named \begin_inset Flex Code status collapsed \begin_layout Plain Layout article.layout \end_layout \end_inset , then they define a text class of name \begin_inset Flex Code status collapsed \begin_layout Plain Layout article \end_layout \end_inset (the name of the layout file) which uses the LaTeX document class \begin_inset Flex Code status collapsed \begin_layout Plain Layout article.cls \end_layout \end_inset (the default is to use the same name as the layout). The string \begin_inset Quotes eld \end_inset \change_deleted -712698321 1349766253 article \change_inserted -712698321 1349766260 Article (Standard Class) \change_unchanged \begin_inset Quotes erd \end_inset that appears above is used as a description of the text class in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Document\SpecialChar \menuseparator Settings \end_layout \end_inset dialog. \change_inserted -712698321 1349767097 The category ( \begin_inset Quotes eld \end_inset Articles \begin_inset Quotes erd \end_inset in the example) is also used in the \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout \change_inserted -712698321 1349766801 Document\SpecialChar \menuseparator Settings \end_layout \end_inset dialog: the text classes are grouped by these categories (which are usually genres, so typical categories are \begin_inset Quotes eld \end_inset Articles \begin_inset Quotes erd \end_inset , \begin_inset Quotes eld \end_inset Books \begin_inset Quotes erd \end_inset , \begin_inset Quotes eld \end_inset Reports \begin_inset Quotes erd \end_inset , \begin_inset Quotes eld \end_inset Letters \begin_inset Quotes erd \end_inset , \begin_inset Quotes eld \end_inset Presentations \begin_inset Quotes erd \end_inset , \begin_inset Quotes eld \end_inset Curricula Vitae \begin_inset Quotes erd \end_inset etc.). If no category has been declared, the class will be put in the \begin_inset Quotes eld \end_inset Uncategorized \begin_inset Quotes erd \end_inset group. \change_unchanged \end_layout \begin_layout Standard Let's assume that you wrote your own text class that uses the \begin_inset Flex Code status collapsed \begin_layout Plain Layout article.cls \end_layout \end_inset document class, but where you changed the appearance of the section headings. If you put it in a file \begin_inset Flex Code status collapsed \begin_layout Plain Layout myarticle.layout \end_layout \end_inset , the header of this file should be: \end_layout \begin_layout LyX-Code \size small #% Do not delete the line below; configure depends on this \end_layout \begin_layout LyX-Code \size small # \backslash DeclareLaTeXClass[article]{ \change_deleted -712698321 1349766303 a \change_inserted -712698321 1349766303 A \change_unchanged rticle (with \change_deleted -712698321 1349766338 m \change_inserted -712698321 1349766338 M \change_unchanged y \change_deleted -712698321 1349766340 o \change_inserted -712698321 1349766340 O \change_unchanged wn \change_deleted -712698321 1349766343 h \change_inserted -712698321 1349766343 H \change_unchanged eadings)} \change_inserted -712698321 1349767223 \end_layout \begin_layout LyX-Code \change_inserted -712698321 1349767223 \size small # \backslash DeclareCategory{Articles} \change_unchanged \end_layout \begin_layout Standard This declares a text class \begin_inset Flex Code status collapsed \begin_layout Plain Layout myarticle \end_layout \end_inset , associated with the LaTeX document class \begin_inset Flex Code status collapsed \begin_layout Plain Layout article.cls \end_layout \end_inset and described as \begin_inset Quotes eld \end_inset \change_deleted -712698321 1349766329 a \change_inserted -712698321 1349766329 A \change_unchanged rticle (with \change_deleted -712698321 1349766347 m \change_inserted -712698321 1349766347 M \change_unchanged y \change_deleted -712698321 1349766350 o \change_inserted -712698321 1349766350 O \change_unchanged wn \change_deleted -712698321 1349766352 h \change_inserted -712698321 1349766352 H \change_unchanged eadings) \begin_inset Quotes erd \end_inset . If your text class depends on several packages, you can declare it as: \end_layout \begin_layout LyX-Code \size small #% Do not delete the line below; configure depends on this \end_layout \begin_layout LyX-Code \size small # \backslash DeclareLaTeXClass[article,foo.sty]{ \change_deleted -712698321 1349766366 a \change_inserted -712698321 1349766366 A \change_unchanged rticle (with \change_deleted -712698321 1349766369 m \change_inserted -712698321 1349766369 M \change_unchanged y \change_deleted -712698321 1349766371 o \change_inserted -712698321 1349766371 O \change_unchanged wn \change_deleted -712698321 1349766374 h \change_inserted -712698321 1349766374 H \change_unchanged eadings)} \change_inserted -712698321 1349767240 \end_layout \begin_layout LyX-Code \change_inserted -712698321 1349767240 \size small # \backslash DeclareCategory{Articles} \change_unchanged \end_layout \begin_layout Standard This indicates that your text class uses the \begin_inset Flex Code status collapsed \begin_layout Plain Layout foo.sty \end_layout \end_inset package. Finally, it is also possible to declare classes for DocBook code. Typical declarations will look like: \end_layout \begin_layout LyX-Code \size small #% Do not delete the line below; configure depends on this \end_layout \begin_layout LyX-Code \size small # \backslash DeclareDocBookClass[article]{SGML (DocBook \change_deleted -712698321 1349766387 a \change_inserted -712698321 1349766387 A \change_unchanged rticle)} \change_inserted -712698321 1349767247 \end_layout \begin_layout LyX-Code \change_inserted -712698321 1349767302 \size small # \backslash DeclareCategory{Articles (DocBook)} \change_unchanged \end_layout \begin_layout Standard Note that these declarations can also be given an optional parameter declaring the name of the document class (but not a list). \end_layout \begin_layout Standard So, to be as explicit as possible, the form of the layout declaration is: \end_layout \begin_layout LyX-Code \size small # \backslash DeclareLaTeXClass[class,package.sty]{layout description} \change_inserted -712698321 1349767329 \end_layout \begin_layout LyX-Code \change_inserted -712698321 1349767339 \size small # \backslash DeclareCategory{category} \change_unchanged \end_layout \begin_layout Standard The class need only be specified if the name of the LaTeX class file and the name of the layout file are different or if there are packages to load. If the name of the class file is not specified, then LyX will simply assume that it is the same as the name of the layout file. \end_layout \begin_layout Standard When the text class has been modified to your taste, all you have to do is to copy it either to \begin_inset Flex Code status collapsed \begin_layout Plain Layout LyXDir/layouts/ \end_layout \end_inset or to \begin_inset Flex Code status collapsed \begin_layout Plain Layout UserDir/layouts \end_layout \end_inset , run \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Tools\SpecialChar \menuseparator Reconfigure \end_layout \end_inset , exit LyX and restart. Then your new text class should be available along with the others. \end_layout \begin_layout Standard Once the layout file is installed, you can edit it and see your changes without having to reconfigure or to restart LyX. \begin_inset Foot status collapsed \begin_layout Plain Layout In versions of LyX prior to 1.6, this was not true. As a result, editing layout files was very time consuming, since you had constantly to restart LyX to see changes. \end_layout \end_inset You can force a reload of the current layout by using the LyX function \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout layout-reload \end_layout \end_inset . There is no default binding for this function—though, of course, you can bind it to a key yourself. But you will normally use this function simply by entering it in the mini-buffe r. \end_layout \begin_layout Standard \emph on Warning \emph default : \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout layout-reload \end_layout \end_inset is very much an `advanced feature'. It is \emph on strongly \emph default recommended that you save your work before using this function. In fact, it is \emph on strongly \emph default recommended that you not attempt to edit layout information while simultaneousl y working on a document that you care about. Use a test document. Syntax errors and the like in your layout file could cause peculiar behavior. In particular, such errors could cause LyX to regard the current layout as invalid and to attempt to switch to some other layout. \begin_inset Foot status collapsed \begin_layout Plain Layout Really bad syntax errors may even caused LyX to exit. This is because certain sorts of errors may make LyX unable to read \emph on any \emph default layout information. Please be careful. \end_layout \end_inset The LyX team strives to keep LyX stable in such situations, but safe is better than sorry. \begin_inset Foot status collapsed \begin_layout Plain Layout While we're giving advice: make regular backups. And be nice to your mother. \end_layout \end_inset \end_layout \begin_layout Subsection The Module declaration \end_layout \begin_layout Standard A module must begin with a line like the following: \end_layout \begin_layout LyX-Code # \backslash DeclareLyXModule[endnotes.sty]{Endnotes} \end_layout \begin_layout Standard The mandatory argument, in curly brackets, is the name of the module, as it should appear in \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Document\SpecialChar \menuseparator Settings\SpecialChar \menuseparator Modules \end_layout \end_inset . The argument in square brackets is optional: It declares any LaTeX packages on which the module depends. Please note that only packages about which LyX knows should be listed in the square brackets. \begin_inset Foot status collapsed \begin_layout Plain Layout The list of such packages is documented only in the source code. \end_layout \end_inset LyX will not check for arbitrary packages. It is also possible to use the form \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout from->to \end_layout \end_inset as an optional argument, which declares that the module can only be used when there exists a conversion chain between the formats ` \begin_inset Flex Code status collapsed \begin_layout Plain Layout from \end_layout \end_inset ' and ` \begin_inset Flex Code status collapsed \begin_layout Plain Layout to \end_layout \end_inset '. \end_layout \begin_layout Standard The module declaration should then be followed by lines like the following \begin_inset Foot status collapsed \begin_layout Plain Layout Preferably in English if the module should be published with LyX. This description will appear in the list of messages to be translated and will be thus translated with the next interface update. \end_layout \end_inset : \end_layout \begin_layout LyX-Code #DescriptionBegin \end_layout \begin_layout LyX-Code #Adds an endnote command, in addition to footnotes. \end_layout \begin_layout LyX-Code #You will need to add \backslash theendnotes in TeX code where you \end_layout \begin_layout LyX-Code #want the endnotes to appear. \end_layout \begin_layout LyX-Code #DescriptionEnd \end_layout \begin_layout LyX-Code #Requires: somemodule | othermodule \end_layout \begin_layout LyX-Code #Excludes: badmodule \end_layout \begin_layout Standard The description is used in \begin_inset Flex MenuItem status collapsed \begin_layout Plain Layout Document\SpecialChar \menuseparator Settings\SpecialChar \menuseparator Modules \end_layout \end_inset to provide the user with information about what the module does. The \begin_inset Flex Code status collapsed \begin_layout Plain Layout Requires \end_layout \end_inset line is used to identify other modules with which this one must be used; the \begin_inset Flex Code status collapsed \begin_layout Plain Layout Excludes \end_layout \end_inset line is used to identify modules with which this one may not be used. Both are optional, and, as shown, multiple modules should be separated with the pipe symbol: |. Note that the required modules are treated disjunctively: \emph on at least one \emph default of the required modules must be used. Similarly, \emph on no \emph default excluded module may be used. Note that modules are identified here by their \emph on filenames \emph default without the \begin_inset Flex Code status collapsed \begin_layout Plain Layout .module \end_layout \end_inset extension. So \begin_inset Flex Code status collapsed \begin_layout Plain Layout somemodule \end_layout \end_inset is really \begin_inset Flex Code status collapsed \begin_layout Plain Layout somemodule.module \end_layout \end_inset . \end_layout \begin_layout Subsection Format number \end_layout \begin_layout Standard The first non-comment line of any layout file, included file, or module \emph on must \emph default contain the file format number: \end_layout \begin_layout Description \begin_inset Flex Code status collapsed \begin_layout Plain Layout Format \end_layout \end_inset [ \begin_inset Flex Code status collapsed \begin_layout Plain Layout int \end_layout \end_inset ] The format of the layout file. \end_layout \begin_layout Standard This tag was introduced with LyX 1.4.0. Layout files from LyX 1.3.x and earlier don't have an explicit file format and are considered to be of format 1. The format for the present version of LyX is format 21. But each version of LyX is capable of reading earlier versions' layout files, just as they are capable of reading files produced by earlier versions of LyX. There is, however, no provision for converting to earlier formats. So LyX 1.6.x will not read layout files in format 21 but only files in format 11 or earlier. \end_layout \begin_layout Subsection \begin_inset CommandInset label LatexCommand label name "sub:General-text-class" \end_inset General text class parameters \end_layout \begin_layout Standard These are general parameters that govern the behavior of an entire document class. (This does \emph on not \emph default mean that they must appear in \begin_inset Flex Code status collapsed \begin_layout Plain Layout .layout \end_layout \end_inset files rather than in modules. A module can contain any layout tag.) \end_layout \begin_layout Description \begin_inset Flex Code status collapsed \begin_layout Plain Layout AddToHTMLPreamble \end_layout \end_inset Adds information that will be output in the \begin_inset Flex Code status collapsed \begin_layout Plain Layout \end_layout \end_inset block when this document class is output to XHTML. Typically, this would be used to output CSS style information, but it can be used for anything that can appear in \begin_inset Flex Code status collapsed \begin_layout Plain Layout \end_layout \end_inset . Must end with \begin_inset Quotes eld \end_inset \begin_inset Flex Code status collapsed \begin_layout Plain Layout EndPreamble \end_layout \end_inset \begin_inset Quotes erd \end_inset . \end_layout \begin_layout Description \begin_inset Flex Code status collapsed \begin_layout Plain Layout AddToHTMLStyles \end_layout \end_inset Adds CSS styling information. This will either be output in a \begin_inset Quotes eld \end_inset \begin_inset Flex Code status collapsed \begin_layout Plain Layout