Cuerpo humano

Materia y perplejidad

21 de marzo de 2025 3 minutos


Carlos Javier Morales
Renacimiento, 2024
100 páginas, 11,90 euros  

Las islas son espacios liminales, ellas mismas una lección de metafísica. En la isla hay siempre un límite: hasta aquí, non plus ultra. Y también —¡ah!— un horizonte que promete el infinito. ¡El mar! Hay plus ultra. Conviene enmendarle la plana a Nuccio Ordine: los hombres sí son islas, simultáneamente finitud y apertura, cuerpo y espíritu, tiempo y eternidad, aquí y en todas partes. Por eso tenía que ser en una isla, en Tenerife, donde el poeta Carlos Javier Morales ha escrito Cuerpo humano. Allí no es paradoja que la forma más acabada del cuerpo sea el poema.

Hay en estos versos lugares recurrentes: la playa, la ola, el amor —¡el matrimonio!—, el universo, lo creado, Dios. Y sin embargo la repetición de los temas no es puro pleonasmo, sino más bien crecimiento, al modo en que son distintos todos los «te quiero». Morales articula, en el fondo y en la forma de su poesía, una visión intuitiva y robusta de cómo conviven carne y espíritu, y cómo se expanden. Eso se ve ya en el índice, que comienza donde empiezan todos los linajes: en el amor apasionado, eterno, sensual y concreto de una mujer y un hombre —el primer capítulo, «Nuestros cuerpos»—, para expandirse después a la familia, a los amigos, a la creación entera —«Los cuerpos de los otros»— y adentrarse por último en el misterio de la finitud —«Carne mortal»—.

A su modo, este librito contiene también una filosofía práctica: 

«Explorar y mirar son ya lo mismo
contemplar la continua transparencia
de todo lo que existe y no se explica;
de lo que sólo puede celebrarse»

A la luz de esa declaración contracultural, no se sabe si oriental o más bien mística, a lo san Juan de la Cruz, han de leerse los versos de este profesor de Lengua de instituto. Si los alumnos de la ESO leyeran poesía, ¡qué sonrojo se llevarían con algunos pasajes! Cómo iban a sospechar que debajo de un funcionario puede vibrar ese anhelo de «las piernas con que guardas / el secreto que nunca se desvela del todo». Ni de lejos imaginarán que hay en ese cuerpo un alma capaz de cantar «Ya estás aquí, conmigo: / dentro de ti y de mí / los dos estamos». 

Sin embargo, no quiero llamar a engaño: siendo un libro íntimo, no es intimista. No se cierra, sino que se expande y se pasma. Como prueba esgrime el poema «Frente al volcán de Cumbre Vieja (La Palma)», en el que el poeta contempla la erupción, el desastre, y se queda perplejo ante «la angustia en pijama de los que van huyendo». En el mundo poético de Morales, todo el universo converge siempre en una mirada. Como en «Luz del alba»: 

«Tus ojos que ven todo,
desde el volcán inmenso de tu isla
hasta las buganvillas del paseo
es igual de infinito
que el mar a donde entras».

Si la poesía, en general, tiene carácter blasfemo en este tiempo obsesionado con la eficiencia, la propuesta de Morales lo es todavía más. Ni siquiera en la contemplación asoma el deseo de poseer el otro cuerpo ni el universo. Es un poemario, el noveno del autor, escrito desde la perplejidad y el asombro, y al exponerlos propone, acaso sin querer, una forma inesperada de ejercer la vida.


Otras reseñas

Se ha producido un error al procesar la plantilla.
Failed to "?eval" string with this error:

---begin-message---
Syntax error in ?eval-ed string in line 1, column 2:
Encountered ")", but was expecting one of:
    <STRING_LITERAL>
    <RAW_STRING>
    "false"
    "true"
    <INTEGER>
    <DECIMAL>
    "."
    "+"
    "-"
    "!"
    "["
    "("
    "{"
    <ID>
---end-message---

