diff --git a/dev/tag-message b/dev/tag-message
index 9464e39f7903506bcb79183c81e43b260515879d..3a6fee2b4e2f70343948a0235fea32b931e8a42b 100644
--- a/dev/tag-message
+++ b/dev/tag-message
@@ -1,27 +1,17 @@
-so.ii Version: 1.0.22.0
+so.ii Version: 1.0.23.0
 
 0 errors ✔ | 0 warnings ✔ | 0 notes ✔
 
 **Note de version**
-    * ajout de l'option scope à map_so_ii
-    * adaptation de l'option inset
-    * adaptation de l'option bar
+    * ajout de la fonction kable
+    * ajout de la fonction linesep
 
 **Détails**
-    * l'option "scope" (character) de map_so_ii permet de définir le scope de la
-        carte :
-        * si l'option est à "so-ii" (défaut), le périmètre total est affiché.
-        C'est le même comportement que précédemment.
-        * si l'option est un vecteur différent de "so-ii", alors il est cherché
-        l'ensemble des communes de so-ii dont le code INSEE correspond aux
-        valeurs de scope. Seules les bonnes valeurs sont gardées. Si aucune
-        bonne valeur n'est trouvée, un avertissement est lancé et la valeur par
-        d'afut est prise
-    * l'option "inset" permet de choisir la valeur "so-ii" pour situer un scope
-    plus petit que le périmètre total à l'intérieur de so-ii.
-    * l'option "bar" n'est pas mofifiée dans son appel, mais dans son
-    implémentation pour permettre d'ajuster la taille de la barre au scope
-    choisi.
+    * kable masque knitr::kable en ajoutant des options très souvent utilisées
+    dans l'équipe (rapport ou présentation).
+    * linesep permet de créer facilement des vecteurs pour ajouter des
+    séparation avec l'option (non documentée) linesep de kable.
 
-# git tag -a v1.0.22.0 -F dev/tag-message
+# git tag -a v1.0.23.0 -F dev/tag-message
 # git push --tags
+
diff --git a/so.ii/DESCRIPTION b/so.ii/DESCRIPTION
index a46a835197c269487ab719aecbe3a7b65c1e68a8..bd222632a40e724316716e302466b116cd4e6e10 100644
--- a/so.ii/DESCRIPTION
+++ b/so.ii/DESCRIPTION
@@ -1,6 +1,6 @@
 Package: so.ii
 Title: Utilities very useful to share within so_ii team
