From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp10.migadu.com ([2001:41d0:403:4789::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms9.migadu.com with LMTPS id qIsUOrFQFWXMRAAAG6o9tA:P1 (envelope-from ) for ; Thu, 28 Sep 2023 12:08:50 +0200 Received: from aspmx1.migadu.com ([2001:41d0:403:4789::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp10.migadu.com with LMTPS id qIsUOrFQFWXMRAAAG6o9tA (envelope-from ) for ; Thu, 28 Sep 2023 12:08:50 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id B7D204BFFE for ; Thu, 28 Sep 2023 12:08:49 +0200 (CEST) Authentication-Results: aspmx1.migadu.com; dkim=none; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=gmail.com (policy=none) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1695895729; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=XFkduyOuT+TSS/l/LAH7iKrRC/Dca+Xpsrjt6PgovrY=; b=LAWl2AYeIn2g1Guy7B50U5CE6wkBvSVeHwyKdTJE5s9uERqMvFU7NlXAiseLRKD1jkJFlL FNLVHd4LD/LSw/41Oi8iU4ejunQDaqKaYxT6olExar3FbQOIGWmqSB8vbB+5vF3l/lyLe4 Zjt5dzEi9AwR+eeW1cY7/KiE0DAGOFtcCgHvduVXcKw42K7spHSRKdVXsY0c9EQBCSsOmQ 6xKZX5r2W9tT7xZmM1AFUGcky50ta8nqY6cVYxAGIr19sKcOG+oXGbDs/6PuBvKkD9+eZb mgmWgKwvgADSWKVmfIW+wYCWus20kuCDj3kf6yBjfQjUrAnQ9dN8ge7gR3c6rA== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1695895729; a=rsa-sha256; cv=none; b=cmMOdWcuPqGEcSfWxZpCMTa1262vrgOTvQKyNoRCzY26QyU2/sHpRtHhE9xf+nvMmN/QjD MzqlwKbBdx8pFArjUL1J9V9DmM9uQj5i6rsX11h8hnuN7Ue8RZ2FDw8D1rmGpukq/R209G LzHQEX0BelAlRz7eGeaHJcxN1YrzjXpI87qw5+tdoH1z6zD0D5krVOPHhGjEKd2rW+t3Xb xF/wfekbUGzSDQTFQxMl/btgZ31CA+dYdnh23zfkQ5/VxOY1Ouo10z8tK7UK2csV0pFCmr 7lisOYQBz6SLWFn8BfTtNViNiMjwpBMCRT8EUIYsopw9+rcWAOtUOTnuUqrpcg== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=gmail.com (policy=none) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qlnw3-0005jh-8p; Thu, 28 Sep 2023 06:07:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qlnw1-0005jS-Lf for emacs-orgmode@gnu.org; Thu, 28 Sep 2023 06:07:53 -0400 Received: from ciao.gmane.io ([116.202.254.214]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qlnvz-0001Gj-Vx for emacs-orgmode@gnu.org; Thu, 28 Sep 2023 06:07:53 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1qlnvw-0001nD-8a for emacs-orgmode@gnu.org; Thu, 28 Sep 2023 12:07:48 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-orgmode@gnu.org From: Max Nikulin Subject: Re: [patch] ox-latex.el: Add `LATEX_PRE_HEADER' keyword Date: Thu, 28 Sep 2023 17:07:41 +0700 Message-ID: References: <874jjuj8vu.fsf@posteo.net> <87pm2776qq.fsf@posteo.net> <875y3yytp4.fsf@posteo.net> <87r0ml3oax.fsf@tsdye.online> <87lecsvjdd.fsf@posteo.net> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Content-Language: en-US, ru-RU In-Reply-To: <87lecsvjdd.fsf@posteo.net> Received-SPF: pass client-ip=116.202.254.214; envelope-from=geo-emacs-orgmode@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: 13 X-Spam_score: 1.3 X-Spam_bar: + X-Spam_report: (1.3 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FORGED_MUA_MOZILLA=2.309, FREEMAIL_FORGED_FROMDOMAIN=0.25, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, NICE_REPLY_A=-1.473, NML_ADSP_CUSTOM_MED=0.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: emacs-orgmode-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN X-Spam-Score: 2.23 X-Migadu-Spam-Score: 2.23 X-Migadu-Scanner: mx1.migadu.com X-Migadu-Queue-Id: B7D204BFFE X-TUID: /QxxEhFeq9Dp On 27/09/2023 02:12, Juan Manuel MacĂ­as wrote: > Max Nikulin writes: >> I remember recipes like "put \usepackage{cmap} immediately after >> \documentclass" (nowadays this particular one should not be necessary). >> So I would prefer to avoid keywords per each chunk of preamble code. > > I think that this would not be the case. This is not just any part of > the preamble, but a fairly definite part. Broadly speaking, LaTeX_header > would take care of what is after \documenclass (the axis of a LaTeX > document); LaTeX_pre_header would do it of anything that may have come > before. And both provide a less constricted preamble for advanced use of > LaTeX. Frankly, I can't think of a simpler solution. LaTeX code may be inserted - before \DocumentMetadata - between \DocumentMetadata and \documentclass - between \documentclass and preamble added by Org - between Org preamble and \begin{document} Since ordering is important, I would prefer to assemble preamble from predefined fragments (or replace particular ones) to putting code into these (and probably more) slots. >> \begin{filecontents*} from the original post is not convincing. > > Are you not convinced by some instructions that are included in the > official documentation of a LaTeX package (pdfx)? More I read about .xmpdata, more it looks similar to an ugly kludge from my point of view. The following phrases are hardly consistent: - "Including the metadata with the LATEX source is very convenient." - "remember to remove the existing copy of \jobname.xmpdata file before the next processing run". (A side note: "overwrite" option of filecontents looks promising.) So the goal is an XML document embedded into PDF. I admit, Org can not provide it directly since e.g. PDF compliance level is responsibility of a PDF engine. However the intermediate .xmpdata file may be provided independently of its .tex counterpart accordingly to docs. This file contains metadata and in Org metadata are managed through keywords. Significant fraction of metadata may be shared with HTML or MarkDown, so keywords should be considered as primary data. Writing this file from Org (e.g. by a babel source code block) should avoid issues with LaTeX input encodings described in the docs. Thus generation of .xmpdata during exporting of an .org file allows to keep metadata consistent. Currently I do not see a way to get values of INFO argument of org-export functions from source code blocks making access to metadata tricky. This should be addressed somehow. I would consider specifying metadata in a way similar to org-babel header arguments to allow more fields than currently supported by Org. It should facilitate generation of \DocumentMedata, .xmpdada, etc. Ability to overwrite fragments of preamble should be supported, but only as last resort. Specifying \DocumentMetadata or .xmpdata contents literally should be avoided to prevent discrepancy with metadata keywords. I consider \begin{filecontents*}{\jobname.xmpdata} as an acceptable (but perhaps fragile) hack for LaTeX-first document. During export of Org file, this file should be written directly with values from Org metadata.