The failing expression:
==> articleAuthorNodes[0].getText()?eval  [in template "10136#10174#53980896" at line 45, column 46]

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign articleAuthorJson = articleAu...  [in template "10136#10174#53980896" at line 45, column 17]
----
1<#-- Obtener los servicios necesarios --> 
2<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
3<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
5<#assign assetDisplayPageFriendlyURLProvider = serviceLocator.findService("com.liferay.asset.display.page.portlet.AssetDisplayPageFriendlyURLProvider") /> 
6 
7<#-- Obtener el art�culo actual --> 
8<#assign groupId = themeDisplay.getScopeGroupId() /> 
9<#assign journalArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) /> 
10<#assign resourcePrimKey = journalArticle.getResourcePrimKey() /> 
11<#assign structureKey = journalArticle.getDDMStructureKey() /> 
12 
13<#-- Obtener el autor del art�culo actual --> 
14<#assign aArticleXML = saxReaderUtil.read(journalArticle.getContentByLocale(locale)) /> 
15<#assign authorNodes = aArticleXML.selectNodes("//dynamic-element[@name='autor']/dynamic-content") /> 
16<#assign authorId = "" /> 
17<#assign authorTitle = "" /> 
18 
19<#assign categoriesList = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
20<#assign vocabularyTopicName = "Topic" /> 
21 
22    <#list categoriesList as category> 
23	    <#assign categoryVocabulary = assetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId()) /> 
24    	<#if categoryVocabulary.getName() == vocabularyTopicName> 
25            <#assign categorySearch = category.getTitle(locale)/> 
26        </#if> 
27	  </#list>   
28 
29<#if authorNodes?has_content> 
30    <#assign authorJson = authorNodes[0].getText()?eval /> 
31    <#assign authorId = authorJson.classPK /> 
32    <#assign authorTitle = authorJson.title /> 
33</#if> 
34 
35<#-- Buscar art�culos del mismo autor y estructura --> 
36<#assign relatedArticles = [] /> 
37<#if authorId?has_content> 
38    <#assign allArticles = journalArticleLocalService.getArticlesByStructureId(groupId, structureKey, 0, 1000, null) /> 
39    <#list allArticles as article> 
40        <#if article.getResourcePrimKey() != resourcePrimKey && !article.isInTrash()> 
41            <#assign articleXML = saxReaderUtil.read(article.getContentByLocale(locale)) /> 
42             
43            <#assign articleAuthorNodes = articleXML.selectNodes("//dynamic-element[@name='autor']/dynamic-content") /> 
44            <#if articleAuthorNodes?has_content> 
45                <#assign articleAuthorJson = articleAuthorNodes[0].getText()?eval /> 
46                <#if articleAuthorJson.classPK == authorId> 
47                    <#assign relatedArticles = relatedArticles + [article] /> 
48                </#if> 
49            </#if> 
50        </#if> 
51    </#list> 
52    <#-- Ordenar los art�culos por fecha de modificaci�n y seleccionar los m�s recientes --> 
53    <#assign relatedArticles = relatedArticles?sort_by("modifiedDate")?reverse /> 
54    <#-- Limitar a 5 si hay suficientes --> 
55    <#if relatedArticles?size gt 5> 
56        <#assign relatedArticles = relatedArticles[0..4] /> 
57    </#if> 
58</#if> 
59 
60<#if relatedArticles?has_content> 
61    <div class="container"> 
62        <div class="row"> 
63            <#list relatedArticles as curArticle> 
64                <#-- Manejo de error para obtener la URL del art�culo --> 
65                <#assign viewURL = "" /> 
66                <#attempt> 
67                    <#if assetDisplayPageFriendlyURLProvider??> 
68                        <#assign viewURL = assetDisplayPageFriendlyURLProvider.getFriendlyURL("com.liferay.journal.model.JournalArticle", curArticle.getResourcePrimKey(), themeDisplay) /> 
69                    <#else> 
70                        <#assign viewURL = themeDisplay.getPortalURL() + themeDisplay.getPathMain() + "/portal/content/" + curArticle.getGroupId() + "/" + curArticle.getArticleId() /> 
71                    </#if> 
72                <#recover> 
73                    <#assign viewURL = themeDisplay.getPortalURL() + themeDisplay.getPathMain() + "/portal/content/" + curArticle.getGroupId() + "/" + curArticle.getArticleId() /> 
74                </#attempt> 
75 
76                <#assign curArticleXML = saxReaderUtil.read(curArticle.getContentByLocale(locale)) /> 
77                <#assign title = curArticle.getTitle(locale) /> 
78                <#assign tituloDestacado = curArticleXML.valueOf("//dynamic-element[@name='tituloDestacado']/dynamic-content") /> 
79                <#assign imagenArticulo = curArticleXML.valueOf("//dynamic-element[@name='imagen']/dynamic-content/text()") /> 
80                <#assign detalle = curArticleXML.valueOf("//dynamic-element[@name='detalle']/dynamic-content") /> 
81                <#-- Featured Image of the Article --> 
82                <#assign featuredImage = curArticle.getArticleImageURL(themeDisplay)!""/> 
83 
84                <#assign categoriesList = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", curArticle.getResourcePrimKey())/> 
85                <#assign vocabularyTemaName = "Tema" /> 
86                <#assign vocabularyNRevistaName = "N� de revista" /> 
87                 
88                <#if categoriesList?has_content> 
89                    <#list categoriesList as category> 
90                        <#assign categoryVocabulary = assetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId()) /> 
91                            <#if categoryVocabulary.getName() == vocabularyTopicName> 
92                                <#if categorySearch == category.getTitle(locale)> 
93                        <div class="col-md"> 
94                    <article class="article article-review"> 
95                        <figure class="media"> 
96                            <picture> 
97                                <#-- show featuredImage if set. --> 
98                                <#if featuredImage?has_content> 
99                                    <img src="${featuredImage}" /> 
100                                <#else> 
101                                    <#if imagenArticulo?? && imagenArticulo?has_content> 
102                                        <#attempt> 
103                                            <#assign jsonObject = imagenArticulo?eval/> 
104                                            <#assign entryUuid = jsonObject.uuid />     
105                                            <#assign entryGroupId = getterUtil.getLong(jsonObject.groupId) /> 
106                                            <#assign entryAlt = jsonObject.alt /> 
107                                            <#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") /> 
108                                            <#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")> 
109                                            <#assign dlFileEntry = dlFileEntryLocalService.getDLFileEntryByUuidAndGroupId(entryUuid, entryGroupId) /> 
110                                            <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry", dlFileEntry.fileEntryId) /> 
111                                            <#assign assetRenderer = assetEntry.assetRenderer /> 
112                                            <#assign imagen = assetRenderer.getURLDownload(themeDisplay) /> 
113                                            <img alt="${entryAlt}" data-fileentryid="${dlFileEntry.fileEntryId}" src="${imagen}" /> 
114                                        <#recover> 
115                                        </#attempt> 
116                                    </#if>  
117                                </#if>                                  
118                            </picture> 
119                        </figure> 
120                         
121                        <p class="author"> 
122                                <a title=${authorTitle}>${authorTitle}</a> 
123                        </p> 
124                         
125                        <#-- No es necesario para rese�as 
126                        <p class="kicker"> 
127                            <#if categoriesList?has_content> 
128                                <#list categoriesList as category> 
129                                    <#assign categoryVocabulary = assetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId()) /> 
130                                    <#if categoryVocabulary.getName() == vocabularyTemaName || categoryVocabulary.getName() == vocabularyNRevistaName> 
131                                        <a title="${category.getTitle(locale)}">${category.getTitle(locale)}</a> 
132                                    </#if> 
133                                </#list> 
134                            </#if> 
135                        </p> 
136                         --> 
137                             
138                        <h2 class="title title-standard"> 
139                            <a href="${viewURL}" title="${title}">${title}</a> 
140                        </h2> 
141                             
142                        <#-- No es necesario para rese�as 
143                        <p class="meta"> 
144                            <#assign fecha = dateUtil.getDate(curArticle.getDisplayDate(), "d 'de' MMMM 'de' yyyy", locale)  /> 
145                            <#if fecha?has_content> 
146                                <span>${fecha}</span> 
147                            </#if> 
148                             
149                            <#assign tiempo = "" /> 
150                            <#if detalle?has_content> 
151                                <#assign content = detalle?trim /> 
152                                <#if content != ""> 
153                                    <#assign contentCount = content?replace("<[^>]+>", "", "r")?word_list?size /> 
154                                    <#if contentCount gt 0> 
155                                        <#assign minutesValue = (contentCount/200)?round /> 
156                                        <#if minutesValue == 0> 
157                                            <#assign tiempo = "Unos segundos" /> 
158                                        <#elseif minutesValue == 1> 
159                                            <#assign tiempo = minutesValue + " minuto" /> 
160                                        <#else> 
161                                            <#assign tiempo = minutesValue + " minutos" /> 
162                                        </#if> 
163                                    </#if> 
164                                </#if> 
165                            </#if>                             
166                            <#if tiempo?? && tiempo != ""> 
167                                <span><i class="fa fa-regular fa-clock"></i> ${tiempo}</span> 
168                            </#if> 
169                        </p> 
170                         --> 
171                             
172                         
173                    </article> 
174                </div> 
175                                </#if> 
176                            </#if> 
177         
178                    </#list> 
179                </#if> 
180                 
181                
182            </#list> 
183        </div> 
184    </div> 
185<#else> 
186    <#-- No se encontraron relacionados --> 
187    <div class="text"><p>No se han encontrado articulos relacionados</p></div> 
188</#if> 
189 
190<style> 
191/* default image size  TODO: fix in theme, this is a temporal workaround. */ 
192.nuestro-tiempo .article.article-review .media{ 
193    height: initial; 
194
195</style> 

¿Quieres escribir en nt?

Siempre estamos buscando buenos colaboradores para la revista. Si tienes una buena historia, queremos escucharte.

Newsletter