+
+@node Escritura de código que contemple varias versiones
+@section Escritura de código que contemple varias versiones
+@translationof Writing code to support multiple versions
+
+En ciertos casos, especialmente al escribir código de
+@emph{bibliotecas}, es deseable dar apoyo a más de una versión de
+LilyPond, por encima de los cambios de sintaxis que rompen con la
+práctica anterior. Para hacerlo, se pueden envolver porciones de
+código alternativas dentro de expresiones condicionales que
+dependen de la versión de LilyPond que se está ejecutando
+actualmente. La función de Scheme @code{ly:version?} admite un
+operador de comparación @var{op} y una versión de referencia
+@var{ver} que se pasa como una lista de enteros con un máximo de
+tres elementos. Se ignoran los elementos que faltan, de forma que
+@code{'(2 20)} equivale a @emph{cualquier} versión de la línea de
+2.20. Son posibles construcciones como las siguientes:
+
+@verbatim
+#(cond
+ ((ly:version? > '(2 20))
+ (ly:message "Esto es código para LilyPond posterior a 2.20"))
+ ((ly:version? = '(2 19 57))
+ (ly:message "Esto solamente se ejecuta con LilyPond 2.19.57"))
+ (else (ly:message "Esto se ejecuta en cualquier otra versión")))
+@end verbatim
+
+Por lo general, esto se encontrará integrado dentro de funciones
+de biblioteca que permitan usar más de un tipo de sintaxis
+alternativas, pero también es posible usar la comparación
+directamente dentro de la música como en el ejemplo siguiente:
+
+@verbatim
+{
+ c' d' e' f'
+ #(if (ly:version? = '(2 21))
+ #{ \override NoteHead.color = #red #}
+ #{ \override NoteHead.color = #blue #})
+ g' a' b' c''
+}
+@end verbatim
+
+@strong{Nota:} Esta función fue introducida en LilyPond 2.19.57,
+por lo que no es posible hacer la comparación con versiones
+anteriores a esa.