-Version: 1.0.22.0
+Version: 1.0.23.0
 Authors@R:
     c(
         person(given = "Frédéric",
diff --git a/so.ii/NAMESPACE b/so.ii/NAMESPACE
index 359f5688b228e8f1351b200fd43e42709412599b..d7b419e623fd8ec52b0c290c93525b98f6f4374a 100644
--- a/so.ii/NAMESPACE
+++ b/so.ii/NAMESPACE
@@ -4,6 +4,8 @@ export(add_inset)
 export(current_version)
 export(estimate_catnat_freq)
 export(format_presence)
+export(kable)
 export(kable_units)
+export(linesep)
 export(map_so_ii)
 export(plot_legend)
diff --git a/so.ii/R/kable.R b/so.ii/R/kable.R
new file mode 100644
index 0000000000000000000000000000000000000000..48d42d106efb6713725e7636119c81c7dfb9ad13
--- /dev/null
+++ b/so.ii/R/kable.R
@@ -0,0 +1,34 @@
+#' @title Replace kable from kniter with some useful preset options
+#' 
+#' @param data object, something to be transform in a table
+#' @param ...  some parameters that will be used in original kable
+#'
+#' @return Somthing to be used as a table in latex format
+#'
+#' @export
+#'
+#' @encoding UTF-8
+#'
+#' @author Frédéric Grelot
+#' 
+#' @examples
+#'
+#' temp = head(iris)[c(5, 1:4)]
+#' temp[["Species"]] = as.character(temp[["Species"]])
+#' kable(temp)
+#' temp = rbind(temp, c(Species = "mean", as.list(colMeans(temp[-1]))))
+#' kable(temp, -1)
+#' temp = rbind(temp, c("units", "mm", "mm", "mm", "mm"))
+#' kable(temp, -1)
+ 
+kable = function(data, ...) {
+    knitr::kable(
+        data,
+        format = "latex",
+        booktabs = TRUE,
+        digits = 2,
+        format.args = list(big.mark = " ", scientific = FALSE, digit = 2),
+        ...
+    ) |>
+    kableExtra::kable_styling(position = "center")
+}
\ No newline at end of file
diff --git a/so.ii/R/kable_units.r b/so.ii/R/kable_units.r
index e8a7b95a36d8430c64ea131f1fb552f31daf6c68..53605f041e3013a2518c87dcb00178e94d83543c 100644
--- a/so.ii/R/kable_units.r
+++ b/so.ii/R/kable_units.r
@@ -11,7 +11,8 @@
 #' @export
 #'
 #' @encoding UTF-8
-#' @author This is an adaptation of the function inset of the terra package.
+#' 
+#' @author Frédéric Grelot
 #' 
 #' @examples
 #' 
diff --git a/so.ii/R/linesep.R b/so.ii/R/linesep.R
new file mode 100644
index 0000000000000000000000000000000000000000..9ccab3701a1a7ee0d1a5ac0bae1d7744fe9a584f
--- /dev/null
+++ b/so.ii/R/linesep.R
@@ -0,0 +1,29 @@
+#' @title Create a linesep for kable
+#' 
+#' @param x vector, either numerical or logical, position for separation
+#' @param n integer, length of result
+#'
+#' @return A character vector of linesep to be used un kable. 
+#'
+#' @export
+#'
+#' @encoding UTF-8
+#' @author This is an adaptation of the function inset of the terra package.
+#' 
+#' @examples
+#' 
+#' temp = iris[sample(seq_len(nrow(iris)), 10),]
+#' kable(temp, linesep = linesep(diff(as.integer(temp[["Species"]])) != 0))
+#' kable(temp, linesep = linesep(temp[["Species"]][-1] != temp[["Species"]][-nrow(temp)]))
+#' 
+#' temp = temp[order(temp[["Species"]]), ]
+#' kable(temp, linesep = linesep(cumsum(table(temp[["Species"]]))))
+ 
+linesep = function(x, n) {
+    x = if (is.logical(x)) which(x) else as.integer(x)
+    if (missing(n)) n = max(x)
+    result = rep("", n)
+    result[x[x > 0]] = "\\midrule"
+    result[n + x[x < 0]] = "\\midrule"
+    return(result)
+}
diff --git a/so.ii/man/kable.Rd b/so.ii/man/kable.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..330517d70b1881e41cff84ab7de02357f193a731
--- /dev/null
+++ b/so.ii/man/kable.Rd
@@ -0,0 +1,33 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/kable.R
+\encoding{UTF-8}
+\name{kable}
+\alias{kable}
+\title{Replace kable from kniter with some useful preset options}
+\usage{
+kable(data, ...)
+}
+\arguments{
+\item{data}{object, something to be transform in a table}
+
+\item{...}{some parameters that will be used in original kable}
+}
+\value{
+Somthing to be used as a table in latex format
+}
+\description{
+Replace kable from kniter with some useful preset options
+}
+\examples{
+
+temp = head(iris)[c(5, 1:4)]
+temp[["Species"]] = as.character(temp[["Species"]])
+kable(temp)
+temp = rbind(temp, c(Species = "mean", as.list(colMeans(temp[-1]))))
+kable(temp, -1)
+temp = rbind(temp, c("units", "mm", "mm", "mm", "mm"))
+kable(temp, -1)
+}
+\author{
+Frédéric Grelot
+}
diff --git a/so.ii/man/kable_units.Rd b/so.ii/man/kable_units.Rd
index 601d1785c477fe5602476fb66d543ffef6834053..8471709c6fc3f8a793df281b4a3256e52f7cebc6 100644
--- a/so.ii/man/kable_units.Rd
+++ b/so.ii/man/kable_units.Rd
@@ -35,5 +35,5 @@ temp = rbind(temp, c("units", "mm", "mm", "mm", "mm"))
 kable_units(temp, -1)
 }
 \author{
-This is an adaptation of the function inset of the terra package.
+Frédéric Grelot
 }
diff --git a/so.ii/man/linesep.Rd b/so.ii/man/linesep.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..0c47d197c66d3c9fa67500497345d21a22fc15aa
--- /dev/null
+++ b/so.ii/man/linesep.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/linesep.R
+\encoding{UTF-8}
+\name{linesep}
+\alias{linesep}
+\title{Create a linesep for kable}
+\usage{
+linesep(x, n)
+}
+\arguments{
+\item{x}{vector, either numerical or logical, position for separation}
+
+\item{n}{integer, length of result}
+}
+\value{
+A character vector of linesep to be used un kable.
+}
+\description{
+Create a linesep for kable
+}
+\examples{
+
+temp = iris[sample(seq_len(nrow(iris)), 10),]
+kable(temp, linesep = linesep(diff(as.integer(temp[["Species"]])) != 0))
+kable(temp, linesep = linesep(temp[["Species"]][-1] != temp[["Species"]][-nrow(temp)]))
+
+temp = temp[order(temp[["Species"]]), ]
+kable(temp, linesep = linesep(cumsum(table(temp[["Species"]]))))
+}
+\author{
+This is an adaptation of the function inset of the terra package.
+}
diff --git a/so.ii/man/map_so_ii.Rd b/so.ii/man/map_so_ii.Rd
index 16ccac9b03e6bda151f2f139a695c910a1572d4d..b7e4a854e8c2f73ee4882978b926f99c27234de3 100644
--- a/so.ii/man/map_so_ii.Rd
+++ b/so.ii/man/map_so_ii.Rd
@@ -126,7 +126,8 @@ If inset is not NULL, an inset will be plotted, depending on the value of
 as.character(inset). Non-case sensitive partial matching is used, with "é"
 interpreted as "e".
 \itemize{
-\item{\strong{so-ii}: scope perimeter is located within so-ii.}
+\item{\strong{so-ii}: scope perimeter is located within so-ii. Only
+useful when scope is less than so-ii.}
 \item{\strong{department}: scope perimeter is located within Hérault
 departement, if inset may be interpreted as "department", "département",
 "hérault", "34".}